Monitors
Lists monitors of ALL kinds by default (decision 3); narrow with
plain ?kind=watch|discovery or ?target=list|market filters
(decision 25). Newest first.
Authorization
ApiKeyAuth API key authentication using Bearer token. Format: sk_live_ followed by a secure random string.
In: header
Query Parameters
Value in
- "watch"
- "discovery"
Value in
- "list"
- "market"
1 <= value <= 100200 <= value0Response Body
application/json
application/json
curl -X GET "https://example.com/v1/monitors"{ "results": [ { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "object": "monitor", "kind": "watch", "name": "string", "status": "active", "checks": [ { "kind": "enrichment", "templateId": "196100ac-4eec-4fb6-a7f7-86c8b584771d", "type": "job_posted", "prompt": "string", "filters": {} } ], "target": { "type": "list", "listId": "9fc6ad7d-902a-4834-b161-a4911b883d44", "entity": "company" }, "schedule": { "frequency": "daily", "cronExpression": "string", "timezone": "string" }, "webhook": { "url": "http://example.com", "intervalSignalLimit": 1, "interval": "daily" }, "lastRunAt": "2019-08-24T14:15:22Z", "nextRunAt": "2019-08-24T14:15:22Z", "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z" } ], "total": 0, "limit": 0, "offset": 0, "count": 0}Creates a standing watch that emits signals over time (decision
25). The create body carries checks: [{kind, …}] — exactly ONE
check at launch; the array is the forward contract for multi-check
monitors later.
{kind: "enrichment", templateId}+target: {type: "list", listId, entity}(+ optionalschedule) — a watch monitor: re-runs the template's question against every entity on the list and emits aresult_changedsignal when an answer changes.{kind: "signal", type, prompt?, filters?}+webhook: {url}— a discovery monitor: watches the market for occurrences of the given type (job_posted,social_posted,funding_raised,investment_made,ipo_announced,ipo_stage_changed).
Upsert on the (template, list) pair — not a no-op. An enrichment
check for a template + list that already has a monitor does NOT
create a duplicate; it replaces that monitor's configuration with
this request's values. Because the create body fills defaults,
fields you omit are cleared, not preserved: omitting schedule
nulls the existing frequency/cron and resets the timezone to UTC (so
the monitor stops firing while its status stays active), and omitting
name clears it. The response is 201 with the pre-existing monitor's
id/createdAt. To change one field on an existing monitor, use
PATCH /v1/monitors/{monitorId} (partial update) rather than a
re-POST. (A future revision may 409 this collision instead —
tracked in SEL-3916.)
Monitor configuration and lifecycle are free; emitted signals are what meter. The legacy subscription routes keep working (and keep their pricing) until their announced sunset.
Authorization
ApiKeyAuth API key authentication using Bearer token. Format: sk_live_ followed by a secure random string.
In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
length <= 2001 <= items <= 1Discovery monitors — delivery webhook.
Response Body
application/json
application/json
curl -X POST "https://example.com/v1/monitors" \ -H "Content-Type: application/json" \ -d '{ "name": "Funding watch", "checks": [ { "kind": "signal", "type": "funding_raised", "prompt": "Series A+ rounds in European fintech" } ], "webhook": { "url": "https://myapp.com/webhooks/signals" } }'{ "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "object": "monitor", "kind": "watch", "name": "string", "status": "active", "checks": [ { "kind": "enrichment", "templateId": "196100ac-4eec-4fb6-a7f7-86c8b584771d", "type": "job_posted", "prompt": "string", "filters": {} } ], "target": { "type": "list", "listId": "9fc6ad7d-902a-4834-b161-a4911b883d44", "entity": "company" }, "schedule": { "frequency": "daily", "cronExpression": "string", "timezone": "string" }, "webhook": { "url": "http://example.com", "intervalSignalLimit": 1, "interval": "daily" }, "lastRunAt": "2019-08-24T14:15:22Z", "nextRunAt": "2019-08-24T14:15:22Z", "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z"}Free.
Authorization
ApiKeyAuth API key authentication using Bearer token. Format: sk_live_ followed by a secure random string.
In: header
Path Parameters
uuidResponse Body
application/json
application/json
curl -X GET "https://example.com/v1/monitors/497f6eca-6276-4993-bfeb-53cbbbba6f08"{ "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "object": "monitor", "kind": "watch", "name": "string", "status": "active", "checks": [ { "kind": "enrichment", "templateId": "196100ac-4eec-4fb6-a7f7-86c8b584771d", "type": "job_posted", "prompt": "string", "filters": {} } ], "target": { "type": "list", "listId": "9fc6ad7d-902a-4834-b161-a4911b883d44", "entity": "company" }, "schedule": { "frequency": "daily", "cronExpression": "string", "timezone": "string" }, "webhook": { "url": "http://example.com", "intervalSignalLimit": 1, "interval": "daily" }, "lastRunAt": "2019-08-24T14:15:22Z", "nextRunAt": "2019-08-24T14:15:22Z", "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z"}Watch monitors update name, schedule, or target.listId;
discovery monitors update name, the check's prompt/filters,
or webhook. A monitor's kind and signal type are immutable —
create a new monitor instead. Free.
Authorization
ApiKeyAuth API key authentication using Bearer token. Format: sk_live_ followed by a secure random string.
In: header
Path Parameters
uuidRequest Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
length <= 200Discovery monitors — update the check's prompt/filters (type is immutable).
1 <= items <= 1Response Body
application/json
application/json
application/json
curl -X PATCH "https://example.com/v1/monitors/497f6eca-6276-4993-bfeb-53cbbbba6f08" \ -H "Content-Type: application/json" \ -d '{}'{ "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "object": "monitor", "kind": "watch", "name": "string", "status": "active", "checks": [ { "kind": "enrichment", "templateId": "196100ac-4eec-4fb6-a7f7-86c8b584771d", "type": "job_posted", "prompt": "string", "filters": {} } ], "target": { "type": "list", "listId": "9fc6ad7d-902a-4834-b161-a4911b883d44", "entity": "company" }, "schedule": { "frequency": "daily", "cronExpression": "string", "timezone": "string" }, "webhook": { "url": "http://example.com", "intervalSignalLimit": 1, "interval": "daily" }, "lastRunAt": "2019-08-24T14:15:22Z", "nextRunAt": "2019-08-24T14:15:22Z", "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z"}Deletes a monitor of either kind (previously the watch family had no delete). An active watch monitor's schedule is stopped first. Free.
Authorization
ApiKeyAuth API key authentication using Bearer token. Format: sk_live_ followed by a secure random string.
In: header
Path Parameters
uuidResponse Body
application/json
curl -X DELETE "https://example.com/v1/monitors/497f6eca-6276-4993-bfeb-53cbbbba6f08"One pause/resume vocabulary across both kinds (decision 2). Free.
Authorization
ApiKeyAuth API key authentication using Bearer token. Format: sk_live_ followed by a secure random string.
In: header
Path Parameters
uuidResponse Body
application/json
application/json
curl -X POST "https://example.com/v1/monitors/497f6eca-6276-4993-bfeb-53cbbbba6f08/pause"{ "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "object": "monitor", "kind": "watch", "name": "string", "status": "active", "checks": [ { "kind": "enrichment", "templateId": "196100ac-4eec-4fb6-a7f7-86c8b584771d", "type": "job_posted", "prompt": "string", "filters": {} } ], "target": { "type": "list", "listId": "9fc6ad7d-902a-4834-b161-a4911b883d44", "entity": "company" }, "schedule": { "frequency": "daily", "cronExpression": "string", "timezone": "string" }, "webhook": { "url": "http://example.com", "intervalSignalLimit": 1, "interval": "daily" }, "lastRunAt": "2019-08-24T14:15:22Z", "nextRunAt": "2019-08-24T14:15:22Z", "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z"}Free.
Authorization
ApiKeyAuth API key authentication using Bearer token. Format: sk_live_ followed by a secure random string.
In: header
Path Parameters
uuidResponse Body
application/json
application/json
curl -X POST "https://example.com/v1/monitors/497f6eca-6276-4993-bfeb-53cbbbba6f08/resume"{ "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "object": "monitor", "kind": "watch", "name": "string", "status": "active", "checks": [ { "kind": "enrichment", "templateId": "196100ac-4eec-4fb6-a7f7-86c8b584771d", "type": "job_posted", "prompt": "string", "filters": {} } ], "target": { "type": "list", "listId": "9fc6ad7d-902a-4834-b161-a4911b883d44", "entity": "company" }, "schedule": { "frequency": "daily", "cronExpression": "string", "timezone": "string" }, "webhook": { "url": "http://example.com", "intervalSignalLimit": 1, "interval": "daily" }, "lastRunAt": "2019-08-24T14:15:22Z", "nextRunAt": "2019-08-24T14:15:22Z", "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z"}Runs the monitor immediately.
The trigger call itself is free. The run it starts bills per freshly generated signal, exactly like the monitor's legacy family:
- watch monitors bill 2 credits per entity on the list (cached answers are free);
- discovery monitors bill 8 credits per stored signal.
So a single trigger against a large list can debit many credits. A
run can also stop part-way with 402 if the balance is exhausted
mid-fan-out, leaving the entities already processed billed and the
rest not run.
Authorization
ApiKeyAuth API key authentication using Bearer token. Format: sk_live_ followed by a secure random string.
In: header
Path Parameters
uuidResponse Body
application/json
application/json
application/json
curl -X POST "https://example.com/v1/monitors/497f6eca-6276-4993-bfeb-53cbbbba6f08/trigger"{ "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "object": "monitor", "kind": "watch", "name": "string", "status": "active", "checks": [ { "kind": "enrichment", "templateId": "196100ac-4eec-4fb6-a7f7-86c8b584771d", "type": "job_posted", "prompt": "string", "filters": {} } ], "target": { "type": "list", "listId": "9fc6ad7d-902a-4834-b161-a4911b883d44", "entity": "company" }, "schedule": { "frequency": "daily", "cronExpression": "string", "timezone": "string" }, "webhook": { "url": "http://example.com", "intervalSignalLimit": 1, "interval": "daily" }, "lastRunAt": "2019-08-24T14:15:22Z", "nextRunAt": "2019-08-24T14:15:22Z", "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z"}The occurrences this monitor emitted, newest first, on the signal
envelope (type, occurredAt, observedAt, entity, payload).
Watch monitors emit result_changed when an answer changes —
silent no-change runs are runs, not signals (the legacy /logs
route keeps the full run history until its sunset; its total
reflects the fetched window for watch monitors). Reads are free.
Authorization
ApiKeyAuth API key authentication using Bearer token. Format: sk_live_ followed by a secure random string.
In: header
Path Parameters
uuidQuery Parameters
1 <= value <= 100200 <= value0Response Body
application/json
application/json
curl -X GET "https://example.com/v1/monitors/497f6eca-6276-4993-bfeb-53cbbbba6f08/signals"{ "results": [ { "id": "string", "object": "signal", "monitorId": "075fef10-8522-4c43-ac39-f1796133943e", "type": "string", "occurredAt": "2019-08-24T14:15:22Z", "observedAt": "2019-08-24T14:15:22Z", "entity": {}, "payload": {} } ], "total": 0, "limit": 0, "offset": 0, "count": 0}Watch monitors only at launch. Free.
Authorization
ApiKeyAuth API key authentication using Bearer token. Format: sk_live_ followed by a secure random string.
In: header
Path Parameters
uuidResponse Body
application/json
application/json
curl -X GET "https://example.com/v1/monitors/497f6eca-6276-4993-bfeb-53cbbbba6f08/actions"{ "items": [ { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "subscriptionId": "d079718b-ff63-45dd-947b-4950c023750f", "type": "webhook", "webhook": { "destination": "http://example.com" }, "enabled": true, "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z" } ], "total": 0, "limit": 0, "offset": 0, "hasMore": true}Actions fire when the monitor emits signals. Watch monitors only at
launch — discovery monitors deliver via their webhook and return
422 here. Free.
Authorization
ApiKeyAuth API key authentication using Bearer token. Format: sk_live_ followed by a secure random string.
In: header
Path Parameters
uuidRequest Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Create a new action on a subscription. The type field determines which
configuration object is required.
The action type discriminator
Value in
- "webhook"
Configuration for a webhook action.
Response Body
application/json
application/json
curl -X POST "https://example.com/v1/monitors/497f6eca-6276-4993-bfeb-53cbbbba6f08/actions" \ -H "Content-Type: application/json" \ -d '{ "type": "webhook" }'{ "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "subscriptionId": "d079718b-ff63-45dd-947b-4950c023750f", "type": "webhook", "webhook": { "destination": "http://example.com" }, "enabled": true, "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z"}Free.
Authorization
ApiKeyAuth API key authentication using Bearer token. Format: sk_live_ followed by a secure random string.
In: header
Path Parameters
uuiduuidResponse Body
application/json
application/json
curl -X GET "https://example.com/v1/monitors/497f6eca-6276-4993-bfeb-53cbbbba6f08/actions/497f6eca-6276-4993-bfeb-53cbbbba6f08"{ "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "subscriptionId": "d079718b-ff63-45dd-947b-4950c023750f", "type": "webhook", "webhook": { "destination": "http://example.com" }, "enabled": true, "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z"}Free.
Authorization
ApiKeyAuth API key authentication using Bearer token. Format: sk_live_ followed by a secure random string.
In: header
Path Parameters
uuiduuidRequest Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Update the configuration of an existing action. The action type is immutable; only the type-specific configuration can be changed.
Configuration for a webhook action.
Response Body
application/json
application/json
curl -X PATCH "https://example.com/v1/monitors/497f6eca-6276-4993-bfeb-53cbbbba6f08/actions/497f6eca-6276-4993-bfeb-53cbbbba6f08" \ -H "Content-Type: application/json" \ -d '{}'{ "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "subscriptionId": "d079718b-ff63-45dd-947b-4950c023750f", "type": "webhook", "webhook": { "destination": "http://example.com" }, "enabled": true, "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z"}Free.
Authorization
ApiKeyAuth API key authentication using Bearer token. Format: sk_live_ followed by a secure random string.
In: header
Path Parameters
uuiduuidResponse Body
application/json
curl -X DELETE "https://example.com/v1/monitors/497f6eca-6276-4993-bfeb-53cbbbba6f08/actions/497f6eca-6276-4993-bfeb-53cbbbba6f08"Free.
Authorization
ApiKeyAuth API key authentication using Bearer token. Format: sk_live_ followed by a secure random string.
In: header
Path Parameters
uuiduuidResponse Body
application/json
application/json
curl -X POST "https://example.com/v1/monitors/497f6eca-6276-4993-bfeb-53cbbbba6f08/actions/497f6eca-6276-4993-bfeb-53cbbbba6f08/pause"{ "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "subscriptionId": "d079718b-ff63-45dd-947b-4950c023750f", "type": "webhook", "webhook": { "destination": "http://example.com" }, "enabled": true, "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z"}The unified verb for the legacy unpause (decision 2). Free.
Authorization
ApiKeyAuth API key authentication using Bearer token. Format: sk_live_ followed by a secure random string.
In: header
Path Parameters
uuiduuidResponse Body
application/json
application/json
curl -X POST "https://example.com/v1/monitors/497f6eca-6276-4993-bfeb-53cbbbba6f08/actions/497f6eca-6276-4993-bfeb-53cbbbba6f08/resume"{ "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "subscriptionId": "d079718b-ff63-45dd-947b-4950c023750f", "type": "webhook", "webhook": { "destination": "http://example.com" }, "enabled": true, "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z"}