Download OpenAPI specification:
Infrastructure monitoring API — HTTP(S) checks, heartbeat/cron monitoring, TLS/domain expiry checks, and alert channels.
Full narrative walkthrough (auth, examples, gotchas): see docs/api-reference.md and docs/getting-started.md.
Owners/admins only. Only the display prefix is returned, never the raw key.
[- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "key_prefix": "sk_ab12cd34",
- "created_at": "2019-08-24T14:15:22Z"
}
]Owners/admins only. The raw key is returned once, at creation — store it somewhere safe; only key_prefix is retrievable afterwards.
| name required | string |
{- "name": "string"
}{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "key_prefix": "sk_ab12cd34",
- "created_at": "2019-08-24T14:15:22Z",
- "key": "string"
}[- {
- "type": "http",
- "name": "string",
- "url": "string",
- "method": "GET",
- "interval_seconds": 300,
- "timeout_seconds": 10,
- "grace_seconds": 0,
- "failure_threshold": 2,
- "assertions": [
- {
- "type": "status_code",
- "name": "string",
- "value": "string"
}
], - "enabled": true,
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
- "state": "up",
- "consecutive_failures": 0,
- "ping_token": "string",
- "next_run_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
]interval_seconds is floored by your plan (free 300s, starter 60s, pro 30s). For type: heartbeat or cron, omit url/method/assertions and send grace_seconds instead — the response includes a ping_token.
| type | string Default: "http" Enum: "http" "heartbeat" "cron" "tls" "domain" |
| name required | string |
| url | string Required for http/tls/domain |
| method | string Default: "GET" |
| interval_seconds | integer [ 30 .. 86400 ] Default: 300 |
| timeout_seconds | integer Default: 10 |
| grace_seconds | integer heartbeat/cron only |
| failure_threshold | integer [ 1 .. 10 ] Default: 2 |
Array of objects (Assertion) | |
| enabled | boolean Default: true |
{- "type": "http",
- "name": "string",
- "url": "string",
- "method": "GET",
- "interval_seconds": 300,
- "timeout_seconds": 10,
- "grace_seconds": 0,
- "failure_threshold": 2,
- "assertions": [
- {
- "type": "status_code",
- "name": "string",
- "value": "string"
}
], - "enabled": true
}{- "type": "http",
- "name": "string",
- "url": "string",
- "method": "GET",
- "interval_seconds": 300,
- "timeout_seconds": 10,
- "grace_seconds": 0,
- "failure_threshold": 2,
- "assertions": [
- {
- "type": "status_code",
- "name": "string",
- "value": "string"
}
], - "enabled": true,
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
- "state": "up",
- "consecutive_failures": 0,
- "ping_token": "string",
- "next_run_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}{- "type": "http",
- "name": "string",
- "url": "string",
- "method": "GET",
- "interval_seconds": 300,
- "timeout_seconds": 10,
- "grace_seconds": 0,
- "failure_threshold": 2,
- "assertions": [
- {
- "type": "status_code",
- "name": "string",
- "value": "string"
}
], - "enabled": true,
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
- "state": "up",
- "consecutive_failures": 0,
- "ping_token": "string",
- "next_run_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}Replaces the whole check — it does not patch. Omitted fields are not kept from the existing row. type is immutable after creation.
| id required | string <uuid> |
| type | string Default: "http" Enum: "http" "heartbeat" "cron" "tls" "domain" |
| name required | string |
| url | string Required for http/tls/domain |
| method | string Default: "GET" |
| interval_seconds | integer [ 30 .. 86400 ] Default: 300 |
| timeout_seconds | integer Default: 10 |
| grace_seconds | integer heartbeat/cron only |
| failure_threshold | integer [ 1 .. 10 ] Default: 2 |
Array of objects (Assertion) | |
| enabled | boolean Default: true |
{- "type": "http",
- "name": "string",
- "url": "string",
- "method": "GET",
- "interval_seconds": 300,
- "timeout_seconds": 10,
- "grace_seconds": 0,
- "failure_threshold": 2,
- "assertions": [
- {
- "type": "status_code",
- "name": "string",
- "value": "string"
}
], - "enabled": true
}{- "type": "http",
- "name": "string",
- "url": "string",
- "method": "GET",
- "interval_seconds": 300,
- "timeout_seconds": 10,
- "grace_seconds": 0,
- "failure_threshold": 2,
- "assertions": [
- {
- "type": "status_code",
- "name": "string",
- "value": "string"
}
], - "enabled": true,
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6",
- "state": "up",
- "consecutive_failures": 0,
- "ping_token": "string",
- "next_run_at": "2019-08-24T14:15:22Z",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}| id required | string <uuid> |
| period | string Default: "day" Enum: "day" "week" "month" day = 15-min buckets, week = 2h buckets, month = 12h buckets |
[- {
- "bucket": "2019-08-24T14:15:22Z",
- "avg_latency_ms": 0,
- "uptime_pct": 0,
- "count": 0
}
][- {
- "type": "email",
- "name": "string",
- "config": {
- "to": "string",
- "url": "string",
- "secret": "string",
- "webhook_url": "string"
}, - "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6"
}
]For type: webhook, a signing secret is auto-generated if config.secret is omitted — always send the existing secret back unchanged on update, or a new one is minted and downstream signature verification silently breaks.
| type required | string Enum: "email" "webhook" "slack" |
| name required | string |
required | object email: {to}. webhook: {url, secret?}. slack: {webhook_url}. |
{- "type": "email",
- "name": "string",
- "config": {
- "to": "string",
- "url": "string",
- "secret": "string",
- "webhook_url": "string"
}
}{- "type": "email",
- "name": "string",
- "config": {
- "to": "string",
- "url": "string",
- "secret": "string",
- "webhook_url": "string"
}, - "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6"
}| id required | string <uuid> |
| type required | string Enum: "email" "webhook" "slack" |
| name required | string |
required | object email: {to}. webhook: {url, secret?}. slack: {webhook_url}. |
{- "type": "email",
- "name": "string",
- "config": {
- "to": "string",
- "url": "string",
- "secret": "string",
- "webhook_url": "string"
}
}{- "type": "email",
- "name": "string",
- "config": {
- "to": "string",
- "url": "string",
- "secret": "string",
- "webhook_url": "string"
}, - "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "organization_id": "7c60d51f-b44e-4682-87d6-449835ea4de6"
}