Not logged in - Login
< back

API Overview

General Purpose of the Safe API

Tracker clients will generally use the API for the following tasks.

  1. POST or GET system User Accounts (User Admin)
  2. POST or GET Case information
  3. POST or GET Person information
  4. GET new Items information
  5. GET updated items information
  6. GET chain of custody information for items

Note: We do not support injecting item information via the API. Items must always be created via the Item entry or Data Import areas.

Note: While there are many other systems API's, the ones we are listing here are those that are generally used..

Requirements for each API request

Each request made to the SAFE webAPI will require the following

  1. Valid URL (from list of available URLs below)
  2. User Token
  3. Valid OrgID # (See instructions below for getting this)
  4. Valid Office ID # (See instructions below for getting this)

Getting a valid User Token

  1. Go to Settings -> Users
  2. Select a user in which to create a static token for, and select ‘Edit’ (Or you may want to create a new user for this process)
  3. At the bottom of the edit screen will be the token create section:
  4. Press ‘Generate’ to create the token.
  5. NOTE: If you created a token for the currently logged in user, then you must logout before using the token.

Setting a Static License

In most cases, you are going to want to peg a license to the user that was created in the previous step. This will ensure that a license is available when the interface makes a call to the SAFE webAPI. If not license is available, then the API will respond with a message that no licenses are available.
  1. Go to Settings > License Allocation
  2. In the column ‘Reserved for Individual Users’ find the user you created for the API and then select the ‘No’ value to set a license.

What is your Org / Office ID

From within the SAFE interface, go to Settings > Offices to see your Org and Office ID.

How often should you POST or GET data

Making an API call to the database more than once a minute may cause your account to be disabled. It is highly recommended that you make (or schedule) your call every 10 minutes or so. Please contact Tracker support if you need to POST or GET more often.

Testing the Tracker API

  1. Use Postman in Chrome (or any similar tool). The following example is using Postman:
  2. Header Fields
    1. Accept application/json – required field
    2. Content-Type application/x-www-form-urlencoded – required field
    3. Authorization – This field requires the word ‘Bearer’ followed by a single space and then the static token that was created.
    4. OrganizationId – the organization ID to use
    5. OfficeId – the office ID to use
    6. StaticToken – tells the API that the bearer token is static
  3. Once these fields are in place, select ‘Send’ and verify that an item was returned (if one exists).

Note: make sure you have a valid item in the system before you try to select one from the webAPI.

POST or GET Data from API

Retrieving ItemsItem Data (Including Item Updates)

This API endpoint allows for polling of all items (and updates) in the system in sequential order. That Every isitem, toor say,update, youwill feedbe theapplied firstan sequentialascending itemID #, typically 1, and then get your results. You continue to move to the next item until you get no results.number.

You will need to store the last itemID you retrieved results for. That will be your startstarting point for the next retrieval.

Retrieving an Updated Item

This API endpoint is used for polling all updated items. The setup is exactly like the previous SeqOrgID but this endpoint is polling the history table, which is a list of all system updates.


Required fields:

  • seqUpdateOrgId [long]


  • The Item that was updated

Type GET

Important Objects

  • historyType [enum: Create Entry = 1, Update Entry = 2]

Retrieving Case Data

API URL = Where XXXXX = the "PrimaryCaseID" value that is provided in the seqOrgID controller listed above

Retrieving People in a Case


Where XXXXX = the "PrimaryCaseID" value that is provided in the seqOrgID controller listed above

Retrieving Chain of Custody


Where XXXXX = the "id" value that is provided in the seqOrgID controller listed above

Case Data Post


Required fields:

  • CaseOfficerId [long]
  • OffenseTypeId [long]
  • CaseNumber [string]
  • FormData [List]
  • FormId [long]
  • Data [string]
  • Tags [List]
  • tagModelId [long]
  • Name [string]


  • OffenseDescription [string]
  • OffenseLocation [string]
  • OffenseDate

Person Data Post


Required fields:

  • RaceId [long]
  • GenderId [long]
  • FirstName [string]
  • LastName [string]


  • MiddleName [string]
  • Alias [string]
  • MobilePhone [string]
  • OtherPhone [string]
  • Email [string]
  • DriverLicense [string]
  • Dob [date]
    • FormData [List]
    • FormId [long]
    • Data [string]