Base URL: /api/v1. All responses are JSON with a { data, meta } envelope. List endpoints paginate with limit and cursor (from meta.next_cursor).
curl "https://YOUR-HOST/api/v1/agencies?state=TX&limit=5" curl "https://YOUR-HOST/api/v1/agencies/TX2200100/trends" curl "https://YOUR-HOST/api/v1/search?q=burglary&kind=guides"
Access is open — no key needed. Optionally send X-API-Key to identify your client and raise your rate limit; request a key here. Data is served from versioned snapshots — check meta.generated_at and cite the original sources (FBI CDE, BJS, publishing agencies).
/api/v1/metaAPI and dataset metadata
Dataset inventory with record counts and snapshot timestamps, plus links to documentation.
/api/v1/guidesList POP guides
Problem, response, and tool guides.
| Param | In | Description |
|---|---|---|
| q | query | Text match on title, author, description, agency. |
| type | query | Exact resource type, e.g. 'Problem Guide'. |
| year | query | |
| limit | query | Page size (default 25, max 100). |
| cursor | query | Cursor from meta.next_cursor. |
/api/v1/guides/{id}Get a guide
Full guide record with markdown and HTML URLs.
| Param | In | Description |
|---|---|---|
| id* | path |
/api/v1/projectsList POP projects
Conference submissions and case studies.
| Param | In | Description |
|---|---|---|
| q | query | |
| agency | query | Substring match on agency name. |
| country | query | |
| year | query | |
| limit | query | Page size (default 25, max 100). |
| cursor | query | Cursor from meta.next_cursor. |
/api/v1/projects/{id}Get a project
Full project record, including the matched agency ORI when known.
| Param | In | Description |
|---|---|---|
| id* | path |
/api/v1/agenciesList agencies
Compact directory rows for ~19,000 US law enforcement agencies. Always paginated.
| Param | In | Description |
|---|---|---|
| state | query | Two-letter state abbreviation. |
| q | query | Substring match on name or county. |
| type | query | Agency type, e.g. 'City'. |
| has_trends | query | Only agencies with trend snapshots. |
| limit | query | Page size (default 25, max 100). |
| cursor | query | Cursor from meta.next_cursor. |
/api/v1/agencies/{ori}Get an agency
Full enriched record: directory data, NIBRS status, LEMAS staffing history, policy portal, open data links, POP submissions.
| Param | In | Description |
|---|---|---|
| ori* | path | FBI Originating Agency Identifier, e.g. TX2200100. |
/api/v1/agencies/{ori}/trendsAgency crime trends
Violent crime, property crime, and police employment year series (snapshot subset).
| Param | In | Description |
|---|---|---|
| ori* | path | FBI Originating Agency Identifier, e.g. TX2200100. |
/api/v1/agencies/{ori}/nibrsAgency NIBRS snapshot
Incident-based detail (victims, offenders, relationships, weapons, locations) over complete calendar years for eight offense categories, aggregated from FBI CDE bulk extracts.
| Param | In | Description |
|---|---|---|
| ori* | path | FBI Originating Agency Identifier, e.g. TX2200100. |
/api/v1/agencies/{ori}/similarComparable agencies
Precomputed nearest neighbors by size, crime mix, rates, and staffing within the same agency class (cosine over z-scored warehouse metrics).
| Param | In | Description |
|---|---|---|
| ori* | path | FBI Originating Agency Identifier, e.g. TX2200100. |
/api/v1/agencies/searchStructured agency search
Filter agencies by population served, crime-rate percentile bands, type, state, NIBRS participation, and open-data availability. Rate filters need the live data service; otherwise the response degrades to directory filters (mode: 'degraded').
| Param | In | Description |
|---|---|---|
| state | query | Two-letter state abbreviation. |
| type | query | Agency type, e.g. 'City' or 'University or College'. |
| pop_min | query | Minimum population served. |
| pop_max | query | Maximum population served. |
| metric | query | Rate metric, e.g. property_rate_per_1k, bur_victims_per_1k_yr. |
| band | query | Percentile band for the chosen metric. One of: low, typical, high, very-high. |
| nibrs | query | |
| open_data | query | Only agencies with confirmed open-data holdings. |
| sort | query | One of: population, metric, name. |
| order | query | One of: asc, desc. |
| limit | query | Page size (default 25, max 100). |
| cursor | query | Cursor from meta.next_cursor. |
/api/v1/sourcesList open data sources
Curated source registry with provenance.
| Param | In | Description |
|---|---|---|
| state | query | |
| dataset_type | query | Taxonomy value, e.g. USE_OF_FORCE. |
| source_class | query | e.g. api, csv, socrata. |
| limit | query | Page size (default 25, max 100). |
| cursor | query | Cursor from meta.next_cursor. |
/api/v1/sources/{id}Get a source
Full registry entry.
| Param | In | Description |
|---|---|---|
| id* | path |
/api/v1/policiesList policy portals
Public police policy portal directory.
| Param | In | Description |
|---|---|---|
| state | query | |
| q | query | Substring match on agency or jurisdiction. |
| limit | query | Page size (default 25, max 100). |
| cursor | query | Cursor from meta.next_cursor. |
/api/v1/datasetsList datasets
Downloadable dataset files.
/api/v1/searchSearch everything
Lexical search across guides, projects, agencies, sources, policy documents, and datasets.
| Param | In | Description |
|---|---|---|
| q* | query | |
| kind | query | One of: guides, projects, agencies, sources, policies, datasets. |
| limit | query |