> ## Documentation Index
> Fetch the complete documentation index at: https://docs.lmrp.uk/llms.txt
> Use this file to discover all available pages before exploring further.

# API status

> What the Argus API covers today, what it deliberately does not promise, known rough edges, and what has changed.

## Stability

<Warning>
  The Argus API is **internal and unversioned**. It serves the Argus web application and the community's own integrations. Any release can change a path, a field or a rule without notice. Nothing here is a commitment to third parties.
</Warning>

This documentation describes the code as of **6 October 2026**. It was checked against the running router: every documented operation was called, and every response was compared with its documented shape.

## What is implemented

86 operations.

| Area | Operations | State |
| - | - | - |
| Authentication, current user, Developer Access | 8 | Implemented. Developer Access is temporary. |
| CAD: incidents | 8 | Implemented |
| CAD: units and crew | 6 | Implemented |
| CAD: calls | 5 | Implemented, manual entry only |
| CAD: events | 1 | Implemented |
| MDT self-service | 6 | Implemented, newest part of the API |
| Civilians | 8 | Implemented |
| PNC | 19 | Implemented |
| Staff and shifts | 6 | Implemented |
| Sessions | 3 | Implemented |
| Moderation and audit | 5 | Implemented |
| Administration | 8 | Implemented |
| ER:LC | 3 | Server status and players only |

## Known limits and rough edges

These are true of the current implementation. Clients should allow for them.

**Across the API**

* No versioning, no CORS, and no webhooks or push. Clients poll.
* Paging is by offset, capped at 10,000. There are no cursors and no total counts.
* Only moderation accepts an idempotency key. Retrying any other create request can create a second record.

**CAD**

* CAD changes are `POST` to action paths and replace whole records; the rest of the API uses `PATCH` for partial updates.
* CAD list endpoints ignore unknown query parameters. Everywhere else they are rejected.
* `GET /cad/events` returns oldest first. Combined with the offset cap, the newest entries of a very long global history cannot be reached without filtering by incident or unit.
* There is no endpoint for a single unit or a single call. Read them from their lists, or from an incident.
* A call cannot be detached from an incident once attached.
* Closing an incident records no outcome, and a closed incident no longer lists the units that attended. Read its events instead.
* Assigning a unit or attaching a call advances the incident's `version`, which makes open edit forms stale. See [Optimistic concurrency](/concepts/optimistic-concurrency).
* Simultaneous changes can fail with a generic `409 CONFLICT`. Nothing is retried for you.
* Incident type, location and agency code are free text.

**MDT**

* A crew learns of a dispatch by polling `GET /cad/me/unit`.
* A crew cannot clear its own incident; only Control can release a unit.

**Civilians and PNC**

* `EXPIRED` licences and warrants are worked out when read. Nothing is written to history at the moment of expiry.
* Markers can only be placed on people and vehicles that are on record.
* Members can transfer a vehicle only between their own characters.
* Service credentials can read the PNC but cannot make official changes.

**Identity and administration**

* A linked Roblox account cannot be unlinked or moved through the API.
* The `staff.manage` permission exists in the catalogue but no endpoint checks it. Changing staff membership needs `admin.manage`.
* The role list returns permissions as objects, while creating or replacing a role returns them as plain keys.

**ER:LC**

* Only the server summary and the player list are exposed. There is no queue list (only a count), no in-game staff list endpoint beyond the summary, and no vehicles, emergency calls or logs.
* Kicks and bans need the player to be in the server. Offline bans are not supported.

## Planned, not implemented

<Note>
  Nothing in this section exists in the API. It is listed so that readers do not go looking for it.
</Note>

* Ingesting emergency calls from ER:LC, and suggesting the nearest unit
* A live map, unit locations and structured addresses
* A panic button and priority alerts
* Linking incidents to PNC people and vehicles
* Department management: agencies, subdivisions and certifications
* Unit vehicles and radio groups

## Changelog

| Date | Change |
| - | - |
| 6 October 2026 | MDT self-service added: current unit, units on duty, book on, join, status, book off. Unit crew became linked Argus users with membership history; Control's crew lists now take user IDs. Added eligible-crew and crew-history endpoints, a `status` filter on units, the `RESPONSE` unit type and the `cad.unit.self` permission. |
| 6 October 2026 | Developer Access added as temporary internal tooling. `GET /me` gained `developerAccess`. |
| 6 October 2026 | CAD added: incidents, units, calls and events. |
| 5 October 2026 | Civilian portal and PNC added: characters, licences, vehicles, records, warrants, markers and record history. Every signed-in account now holds `civilians.create` and `civilians.manage_own`. |
| 4 October 2026 | First version: Discord sign-in, Roblox linking, staff, sessions, shifts, moderation, audit, administration, service credentials and ER:LC status. |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.