Uptime and support
How the Listener API is monitored, how uptime and incidents are measured, the uptime target, and what to do during an incident.
3 min read
Live status, 90-day uptime per component and recent incidents are on the status page. The same data is available as JSON at https://developers.listener.com/status.json, so you can feed it into your own monitoring.
How we monitor
#A monitor running on separate infrastructure from the API checks every component once a minute. The API runs on its own servers; the monitor runs as a scheduled job on a different hosting provider, so an API outage is recorded instead of silencing the monitor. Every check uses public endpoints only: no credentials, no writes, nothing that touches your data.
| Component | What a check does | Passes when |
|---|---|---|
| REST API | GET /health and HEAD /v1/openapi.json | both answer 200 (health reports ok) |
| OAuth | GET /.well-known/oauth-authorization-server | 200 with the issuer and endpoints |
| MCP server | POST https://mcp.listener.com/mcp without a token | the expected 401 sign-in challenge |
| Webhook delivery | reads the heartbeat the API’s background workers write every minute | heartbeat under 5 minutes old and every worker running |
| Developer docs | HEAD https://developers.listener.com/ | 200 |
A check that fails is retried once, a few seconds later, before it counts. A response slower than 4 seconds counts as degraded, as does a background worker (webhook delivery, the change poller) that is restarting or has fallen behind.
How uptime is calculated
#- Uptime for a day is the share of that day’s checks that were not down. Degraded checks count as up. Days are UTC.
- The 90-day uptime next to each component is the same ratio over every check in the window. Days before monitoring started show as no data and are not counted.
- An incident opens automatically after two failed checks in a row and starts at the first of them. It closes at the first good check. A single failed check lowers that day’s uptime but does not open an incident.
- The current status of a component changes only while an incident is open, so one dropped check does not show as an outage.
Uptime target
#Our target for the REST API is 99.9% uptime per calendar month, measured as above (about 43 minutes of downtime in a 30-day month).
A target, not an SLA
This is an internal objective, not a contractual service level agreement: missing it carries no credits or remedies. If your agreement with Listener includes a contractual SLA, that agreement’s terms apply instead.
status.json
#GET https://developers.listener.com/status.json needs no authentication and is cached for up to 30 seconds.
{
"object": "status",
"overall": "operational",
"last_checked_at": "2026-10-16T14:02:00.000Z",
"stale": false,
"check_interval_seconds": 60,
"day_boundary": "UTC",
"components": [
{
"id": "api",
"name": "REST API",
"status": "operational",
"uptime_90d_percent": 99.98,
"days": [
{ "date": "2026-10-16", "status": "operational", "uptime_percent": 100, "checks": 842, "down_checks": 0, "degraded_checks": 0 }
]
}
],
"incidents": [
{
"component": "api",
"status": "down",
"state": "resolved",
"started_at": "2026-10-09T03:14:00.000Z",
"resolved_at": "2026-10-09T03:18:00.000Z",
"duration_seconds": 240,
"summary": "REST API was unavailable (HTTP 502)."
}
]
}| Field | Values |
|---|---|
overall, components[].status | operational, degraded, down, or unknown when the monitor has not reported for 5 minutes (stale: true) |
components[].days[].status | operational (no incident that day), degraded, down, no_data |
incidents[].state | ongoing or resolved |
During an incident
#- Retry with backoff. Treat
5xxresponses and timeouts as temporary. Send anIdempotency-Keyon writes so a retry never applies twice (see Idempotency). - Webhooks catch up. Deliveries that fail while we are down are retried for up to three days (see Retries & auto-disable), and the Events API lets you list anything you missed.
- Check the status page before debugging your integration. If it shows everything operational and you still see errors, contact us.
Support
#Email tech@listener.com with the request_id from the error, the method and path, and roughly when it happened. See Support for what else to include and how to report a security issue.
Limits of this monitoring
#- Checks run from one region (US East), so a network problem between you and the API in another region may not show up.
- Checks prove each component is reachable and answering correctly; they do not exercise every endpoint or your workspace’s data.
- The status page and
status.jsonare hosted separately from the API. If they cannot be reached,GET https://api.listener.com/healthstill answers.