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
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
application/json
application/json
curl -X POST "https://example.com/monitor/{id}" \ -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": "insufficient_credits", "message": "Your balance is exhausted. Top up your credits to continue."}{ "error": "forbidden", "message": "The acting account is not authorized for this write action, or has no logged-in session."}{ "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.com" or "https://example.com/blog" if 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.
List Monitors GET
Returns every non-deleted monitor on your account, most recently created first. Each entry includes its id, subject, status, and delivery configuration, so you can enumerate what already exists before creating, updating, or deleting a specific monitor. 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.