Account Monitor Health API
Returns a single-call summary of your entire monitoring setup: overall status, how many of your monitors are active vs paused, and how many delivery attempts in the last 24 hours were pending, delivered, or failed. Distinct from Monitor Health above, which reports one monitor's cursor state, not your whole account's. Cost: Free per call.
GET monitor/health returns an account-wide monitoring rollup in one call: status ("operational" or "degraded"), a monitors object with active/paused/total counts across every non-deleted monitor you own, and a deliveries_24h object with pending/delivered/failed counts across every delivery attempt in the last 24 hours. It costs 0 credits and takes no parameters. A key with no monitors gets a 200 with every count zeroed, never a 404.
Authorization
bearerAuth Pass your API key as a bearer token on every request: Authorization: Bearer <API_KEY>.
In: header
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/monitor/health"{ "status": "operational", "monitors": { "active": 3, "paused": 1, "total": 4 }, "deliveries_24h": { "pending": 2, "delivered": 150, "failed": 1 }}{ "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": "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 build an account-level monitoring dashboard or a single alerting check, instead of calling List Monitors and Monitor Health once per monitor id and aggregating the results yourself. Use Monitor Health (with an id) instead when you need one specific monitor's cursor position (last_tweet_id, last_poll_at), which this rollup does not carry.
Notes
- No path parameter -- this is account-wide, scoped by your API key, unlike Monitor Health (GET monitor/{id}/health) which needs a specific monitor id.
- An account with zero monitors gets 200 with every count at 0, matching the empty-array behavior of List Monitors, never a 404.
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.
- Monitor Health: Check one monitor's poll status and last-seen tweet id.
FAQ
How is this different from GET monitor/{id}/health?
That endpoint reports ONE monitor's cursor state (last_tweet_id, last_poll_at, its own degraded flag) and 404s if the id is wrong or not yours. This endpoint reports your WHOLE account in one call (counts across every monitor plus 24h delivery outcomes) and never 404s, since there is no id to get wrong.
What counts as a "failed" delivery?
A delivery that exhausted its retry schedule without a successful webhook response (our internal dead-letter state). It is not the same as "pending", which includes deliveries still queued or mid-retry within the 24h window.
Does a paused monitor affect the status field?
Only if it is degraded AND active. A paused monitor is not being polled at all, so its degraded flag (a snapshot of its last active state) is excluded from the account-wide status calculation.
Does calling this endpoint cost anything?
No, the cost is 0, same as every other Monitoring read.
Compat: List Tweet-Monitored Users GET
An x_user_stream-shaped response envelope for listing monitored users, backed by the same monitor rows GET /twitter/monitor returns. Honest field mapping, not fabricated: our monitors table stores no numeric Twitter user id and no separate display name, so x_user_id is always null and x_user_name/x_user_screen_name both carry the handle we actually store. is_monitor_profile (profile-change monitoring) is not a capability this API has -- always 0, never reported as on. Cost: Free per call.
Overview
Spaces: Read an X Space by id: title, host, speakers, topics, timing and audience counts, for a Space that is scheduled, running or already ended.