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

# List CAD events

> **Permission:** `cad.view`.

**Access:** Browser session, or a service credential holding the permission as a scope.

The append-only operational history, **oldest first**. Filter to one incident or one unit for its timeline; with no filter it is the global history from the beginning. Each event was written with an audit entry in the same transaction.

Unknown query parameters are ignored.



## OpenAPI

````yaml /api-reference/openapi.json get /cad/events
openapi: 3.1.0
info:
  title: Argus API
  version: 0.1.0
  summary: The HTTP API behind the Argus web application.
  description: >-
    Argus is the operations platform for the UK London Mayfair ER:LC community.
    This document describes the API its own web application uses.


    **This is an internal application API.** It is not a stable public API:
    paths, fields and behaviour can change with any release, there is no
    versioning, and browser requests are tied to the application's own origin.
    Scoped service credentials exist for the community's own integrations.


    All paths are relative to `/api` on the deployment's origin. Responses are
    JSON, never cacheable, and carry an `X-Request-Id` header.
servers:
  - url: http://localhost:3000/api
    description: Local development
  - url: '{origin}/api'
    description: A deployment. `origin` is that deployment's `APP_URL`.
    variables:
      origin:
        default: https://argus.example.org
        description: The application's public origin, with no trailing slash.
security: []
tags:
  - name: Authentication
    description: >-
      Discord sign-in, Roblox account linking, the current user, and temporary
      Developer Access.
  - name: CAD Incidents
    description: >-
      Control's incidents: creation, editing, closure, and dispatching units to
      them.
  - name: CAD Units
    description: Control's view of operational units and their crew.
  - name: CAD Calls
    description: Incoming calls and how they become, or join, incidents.
  - name: CAD Events
    description: The append-only operational history.
  - name: MDT
    description: >-
      Self-service for the people crewing a unit: booking on and off, joining a
      unit, and changing its status.
  - name: Civilians
    description: 'The civilian portal: a member''s own characters, licences and vehicles.'
  - name: PNC Lookup
    description: >-
      Searching people and vehicles, full records, record history and official
      vehicle status.
  - name: PNC Licences
    description: Official changes to driving licences.
  - name: PNC Records
    description: Official records attached to people.
  - name: PNC Warrants
    description: Warrants and their lifecycle.
  - name: PNC Markers
    description: Markers and BOLOs on people and vehicles.
  - name: Staff
    description: Staff profiles and role membership.
  - name: Shifts
    description: Staff shifts.
  - name: Sessions
    description: Operational roleplay sessions.
  - name: Moderation
    description: Warnings, kicks and bans, with their delivery state.
  - name: Audit
    description: The append-only audit log.
  - name: Administration
    description: Accounts, roles and service credentials.
  - name: ERLC
    x-displayName: ER:LC
    description: Live data from the ER:LC private server.
paths:
  /cad/events:
    get:
      tags:
        - CAD Events
      summary: List CAD events
      description: >-
        **Permission:** `cad.view`.


        **Access:** Browser session, or a service credential holding the
        permission as a scope.


        The append-only operational history, **oldest first**. Filter to one
        incident or one unit for its timeline; with no filter it is the global
        history from the beginning. Each event was written with an audit entry
        in the same transaction.


        Unknown query parameters are ignored.
      operationId: listCadEvents
      parameters:
        - name: incidentId
          in: query
          required: false
          schema:
            $ref: '#/components/schemas/Id'
          description: Events for this incident.
        - name: unitId
          in: query
          required: false
          schema:
            $ref: '#/components/schemas/Id'
          description: Events for this unit.
        - $ref: '#/components/parameters/Limit'
        - $ref: '#/components/parameters/Offset'
      responses:
        '200':
          description: Success.
          headers:
            X-Request-Id:
              $ref: '#/components/headers/RequestId'
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/CadEvent'
                  meta:
                    $ref: '#/components/schemas/PageMeta'
                required:
                  - data
                  - meta
              example:
                data:
                  - id: cmg5z5evt000el508evt00001
                    sequence: 318
                    type: UNIT_ASSIGNED
                    incidentId: cmg5z1inc0009l508inc00001
                    unitId: cmg5z2unt000al508unt00001
                    callId: null
                    auditId: cmg5y5aud0008l508aud00001
                    detail:
                      callsign: MO12
                      from: AVAILABLE
                      to: ASSIGNED
                    createdAt: '2026-10-06T19:42:10.000Z'
                    actor: Dana Dispatcher
                meta:
                  limit: 25
                  offset: 0
                  hasMore: false
        '400':
          description: >-
            `INVALID_INPUT`: a parameter or body field fails validation;
            `details` lists each problem.
          headers:
            X-Request-Id:
              $ref: '#/components/headers/RequestId'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error:
                  code: INVALID_INPUT
                  message: Request validation failed.
                  details:
                    - path:
                        - incidentId
                      message: Invalid input
                requestId: 3f1c9d5e-7a42-4f0b-9c1e-8b6d2a4e5f70
        '401':
          $ref: '#/components/responses/Unauthenticated'
        '403':
          description: |-
            `FORBIDDEN`: the caller lacks `cad.view`.

            `ACCOUNT_DISABLED`: the account is suspended or disabled.
          headers:
            X-Request-Id:
              $ref: '#/components/headers/RequestId'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error:
                  code: FORBIDDEN
                  message: 'Permission required: cad.view.'
                requestId: 3f1c9d5e-7a42-4f0b-9c1e-8b6d2a4e5f70
        '429':
          $ref: '#/components/responses/RateLimited'
        default:
          $ref: '#/components/responses/UnexpectedError'
      security:
        - sessionCookie: []
        - serviceCredential: []
components:
  schemas:
    Id:
      type: string
      minLength: 1
      maxLength: 64
      pattern: ^[a-zA-Z0-9_-]+$
      description: Argus record identifier.
    CadEvent:
      type: object
      properties:
        id:
          $ref: '#/components/schemas/Id'
        sequence:
          type: integer
          description: Global ordering of CAD events.
        type:
          type: string
          enum:
            - UNIT_BOOKED_ON
            - CREW_JOINED
            - CREW_LEFT
            - UNIT_BOOKED_OFF
            - INCIDENT_CREATED
            - INCIDENT_UPDATED
            - PRIORITY_CHANGED
            - INCIDENT_CLOSED
            - INCIDENT_REOPENED
            - UNIT_CREATED
            - UNIT_UPDATED
            - UNIT_ASSIGNED
            - UNIT_REMOVED
            - UNIT_STATUS_CHANGED
            - CALL_RECORDED
            - CALL_ATTACHED
            - CALL_RESOLVED
        incidentId:
          anyOf:
            - $ref: '#/components/schemas/Id'
            - type: 'null'
        unitId:
          anyOf:
            - $ref: '#/components/schemas/Id'
            - type: 'null'
        callId:
          anyOf:
            - $ref: '#/components/schemas/Id'
            - type: 'null'
        auditId:
          $ref: '#/components/schemas/Id'
        detail:
          type: object
          description: Event-specific data such as previous and new values.
        createdAt:
          type: string
          format: date-time
        actor:
          type: string
          description: >-
            Display name of the user, name of the service credential, or
            `System`.
      required:
        - id
        - sequence
        - type
        - incidentId
        - unitId
        - callId
        - auditId
        - detail
        - createdAt
        - actor
    PageMeta:
      type: object
      properties:
        limit:
          type: integer
        offset:
          type: integer
        hasMore:
          type: boolean
          description: Whether another page exists after this one.
      required:
        - limit
        - offset
        - hasMore
    Error:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              description: Stable machine-readable code.
            message:
              type: string
            details:
              description: >-
                Present on some errors. Validation failures carry an array of
                `{path, message}`; ER:LC failures carry `{availability:
                "unavailable"}`.
          required:
            - code
            - message
        requestId:
          type: string
          format: uuid
          description: >-
            Also sent as the `X-Request-Id` header. Quote it when reporting a
            problem.
      required:
        - error
        - requestId
  parameters:
    Limit:
      name: limit
      in: query
      required: false
      schema:
        type: integer
        minimum: 1
        maximum: 100
        default: 25
      description: Page size.
    Offset:
      name: offset
      in: query
      required: false
      schema:
        type: integer
        minimum: 0
        maximum: 10000
        default: 0
      description: Number of items to skip.
  headers:
    RequestId:
      schema:
        type: string
        format: uuid
      description: Identifies this request in server logs.
    RetryAfter:
      schema:
        type: integer
        minimum: 1
      description: Seconds to wait before trying again.
  responses:
    Unauthenticated:
      description: >-
        `UNAUTHENTICATED`: no session cookie, or an invalid, expired or revoked
        service credential.


        `SESSION_EXPIRED`: the session has ended.
      headers:
        X-Request-Id:
          $ref: '#/components/headers/RequestId'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error:
              code: UNAUTHENTICATED
              message: Sign in to continue.
            requestId: 3f1c9d5e-7a42-4f0b-9c1e-8b6d2a4e5f70
    RateLimited:
      description: >-
        `RATE_LIMITED`: more than 180 reads or 60 writes in a minute for this
        caller.
      headers:
        X-Request-Id:
          $ref: '#/components/headers/RequestId'
        Retry-After:
          $ref: '#/components/headers/RetryAfter'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error:
              code: RATE_LIMITED
              message: Too many requests.
            requestId: 3f1c9d5e-7a42-4f0b-9c1e-8b6d2a4e5f70
    UnexpectedError:
      description: >-
        Any other failure, in the same error envelope: `INTERNAL_ERROR` (500),
        `METHOD_NOT_ALLOWED` (405), `BODY_TOO_LARGE` (413, over 16 KiB) or
        `UNSUPPORTED_MEDIA_TYPE` (415, body not sent as `application/json`).
      headers:
        X-Request-Id:
          $ref: '#/components/headers/RequestId'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error:
              code: INTERNAL_ERROR
              message: The request could not be completed.
            requestId: 3f1c9d5e-7a42-4f0b-9c1e-8b6d2a4e5f70
  securitySchemes:
    sessionCookie:
      type: apiKey
      in: cookie
      name: __Host-argus-session
      description: >-
        The opaque session cookie set by Discord sign-in. Named `argus-session`
        outside production. HttpOnly, so scripts cannot read it; same-origin
        requests send it automatically. Requests other than GET must also carry
        an `Origin` header equal to the application's own origin.
    serviceCredential:
      type: http
      scheme: bearer
      bearerFormat: argus_ followed by 43 URL-safe characters
      description: >-
        A scoped credential issued by an administrator for the community's own
        integrations. Its scopes are permission keys. It expires within 90 days,
        can be revoked, and cannot call endpoints that need a signed-in user.

````

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