End an announcement
The platform.announcements.end operation: POST /api/v1/platform/announcements/{id}/end in the REST API and the platform_announcements_end tool in the MCP server.
POST
/api/v1/platform/announcements/{id}/endStops showing an announcement now (spec §39.1). It stays in the list with when and by whom it was ended. Ending an announcement that already ended changes nothing. Platform admins only.
At a glance
- REST:
POST /api/v1/platform/announcements/{id}/end - MCP tool:
platform_announcements_end - Operation ID:
platform.announcements.end - Scope: Platform
- Permission:
platform:write - Risk tier:
write - Dry run: Supported (send
Ownrecord-Dry-Run: true) - Idempotency:
Idempotency-Keyrequired - Modes: Test and live
- Authentication: API key with the
platform:writescope - Since: M12
Request
Path parameters
| Field | Type | Description |
|---|---|---|
id | string | The announcement's slug. |
Body
This operation takes no body.
Response
200 OK with a JSON object:
| Field | Type | Description |
|---|---|---|
object | "platform_announcement" | |
id | string | The announcement's slug. |
message | string | |
severity | one of info, warning, critical | |
link | string or null | |
audience | object | |
startsAt | date-time | |
endsAt | date-time or null | |
endedAt | date-time or null | |
endedBy | usr_… ID or null | |
current | boolean | Whether it shows now. |
state | one of scheduled, showing, finished, ended | scheduled (starts later), showing, finished (past endsAt) or ended (by staff). |
createdBy | usr_… ID | |
createdAt | date-time | |
version | integer |
Examples
End the maintenance notice early
HTTP
POST /api/v1/platform/announcements/maintenance-2026-11-08/end
Authorization: Bearer or_test_…
Idempotency-Key: 3f1c9a52-7d0e-4b8f-9a61-0c2d5e8b7f14
Response (200):
JSON
{
"object": "platform_announcement",
"id": "maintenance-2026-11-08",
"message": "Planned maintenance on Sunday, November 8, 02:00–02:30 UTC. Checkout and the API stay up.",
"severity": "info",
"link": "/docs",
"audience": {
"kind": "all"
},
"startsAt": "2026-11-05T00:00:00.000Z",
"endsAt": "2026-11-08T03:00:00.000Z",
"endedAt": "2026-11-08T02:31:00.000Z",
"endedBy": "usr_01m5wvkry1e6w94sjxgme33fsa",
"current": false,
"state": "ended",
"createdBy": "usr_01m5wvkry1e6w94sjxgme33fsa",
"createdAt": "2026-11-03T09:00:00.000Z",
"version": 2
}
Errors
| Code | HTTP status | When | What to do |
|---|---|---|---|
resource_not_found | 404 | No announcement has this ID. | Check the ID and that your credentials are scoped to the right organization, entity, brand and mode. |
version_conflict | 409 | The announcement changed at the same time; retry. | Fetch the object again and retry the change. |
permission_denied | 403 | You aren't a platform admin. | Ask an organization owner or admin for a role or scope that allows this action. |
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, rate_limited, internal_error.