Skip to main content

Overview

The Law Enforcement API provides endpoints for managing officers, conducting searches, creating records, handling incidents, and managing impound lots.
Most LEO endpoints require the Leo permission and an active officer on duty.

Get Active Officer

curl -X GET https://your-cad.com/api/leo/active-officer \
  -H "Cookie: snaily-cad-access-token=<token>"
Get the currently active officer for the authenticated user.

Response

id
string
Officer ID
callsign
string
Officer’s callsign
badgeNumber
string
Badge number
status
object
Current status (on duty, busy, etc.)
department
object
Department information
divisions
array
Assigned divisions
citizen
object
Associated citizen information

Get Active Officers

curl -X GET "https://your-cad.com/api/leo/active-officers?skip=0&includeAll=false" \
  -H "Cookie: snaily-cad-access-token=<token>"
Get all currently active officers and combined units.

Query Parameters

includeAll
boolean
default:"false"
Include all officers (ignore pagination)
skip
number
default:"0"
Number of records to skip
query
string
Search query for filtering officers

Response

Returns an array of active officer and combined unit objects.

Create/Update Officer

curl -X POST https://your-cad.com/api/leo \
  -H "Cookie: snaily-cad-access-token=<token>" \
  -H "Content-Type: application/json" \
  -d '{
    "citizenId": "citizen-id",
    "department": "department-id",
    "divisions": ["division-id-1"],
    "callsign": "1A-23",
    "badgeNumber": "12345"
  }'
Create a new officer.

Request Body

citizenId
string
required
Citizen ID to link to officer
department
string
required
Department ID
divisions
array
required
Array of division IDs
callsign
string
required
Officer callsign (e.g., “1A-23”)
badgeNumber
string
required
Badge number
rank
string
Rank ID

Toggle Panic Button

curl -X POST https://your-cad.com/api/leo/panic-button \
  -H "Cookie: snaily-cad-access-token=<token>" \
  -H "Content-Type: application/json" \
  -d '{
    "officerId": "officer-id",
    "isEnabled": true
  }'
Enable or disable panic button for an officer.

Request Body

officerId
string
required
Officer ID
isEnabled
boolean
required
Enable or disable panic mode

Response

Returns the updated officer object with panic button status.

Search by Name

curl -X POST https://your-cad.com/api/search/name \
  -H "Cookie: snaily-cad-access-token=<token>" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "John Doe"
  }'
Search for citizens by name, surname, or license numbers.

Request Body

name
string
required
Name to search (first, last, or full name)
id
string
Specific citizen ID to search

Response

Returns array of matching citizens with records, warrants, vehicles, and weapons.

Search by Plate

curl -X POST https://your-cad.com/api/search/plate-or-vin \
  -H "Cookie: snaily-cad-access-token=<token>" \
  -H "Content-Type: application/json" \
  -d '{
    "plateOrVin": "ABC123"
  }'
Search for vehicles by license plate or VIN number.

Request Body

plateOrVin
string
required
License plate or VIN to search

Response

Returns vehicle information including owner, registration status, and flags.

Search by Weapon Serial

curl -X POST https://your-cad.com/api/search/weapon \
  -H "Cookie: snaily-cad-access-token=<token>" \
  -H "Content-Type: application/json" \
  -d '{
    "serialNumber": "SN123456"
  }'
Search for weapons by serial number.

Request Body

serialNumber
string
required
Weapon serial number

Records

Create Record

curl -X POST https://your-cad.com/api/search/actions/records \
  -H "Cookie: snaily-cad-access-token=<token>" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "ARREST_REPORT",
    "citizenId": "citizen-id",
    "violations": [
      {
        "penalCodeId": "penal-code-id",
        "fine": 500,
        "jailTime": 0
      }
    ]
  }'
Create an arrest report, ticket, or written warning.

Request Body

type
string
required
Record type: ARREST_REPORT, TICKET, or WRITTEN_WARNING
citizenId
string
required
Citizen ID
violations
array
required
Array of violation objects
notes
string
Additional notes
postal
string
Postal/zip code of incident

Impound Lot

Get Impounded Vehicles

curl -X GET "https://your-cad.com/api/leo/impounded-vehicles?skip=0" \
  -H "Cookie: snaily-cad-access-token=<token>"
Get all impounded vehicles.

Query Parameters

skip
number
default:"0"
Pagination offset
includeAll
boolean
default:"false"
Include all vehicles
Search by plate or model

Response

totalCount
number
Total impounded vehicles
vehicles
array
Array of impounded vehicle objects

Release Impounded Vehicle

curl -X DELETE https://your-cad.com/api/leo/impounded-vehicles/{vehicleId} \
  -H "Cookie: snaily-cad-access-token=<token>"
Release a vehicle from the impound lot.

Path Parameters

id
string
required
Impounded vehicle ID or registered vehicle ID

Incidents

Create Incident

curl -X POST https://your-cad.com/api/incidents \
  -H "Cookie: snaily-cad-access-token=<token>" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Armed Robbery",
    "description": "Incident description",
    "postal": "90210",
    "involvedOfficers": ["officer-id-1"]
  }'
Create a new incident report.

Request Body

title
string
required
Incident title
description
string
required
Detailed description
postal
string
Postal/zip code
involvedOfficers
array
Array of officer IDs involved

Update Officer Callsign

curl -X PUT https://your-cad.com/api/leo/callsign/{officerId} \
  -H "Cookie: snaily-cad-access-token=<token>" \
  -H "Content-Type: application/json" \
  -d '{
    "callsign": "division-callsign-id"
  }'
Update an officer’s active division callsign.

Path Parameters

officerId
string
required
Officer ID

Request Body

callsign
string
required
Division callsign ID (or “null” to clear)

Get Unit Qualifications

curl -X GET https://your-cad.com/api/leo/qualifications/{unitId} \
  -H "Cookie: snaily-cad-access-token=<token>"
Get awards and qualifications for a unit.

Path Parameters

unitId
string
required
Unit (officer/deputy) ID

Response

Returns array of qualification objects with associated values.

Build docs developers (and LLMs) love