1. Base URL

All API requests are made to:

https://api.kawze.com

A quick way to confirm connectivity and check the running API version is GET /v1, which doesn't require authentication:

curl https://api.kawze.com/v1

2. Authentication

Every other endpoint requires an API key, sent as a bearer token in the Authorization header:

curl https://api.kawze.com/v1/monitors \
  -H "Authorization: Bearer kawze_live_<your-key>"

Create and manage API keys from Account › Admin APIs once you're logged in. Each key is issued with a role - read, write, or admin - which gates what it can do using the same permission checks as a human account member. Keys can't be issued with billing or owner access, so a leaked key can never touch your subscription or account ownership.

You can reveal or regenerate a key later from the same page if you need to see it again or rotate it. Revoke a key at any time if it's no longer needed or may have leaked.

Admin keys (this page) cover /v1/account, /v1/monitors, and /v1/outages below. A separate kind of key, scoped only to sending heartbeat pings, is created from Account › Heartbeat APIs - see section 7. The two aren't interchangeable: an admin key can't send a heartbeat ping, and a heartbeat key can't read or write anything else.

3. Errors

Every response includes a status field, either "ok" or "error". Error responses also include a human-readable message:

{
  "status": "error",
  "message": "You do not have permission to update monitors on this account"
}

Common status codes: 400 bad request or not authenticated, 403 the key's role doesn't permit the action, 404 not found.

4. Account

GET/v1/account

Returns the account your key belongs to, and its members.

5. Monitors

GET/v1/monitors

Lists every monitor on the account.

GET/v1/monitors/:id

Returns a single monitor.

POST/v1/monitors

Creates a monitor. Requires write role or higher. Body is { "monitor": { ... } } - the monitor shape depends on type (http, heartbeat, domain, timings, cache-warming, or tcp). A minimal HTTP monitor:

curl -X POST https://api.kawze.com/v1/monitors \
  -H "Authorization: Bearer kawze_live_<your-key>" \
  -H "Content-Type: application/json" \
  -d '{
    "monitor": {
      "type": "http",
      "name": "Marketing site",
      "url": "https://example.com",
      "intervalSeconds": 60,
      "regions": ["uk"]
    }
  }'

Server-managed fields (status, enabled, lastChecked, and similar) are always assigned by the server and ignored if sent - see the full field reference for each monitor type in the dashboard's monitor editor.

POST/v1/monitors/:id

Updates a monitor. Requires write role or higher. Same body shape as create. PUT and PATCH on the same path do the exact same full-replace update, for tooling that expects those verbs instead of POST.

DELETE/v1/monitors/:id

Deletes a monitor. Requires write role or higher.

6. Outages

GET/v1/outages

Lists incidents across all of the account's monitors.

GET/v1/outages/:id

Returns a single incident, including its comment thread.

7. Heartbeat

POST/v1/heartbeat/:monitorId

Marks a heartbeat monitor up, same effect as calling its own per-monitor ping URL (shown on the monitor's Heartbeat APIs card). Only works with a heartbeat- purpose key - an admin key gets 403. No body required:

curl -X POST https://api.kawze.com/v1/heartbeat/<monitorId> \
  -H "Authorization: Bearer kawze_live_<your-heartbeat-key>"

8. Notes

Alert configuration isn't a separate resource - it lives on each monitor's notifications array, so it's read and written through /v1/monitors like any other monitor field.

Enabling/disabling, duplicating a monitor, and the ad-hoc URL checker aren't part of the public API yet - those stay dashboard-only for now.