List incidents
GET
/v1/api/sites/{site_id}/incidentsList a site's monitoring incidents, crawl slowdown included, as the Alerts page shows them.
Active and acknowledged incidents are returned unless status or include_archived says otherwise. first_detected_from and first_detected_to bound the period together.
- Scope
alerts:read- Token
- API key or OAuth access token
- Role
- Any workspace member
- MCP tool
list_incidents- What scopes, tokens and roles mean →
Request
cURL
curl "https://api.crawle.io/v1/api/sites/11111111-1111-1111-1111-111111111111/incidents?limit=10" \ -H "Authorization: Bearer $CRAWLE_API_KEY"
JavaScript
const response = await fetch("https://api.crawle.io/v1/api/sites/11111111-1111-1111-1111-111111111111/incidents?limit=10", {
headers: {
Authorization: `Bearer ${process.env.CRAWLE_API_KEY}`,
},
});
const data = await response.json();Python
import os
import requests
response = requests.request(
"GET",
"https://api.crawle.io/v1/api/sites/11111111-1111-1111-1111-111111111111/incidents?limit=10",
headers={
"Authorization": f"Bearer {os.environ['CRAWLE_API_KEY']}",
},
)
data = response.json()$CRAWLE_API_KEY- is an API key from Settings › API keys.
Response 200JSON
{
"items": [
{
"acknowledged_at": "example",
"acknowledged_by": "example",
"affected_count": 1,
"closure_kind": "merged_into_group",
"created_at": "example",
"details": {},
"eligibility_revision": 1,
"escalation_count": 1,
"extra_data": {
"closure_kind": "consumed"
},
"first_detected_at": "example",
"id": 1,
"last_checked_at": "example",
"membership_key": "example",
"membership_revision": "example",
"membership_state": "confirmed",
"redirected_count": 1,
"resolved_at": "example",
"resolved_count": 1,
"restored_count": 1,
"severity": "critical",
"status": "active",
"summary": "example",
"title": "Example",
"trigger_type": "example",
"website_id": 1
}
],
"limit": 1,
"next_cursor": "example",
"offset": 1,
"resolve_selection_count": 1,
"resolve_selection_filter_summary": {},
"resolve_selection_skipped_count": 1,
"resolve_selection_token": "example",
"selection_count": 1,
"selection_filter_summary": {},
"selection_token": "example",
"sort_by": "example",
"total": 1,
"unclassified_count": 1
}Example generated from the API contract.
Parameters
site_idpath · string (uuid)requiredstatusquery · string or null- up to 40 characters
severityquery · string or null- up to 40 characters
trigger_typequery · string or null- up to 120 characters
include_archivedquery · boolean- default false
first_detected_fromquery · string or null- up to 64 characters
first_detected_toquery · string or null- up to 64 characters
limitquery · integer- 1–500 · default 100
offsetquery · integer- 0–100000 · default 0
Pages with limit and offset.
Response 200
itemsarray of PublicIncidentrequiredacknowledged_atstring or nullacknowledged_bystring or nullaffected_countintegerrequiredclosure_kindenum or null- How a resolved incident was closed when that was not a plain recovery. merged_into_group: a broken-link incident folded into a group. alert_exclusion: closed by an alert exclusion. null: a normal recovery, or an incident that is not resolved. The field is absent when the site's crawler predates it. It does not mirror extra_data.closure_kind, which can say more (consumed, unverified_legacy, partially_superseded).one of "merged_into_group", "alert_exclusion"
created_atstring or nulldetailsobject or nulleligibility_revisioninteger or nullescalation_countinteger or nullextra_dataPublicIncidentExtraData or array of any or null- Trigger evidence as the crawler stored it: an object for most triggers, and a list or null for some. For a closed incident it can carry closure_kind.
first_detected_atstring or nullidintegerrequiredlast_checked_atstring or nullmembership_keystring or nullmembership_revisionstring or nullmembership_stateenum or null- confirmed: the count and the page come from one stored snapshot. partial: the count is known but the page could not be read. unavailable: no page list exists for this incident (site-level triggers, broken links; the answer is HTTP 200, not an error), and total is null.one of "confirmed", "partial", "unavailable"
redirected_countinteger or nullresolved_atstring or nullresolved_countinteger or nullrestored_countinteger or nullseverityenumrequired- Incident severity.one of "critical", "warning", "info"
statusenumrequired- Lifecycle status.one of "active", "acknowledged", "resolved"
summarystringrequiredtitlestringrequiredtrigger_typestringrequired- The kind of incident, for example pages_erroring, title_changed, robots_txt_changed or crawl_slowdown. New kinds appear over time; read it as an open string.
website_idintegerrequiredtotalintegerrequiredlimitinteger or nullnext_cursorstring or nulloffsetinteger or nullresolve_selection_countinteger or nullresolve_selection_filter_summaryobject or nullresolve_selection_skipped_countinteger or null- Open incidents a resolve would leave open.
resolve_selection_tokenstring or null- Token for resolving every active or acknowledged incident the filter matches.
selection_countinteger or nullselection_filter_summaryobject or nullselection_tokenstring or null- Token for acknowledging every active incident the filter matches.
sort_bystring or nullunclassified_countinteger or null
Errors
401
- When
- Missing, invalid, or expired token.
403
- When
- The token has none of the accepted scopes (
alerts:read).
422
- When
- The request did not match the schema.
detaillists each problem.
502
- When
- The site's crawler answered outside the contract (
crawler_response_invalid).
429
- When
- Rate limited. Wait for
Retry-Afterseconds.
Generated from the API contract at 7e7039b0b, synced October 30, 2026.