API
API: monitors
List, create, update, pause and delete monitors.
List monitors
GET /monitors?clientWorkspaceId=&type=&status=
Create a monitor
curl -X POST https://app.tenium.app/api/v1/monitors \
-H "Authorization: Bearer tn_live_3f9a..." \
-H "Content-Type: application/json" \
-d '{
"name": "Client A shop",
"type": "http",
"url": "https://shop.clienta.com",
"intervalSec": 30,
"timeoutSec": 10,
"regions": ["fra", "lon", "ams", "nyc", "sfo", "sgp"],
"expectedStatus": ["2xx", "3xx"],
"keyword": { "mode": "contains", "value": "Add to cart" },
"headers": { "x-tenium-secret": "YOUR_SECRET" },
"contactIds": ["6d2c9f1e-0b7a-4b5e-9d3c-5a1f2e8b7c4d"],
"clientWorkspaceId": null,
"tags": ["woocommerce", "client-a"]
}'
Response 201 Created:
{
"id": "a3f1c2d4-9e8b-4f6a-b7c5-1d2e3f4a5b6c",
"accountId": "0f8e7d6c-5b4a-4392-8172-6f5e4d3c2b1a",
"clientWorkspaceId": null,
"name": "Client A shop",
"type": "http",
"url": "https://shop.clienta.com",
"intervalSec": 30,
"timeoutSec": 10,
"regions": ["fra", "lon", "ams", "nyc", "sfo", "sgp"],
"expectedStatus": ["2xx", "3xx"],
"keyword": { "mode": "contains", "value": "Add to cart" },
"headers": { "x-tenium-secret": "••••" },
"status": "pending",
"paused": false,
"contactIds": ["6d2c9f1e-0b7a-4b5e-9d3c-5a1f2e8b7c4d"],
"tags": ["woocommerce", "client-a"],
"lastCheckAt": null,
"nextCheckAt": "2026-01-20T10:15:03Z",
"createdAt": "2026-01-20T10:15:00Z",
"updatedAt": "2026-01-20T10:15:00Z"
}
intervalSec below the plan minimum returns 422 with plan_limit. Secret header values are masked in every response.
Fields by type
| Type | Required | Optional |
|---|---|---|
| http, keyword, json | url | method, body, headers, expectedStatus, keyword, assertions |
| ping | host | packets, lossThreshold |
| port | host, port | protocol (tcp/udp), send, expect |
| dns | host, recordType | expected, resolver |
| ssl | host | port, warnDays |
| domain | host | warnDays |
| heartbeat | periodSec or cron | graceSec, timezone |
Update
PATCH /monitors/{id}
Send only the fields to change.
Pause and resume
POST /monitors/{id}/pause
POST /monitors/{id}/resume
Check now
POST /monitors/{id}/check
Queues an immediate check from every region. Rate-limited to one per monitor per 10 seconds.
Delete
DELETE /monitors/{id}
Returns 204. History is kept for 30 days for undo, then purged.
Checks history
GET /monitors/{id}/checks?from=&to=®ion=
Returns individual check results with timings. Retention follows the plan (90 to 730 days).