Test evaluate a monitor
curl --request POST \
--url https://api.coval.dev/v1/monitors/{monitor_id}/test-evaluate \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"run_id": "hUWu3PxY6G7fTYbLzBAwZm"
}
'import requests
url = "https://api.coval.dev/v1/monitors/{monitor_id}/test-evaluate"
payload = { "run_id": "hUWu3PxY6G7fTYbLzBAwZm" }
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({run_id: 'hUWu3PxY6G7fTYbLzBAwZm'})
};
fetch('https://api.coval.dev/v1/monitors/{monitor_id}/test-evaluate', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.coval.dev/v1/monitors/{monitor_id}/test-evaluate",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'run_id' => 'hUWu3PxY6G7fTYbLzBAwZm'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.coval.dev/v1/monitors/{monitor_id}/test-evaluate"
payload := strings.NewReader("{\n \"run_id\": \"hUWu3PxY6G7fTYbLzBAwZm\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.coval.dev/v1/monitors/{monitor_id}/test-evaluate")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"run_id\": \"hUWu3PxY6G7fTYbLzBAwZm\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.coval.dev/v1/monitors/{monitor_id}/test-evaluate")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"run_id\": \"hUWu3PxY6G7fTYbLzBAwZm\"\n}"
response = http.request(request)
puts response.read_body{
"monitor_id": "<string>",
"run_id": "<string>",
"triggered": true,
"suppressed": false,
"condition_results": [
{}
],
"dispatch_results": [
{}
],
"message": "<string>"
}{
"error": {
"code": "INVALID_ARGUMENT",
"message": "Invalid request body",
"details": [
{
"field": "conditions",
"description": "Value error, List should have at least 1 item after validation"
}
]
}
}{
"error": {
"code": "UNAUTHENTICATED",
"message": "Authentication failed",
"details": [
{
"field": "X-API-Key",
"description": "Invalid or missing API key"
}
]
}
}{
"error": {
"code": "PERMISSION_DENIED",
"message": "Insufficient permissions",
"details": [
{
"field": "permissions",
"description": "Required scope: monitors:read"
}
]
}
}{
"error": {
"code": "NOT_FOUND",
"message": "Monitor not found",
"details": [
{
"field": "monitor_id",
"description": "Monitor '01HZ0EXAMPLE00000000000000' not found"
}
]
}
}{
"error": {
"code": "INTERNAL",
"message": "Internal server error",
"details": [
{
"description": "An unexpected error occurred"
}
]
}
}Monitors
Test evaluate a monitor
Dry-run evaluation of a monitor against a specific run.
Evaluates all conditions and builds the notification message, but does not dispatch notifications or write an event record. Use this to preview what would happen if the monitor evaluated against a given run.
POST
/
monitors
/
{monitor_id}
/
test-evaluate
Test evaluate a monitor
curl --request POST \
--url https://api.coval.dev/v1/monitors/{monitor_id}/test-evaluate \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"run_id": "hUWu3PxY6G7fTYbLzBAwZm"
}
'import requests
url = "https://api.coval.dev/v1/monitors/{monitor_id}/test-evaluate"
payload = { "run_id": "hUWu3PxY6G7fTYbLzBAwZm" }
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({run_id: 'hUWu3PxY6G7fTYbLzBAwZm'})
};
fetch('https://api.coval.dev/v1/monitors/{monitor_id}/test-evaluate', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.coval.dev/v1/monitors/{monitor_id}/test-evaluate",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'run_id' => 'hUWu3PxY6G7fTYbLzBAwZm'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.coval.dev/v1/monitors/{monitor_id}/test-evaluate"
payload := strings.NewReader("{\n \"run_id\": \"hUWu3PxY6G7fTYbLzBAwZm\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.coval.dev/v1/monitors/{monitor_id}/test-evaluate")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"run_id\": \"hUWu3PxY6G7fTYbLzBAwZm\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.coval.dev/v1/monitors/{monitor_id}/test-evaluate")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"run_id\": \"hUWu3PxY6G7fTYbLzBAwZm\"\n}"
response = http.request(request)
puts response.read_body{
"monitor_id": "<string>",
"run_id": "<string>",
"triggered": true,
"suppressed": false,
"condition_results": [
{}
],
"dispatch_results": [
{}
],
"message": "<string>"
}{
"error": {
"code": "INVALID_ARGUMENT",
"message": "Invalid request body",
"details": [
{
"field": "conditions",
"description": "Value error, List should have at least 1 item after validation"
}
]
}
}{
"error": {
"code": "UNAUTHENTICATED",
"message": "Authentication failed",
"details": [
{
"field": "X-API-Key",
"description": "Invalid or missing API key"
}
]
}
}{
"error": {
"code": "PERMISSION_DENIED",
"message": "Insufficient permissions",
"details": [
{
"field": "permissions",
"description": "Required scope: monitors:read"
}
]
}
}{
"error": {
"code": "NOT_FOUND",
"message": "Monitor not found",
"details": [
{
"field": "monitor_id",
"description": "Monitor '01HZ0EXAMPLE00000000000000' not found"
}
]
}
}{
"error": {
"code": "INTERNAL",
"message": "Internal server error",
"details": [
{
"description": "An unexpected error occurred"
}
]
}
}Authorizations
API key for authentication
Path Parameters
Monitor ULID
Pattern:
^[0-9A-Z]{26}$Body
application/json
Run ID to evaluate the monitor against
Response
Test evaluation results
Monitor ULID
Run that was evaluated
Whether the monitor would have triggered
Whether cooldown would have suppressed the trigger
Per-condition evaluation results
Empty for dry-run (no dispatching)
Generated notification message
Was this page helpful?
⌘I