Update Monitor API
Partial update of an existing monitor. Send status to pause or resume it, webhook_ids to change which webhooks receive its events, or both in the same call (applied atomically). Resuming a paused monitor re-runs the same capacity and per-account cap checks as creating a new one, since it adds load back to the shared pool. Cost: Free per call.
POST monitor/{id} updates an existing monitor without recreating it. Send status to pause or resume delivery, webhook_ids to change which webhooks receive its events, domain_filter to change which posts get delivered, or any combination in one atomic call. It returns the monitor's full current state, including status, degraded, events_possibly_missed, and the updated webhook_ids, domain_filter, and updated_at.
Authorization
bearerAuth Pass your API key as a bearer token on every request: Authorization: Bearer <API_KEY>.
In: header
Path Parameters
The id segment of the path, as returned by the endpoint that created the resource.
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/monitor/string" \ -H "Content-Type: application/json" \ -d '{}'{ "id": "b6f2c1a4-9e3d-4c11-8a2f-7d5e6c9b0a11", "subject": "from:elonmusk", "kind": "account", "status": "paused", "degraded": false, "events_possibly_missed": 0, "webhook_ids": null, "domain_filter": null, "updated_at": "2026-08-13T11:00:00.000Z"}{ "error": "bad_request", "message": "Missing or malformed parameter. Fix the request before retrying."}{ "error": "unauthorized", "message": "The API key is missing, malformed, or revoked. Check the Authorization header."}{ "error": "not_found", "message": "The resource does not exist, for example a deleted tweet or a private account."}{ "error": "rate_limited", "message": "Too many requests. Back off and retry with exponential backoff."}{ "error": "server_error", "message": "Something failed on our side. Retry with backoff; if it persists, contact support."}Pricing
| Unit | Price |
|---|---|
| Per call | Free |
When to use
Use this endpoint to pause a monitor temporarily, resume one, repoint an existing monitor at a different set of webhooks, or change/clear its domain_filter, without deleting and recreating it. Reach for it instead of a sibling monitor-creation endpoint whenever the monitor's query/subject itself is unchanged and only its delivery state, destination, or filter needs to change.
Notes
- Replace {id} with the monitor's id from Create Monitor or List Monitors.
- 400 bad_request if none of status, webhook_ids, or domain_filter is provided, or if status is anything other than exactly "active" or "paused".
- 403 customer_slot_limit_reached or 503 capacity_unavailable are only possible when resuming (status: "active") a currently-paused monitor; pausing, or a webhook_ids/domain_filter-only update, never triggers either check.
- A monitor's handle cannot be changed. Delete it and create a new one to watch a different account.
- Passing domain_filter: null (or an empty string) clears an existing filter back to "deliver every new post"; omitting the field entirely leaves whatever filter is currently set unchanged.
- 400 bad_request with message invalid domain filter "<raw>": must be a bare hostname or URL like
example.comorhttps://example.com/blogif a non-empty domain_filter does not normalize to a valid hostname.
Related endpoints
- Create Monitor: Watch an X account for new posts and push them to your webhook(s).
- List Monitors: List every monitor on your account.
FAQ
What happens to events fired while a monitor is paused?
They are not delivered while status is paused, and the response's events_possibly_missed counter increases to reflect them. Resuming the monitor (status: active) re-runs capacity and cap checks before delivery resumes, so a resume is not guaranteed to succeed silently if those checks fail.
Can I change webhook_ids and status in the same request?
Yes. All three fields (status, webhook_ids, domain_filter) are optional and independent, so a single POST can pause a monitor, swap its webhook_ids, and change its domain_filter atomically. The response reflects every change at once.
Does calling this endpoint cost anything?
No, the listed cost is 0. There is no per-call charge for pausing, resuming, repointing a monitor's webhooks, or changing its domain_filter.
How do I remove a domain_filter I previously set?
Send domain_filter: null (or an empty string) in the update body. Omitting the field entirely is different: it leaves the existing filter exactly as it was.
Create Monitor POST
Start watching an X account. Every new post from that account is delivered, HMAC-signed, to your registered webhook(s) on a shared poll interval. Free: monitor creation is account administration, not a metered read. Cost: Free per call.
Delete Monitor DELETE
Soft-deletes the monitor: it stops polling immediately and disappears from List Monitors, but its delivery history is retained rather than cascade-deleted. Cost: Free per call.