> ## 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 conventions

> Rules every Argus endpoint follows, and how to read the reference pages.

<Warning>
  This reference describes an internal application API. It is accurate for the current code and carries no stability promise. See [API status](/api-status).
</Warning>

## Reading an endpoint page

Each endpoint page starts with two lines.

* **Permission** names the permission key the server checks, and any extra condition such as owning the record.
* **Access** says who can call it: a **browser session only**, a browser session **or a service credential**, or **public**.

The pages are generated from `api-reference/openapi.json`. Each operation also carries two machine-readable extensions, `x-argus-permissions` and `x-argus-access`.

Interactive requests are turned off on this site. The API accepts changes only from its own origin, so a request sent from a documentation page would be refused.

## Requests

| Rule | Detail |
| - | - |
| Base path | `/api` on the deployment's origin |
| Body format | JSON, sent with `Content-Type: application/json` |
| Body size | At most 16 KiB |
| Unknown body properties | Rejected with `400 INVALID_INPUT` |
| Text fields | Trimmed before length rules apply |
| Identifiers | Opaque strings of letters, digits, `_` and `-`, up to 64 characters |
| Roblox and Discord IDs | Strings, never numbers |
| Timestamps in bodies | ISO-8601 with a zone, for example `2026-10-06T19:30:00.000Z` |
| Calendar dates | `YYYY-MM-DD`, used for dates of birth |

Identity never comes from the request. The owner of a character, the officer recording something, the dispatcher making a change: all are taken from the session or credential. A body that tries to name one is rejected as an unknown property.

## Responses

Every response is JSON, is sent with `Cache-Control: no-store`, and carries an `X-Request-Id` header.

```json theme={null}
{ "data": { "id": "cmg5z1inc0009l508inc00001", "number": 142 } }
```

Sign-in and linking endpoints are the exception: they answer with a `302` redirect and cookies.

Timestamps in responses are UTC, ISO-8601, with millisecond precision. Fields that have no value are present and `null`, not omitted, unless the reference says otherwise.

## Lists and paging

List endpoints return an array in `data` and paging state in `meta`.

| Parameter | Default | Range |
| - | - | - |
| `limit` | 25 | 1 to 100 |
| `offset` | 0 | 0 to 10,000 |

```json theme={null}
{ "data": [], "meta": { "limit": 25, "offset": 0, "hasMore": false } }
```

`hasMore` is true when another page exists. There is no total count, except on the live player list, which adds `meta.total`. Paging is by offset, so a record created between two requests can shift items across pages.

Most lists are newest first. The exceptions are stated on their pages: open CAD incidents are ordered by priority, units by callsign, waiting calls and CAD events oldest first, and PNC search results alphabetically.

## Methods

| Method | Used for |
| - | - |
| `GET` | Reading |
| `POST` | Creating, and named actions such as `/close`, `/assign` or `/status` |
| `PATCH` | Partial updates in the civilian, PNC and administration areas |
| `DELETE` | Revoking a service credential and turning Developer Access off |

CAD changes are all `POST` to an action path. Editing an incident or a unit replaces the whole record, so send every field. `PATCH` endpoints change only the fields you send.

Nothing in the records areas is ever deleted. Characters, vehicles, incidents, units, records, warrants and markers are closed, cleared or marked inactive instead, and their histories are append-only.

## Changes are recorded

Changes that matter are written to the audit log in the same transaction as the change itself; if the audit entry cannot be written, the change is rolled back. CAD and the PNC also keep their own permanent histories, available through `GET /cad/events` and `GET /pnc/events`.


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