> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.api.abelpolice.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.api.abelpolice.com/_mcp/server.

# Get caller info

GET https://api.stage.abelpolice.com/v1/info

Reference: https://docs.api.abelpolice.com/api-reference/info/get-info-v-1-info-get

## Request

### Query parameters

- `user_id` (string, optional, nullable) — Valid UUID of the user to get info for. (Admin only)

### Headers

- `x-api-key` (string, required) — API key or token

## Response

### 200

Successful Response

- `requester_id` (string, required) — The UUID of the requester
- `requester_type` (string, required) — The type of the requester
- `info` (Info, required) — Detailed information about the requester
- `user_info` (GetSingleUserResponse, required) — Detailed information about the requester
- `agency_info` (GetAgencyInfo, required) — Detailed information about the requester

## Errors

### 422 Unprocessable Entity Error

Validation Error

- `detail` (list of ValidationError, optional)

## Types

### Info

- `global_admin` (boolean, required) — Requester is a global admin
- `chat_visible` (boolean, required) — Requester can see Abel Chat
- `chat_seat_assigned` (boolean, required) — Requester has a chat seat assigned
- `writer_visible` (boolean, required) — Requester can see Abel Writer
- `writer_seat_assigned` (boolean, required) — Requester has a writer seat assigned
- `citizen_visible` (boolean, required) — Requester can see Citizen Reports
- `partner_visible` (boolean, required) — Requester can use Abel Partner
- `agency_ids` (list of string, required) — The list of agency IDs requester is associated with
- `last_login_utc` (datetime, required) — The last login time of the requester
- `role` (enum, optional, nullable) — Requester's role at Abel
  - Allowed values: `officer`, `citizen_reviewer`, `agency_admin`, `partner_admin`, `sales`

### GetSingleUserResponse

- `user_id` (string, required) — User UUID
- `agency_id` (string, optional, nullable) — Agency UUID
- `agency_name` (string, optional, nullable) — Agency name
- `email` (string, optional, nullable) — User e-mail
- `first_name` (string, optional, nullable) — User first name
- `last_name` (string, optional, nullable) — User last name
- `phone_number` (string, optional, nullable) — User phone number
- `badge_number` (string, optional, nullable) — User badge number
- `last_login_at_utc` (string, optional, nullable) — Last login date and time
- `created_at_utc` (string, optional, nullable) — User creation date and time
- `updated_at_utc` (string, optional, nullable) — User last update date and time
- `writer_seat_assigned` (boolean, optional, nullable) — Whether the user is assigned to a writer seat
- `writer_seat_assigned_at_utc` (string, optional, nullable) — User writer seat assigned date and time
- `writer_seat_unassigned_at_utc` (string, optional, nullable) — User writer seat unassigned date and time
- `chat_seat_assigned` (boolean, optional, nullable) — Whether the user is assigned to a chat seat
- `chat_seat_assigned_at_utc` (string, optional, nullable) — User chat seat assigned date and time
- `chat_seat_unassigned_at_utc` (string, optional, nullable) — User chat seat unassigned date and time
- `global_admin` (boolean, optional, nullable) — Whether the user is a global admin
- `is_onboarded` (boolean, optional, nullable) — Whether the user is onboarded
- `role_name` (string, optional, nullable) — User role name
- `user_settings` (GetUserSettings, optional, nullable) — User settings
- `user_cognito_attributes` (GetUserCognitoAttributes, optional, nullable) — User Cognito attributes

### GetAgencyInfo

- `agency_name` (string, optional, nullable) — Agency name
- `created_at_utc` (datetime, optional, nullable) — Agency creation date in Abel system (UTC)
- `updated_at_utc` (datetime, optional, nullable) — Agency last update date in Abel system (UTC)
- `agency_enabled` (boolean, optional, nullable) — Agency enabled
- `agency_handle` (string, optional, nullable) — Agency handle
- `agency_type` (enum, optional, nullable) — Agency type
  - Allowed values: `demo`, `test`, `live`
- `partner_id` (string, optional, nullable) — Partner ID
- `public_phone_number` (string, optional, nullable) — Agency public phone number
- `agency_address` (AgencyAddressResponse, optional, nullable) — Agency headquarters address information
- `agency_contract` (AgencyContractResponse, optional, nullable) — Agency contract and seat information
- `agency_settings` (AgencySettingsResponse, optional, nullable) — Agency configuration settings
- `originating_agency_identifier` (string, optional, nullable) — Originating agency identifier
- `agency_id` (string, optional, nullable) — Agency ID

### ValidationError

- `loc` (list of ValidationErrorLocItems, required)
- `msg` (string, required)
- `type` (string, required)

### GetUserSettings

- `narrative_signature` (string, optional, nullable) — The signature to use for report narratives
- `narrative_include_ts` (boolean, optional, default: true) — Whether to include citation timestamps in report narratives
- `narrative_header` (string, optional, nullable) — The header to use for report narratives
- `narrative_remove_spacing` (boolean, optional, default: false) — Whether to remove spacing between paragraphs in report narratives
- `narrative_include_officer_name` (boolean, optional, default: true) — Whether to include the officer's name in report narratives
- `show_dems_locker_info` (boolean, optional, default: false) — Whether to show DEMS locker info with the user's reports
- `enable_investigator_mode` (boolean, optional, default: false) — Whether to enable investigator mode for the user
- `mfa_type` (enum, optional) — The MFA type for the user
  - Allowed values: `email`, `sms`
- `title` (enum, optional) — The title/rank of the user in the agency and how they are referred to in reports
  - Allowed values: `Officer`, `Senior Officer`, `Corporal`, `Sergeant`, `Staff Sergeant`, `Lieutenant`, `Captain`, `Major`, `Commander`, `Deputy Chief`, `Assistant Chief`, `Chief`, `Chief of Police`, `Commissioner`, `Deputy Commissioner`, `Deputy`, `Chief Deputy`, `Undersheriff`, `Sheriff`, `Trooper`, `Senior Trooper`, `Master Trooper`, `Technical Trooper`, `Trooper First Class`, `Sergeant Trooper`, `Lieutenant Trooper`, `Captain Trooper`, `Major Trooper`, `Lieutenant Colonel`, `Colonel`, `Detective`, `Detective Corporal`, `Detective Sergeant`, `Detective Lieutenant`, `Investigator`, `Inspector`, `Records Manager`
- `electronic_signature_consent` (boolean, optional, default: false) — Whether the user has consented to electronic signature for reports
- `client_notification_sounds` (boolean, optional, default: true) — Whether to play audible noises in the browser when client notifications are received
- `allow_style_guide` (boolean, optional, nullable, default: false) — Feature flag: whether style guide is enabled for this user
- `narrative_ordering_mode` (enum, optional) — Optional narrative ordering style preference
  - Allowed values: `in_order_occurred`, `in_order_described`
- `thumbnail_view` (boolean, optional, default: true) — Whether to display the report list as thumbnails instead of a list view
- `voice_tagging_available` (boolean, optional, nullable, default: true) — Whether the user has voice tagging available
- `voice_tagging_datetime_processed_utc` (datetime, optional, nullable) — The datetime when we processed the user's voice tagging file
- `searching_for_voice_tagging` (boolean, optional, nullable) — Whether the user is searching for voice tagging
- `style_guide_id` (string, optional, nullable) — Applied style guide UUID for this user

### GetUserCognitoAttributes

- `cognito_user_create_date` (datetime, required) — The date and time when the user was created in Cognito
- `cognito_user_last_modified_date` (datetime, optional, nullable) — The date and time when the user was last modified in Cognito
- `enabled` (boolean, optional, default: true) — Whether the user is enabled in Cognito
- `user_status` (enum, optional) — The status of the user in Cognito
  - Allowed values: `UNCONFIRMED`, `CONFIRMED`, `ARCHIVED`, `COMPROMISED`, `UNKNOWN`, `RESET_REQUIRED`, `FORCE_CHANGE_PASSWORD`
- `email_verified` (boolean, optional, default: false) — Whether the user's email is verified in Cognito
- `phone_number_verified` (boolean, optional, default: false) — Whether the user's phone number is verified in Cognito

### AgencyAddressResponse

- `address_1` (string, optional, nullable) — Agency HQ address line 1
- `address_2` (string, optional, nullable) — Agency HQ address line 2
- `city` (string, optional, nullable) — Agency HQ city
- `county` (string, optional, nullable) — Agency HQ county
- `zip` (string, optional, nullable) — Agency HQ zip code
- `state` (enum, optional, nullable) — Agency HQ state
  - Allowed values: `AL`, `AK`, `AZ`, `AR`, `CA`, `CO`, `CT`, `DE`, `FL`, `GA`, `HI`, `ID`, `IL`, `IN`, `IA`, `KS`, `KY`, `LA`, `ME`, `MD`, `MA`, `MI`, `MN`, `MS`, `MO`, `MT`, `NE`, `NV`, `NH`, `NJ`, `NM`, `NY`, `NC`, `ND`, `OH`, `OK`, `OR`, `PA`, `RI`, `SC`, `SD`, `TN`, `TX`, `UT`, `VT`, `VA`, `WA`, `WV`, `WI`, `WY`
- `country` (string, optional, nullable) — Agency HQ country
- `latitude` (double, optional, nullable) — Agency HQ latitude
- `longitude` (double, optional, nullable) — Agency HQ longitude
- `timezone` (enum, optional, nullable) — Agency HQ timezone
  - Allowed values: `America/New_York`, `America/Detroit`, `America/Kentucky/Louisville`, `America/Kentucky/Monticello`, `America/Indiana/Indianapolis`, `America/Indiana/Vincennes`, `America/Indiana/Winamac`, `America/Indiana/Marengo`, `America/Indiana/Petersburg`, `America/Indiana/Vevay`, `America/Chicago`, `America/Indiana/Tell_City`, `America/Menominee`, `America/North_Dakota/Center`, `America/North_Dakota/New_Salem`, `America/North_Dakota/Beulah`, `America/Denver`, `America/Phoenix`, `America/Boise`, `America/Los_Angeles`, `America/Metlakatla`, `America/Juneau`, `America/Sitka`, `America/Yakutat`, `America/Anchorage`, `America/Nome`, `America/Adak`, `Pacific/Honolulu`

### AgencyContractResponse

- `max_writer_seats` (integer, optional, nullable) — Maximum number of writer seats
- `writer_seats_used` (integer, optional, nullable) — Number of writer seats currently in use
- `max_chat_seats` (integer, optional, nullable) — Maximum number of chat seats
- `chat_seats_used` (integer, optional, nullable) — Number of chat seats currently in use

### AgencySettingsResponse

- `day_of_week_format` (enum, optional, nullable) — Agency day of week format
  - Allowed values: ``, `%a`, `%A`
- `date_format` (enum, optional, nullable) — Agency date format
  - Allowed values: `%b %d, %Y`, `%B %d, %Y`, `%m/%d/%y`, `%m/%d/%Y`, `%Y/%m/%d`, `%m-%d-%y`, `%m-%d-%Y`, `%Y-%m-%d`, `%d %b %Y`, `%d %B %Y`, `%d %b, %Y`, `%Y %b %d`, `%Y-%m-%d`
- `time_format` (enum, optional, nullable) — Agency time format
  - Allowed values: `%I %p`, `%I:%M %p`, `%I:%M:%S %p`, `%H hours`, `%H:%M`, `%H:%M:%S`, `%H%M`, `%H%M hours`, `%H%M%S`, `%H:%M:%S`
- `narrative_disclaimer` (boolean, optional, nullable) — Agency narrative disclaimer
- `narrative_affidavit` (enum, optional, nullable) — Agency narrative affidavit
  - Allowed values: `NONE`, `AFFIDAVIT`, `AFFIDAVIT_WITH_RECORDS`
- `random_sentences` (boolean, optional, nullable) — Add random sentences to the narrative
- `num_narrative_edits` (integer, optional, nullable) — Number of narrative edits required to copy
- `unrestricted_data_retention` (boolean, optional, nullable) — Unrestricted data retention
- `one_hour_session` (boolean, optional, nullable) — One hour session enabled
- `data_retention_days` (integer, optional, nullable) — Agency data retention days
- `include_synopsis` (boolean, optional, nullable) — Include synopsis in reports
- `narrative_include_race` (boolean, optional, nullable) — Include race in narrative
- `mention_person_names` (enum, optional, nullable) — Mention person names
  - Allowed values: `ALWAYS`, `FIRST_OCCURRENCE`, `NEVER`
- `mention_location_names` (enum, optional, nullable) — Mention location names
  - Allowed values: `BOTH`, `ONLY_ADDRESS`
- `created_at_utc` (datetime, optional, nullable) — Settings creation date (UTC)
- `updated_at_utc` (datetime, optional, nullable) — Settings last update date (UTC)
- `citizen_enabled` (boolean, optional, nullable) — Citizen reports enabled for the agency
- `citizen_website_timeout_seconds` (integer, optional, nullable) — Citizen timeout in seconds
- `citizen_kiosk_timeout_seconds` (integer, optional, nullable) — Citizen kiosk timeout in seconds
- `self_hosted_dems` (boolean, optional, nullable) — Self-hosted DEMS enabled for the agency
- `dems_system_name` (enum, optional, nullable) — DEMS system name
  - Allowed values: `Axon Evidence.com`, `Motorola Command Central`, `Motorola Video Manager EL`, `Versaterm Visual Labs`
- `cad_system_name` (enum, optional, nullable) — CAD system name
  - Allowed values: `CentralSquare CAD Pro`, `Mark43 CAD`, `Hexagon I/CAD`, `Versaterm CAD`, `Caliber CAD NG`, `RIMS CAD`
- `rms_system_name` (enum, optional, nullable) — RMS system name
  - Allowed values: `Mark43 RMS`, `Versaterm RMS`, `Caliber Online RMS`, `RIMS RMS`
- `allow_narrative_templates` (boolean, optional, default: false) — Allow narrative templates
- `custom_prompting_enabled` (boolean, optional, default: false) — Enable custom prompting for the agency
- `allow_user_prompts` (boolean, optional, default: false) — Allow users to create their own narrative prompts
- `force_extend_agency_prompt` (boolean, optional, default: true) — Force user prompts to extend the agency prompt
- `citizen_enabled_languages` (list of enum, optional, nullable) — Citizen enabled languages
  - Allowed values: `ab`, `ace`, `ach`, `af`, `sq`, `alz`, `am`, `ar`, `hy`, `as`, `awa`, `ay`, `az`, `ban`, `bm`, `ba`, `eu`, `btx`, `bts`, `bbc`, `be`, `bem`, `bn`, `bew`, `bho`, `bik`, `bs`, `br`, `bg`, `bua`, `yue`, `ca`, `ceb`, `ny`, `zh-CN`, `zh-TW`, `cv`, `co`, `crh`, `hr`, `cs`, `da`, `din`, `dv`, `doi`, `dov`, `nl`, `dz`, `en`, `eo`, `et`, `ee`, `fj`, `tl`, `fi`, `fr`, `fr-FR`, `fr-CA`, `fy`, `ff`, `gaa`, `gl`, `lg`, `ka`, `de`, `el`, `gn`, `gu`, `ht`, `cnh`, `ha`, `haw`, `iw`, `hil`, `hi`, `hmn`, `hu`, `hrx`, `is`, `ig`, `ilo`, `id`, `ga`, `it`, `ja`, `jw`, `kn`, `pam`, `kk`, `km`, `cgg`, `rw`, `ktu`, `gom`, `ko`, `kri`, `ku`, `ckb`, `ky`, `lo`, `ltg`, `la`, `lv`, `lij`, `li`, `ln`, `lt`, `lmo`, `luo`, `lb`, `mk`, `mai`, `mak`, `mg`, `ms`, `ms-Arab`, `ml`, `mt`, `mi`, `mr`, `chm`, `mni-Mtei`, `min`, `lus`, `mn`, `my`, `nr`, `new`, `ne`, `nso`, `no`, `nus`, `oc`, `or`, `om`, `pag`, `pap`, `ps`, `fa`, `pl`, `pt`, `pt-PT`, `pt-BR`, `pa`, `pa-Arab`, `qu`, `rom`, `ro`, `rn`, `ru`, `sm`, `sg`, `sa`, `gd`, `sr`, `st`, `crs`, `shn`, `sn`, `scn`, `szl`, `sd`, `si`, `sk`, `sl`, `so`, `es`, `su`, `sw`, `ss`, `sv`, `tg`, `ta`, `tt`, `te`, `tet`, `th`, `ti`, `ts`, `tn`, `tr`, `tk`, `ak`, `uk`, `ur`, `ug`, `uz`, `vi`, `cy`, `xh`, `yi`, `yo`, `yua`, `zu`, `unknown`
- `citizen_cover_sheet_source` (map from string to any, optional, nullable) — Cover sheet source JSON
- `citizen_cover_sheet_enabled` (boolean, optional, nullable) — Cover sheet enabled

### ValidationErrorLocItems

- string
- integer

## Examples

**Response**

```json
{
  "requester_id": "123e4567-e89b-12d3-a456-426614174000",
  "requester_type": "user",
  "info": {
    "global_admin": "true",
    "chat_visible": "true",
    "chat_seat_assigned": "true",
    "writer_visible": "true",
    "writer_seat_assigned": "true",
    "citizen_visible": "true",
    "partner_visible": "true",
    "agency_ids": [
      "123e4567-e89b-12d3-a456-426614174000"
    ],
    "last_login_utc": "2023-10-01T12:00:00Z",
    "role": "officer"
  },
  "user_info": {
    "user_id": "123e4567-e89b-12d3-a456-426614174000",
    "agency_id": "123e4567-e89b-12d3-a456-426614174000",
    "agency_name": "Agency Name",
    "email": "user@abelpolice.com",
    "first_name": "John",
    "last_name": "McClane",
    "phone_number": "+1234567890",
    "badge_number": "881",
    "last_login_at_utc": "2021-01-01T00:00:00Z",
    "created_at_utc": "2021-01-01T00:00:00Z",
    "updated_at_utc": "2021-01-01T00:00:00Z",
    "writer_seat_assigned": false,
    "writer_seat_assigned_at_utc": "2021-01-01T00:00:00Z",
    "writer_seat_unassigned_at_utc": "2021-01-01T00:00:00Z",
    "chat_seat_assigned": false,
    "chat_seat_assigned_at_utc": "2021-01-01T00:00:00Z",
    "chat_seat_unassigned_at_utc": "2021-01-01T00:00:00Z",
    "global_admin": false,
    "is_onboarded": false,
    "role_name": "Admin",
    "user_settings": {
      "narrative_signature": "Officer Daniel Francis, Badge No. 1107",
      "narrative_include_ts": true,
      "narrative_header": "Officer Daniel Francis Badge No. 1107",
      "narrative_remove_spacing": false,
      "narrative_include_officer_name": false,
      "show_dems_locker_info": true,
      "enable_investigator_mode": true,
      "mfa_type": "email",
      "title": "Officer",
      "electronic_signature_consent": true,
      "client_notification_sounds": true,
      "allow_style_guide": true,
      "narrative_ordering_mode": "in_order_occurred",
      "thumbnail_view": true,
      "voice_tagging_available": true,
      "voice_tagging_datetime_processed_utc": "2023-10-01T12:00:00",
      "searching_for_voice_tagging": true,
      "style_guide_id": "string"
    },
    "user_cognito_attributes": {
      "cognito_user_create_date": "2024-01-15T09:30:00Z",
      "cognito_user_last_modified_date": "2024-01-15T09:30:00Z",
      "enabled": true,
      "user_status": "UNCONFIRMED",
      "email_verified": true,
      "phone_number_verified": true
    }
  },
  "agency_info": {
    "agency_name": "Abel Police Test Agency",
    "created_at_utc": "2021-01-01T00:00:00Z",
    "updated_at_utc": "2021-01-01T00:00:00Z",
    "agency_enabled": true,
    "agency_handle": "marin_central_ca",
    "agency_type": "demo",
    "partner_id": "123e4567-e89b-12d3-a456-426614174000",
    "public_phone_number": "+14155552671",
    "agency_address": {
      "address_1": "188 King Street",
      "address_2": "Apt 2",
      "city": "San Francisco",
      "county": "San Francisco County",
      "zip": "94158",
      "state": "CA",
      "country": "US",
      "latitude": 37.774929,
      "longitude": -122.419418,
      "timezone": "America/Los_Angeles"
    },
    "agency_contract": {
      "max_writer_seats": 10,
      "writer_seats_used": 5,
      "max_chat_seats": 20,
      "chat_seats_used": 12
    },
    "agency_settings": {
      "day_of_week_format": "%A",
      "date_format": "%m/%d/%Y",
      "time_format": "%H:%M",
      "narrative_disclaimer": true,
      "narrative_affidavit": "AFFIDAVIT",
      "random_sentences": true,
      "num_narrative_edits": 3,
      "unrestricted_data_retention": false,
      "one_hour_session": false,
      "data_retention_days": 7,
      "include_synopsis": true,
      "narrative_include_race": true,
      "mention_person_names": "ALWAYS",
      "mention_location_names": "BOTH",
      "created_at_utc": "2021-01-01T00:00:00Z",
      "updated_at_utc": "2021-01-01T00:00:00Z",
      "citizen_enabled": true,
      "citizen_website_timeout_seconds": 300,
      "citizen_kiosk_timeout_seconds": 600,
      "self_hosted_dems": true,
      "dems_system_name": "Axon Evidence.com",
      "cad_system_name": "Mark43 CAD",
      "rms_system_name": "Mark43 RMS",
      "allow_narrative_templates": false,
      "custom_prompting_enabled": false,
      "allow_user_prompts": false,
      "force_extend_agency_prompt": true,
      "citizen_enabled_languages": [
        "en",
        "es",
        "vi",
        "sr"
      ],
      "citizen_cover_sheet_source": {
        "content": [],
        "type": "doc"
      },
      "citizen_cover_sheet_enabled": false
    },
    "originating_agency_identifier": "ABEL-123",
    "agency_id": "123e4567-e89b-12d3-a456-426614174000"
  }
}
```

**SDK Code**

```python
import requests

url = "https://api.stage.abelpolice.com/v1/info"

headers = {"x-api-key": "<token>"}

response = requests.get(url, headers=headers)

print(response.json())
```

```javascript
const url = 'https://api.stage.abelpolice.com/v1/info';
const options = {method: 'GET', headers: {'x-api-key': '<token>'}};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go
package main

import (
	"fmt"
	"net/http"
	"io"
)

func main() {

	url := "https://api.stage.abelpolice.com/v1/info"

	req, _ := http.NewRequest("GET", url, nil)

	req.Header.Add("x-api-key", "<token>")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby
require 'uri'
require 'net/http'

url = URI("https://api.stage.abelpolice.com/v1/info")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<token>'

response = http.request(request)
puts response.read_body
```

```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://api.stage.abelpolice.com/v1/info")
  .header("x-api-key", "<token>")
  .asString();
```

```php
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://api.stage.abelpolice.com/v1/info', [
  'headers' => [
    'x-api-key' => '<token>',
  ],
]);

echo $response->getBody();
```

```csharp
using RestSharp;

var client = new RestClient("https://api.stage.abelpolice.com/v1/info");
var request = new RestRequest(Method.GET);
request.AddHeader("x-api-key", "<token>");
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = ["x-api-key": "<token>"]

let request = NSMutableURLRequest(url: NSURL(string: "https://api.stage.abelpolice.com/v1/info")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```