Criminal Records API · Data reference

Criminal Records API enums

Every closed vocabulary the API accepts or returns, with every value and where it appears.

How to read the Criminal Records API enums

Every closed vocabulary the Criminal Records API accepts or returns, generated from the same reference data as the endpoint and object tables. Direction says whether a value is something you send, something you receive, or both. Treat a value you do not recognise as other and log it: values are added over time and announced on the changelog, never removed or renamed.

Fields whose values are the source's own text (for example a criminal record's currentStatus or a charge's disposition) are not enums and are not listed here; their closed twins live in the normalized object and are listed.

Criminal Records API enums — every value

FieldWhereDirectionValuesDefault
chargeCategories
What the charge is about.
The SearchFilters object — criminal search filter fieldsrequestsupervisionhomicidesex_offenserobberydomestic_violenceduiassaultweaponsburglaryfraudtheftdrug_distributiondrug_possessiontrafficpublic_orderother—
chargeMatch
`any`: one charge must meet every charge filter. `all`: each charge filter may be met by a different charge on the record.
The SearchFilters object — criminal search filter fieldsrequestanyallany
clearanceMode
What a `not_this_person` clearance does to the record it names. `suppress` (the default whenever `subjectId` is sent) removes the record from `records[]` and lists it in `cleared[]`. `annotate` keeps the record and attaches its `clearance` object, for an interface that shows cleared people greyed out. `ignore` answers as if no clearances existed. A `this_person` verdict, and a cleared person who has re-surfaced (`clearance.staleReason` set), are kept and annotated in every mode.
The SearchRequest objectrequestsuppressannotateignoresuppress
custodyStatus
The record's custody status. With `unknown: "keep"` a record whose status is unknown also passes.
The SearchFilters object — criminal search filter fieldsrequestin_custodyreleasedon_paroleon_probationactive_warrantwantedregistereddisposedabsconderdeceasedexcluded—
include
Extra blocks to return. `"coverage"` adds `coverage.sources[]` (every source in scope with its status) when `query.state` is set. `"sourceData"` empties `omittedFields`; records carry the same fields either way. `"exclusions"` also returns [exclusion-list records](/docs/criminal/record-object#exclusions) whose basis is not a criminal conviction (license actions, administrative debarments, loan defaults). Without it, conviction-based exclusions are returned like any other record and the administrative tier is omitted; `counts.exclusionsIncluded` says which. `"facets"` adds `facets` (counts over every matched record) to a search that sends `filters` or `locations`. `"normalizedDetail"` adds `rule` to every charge in `normalized.cases[].charges[]`.
The SearchRequest objectrequestsourceDatacoverageexclusionsfacetsnormalizedDetail—
include
Applied to every row, as on a search.
The BatchEnvelope objectrequestsourceDatacoverageexclusions—
kind
`residence` matches where the person lives (the published address). `jurisdiction` matches where the record is (the court, jail or agency's state and county). `any` matches either. A radius, `city` and `zipcode` describe a residence: on `jurisdiction` they are `422 invalid_location`, and on `any` they test the residence only.
The Location object — residence and jurisdiction fieldsrequestresidencejurisdictionanyany
nameStrategy
How the surname is compared. `prefix` returns surnames equal to or starting with your value; `exact` returns only equal surnames. An implicit `prefix` on a surname shorter than 3 characters runs as `exact`; an explicit one is refused with `422 prefix_too_short`.
The criminal Query object — every search filterrequestprefixexactprefix
nameStrategy
Surname strategy applied to every row that does not set its own.
The BatchEnvelope objectrequestprefixexact—
outcome
Charge outcome class. With `unknown: "keep"` a charge whose outcome is unknown also passes.
The SearchFilters object — criminal search filter fieldsrequestconvictedpendingdismissednolle_prosequiacquitteddeferred_or_divertedvacatedwarranttransferredclosed_unspecifiedadministrative—
recordCategory
The kind of record (`normalized.recordCategory`).
The SearchFilters object — criminal search filter fieldsrequestcourtjailprisonwarrantregistryexclusionother—
scope
`"matched"` re-checks every jurisdiction that produced a cached hit for this query.
The LiveRequest object — the live blockrequestmatched—
severity
Charge severity. With `unknown: "keep"` an unclassified charge also passes.
The SearchFilters object — criminal search filter fieldsrequestfelonymisdemeanorinfraction—
severityBasis
Narrows `severity`: a charge's severity counts only when it was decided on one of these bases. Must be sent with `severity`; on its own it is a 422 `invalid_filter_value`.
The SearchFilters object — criminal search filter fieldsrequestpublishedstatute_codestatute_tablecase_typecharge_text—
sort
Result order when `filters` or `locations` are sent. A date sort puts the record's latest date of that kind first and records without one last. A search with neither, and a synchronous live search, keep their usual order.
The SearchRequest objectrequestrelevanceoffenseDatefiledDatedispositionDaterelevance
unknown
What `severity`, `outcome`, `convictedOnly`, `custodyStatus` and the date filters do with a value that is not known. `keep` returns the record and counts it in `counts.unknownKept`; `exclude` removes it and counts it in `counts.filteredOut`.
The SearchFilters object — criminal search filter fieldsrequestkeepexcludekeep
answeredFrom
Present only on an on-file fallback row: the live check could not run, the source's stored records were in the query's scope, so the row was answered from file — `ok: true`, `incomplete: false`, `live: false`, not billed, and `warnings[]` gains a `LIVE CHECK NOT AVAILABLE:` sentence.
The criminal SourceStatus object — one live sourcebothon_file—
caseClass
The class of case.
The NormalizedCase object — case stage and classbothfelonymisdemeanortrafficinfractioncivilunknown—
category
What the charge is about. `other` when no category fits.
The NormalizedCharge object — charge severity and outcomebothsupervisionhomicidesex_offenserobberydomestic_violenceduiassaultweaponsburglaryfraudtheftdrug_distributiondrug_possessiontrafficpublic_orderother—
chargeCategories
Every charge category on the record.
The Normalized object — normalized criminal record fieldsbothsupervisionhomicidesex_offenserobberydomestic_violenceduiassaultweaponsburglaryfraudtheftdrug_distributiondrug_possessiontrafficpublic_orderother—
custodyEvent
A jail event listed against the charge (not a court outcome). `null` when none.
The NormalizedCharge object — charge severity and outcomebothbookedreleasedbondedheldtransferred—
custodyStatus
The person's custody status on this record.
The Normalized object — normalized criminal record fieldsbothin_custodyreleasedon_paroleon_probationactive_warrantwantedregistereddisposedabsconderdeceasedexcludedunknown—
dobPrecision
The kind of birth evidence on file, the same value as `dob.dobPrecision`: `full`, `month_year`, `year`, `age` or `none`.
Criminal record API response fields — the CriminalRecord objectbothfullmonth_yearyearagenone—
dobPrecision
`full` (date set), `month_year` (year and month), `year` (year only), `age` (age only, common on jail rosters), `none` (no birth evidence).
The Dob object — birth evidence fieldsbothfullmonth_yearyearagenone—
dobVerification
How your date was checked. `record`: against birth evidence on the record. `source_confirmed`: the record publishes no date and a live check confirmed the source holds it under your `dob` (`dob.date` stays `null`). `source_not_confirmed`: a live check asked with your date and the source did not return this record; it stays, ranked lower. `unverified`: nothing to check against, including when you sent no birth evidence. `null` on a record fetched by id.
Criminal record API response fields — the CriminalRecord objectbothrecordsource_confirmedsource_not_confirmedunverified—
dropInterpretation
What a departure most likely means for this kind of record: `released` (a jail booking), `source_removed` (a court, prison-system or registry record), `reinstated` (an exclusion-list record that left the list: the person was reinstated or the exclusion term ended), `unknown` (still present, or no reading).
The Lifecycle object — criminal record lifecycle fieldsbothreleasedsource_removedreinstatedunknown—
error.code
Stable machine token. Branch on this, never on `message`. `400 no_report_input`, `403 stats_internal_only`, `404 not_found`, `413 batch_too_large`, `422` for `guard_unbounded_query` · `prefix_too_short` · `invalid_dob` · `invalid_page` · `invalid_body` · `invalid_query` · `invalid_live` · `no_live_sources` · `no_website` · `bad_batch` · `empty_batch` · `query_too_broad` · `invalid_filter_value` · `invalid_date_range` · `invalid_location` · `too_many_locations` · `ambiguous_location` · `radius_too_large` · `filters_with_async_live` · `invalid_group_by` · `invalid_parameter`, `503` for `unavailable` · `catalog_unavailable` · `filters_unavailable` · `stats_unavailable`, `504 upstream_timeout`.
The criminal Error object — API error response fieldsbothno_report_inputnot_foundbatch_too_largeguard_unbounded_queryprefix_too_shortno_live_sourcesno_websitebad_batchempty_batchquery_too_broadinvalid_dobinvalid_pageinvalid_bodyinvalid_queryinvalid_liveinvalid_filter_valueinvalid_date_rangeinvalid_locationtoo_many_locationsambiguous_locationradius_too_largefilters_with_async_liveinvalid_group_byinvalid_parameterstats_internal_onlyunavailablecatalog_unavailablefilters_unavailablestats_unavailableretryupstream_timeout—
eyes
NCIC eye-color code.
The Normalized object — normalized criminal record fieldsbothBLKBLUBROGRNGRYHAZMARPNKMULXXX—
geoPrecision
How precise `lat`/`lng` are; `none` when there are no coordinates.
The NormalizedPlace object — residence and jurisdictionbothrooftopstreetzipnone—
hair
NCIC hair-color code.
The Normalized object — normalized criminal record fieldsbothBLKBROBLNREDGRYWHISDYBLDXXX—
health.freshFor
`daily` when `ageSeconds` is at most 36 hours, `weekly` when at most 8 days; `[]` otherwise. It does not change what a search returns.
The criminal SourceInfo object — one catalog rowbothdailyweekly—
incompleteReason
Why the source fell short, from a closed list. Non-null exactly when `incomplete` is `true`. A failed check is not billed.
The criminal SourceStatus object — one live sourcebothcaptcha_unsolvedproxy_requiredsource_downrate_limitedtruncated_over_cappaid_gatewaylogin_requiredtimeoutunsupported_sitenot_searched—
kind
`criminal_call`: one per search and one per batch row. `criminal_live_source`: one per live search, carrying the completed count.
The criminal MeterEvent object — billing events on a responsebothcriminal_callcriminal_live_source—
level
`county`, `state` or `federal` court.
The Case object — court case fieldsbothcountystatefederalcounty
level
`county`, `state` or `federal`.
The criminal SourceRef object — sources[] fieldsbothcountystatefederalcounty
level
`county`, `state` or `federal`.
The JurisdictionInfo object — one covered jurisdictionbothcountystatefederal—
liveOutcome
Present only with `answeredFrom`: why the live check did not run (an `incompleteReason` token; `not_searched` when the source has no live connector).
The criminal SourceStatus object — one live sourcebothcaptcha_unsolvedproxy_requiredsource_downrate_limitedtruncated_over_cappaid_gatewaylogin_requiredtimeoutunsupported_sitenot_searched—
matchState
How the record matched the `dob`, `birthYear` or `age` you sent, strongest first: `dob_match` (a full date equal to yours, or on a live search confirmed by the source), `year_match` (birth years agree, months too where both publish one), `age_match` (an age consistent with your date, or a record consistent with your age), `no_dob_age_year` (nothing to compare; returned on the name, and the value on every record when you sent no birth evidence). `null` only on [GET /v1/criminal/records/{recordId}](/docs/criminal/record-object#reference-get-v1-criminal-records-recordid), which scores nothing. Records whose evidence contradicts yours are dropped, so `dob_mismatch` never appears.
Criminal record API response fields — the CriminalRecord objectbothdob_matchyear_matchage_matchno_dob_age_year—
mode
Always `"async"`.
The AsyncAccepted objectbothasync—
omittedFields
`["sourceData"]` by default and `[]` when `include: ["sourceData"]` is sent. No record key is withheld either way.
The SearchResponse objectbothsourceData—
omittedFields
As on a search.
The BatchRow object — one row's resultbothsourceData—
outcome
The outcome class.
The NormalizedCharge object — charge severity and outcomebothconvictedpendingdismissednolle_prosequiacquitteddeferred_or_divertedvacatedwarranttransferredclosed_unspecifiedadministrativeunknown—
outcomes
Every outcome class on the record.
The Normalized object — normalized criminal record fieldsbothconvictedpendingdismissednolle_prosequiacquitteddeferred_or_divertedvacatedwarranttransferredclosed_unspecifiedadministrativeunknown—
program
Which list family placed the exclusion: `medicare_medicaid` (the HHS-OIG list, public code `US-EXCLUSION`), `federal_procurement` (a SAM.gov exclusion from a federal agency, `US-EXCLUSION`) or `state_medicaid` (a state Medicaid exclusion or sanction list, `<ST>-EXCLUSION`).
The Exclusion object — exclusion-list record fieldsbothmedicare_medicaidfederal_procurementstate_medicaid—
proof.status
Always `"none"`.
The SearchResponse objectbothnone—
proof.status
Always `"none"`.
The BatchRow object — one row's resultbothnone—
quality
`quarantined` when this source's normalized values are withheld; the record's own fields are unaffected.
The Normalized object — normalized criminal record fieldsbothokquarantined—
race
NCIC race code. `H` only where the source publishes Hispanic as a race. Its own text stays in `race`.
The Normalized object — normalized criminal record fieldsbothWBIAHU—
recordCategory
The kind of record as one closed token: `court`, `jail`, `prison`, `warrant`, `registry`, `exclusion` or `other`. `recordType` keeps the source-specific label; filter on this one.
Criminal record API response fields — the CriminalRecord objectbothcourtjailprisonwarrantregistryexclusionother—
recordCategory
The kind of record.
The Normalized object — normalized criminal record fieldsbothcourtjailprisonwarrantregistryexclusionother—
recordKind
`jail-roster`, `court`, `doc-inmate`, `registry`, `warrant` or `exclusion`.
The JurisdictionInfo object — one covered jurisdictionbothjail-rostercourtdoc-inmateregistrywarrantexclusion—
scope
`county`, `state` or `federal`.
The SearchCoverageSource object — the sources behind a searchbothcountystatefederal—
scope
`county`, `state` or `federal`.
The criminal SourceInfo object — one catalog rowbothcountystatefederal—
severity
`felony`, `misdemeanor` or `infraction`; `null` when the source does not classify it. Do not infer it from `description`.
The Charge object — criminal charge fieldsbothfelonymisdemeanorinfraction—
severity
Felony, misdemeanor or infraction; `unknown` when it cannot be decided.
The NormalizedCharge object — charge severity and outcomebothfelonymisdemeanorinfractionunknown—
severityBasis
What decided `severity`. `null` when `severity` is `unknown`.
The NormalizedCharge object — charge severity and outcomebothpublishedstatute_codestatute_tablecase_typecharge_text—
sex
NCIC sex code. `null` when the source publishes none; its own text stays in `sex`.
The Normalized object — normalized criminal record fieldsbothMFXU—
stage
Where the case stands.
The NormalizedCase object — case stage and classbothopenclosedwarrantunknown—
staleReason
Why the person re-surfaced. `identity_changed` — their name or date of birth changed. `offenses_changed` — their cases or charges changed, including a new booking or case in the same source. `status_changed` — their custody status, release date or facility changed. `stronger_match` — this search matched the person more strongly than the search that was cleared (the subject's date of birth now matches where only the name did). `null` when the person has not re-surfaced.
The RecordClearance object — the clearance attached to a kept recordbothidentity_changedoffenses_changedstatus_changedstronger_match—
status
`complete`: the search finished. `partial`: at least one live source could not be searched to the end, so `records` is a lower bound. A cached search is always `complete`. On `partial`, read `counts.sourcesIncomplete` and `sourceStatus[]` before treating an empty `records` as absence.
The SearchResponse objectbothcompletepartial—
status
`live` (available) or `pending` (not available yet). Present on `sources[]` entries; every `pendingSources[]` entry is pending.
The SearchCoverageSource object — the sources behind a searchbothlivepending—
status
`live` (available today) or `pending` (in the catalog, not available yet).
The criminal SourceInfo object — one catalog rowbothlivepending—
status
Always `"pending"` on the 202.
The AsyncAccepted objectbothpending—
status
`pending` on a `202` poll, `complete` on a `200` poll. A job whose stored query was refused when it ran is not a JobRecord: the poll answers `422` with a criminal `error` object (`query_too_broad`) and the history lists it as `refused`.
The JobRecord object — an async live jobbothpendingcomplete—
status
`complete` or `pending`.
The HistoryEntry object — one prior searchbothcompletepending—
status
`complete`, or `error` when the row failed validation. Batch rows run cached only, so `partial` does not occur.
The BatchRow object — one row's resultbothcompletepartialerror—
tier
`live` for a live job; `core` for a cached search.
The JobRecord object — an async live jobbothcorelive—
tier
`core` (cached) or `live`.
The HistoryEntry object — one prior searchbothcorelive—
topSeverity
The highest severity of any charge on the record.
The Normalized object — normalized criminal record fieldsbothfelonymisdemeanorinfractionunknown—
verdict
Always `not_this_person`; a `this_person` verdict never removes a record.
The ClearedEntry object — one person a clearance hid from this responsebothnot_this_person—
verdict
The verdict recorded for this person and subject.
The RecordClearance object — the clearance attached to a kept recordbothnot_this_personthis_person—