Acknowledge an alert
The alerts.acknowledge operation: POST /api/v1/alerts/{id}/acknowledge in the REST API and the alerts_acknowledge tool in the MCP server.
/api/v1/alerts/{id}/acknowledgeMarks an alert acked: someone is working on it. It stays unresolved, so if the same problem is raised
again its occurrences go up instead of a new alert appearing. Acknowledging an acknowledged alert changes
nothing; a resolved one answers alert_resolved.
Needs write access to what the alert is about at its legal entity or brand, e.g. registrations:write for
a registration alert (tax managers, owners, admins) or ledger:write for a ledger alert (finance).
At a glance
- REST:
POST /api/v1/alerts/{id}/acknowledge - MCP tool:
alerts_acknowledge - Operation ID:
alerts.acknowledge - Scope: Organization
- Permission:
org:read - Risk tier:
write - Dry run: Supported (send
Ownrecord-Dry-Run: true) - Idempotency:
Idempotency-Keyrequired - Modes: Test and live
- Authentication: API key with the
org:readscope - Since: M7
Request
Path parameters
| Field | Type | Description |
|---|---|---|
id | alr_… ID |
Body
This operation takes no body.
Response
200 OK with a JSON object:
| Field | Type | Description |
|---|---|---|
id | alr_… ID | |
object | "alert" | |
code | string | |
severity | one of info, high, critical | |
family | one of 14 values, e.g. registrations, filings, ledger (all in the OpenAPI document) | |
message | string | |
link | string | |
entityId | ent_… ID or null | |
brandId | brd_… ID or null | |
livemode | boolean | |
status | one of open, acked, resolved | |
occurrences | integer (at least 1) | |
lastRaisedAt | date-time | |
acknowledgedAt | date-time or null | |
acknowledgedBy | string or null | |
resolvedAt | date-time or null | |
resolvedBy | string or null | |
delivery | object | |
delivery.status | one of none, pending, delivered, failed | |
delivery.attempts | integer (at least 0) | |
delivery.lastError | string or null | |
delivery.email | object | |
delivery.email.sent | integer (at least 0) | |
delivery.email.failed | integer (at least 0) | |
delivery.slack | array of object | |
delivery.slack[].channelId | string | |
delivery.slack[].status | one of sent, failed | |
delivery.slack[].at | date-time | |
delivery.slack[].error | string or null | |
createdAt | date-time | |
updatedAt | date-time | |
version | integer (at least 1) |
Examples
Take on an automatic block
POST /api/v1/alerts/alr_01m4ttwd3veh9apbewxheq5xab/acknowledge
Authorization: Bearer or_test_…
Idempotency-Key: 3f1c9a52-7d0e-4b8f-9a61-0c2d5e8b7f14
Response (200):
{
"id": "alr_01m4ttwd3veh9apbewxheq5xab",
"object": "alert",
"code": "REG_AUTO_BLOCKED",
"severity": "critical",
"family": "registrations",
"message": "EU_OSS_NON_UNION was blocked for new consumer sales on 2026-11-07: the grace deadline 2026-11-10 is near and no application was submitted.",
"link": "/console/acme/e/acme-hr/jurisdictions/EU_OSS_NON_UNION",
"entityId": "ent_01m4ttwd3veh9apbewxheq5xh4",
"brandId": null,
"livemode": true,
"status": "acked",
"occurrences": 1,
"lastRaisedAt": "2026-10-13T12:00:00.000Z",
"acknowledgedAt": "2026-10-13T12:30:00.000Z",
"acknowledgedBy": "usr_01m4ttwd3veh9apbewxheq5xh6",
"resolvedAt": null,
"resolvedBy": null,
"delivery": {
"status": "delivered",
"attempts": 1,
"lastError": null,
"email": {
"sent": 2,
"failed": 0
},
"slack": [
{
"channelId": "sec_01m4ttwd3veh9apbewxheq5xad",
"status": "sent",
"at": "2026-10-13T12:00:00.000Z",
"error": null
}
]
},
"createdAt": "2026-10-13T12:00:00.000Z",
"updatedAt": "2026-10-13T12:30:00.000Z",
"version": 2
}
Errors
| Code | HTTP status | When | What to do |
|---|---|---|---|
resource_not_found | 404 | No alert with this ID that you may see, in this organization and mode. | Check the ID and that your credentials are scoped to the right organization, entity, brand and mode. |
alert_resolved | 409 | The alert is already resolved. | Nothing to acknowledge: the alert is closed. If the problem happens again, a new alert is raised. |
permission_denied | 403 | Your role may see the alert but not act on what it is about. | Ask an organization owner or admin for a role or scope that allows this action. |
version_conflict | 409 | The alert changed at the same moment; retry. | Fetch the object again and retry the change. |
It can also return these common errors: validation_failed, api_version_unsupported, invalid_json, unsupported_media_type, authentication_required, api_key_invalid, idempotency_key_required, idempotency_key_reused, idempotency_in_progress, approval_required, approval_rejected, approval_expired, stale_approval, approval_policy_denied, rate_limited, internal_error.