/v1/monitors
Schedule recurring /v1/ask-shaped prompts. The hourly cron dispatches every monitor whose next_run_at has passed. Results are archived just like any other /v1/ask call — retrievable for 30 days — and can fire an ask.completed webhook per run.
These endpoints are session-authenticated via dashboard login, not via bearer token.
Legacy endpoint. This documents an older surface kept for back-compat with existing integrations. New integrations should use /v1/watch instead — see the quickstart for the modern API.
Monitor object
| Field | Type | Description |
|---|---|---|
idoptional | string (uuid) | Monitor identifier. |
account_idoptional | string | Your account UUID. |
nameoptional | string | Human label. 1–120 chars. |
promptoptional | string | The prompt to run on every tick. 1–10,000 chars. |
providersoptional | ('openai' | 'anthropic' | 'gemini' | 'perplexity')[] | 1–4 entries. |
cadenceoptional | 'hourly' | 'daily' | 'weekly' | Run frequency. |
track_brandsoptional | string[] | Up to 20 brand names to extract on every run. |
webhook_idoptional | string (uuid) | null | Registered webhook_endpoints.id. If set, each run fires an ask.completed delivery. |
enabledoptional | boolean | Paused monitors do not run. |
next_run_atoptional | string (ISO) | null | When the next tick is due. |
last_run_atoptional | string (ISO) | null | When the last run finished. |
created_atoptional | string (ISO) | |
updated_atoptional | string (ISO) |
GET /v1/monitors
/v1/monitors— List all monitors for the calling accountResponse
{
"request_id": "…",
"monitors": [ /* Monitor[] */ ]
}POST /v1/monitors
/v1/monitors— Create a new monitorRequest body
| Field | Type | Description |
|---|---|---|
namerequired | string | 1–120 chars. |
promptrequired | string | 1–10,000 chars. |
providersrequired | ('openai' | 'anthropic' | 'gemini' | 'perplexity')[] | 1–4 entries. |
cadenceoptional | 'hourly' | 'daily' | 'weekly' | Default: 'daily' |
track_brandsoptional | string[] | Up to 20 entries, each 1–80 chars. |
webhook_idoptional | string (uuid) | A registered webhook endpoint to deliver ask.completed events to. |
enabledoptional | boolean | Default: true |
GET /v1/monitors/:id
/v1/monitors/:id— Fetch one monitor and its 10 most recent runsResponse
{
"request_id": "…",
"monitor": { /* Monitor */ },
"runs": [
{
"id": "…",
"monitor_id": "…",
"ran_at": "2026-04-25T08:00:00.000Z",
"status": "succeeded",
"diff_summary": "2 new mentions vs previous run",
"response": { /* NormalizedResponse */ },
"cost_cents": 75
}
]
}PATCH /v1/monitors/:id
/v1/monitors/:id— Update any subset of fieldsChanging cadence re-anchors next_run_at relative to now — a user switching from weekly → hourly doesn't have to wait a week for the next tick.
DELETE /v1/monitors/:id
/v1/monitors/:id— Permanently delete the monitor{ "request_id": "…", "deleted": true }Pricing
Each monitor run is billed as a normal /v1/ask call using the pricing tiers in Billing. Runs use cache_scope: "private" so repeat prompts with identical inputs still return cached at 2¢.