/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

FieldTypeDescription
idoptional
string (uuid)Monitor identifier.
account_idoptional
stringYour account UUID.
nameoptional
stringHuman label. 1–120 chars.
promptoptional
stringThe 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) | nullRegistered webhook_endpoints.id. If set, each run fires an ask.completed delivery.
enabledoptional
booleanPaused monitors do not run.
next_run_atoptional
string (ISO) | nullWhen the next tick is due.
last_run_atoptional
string (ISO) | nullWhen the last run finished.
created_atoptional
string (ISO)
updated_atoptional
string (ISO)

GET /v1/monitors

GET/v1/monitors

Response

json
{
  "request_id": "…",
  "monitors": [ /* Monitor[] */ ]
}

POST /v1/monitors

POST/v1/monitors

Request body

FieldTypeDescription
name
required
string1–120 chars.
prompt
required
string1–10,000 chars.
providers
required
('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

GET/v1/monitors/:id

Response

json
{
  "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

PATCH/v1/monitors/:id

Changing cadence re-anchors next_run_at relative to now — a user switching from weeklyhourly doesn't have to wait a week for the next tick.

DELETE /v1/monitors/:id

DELETE/v1/monitors/:id
json
{ "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¢.