# Status

Base URL: `https://api.brixsignage.com`. Send `Authorization: Bearer $BRIX_API_KEY` unless an operation says Auth: none.

## GET /v1/status

Get platform status

Get the current platform status, including overall state, 30-day latency attainment, open and recent published incidents, and a 90-day history strip. This endpoint requires no authentication. If the underlying status data is more than three hours old, the state is reported as `unknown` rather than `operational`. Pass `format=text` for a plain-text response.

**Notes.**
- Answers 200 during an outage too: the state is in the body.
- With `format=text` the body is `text/plain`.

Auth: none.

Parameters:

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `format` | query | "text" | no | `text` answers a plain-text summary instead of JSON. |

```bash
curl "https://api.brixsignage.com/v1/status"
```

Response 200: Success.

| Field | Type | Description |
| --- | --- | --- |
| `data` | object |  |
| `data.state` | "operational" \| "degraded" \| "outage" \| "unknown" |  |
| `data.computedAt` | string \| null | When the status was measured; null when never. |
| `data.stale` | boolean | True when the measurement is more than three hours old (the state is then `unknown`). |
| `data.latency` | object \| null |  |
| `data.incidents` | array of StatusIncident | Open incidents. |
| `data.incidents[].id` | string |  |
| `data.incidents[].title` | string |  |
| `data.incidents[].status` | "investigating" \| "identified" \| "monitoring" \| "resolved" |  |
| `data.incidents[].impact` | "degraded" \| "outage" \| "none" |  |
| `data.incidents[].startedAt` | string | ISO-8601 timestamp (UTC). |
| `data.incidents[].resolvedAt` | string \| null |  |
| `data.incidents[].updates` | array of object | Oldest first. |
| `data.incidents[].updates[].at` | string | ISO-8601 timestamp (UTC). |
| `data.incidents[].updates[].status` | "investigating" \| "identified" \| "monitoring" \| "resolved" |  |
| `data.incidents[].updates[].message` | string |  |
| `data.incidents[].screensPlaying` | boolean \| null | Whether screens kept playing during the incident; null when not stated. |
| `data.recent` | array of StatusIncident | Recently resolved incidents. |
| `data.recent[].id` | string |  |
| `data.recent[].title` | string |  |
| `data.recent[].status` | "investigating" \| "identified" \| "monitoring" \| "resolved" |  |
| `data.recent[].impact` | "degraded" \| "outage" \| "none" |  |
| `data.recent[].startedAt` | string | ISO-8601 timestamp (UTC). |
| `data.recent[].resolvedAt` | string \| null |  |
| `data.recent[].updates` | array of object | Oldest first. |
| `data.recent[].updates[].at` | string | ISO-8601 timestamp (UTC). |
| `data.recent[].updates[].status` | "investigating" \| "identified" \| "monitoring" \| "resolved" |  |
| `data.recent[].updates[].message` | string |  |
| `data.recent[].screensPlaying` | boolean \| null | Whether screens kept playing during the incident; null when not stated. |
| `data.days` | array of object | One entry per day, for the last 90 days. |
| `data.days[].date` | string | `YYYY-MM-DD`. |
| `data.days[].state` | "operational" \| "degraded" \| "outage" |  |

Response 401: Missing, expired or revoked bearer token.

| Field | Type | Description |
| --- | --- | --- |
| `error` | string | Machine-readable code: `unauthorized`, `forbidden`, `not_found`, `validation_error`, `conflict`, `rate_limited`, `internal_error`, … |
| `message` | string | Human-readable explanation. Safe to show an operator. |
| `requestId` | string | Present on 5xx: quote it to support. |

Response 5XX: Server error. The body carries a `requestId` to quote to support.

| Field | Type | Description |
| --- | --- | --- |
| `error` | string | Machine-readable code: `unauthorized`, `forbidden`, `not_found`, `validation_error`, `conflict`, `rate_limited`, `internal_error`, … |
| `message` | string | Human-readable explanation. Safe to show an operator. |
| `requestId` | string | Present on 5xx: quote it to support. |

## GET /v1/status/deprecations

List API deprecations

List every API route scheduled for retirement, when it stops working, and its replacement. This endpoint requires no authentication and is safe to poll from a script. An empty list means no routes are currently scheduled for retirement.

Auth: none.

```bash
curl "https://api.brixsignage.com/v1/status/deprecations"
```

Response 200: Success.

| Field | Type | Description |
| --- | --- | --- |
| `data` | object |  |
| `data.noticeDays` | integer | The minimum notice a retired route gets. |
| `data.policy` | string |  |
| `data.deprecations` | array of object |  |
| `data.deprecations[].route` | string | `METHOD /path`. |
| `data.deprecations[].announced` | string | Date (`YYYY-MM-DD`) it was listed. |
| `data.deprecations[].sunset` | string | Date (`YYYY-MM-DD`) it stops working. |
| `data.deprecations[].replacement` | string \| null |  |
| `data.deprecations[].why` | string |  |
| `data.deprecations[].noticeDays` | integer | Days between `announced` and `sunset`. |

Response 401: Missing, expired or revoked bearer token.

| Field | Type | Description |
| --- | --- | --- |
| `error` | string | Machine-readable code: `unauthorized`, `forbidden`, `not_found`, `validation_error`, `conflict`, `rate_limited`, `internal_error`, … |
| `message` | string | Human-readable explanation. Safe to show an operator. |
| `requestId` | string | Present on 5xx: quote it to support. |

Response 5XX: Server error. The body carries a `requestId` to quote to support.

| Field | Type | Description |
| --- | --- | --- |
| `error` | string | Machine-readable code: `unauthorized`, `forbidden`, `not_found`, `validation_error`, `conflict`, `rate_limited`, `internal_error`, … |
| `message` | string | Human-readable explanation. Safe to show an operator. |
| `requestId` | string | Present on 5xx: quote it to support. |
