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

# Get a person's record

> **Permission:** `pnc.view`.

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

The full person record: profile, official licence, current vehicles, active markers, active warrants and counts. The owner's private notes are never included. `owner` appears only for callers with `civilians.manage`.



## OpenAPI

````yaml /api-reference/openapi.json get /pnc/civilians/{id}
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:
  /pnc/civilians/{id}:
    get:
      tags:
        - PNC Lookup
      summary: Get a person's record
      description: >-
        **Permission:** `pnc.view`.


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


        The full person record: profile, official licence, current vehicles,
        active markers, active warrants and counts. The owner's private notes
        are never included. `owner` appears only for callers with
        `civilians.manage`.
      operationId: getPersonRecord
      parameters:
        - name: id
          in: path
          required: true
          schema:
            $ref: '#/components/schemas/Id'
          description: Civilian ID.
      responses:
        '200':
          description: Success.
          headers:
            X-Request-Id:
              $ref: '#/components/headers/RequestId'
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/PncCivilian'
                required:
                  - data
              example:
                data:
                  id: cmg6a1civ000fl508civ00001
                  reference: CIV-000123
                  fullName: Amelia Hart
                  dateOfBirth: '1990-04-12'
                  gender: FEMALE
                  address: 14 Curzon Street, Mayfair
                  phone: 020 7946 0000
                  occupation: Chauffeur
                  imageUrl: null
                  status: ACTIVE
                  createdAt: '2026-10-06T19:30:00.000Z'
                  updatedAt: '2026-10-06T19:30:00.000Z'
                  licence:
                    id: cmg6a2lic000hl508lic00001
                    number: HART9144223PA85
                    categories:
                      - B
                    status: VALID
                    suspendedUntil: null
                    issuedAt: '2026-10-06T19:30:00.000Z'
                    expiresAt: '2036-10-06T19:30:00.000Z'
                    points: 3
                    endorsements:
                      - id: cmg6a3end000il508end00001
                        code: SP30
                        reason: Exceeding 30 mph limit
                        points: 3
                        createdAt: '2026-10-06T19:42:10.000Z'
                        expiresAt: null
                        active: true
                        issuedBy:
                          id: cmg5x1k2a0000l508a1b2c3d4
                          displayName: Olivia Officer
                        removedAt: null
                        removedBy: null
                        removalReason: null
                        record:
                          id: cmg6a5rec000kl508rec00001
                          reference: REC-000045
                  vehicles:
                    - id: cmg6a4veh000jl508veh00001
                      plate: LK21ABC
                      make: BMW
                      model: 3 Series
                      colour: Black
                      type: CAR
                      registrationStatus: REGISTERED
                      insuranceStatus: INSURED
                      motStatus: VALID
                      taxStatus: TAXED
                      createdAt: '2026-10-06T19:30:00.000Z'
                      updatedAt: '2026-10-06T19:30:00.000Z'
                      stolen: false
                      alerts:
                        markers: 0
                      keeper:
                        id: cmg6a1civ000fl508civ00001
                        reference: CIV-000123
                        fullName: Amelia Hart
                  markers:
                    - id: cmg6a7mrk000ml508mrk00001
                      reference: MRK-000012
                      type: WANTED
                      civilian:
                        id: cmg6a1civ000fl508civ00001
                        reference: CIV-000123
                        fullName: Amelia Hart
                      vehicle: null
                      reason: Wanted for robbery at Mount Street
                      details: null
                      issuedBy:
                        id: cmg5x1k2a0000l508a1b2c3d4
                        displayName: Olivia Officer
                      createdAt: '2026-10-06T19:30:00.000Z'
                      expiresAt: null
                      active: true
                      clearedAt: null
                      clearedBy: null
                      clearReason: null
                  warrants:
                    - id: cmg6a6war000ll508war00001
                      reference: WAR-000007
                      civilian:
                        id: cmg6a1civ000fl508civ00001
                        reference: CIV-000123
                        fullName: Amelia Hart
                      reason: Failing to appear at court
                      details: null
                      status: ACTIVE
                      issuedBy:
                        id: cmg5x1k2a0000l508a1b2c3d4
                        displayName: Olivia Officer
                      issuedAt: '2026-10-06T19:30:00.000Z'
                      expiresAt: null
                      closedAt: null
                      closedBy: null
                      closeNote: null
                      updatedAt: '2026-10-06T19:30:00.000Z'
                  counts:
                    records: 1
                    warrants: 1
                    markers: 1
        '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:
                        - limit
                      message: Invalid input
                requestId: 3f1c9d5e-7a42-4f0b-9c1e-8b6d2a4e5f70
        '401':
          $ref: '#/components/responses/Unauthenticated'
        '403':
          description: |-
            `FORBIDDEN`: the caller lacks `pnc.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: pnc.view.'
                requestId: 3f1c9d5e-7a42-4f0b-9c1e-8b6d2a4e5f70
        '404':
          description: '`NOT_FOUND`: no such person.'
          headers:
            X-Request-Id:
              $ref: '#/components/headers/RequestId'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error:
                  code: NOT_FOUND
                  message: Civilian not found.
                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.
    PncCivilian:
      type: object
      properties:
        id:
          $ref: '#/components/schemas/Id'
        reference:
          type: string
          pattern: ^CIV-[0-9]{6,}$
          description: Human-facing civilian ID.
        fullName:
          type: string
        dateOfBirth:
          type: string
          format: date
          description: Calendar date, `YYYY-MM-DD`.
        gender:
          type: string
          enum:
            - MALE
            - FEMALE
            - NON_BINARY
            - UNSPECIFIED
        address:
          type: string
        status:
          type: string
          enum:
            - ACTIVE
            - INACTIVE
            - DECEASED
        phone:
          type:
            - string
            - 'null'
        occupation:
          type:
            - string
            - 'null'
        imageUrl:
          type:
            - string
            - 'null'
          format: uri
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
        owner:
          $ref: '#/components/schemas/Person'
          description: >-
            The owning account. Present only for readers who hold
            `civilians.manage`.
        licence:
          anyOf:
            - $ref: '#/components/schemas/OfficialLicence'
            - type: 'null'
        vehicles:
          type: array
          items:
            $ref: '#/components/schemas/PncVehicleSummary'
        markers:
          type: array
          items:
            $ref: '#/components/schemas/Marker'
          description: Active markers only.
        warrants:
          type: array
          items:
            $ref: '#/components/schemas/Warrant'
          description: Active warrants only.
        counts:
          type: object
          properties:
            records:
              type: integer
            warrants:
              type: integer
            markers:
              type: integer
          required:
            - records
            - warrants
            - markers
      required:
        - id
        - reference
        - fullName
        - dateOfBirth
        - gender
        - address
        - status
        - phone
        - occupation
        - imageUrl
        - createdAt
        - updatedAt
        - licence
        - vehicles
        - markers
        - warrants
        - counts
    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
    Person:
      type: object
      properties:
        id:
          $ref: '#/components/schemas/Id'
        displayName:
          type: string
      required:
        - id
        - displayName
      description: A minimal reference to an Argus user.
    OfficialLicence:
      type: object
      properties:
        id:
          $ref: '#/components/schemas/Id'
        number:
          type: string
        categories:
          type: array
          items:
            type: string
            enum:
              - A
              - B
              - C
              - D
        status:
          type: string
          enum:
            - VALID
            - EXPIRED
            - SUSPENDED
            - REVOKED
          description: >-
            Worked out when read: a licence past `expiresAt` reads `EXPIRED`,
            and a suspension past `suspendedUntil` has lapsed.
        suspendedUntil:
          type:
            - string
            - 'null'
          format: date-time
        issuedAt:
          type: string
          format: date-time
        expiresAt:
          type: string
          format: date-time
        points:
          type: integer
          description: Sum of endorsements that are neither removed nor expired.
        endorsements:
          type: array
          items:
            $ref: '#/components/schemas/OfficialEndorsement'
      required:
        - id
        - number
        - categories
        - status
        - suspendedUntil
        - issuedAt
        - expiresAt
        - points
        - endorsements
      description: >-
        A driving licence as the PNC shows it, including removed endorsements
        and who recorded each.
    PncVehicleSummary:
      allOf:
        - $ref: '#/components/schemas/Vehicle'
        - type: object
          properties:
            stolen:
              type: boolean
              description: True while an active `STOLEN_VEHICLE` marker exists.
            alerts:
              type: object
              properties:
                markers:
                  type: integer
              required:
                - markers
            keeper:
              anyOf:
                - $ref: '#/components/schemas/CivilianRef'
                - type: 'null'
          required:
            - stolen
            - alerts
            - keeper
    Marker:
      type: object
      properties:
        id:
          $ref: '#/components/schemas/Id'
        reference:
          type: string
          pattern: ^MRK-[0-9]{6,}$
        type:
          type: string
          enum:
            - PERSON_BOLO
            - VEHICLE_BOLO
            - WANTED
            - MISSING_PERSON
            - OFFICER_SAFETY
            - STOLEN_VEHICLE
            - GENERAL
        civilian:
          anyOf:
            - $ref: '#/components/schemas/CivilianRef'
            - type: 'null'
        vehicle:
          anyOf:
            - $ref: '#/components/schemas/VehicleRef'
            - type: 'null'
        reason:
          type: string
        details:
          type:
            - string
            - 'null'
        issuedBy:
          $ref: '#/components/schemas/Person'
        createdAt:
          type: string
          format: date-time
        expiresAt:
          type:
            - string
            - 'null'
          format: date-time
        active:
          type: boolean
          description: False once cleared or past `expiresAt`.
        clearedAt:
          type:
            - string
            - 'null'
          format: date-time
        clearedBy:
          anyOf:
            - $ref: '#/components/schemas/Person'
            - type: 'null'
        clearReason:
          type:
            - string
            - 'null'
      required:
        - id
        - reference
        - type
        - civilian
        - vehicle
        - reason
        - details
        - issuedBy
        - createdAt
        - expiresAt
        - active
        - clearedAt
        - clearedBy
        - clearReason
    Warrant:
      type: object
      properties:
        id:
          $ref: '#/components/schemas/Id'
        reference:
          type: string
          pattern: ^WAR-[0-9]{6,}$
        civilian:
          $ref: '#/components/schemas/CivilianRef'
        reason:
          type: string
        details:
          type:
            - string
            - 'null'
        status:
          type: string
          enum:
            - ACTIVE
            - EXECUTED
            - CANCELLED
            - EXPIRED
          description: '`EXPIRED` is worked out from `expiresAt` when read.'
        issuedBy:
          $ref: '#/components/schemas/Person'
        issuedAt:
          type: string
          format: date-time
        expiresAt:
          type:
            - string
            - 'null'
          format: date-time
        closedAt:
          type:
            - string
            - 'null'
          format: date-time
        closedBy:
          anyOf:
            - $ref: '#/components/schemas/Person'
            - type: 'null'
        closeNote:
          type:
            - string
            - 'null'
        updatedAt:
          type: string
          format: date-time
      required:
        - id
        - reference
        - civilian
        - reason
        - details
        - status
        - issuedBy
        - issuedAt
        - expiresAt
        - closedAt
        - closedBy
        - closeNote
        - updatedAt
    OfficialEndorsement:
      type: object
      properties:
        id:
          $ref: '#/components/schemas/Id'
        code:
          type:
            - string
            - 'null'
        reason:
          type: string
        points:
          type: integer
          minimum: 1
          maximum: 12
        createdAt:
          type: string
          format: date-time
        expiresAt:
          type:
            - string
            - 'null'
          format: date-time
        active:
          type: boolean
        issuedBy:
          $ref: '#/components/schemas/Person'
        removedAt:
          type:
            - string
            - 'null'
          format: date-time
        removedBy:
          anyOf:
            - $ref: '#/components/schemas/Person'
            - type: 'null'
        removalReason:
          type:
            - string
            - 'null'
        record:
          type:
            - object
            - 'null'
          properties:
            id:
              $ref: '#/components/schemas/Id'
            reference:
              type: string
          required:
            - id
            - reference
      required:
        - id
        - code
        - reason
        - points
        - createdAt
        - expiresAt
        - active
        - issuedBy
        - removedAt
        - removedBy
        - removalReason
        - record
    Vehicle:
      type: object
      properties:
        id:
          $ref: '#/components/schemas/Id'
        plate:
          type: string
          pattern: ^[A-Z0-9]{2,8}$
          description: Registration, stored in capitals without spaces or hyphens.
        make:
          type: string
        model:
          type: string
        colour:
          type: string
        type:
          type: string
          enum:
            - CAR
            - MOTORCYCLE
            - VAN
            - LORRY
            - BUS
            - OTHER
        registrationStatus:
          type: string
          enum:
            - REGISTERED
            - SUSPENDED
            - SCRAPPED
        insuranceStatus:
          type: string
          enum:
            - INSURED
            - UNINSURED
        motStatus:
          type: string
          enum:
            - VALID
            - EXPIRED
        taxStatus:
          type: string
          enum:
            - TAXED
            - UNTAXED
            - SORN
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
      required:
        - id
        - plate
        - make
        - model
        - colour
        - type
        - registrationStatus
        - insuranceStatus
        - motStatus
        - taxStatus
        - createdAt
        - updatedAt
    CivilianRef:
      type: object
      properties:
        id:
          $ref: '#/components/schemas/Id'
        reference:
          type: string
        fullName:
          type: string
      required:
        - id
        - reference
        - fullName
    VehicleRef:
      type: object
      properties:
        id:
          $ref: '#/components/schemas/Id'
        plate:
          type: string
        make:
          type: string
        model:
          type: string
        colour:
          type: string
      required:
        - id
        - plate
        - make
        - model
        - colour
  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.