Alert history Beta
Every alert your workspace sent, attempted or skipped, newest first. Useful for answering "was anyone told?" after an outage.
Needs an X-API-Key header whose owner has access to uptime monitoring in the app. The call counts once against your daily quota. See Monitoring API: getting started for authentication, rate limits and errors.
This endpoint is read-only: any method other than GET returns 405.
Query parameters
| Name | Type | Description |
|---|---|---|
monitorId optional | string | Only alerts for this monitor. |
event optional | string | down, still_down (a repeat while it stayed down), up or test. |
status optional | string | sent, failed or skipped. |
from optional | string | integer | ISO 8601 or UNIX seconds. Only alerts from this time on. |
to optional | string | integer | ISO 8601 or UNIX seconds. Only alerts before this time. |
page optional | integer | Page number, starting at 1. Default 1. |
per optional | integer | Alerts per page, 1 to 1000. Default 100. |
With no from or to, you get the whole history that is kept.
Request
Response
- {
- "total": 14, "page": 1, "per": 2,
- "alerts": [
- {
- "id": "90412",
- "monitorId": "mon_79ce3cf9c4fa56e98af4",
- "monitorName": "Checkout",
- "event": "down",
- "channel": "email",
- "target": "[email protected]",
- "recipient": "user",
- "status": "sent",
- "detail": null,
- "sentAt": "2026-09-16T22:29:11.402Z"
- },
- {
- "id": "90411",
- "monitorId": "mon_79ce3cf9c4fa56e98af4",
- "monitorName": "Checkout",
- "event": "down",
- "channel": "email",
- "target": "[email protected]",
- "recipient": "contact",
- "status": "skipped",
- "detail": "Opted out",
- "sentAt": "2026-09-16T22:29:11.120Z"
- }
- ],
- "usage": { "used": 41, "dailyLimit": 100, "tier": "free" }
- }
Response fields
| Field | Type | Description |
|---|---|---|
id | string | The alert id. |
monitorId, monitorName | string | Which monitor the alert was about. |
event | string | down, still_down, up or test. |
channel | string | How it was sent. email today. |
target | string | The address it went to. |
recipient | string | user for a workspace member, contact for an alert contact. |
status | string | sent, failed (we tried and it didn't go) or skipped (for example, the address had opted out). |
detail | string | null | Why it failed or was skipped, when we know. |
sentAt | string | When the alert was handled. |
History is kept for 120 days. Older alerts are removed.
The record outlives the monitor: delete a monitor and its alerts stay, keeping the monitorId and monitorName they had at the time.
Errors
| Status | When |
|---|---|
401 | The API key is missing or invalid. |
403 | The key's owner doesn't have access to uptime monitoring, or the key isn't linked to a workspace. |
400 | event or status isn't one of the values above, or from or to isn't a valid time. |
405 | The endpoint doesn't accept that method. |
429 | A rate limit or your daily quota was hit. Read Retry-After, in seconds. |
500, 503 | Something went wrong, or the API is temporarily unavailable. Try again. |
Errors are JSON: { "error": "message" }. See Monitoring API errors.
Related
- Alerting: who gets alerted, and why
- Outages: the outages behind the alerts
- Monitor settings: alert delay, repeats and recovery alerts