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
| Field | Where | Direction | Values | Default |
|---|---|---|---|---|
chargeCategoriesWhat the charge is about. | The SearchFilters object — criminal search filter fields | request | supervisionhomicidesex_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 fields | request | anyall | any |
clearanceModeWhat 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 object | request | suppressannotateignore | suppress |
custodyStatusThe record's custody status. With `unknown: "keep"` a record whose status is unknown also passes. | The SearchFilters object — criminal search filter fields | request | in_custodyreleasedon_paroleon_probationactive_warrantwantedregistereddisposedabsconderdeceasedexcluded | — |
includeExtra 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 object | request | sourceDatacoverageexclusionsfacetsnormalizedDetail | — |
includeApplied to every row, as on a search. | The BatchEnvelope object | request | sourceDatacoverageexclusions | — |
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 fields | request | residencejurisdictionany | any |
nameStrategyHow 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 filter | request | prefixexact | prefix |
nameStrategySurname strategy applied to every row that does not set its own. | The BatchEnvelope object | request | prefixexact | — |
outcomeCharge outcome class. With `unknown: "keep"` a charge whose outcome is unknown also passes. | The SearchFilters object — criminal search filter fields | request | convictedpendingdismissednolle_prosequiacquitteddeferred_or_divertedvacatedwarranttransferredclosed_unspecifiedadministrative | — |
recordCategoryThe kind of record (`normalized.recordCategory`). | The SearchFilters object — criminal search filter fields | request | courtjailprisonwarrantregistryexclusionother | — |
scope`"matched"` re-checks every jurisdiction that produced a cached hit for this query. | The LiveRequest object — the live block | request | matched | — |
severityCharge severity. With `unknown: "keep"` an unclassified charge also passes. | The SearchFilters object — criminal search filter fields | request | felonymisdemeanorinfraction | — |
severityBasisNarrows `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 fields | request | publishedstatute_codestatute_tablecase_typecharge_text | — |
sortResult 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 object | request | relevanceoffenseDatefiledDatedispositionDate | relevance |
unknownWhat `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 fields | request | keepexclude | keep |
answeredFromPresent 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 source | both | on_file | — |
caseClassThe class of case. | The NormalizedCase object — case stage and class | both | felonymisdemeanortrafficinfractioncivilunknown | — |
categoryWhat the charge is about. `other` when no category fits. | The NormalizedCharge object — charge severity and outcome | both | supervisionhomicidesex_offenserobberydomestic_violenceduiassaultweaponsburglaryfraudtheftdrug_distributiondrug_possessiontrafficpublic_orderother | — |
chargeCategoriesEvery charge category on the record. | The Normalized object — normalized criminal record fields | both | supervisionhomicidesex_offenserobberydomestic_violenceduiassaultweaponsburglaryfraudtheftdrug_distributiondrug_possessiontrafficpublic_orderother | — |
custodyEventA jail event listed against the charge (not a court outcome). `null` when none. | The NormalizedCharge object — charge severity and outcome | both | bookedreleasedbondedheldtransferred | — |
custodyStatusThe person's custody status on this record. | The Normalized object — normalized criminal record fields | both | in_custodyreleasedon_paroleon_probationactive_warrantwantedregistereddisposedabsconderdeceasedexcludedunknown | — |
dobPrecisionThe 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 object | both | fullmonth_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 fields | both | fullmonth_yearyearagenone | — |
dobVerificationHow 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 object | both | recordsource_confirmedsource_not_confirmedunverified | — |
dropInterpretationWhat 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 fields | both | releasedsource_removedreinstatedunknown | — |
error.codeStable 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 fields | both | no_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 | — |
eyesNCIC eye-color code. | The Normalized object — normalized criminal record fields | both | BLKBLUBROGRNGRYHAZMARPNKMULXXX | — |
geoPrecisionHow precise `lat`/`lng` are; `none` when there are no coordinates. | The NormalizedPlace object — residence and jurisdiction | both | rooftopstreetzipnone | — |
hairNCIC hair-color code. | The Normalized object — normalized criminal record fields | both | BLKBROBLNREDGRYWHISDYBLDXXX | — |
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 row | both | dailyweekly | — |
incompleteReasonWhy 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 source | both | captcha_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 response | both | criminal_callcriminal_live_source | — |
level`county`, `state` or `federal` court. | The Case object — court case fields | both | countystatefederal | county |
level`county`, `state` or `federal`. | The criminal SourceRef object — sources[] fields | both | countystatefederal | county |
level`county`, `state` or `federal`. | The JurisdictionInfo object — one covered jurisdiction | both | countystatefederal | — |
liveOutcomePresent 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 source | both | captcha_unsolvedproxy_requiredsource_downrate_limitedtruncated_over_cappaid_gatewaylogin_requiredtimeoutunsupported_sitenot_searched | — |
matchStateHow 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 object | both | dob_matchyear_matchage_matchno_dob_age_year | — |
modeAlways `"async"`. | The AsyncAccepted object | both | async | — |
omittedFields`["sourceData"]` by default and `[]` when `include: ["sourceData"]` is sent. No record key is withheld either way. | The SearchResponse object | both | sourceData | — |
omittedFieldsAs on a search. | The BatchRow object — one row's result | both | sourceData | — |
outcomeThe outcome class. | The NormalizedCharge object — charge severity and outcome | both | convictedpendingdismissednolle_prosequiacquitteddeferred_or_divertedvacatedwarranttransferredclosed_unspecifiedadministrativeunknown | — |
outcomesEvery outcome class on the record. | The Normalized object — normalized criminal record fields | both | convictedpendingdismissednolle_prosequiacquitteddeferred_or_divertedvacatedwarranttransferredclosed_unspecifiedadministrativeunknown | — |
programWhich 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 fields | both | medicare_medicaidfederal_procurementstate_medicaid | — |
proof.statusAlways `"none"`. | The SearchResponse object | both | none | — |
proof.statusAlways `"none"`. | The BatchRow object — one row's result | both | none | — |
quality`quarantined` when this source's normalized values are withheld; the record's own fields are unaffected. | The Normalized object — normalized criminal record fields | both | okquarantined | — |
raceNCIC race code. `H` only where the source publishes Hispanic as a race. Its own text stays in `race`. | The Normalized object — normalized criminal record fields | both | WBIAHU | — |
recordCategoryThe 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 object | both | courtjailprisonwarrantregistryexclusionother | — |
recordCategoryThe kind of record. | The Normalized object — normalized criminal record fields | both | courtjailprisonwarrantregistryexclusionother | — |
recordKind`jail-roster`, `court`, `doc-inmate`, `registry`, `warrant` or `exclusion`. | The JurisdictionInfo object — one covered jurisdiction | both | jail-rostercourtdoc-inmateregistrywarrantexclusion | — |
scope`county`, `state` or `federal`. | The SearchCoverageSource object — the sources behind a search | both | countystatefederal | — |
scope`county`, `state` or `federal`. | The criminal SourceInfo object — one catalog row | both | countystatefederal | — |
severity`felony`, `misdemeanor` or `infraction`; `null` when the source does not classify it. Do not infer it from `description`. | The Charge object — criminal charge fields | both | felonymisdemeanorinfraction | — |
severityFelony, misdemeanor or infraction; `unknown` when it cannot be decided. | The NormalizedCharge object — charge severity and outcome | both | felonymisdemeanorinfractionunknown | — |
severityBasisWhat decided `severity`. `null` when `severity` is `unknown`. | The NormalizedCharge object — charge severity and outcome | both | publishedstatute_codestatute_tablecase_typecharge_text | — |
sexNCIC sex code. `null` when the source publishes none; its own text stays in `sex`. | The Normalized object — normalized criminal record fields | both | MFXU | — |
stageWhere the case stands. | The NormalizedCase object — case stage and class | both | openclosedwarrantunknown | — |
staleReasonWhy 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 record | both | identity_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 object | both | completepartial | — |
status`live` (available) or `pending` (not available yet). Present on `sources[]` entries; every `pendingSources[]` entry is pending. | The SearchCoverageSource object — the sources behind a search | both | livepending | — |
status`live` (available today) or `pending` (in the catalog, not available yet). | The criminal SourceInfo object — one catalog row | both | livepending | — |
statusAlways `"pending"` on the 202. | The AsyncAccepted object | both | pending | — |
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 job | both | pendingcomplete | — |
status`complete` or `pending`. | The HistoryEntry object — one prior search | both | completepending | — |
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 result | both | completepartialerror | — |
tier`live` for a live job; `core` for a cached search. | The JobRecord object — an async live job | both | corelive | — |
tier`core` (cached) or `live`. | The HistoryEntry object — one prior search | both | corelive | — |
topSeverityThe highest severity of any charge on the record. | The Normalized object — normalized criminal record fields | both | felonymisdemeanorinfractionunknown | — |
verdictAlways `not_this_person`; a `this_person` verdict never removes a record. | The ClearedEntry object — one person a clearance hid from this response | both | not_this_person | — |
verdictThe verdict recorded for this person and subject. | The RecordClearance object — the clearance attached to a kept record | both | not_this_personthis_person | — |