Active BOLO · Tech Things, LLC · hello@techthings.net

Inbound API

For warrant and records systems. One HTTPS call creates a Wanted bulletin that reaches every on-duty officer of the agency as a full-screen alert; a second call recalls it. The agency's administrator makes your API key in Agency Settings → Integrations and gives it to you over a secure channel.

Base URL: https://activebolo.com/api/v1 · Header on every call: Authorization: Bearer abk_… · Bodies are JSON (Content-Type: application/json) or XML (application/xml). Responses are JSON. The key identifies the agency; you never send an agency id.

1. Check the key

GET /api/v1/ping
→ 200 {"ok":true,"agency":"sbso","key":"Motorola Flex"}

2. Create or update a warrant bulletin

POST /api/v1/bulletins
{
  "externalId": "W-2026-04471",            // your own id for the warrant. Required. Idempotent: same id = same bulletin.
  "type": "wanted",                        // optional, default wanted
  "person": { "firstName": "John", "middleName": "Q.", "lastName": "Public", "aka": "JQ", "dob": "1988-04-12",
              "race": "White", "sex": "Male", "height": "5'11\"", "weight": "190", "hair": "Brown", "eyes": "Hazel",
              "marks": "Tattoo, left forearm", "address": "1200 Elm St, Apt 3", "city": "Anytown", "state": "LA", "zip": "70001" },
  "charges": ["Aggravated Battery", "Violation of a Protective Order"],   // or one string, separated by ; or |
  "warrantNumber": "W-2026-04471",
  "caseNumber": "2026-04471",              // optional; the agency's own numbering is used when omitted
  "caution": true,                         // "use caution" banner
  "narrative": "Warrant issued 10/13/2026 by Judge Smith. Subject known to frequent …",
  "photoUrl": "https://your-system.example/photos/4471.jpg",   // optional; https only; fetched once and stored securely
  "contact": { "name": "Records Division", "unit": "Warrants", "phones": "555-555-0100" },
  "notify": true                           // default true: push to officers. false posts quietly to the feed only.
}
→ 201 {"ok":true,"action":"created","bulletinId":"…","link":"https://activebolo.com/SBSO/b/…"}
→ 200 {"ok":true,"action":"updated"|"reopened", …}   // when the externalId already exists

Posting the same externalId again updates the bulletin (fields are replaced, history keeps the change). Posting one that was recalled reissues it.

2b. Other bulletin types

The same call makes other bulletins: set type to missing, runaway, poi (person of interest), voi (vehicle of interest), stolen, safety or notice. For a missing person send lastSeen (when and where), location, endangered and the person's description; a date of birth under the agency's juvenile age marks it Missing Juvenile automatically.

POST /api/v1/bulletins
{ "externalId": "MP-2026-0142", "type": "missing", "endangered": true,
  "person": { "firstName": "Emily", "lastName": "Doe", "dob": "2017-03-14", "race": "White", "sex": "Female", "height": "4'2\"", "weight": "65", "hair": "Blond", "eyes": "Blue" },
  "lastSeen": "4:10 PM today, Riverside Park", "narrative": "Left the park on foot after a disagreement with a sibling.",
  "photoUrl": "https://your-system.example/photos/142.jpg", "contact": { "name": "Dep. J. Smith", "unit": "Patrol", "phones": "555-555-0190" } }
→ 201 {"ok":true,"action":"created", …}      // recall with action:cancel and reason "Located" when found

3. Recall a warrant

DELETE /api/v1/bulletins/W-2026-04471?reason=Warrant%20recalled
   or
POST /api/v1/bulletins   {"externalId":"W-2026-04471","action":"cancel","reason":"Served 10/14/2026"}
→ 200 {"ok":true,"action":"closed","bulletinId":"…","link":"…"}     // officers receive the cancellation
→ 200 {"ok":true,"action":"noop", …}                               // already closed, or never sent

4. Status

GET /api/v1/bulletins/W-2026-04471
→ 200 {"ok":true,"bulletinId":"…","status":"active","headline":"John Q. Public","caseNumber":"2026-04471","createdAt":"…","closedAt":null,"closeReason":null}

XML

POST /api/v1/bulletins      Content-Type: application/xml
<warrant>
  <externalId>W-2026-04471</externalId>
  <person><firstName>John</firstName><lastName>Public</lastName><dob>1988-04-12</dob></person>
  <charges><charge>Aggravated Battery</charge><charge>Violation of a Protective Order</charge></charges>
  <warrantNumber>W-2026-04471</warrantNumber>
  <caution>true</caution>
</warrant>

The root element name does not matter; field names match the JSON ones.

Errors

CodeMeaning
400Missing externalId or a body that is not valid JSON/XML. The error text says which.
401Missing, malformed or unknown key.
403Key revoked, or the agency is paused.
404Unknown endpoint, or no bulletin with that externalId (GET).
500Our fault. Retry with the same body; the call is idempotent.

Behaviour you can rely on

Questions: hello@techthings.net