API keys
Create keys under Account → API Keys → Create API key. Give it a name (for example Zapier or Production integration) and click Create. The key is shown once — copy it straight away. Keys look like sm_live_…. Delete a key with the trash icon on the same page; deleted keys stop working immediately.
A key acts for the whole workspace, so anyone holding it can read all monitors and trigger runs. Treat it like a password.
Making requests
Base URL: https://simrixmonitor.com/api/v1
Send the key as a Bearer token:
curl https://simrixmonitor.com/api/v1/monitors \
-H "Authorization: Bearer sm_live_..."
Each key is limited to 100 requests per hour. Over the limit you get 429 until the window resets.
Endpoints
GET /monitors
Lists every monitor in the workspace.
{
"object": "list",
"data": [
{
"id": "…",
"name": "Homepage price block",
"type": "change",
"url": "https://example.com/pricing",
"active": true,
"interval_minutes": 60,
"last_status": "passed",
"last_run_at": "2026-09-11T14:00:00.000Z",
"site": { "id": "…", "name": "Example" }
}
]
}
GET /monitors/{id}/runs?limit=20
Recent runs for one monitor, newest first. limit defaults to 20, maximum 100. Each run has status, change_detected, change_significance, change_category, change_headline, annotation, ai_summary, failure_summary, duration_ms, http_status, screenshot_url, diff_screenshot_url, created_at, finished_at.
POST /monitors/{id}/trigger
Runs the monitor now and waits for the result.
{ "object": "run", "run_id": "…", "status": "passed", "change_detected": false }
Triggered runs count against your allowance like any other and follow the same billing rules — a workspace over its allowance gets 403 with the usage detail. If another manual run is already in progress for the workspace you get 429; retry after it finishes. Triggered runs don't send alert emails.
Webhooks
Webhooks push events to a URL you control the moment they happen. Add one under Account → Webhooks → Add webhook: give it a name, the endpoint URL, tick the events you want, and click Create webhook.
Events:
change_detected— a change monitor found a significant changemonitor_failed— a monitor failedmonitor_recovered— a failing monitor passed again
Each webhook gets a signing secret, shown once when you create it. Use it to verify requests. Endpoints can be paused (Pause / Enable) or deleted from the list.
Payload
{
"event": "change_detected",
"timestamp": "2026-09-11T14:05:12.000Z",
"workspaceId": "…",
"monitor": { "id": "…", "name": "Homepage price block", "type": "change", "url": "https://example.com/pricing" },
"run": {
"id": "…",
"status": "passed",
"changeDetected": true,
"aiSummary": "Price changed from $49 to $79.",
"failureSummary": null,
"durationMs": 8421,
"httpStatus": 200,
"screenshotUrl": "https://simrixmonitor.com/api/artifacts/…",
"diffScreenshotUrl": "https://simrixmonitor.com/api/artifacts/…"
}
}
Verifying the signature
Every request carries X-Simrix-Event (the event name) and X-Simrix-Signature: sha256=<hex>, an HMAC-SHA256 of the raw request body using your signing secret. Compute the same HMAC and compare with a constant-time comparison before trusting the payload.
Each delivery is a single attempt with a 10-second timeout — there are no automatic retries, so make your endpoint accept quickly and process afterwards. Non-2xx responses are logged. Screenshot URLs in the payload require a signed-in workspace member to view.
Slack, Zapier, and friends
There's no native Slack integration yet. Point a webhook at a Zapier / Make catch-hook or at a tiny relay that formats the payload into a Slack message. Zapier and similar tools can also poll GET /monitors/{id}/runs with an API key.