Skip to main content
These scenarios cover the primary decision paths, error conditions, and edge cases your integration should handle. Each happy-path scenario includes a real sample response you can use as a reference for field mapping and assertion logic.

Scenario Summary


Scenario 1 — Single Offense, Not Reportable

Search ID: 40929433 | Candidate: Ebony Ferrell | State: TX | Type: USA_CRIMINAL_PLUS A single speeding charge auto-cleared by traffic exclusion rules. Simplest possible path. What to Assert:
  • decision.record_decision = NOT_REPORTABLE
  • decision.search_queue = Automation
  • 1 court, 1 case, 1 offense
  • case_decision = NOT_REPORTABLE, case_queue = Automation
  • charge_decision = NOT_REPORTABLE, needs_human_review = false
  • routing.queue = Automation, routing.is_automatable = true
  • cited_rules includes GENERAL_TRAFFIC_NON_REPORT, EXCLUSION_FILTER_CHARGE
  • id_match.is_match = true, match_score = 0.85

Scenario 2 — Multiple Offenses, All Not Reportable

Search ID: 40832032 | Candidate: Erline Lacombe | State: FL | Type: USA_CRIMINAL_OFFENDER Three charges across three court searches — a traffic violation (guilty but old), and two battery charges with “No Information” dispositions. All cleared by rules. What to Assert:
  • decision.record_decision = NOT_REPORTABLE
  • decision.search_queue = Automation
  • 3 courts, 3 cases, 3 offenses — all NOT_REPORTABLE / Automation
  • Different rules applied per charge: traffic rules vs. disposition-based rules
  • id_match.match_score = 0.85 on all cases

Scenario 3 — Dismissed Traffic Charges, Low Identity

Search ID: 41537337 | Candidate: Brian Briley | State: KS | Type: USA_CRIMINAL_OFFENDER Four dismissed traffic charges across two court searches. Identity match is Not Enough Info (40%) — only DOB matched, name did not. All charges still routed to Automation because they are Not Reportable regardless of identity level. What to Assert:
  • decision.record_decision = NOT_REPORTABLE
  • decision.search_queue = Automation
  • id_match.is_match = false, match_score = 0.40
  • routing.identity_level = Not Enough Info on all offenses
  • All 4 offenses: charge_decision = NOT_REPORTABLE, routing.queue = Automation

Scenario 4 — Mixed Cases: Reportable + Not Reportable

Search ID: 41991032 | Candidate: Michealah Hartman | State: IA | Type: County_criminal Five cases under one court search. One DUI conviction is REPORTABLE (Auditor queue), four traffic charges are NOT_REPORTABLE (Automation). The single reportable case escalates the entire search to REPORTABLE / Auditor. What to Assert:
  • decision.record_decision = REPORTABLE (escalated by 1 reportable case)
  • decision.search_queue = Auditor (Auditor > Automation in rollup)
  • Case 08291 OWIN027732: case_decision = REPORTABLE, case_queue = Auditor
  • Other 4 cases: case_decision = NOT_REPORTABLE, case_queue = Automation
  • Reportable offense: cited_rules includes GENERAL_DUI_MISD_REPORTABLE

Scenario 5 — Reportable with Multiple Convictions

Search ID: 41274791 | Candidate: Vanessa Stanley | State: CA | Type: County_criminal Three guilty charges in Colorado — Disturbing the Peace, Assault, and Public Fighting. All are reportable under state-specific rules with legal citations. What to Assert:
  • decision.record_decision = REPORTABLE
  • decision.search_queue = Auditor
  • All 3 offenses: charge_decision = REPORTABLE
  • cited_rules includes state-specific CO_CONV_NO_STATE_LIMIT
  • citations populated with Colorado statute references
  • routing.reportability = Not Enough Info (insufficient reportability data despite conviction)

Scenario 6 — Insufficient Data, Medium Identity

Search ID: 41002798 | Candidate: TIM TAYLOR | State: KS | Type: County_criminal Identity match is Medium (80%, below the 85% threshold) with identity_insufficient: true. Mixed offense decisions — some reportable (guilty pleas), some dismissed. The insufficient identity data escalates the reportable charges to Insufficient Data queue. What to Assert:
  • decision.record_decision = MANUAL_REVIEW
  • decision.search_queue = Insufficient Data
  • id_match.is_match = false, match_score = 0.80, identity_insufficient = true on reportable charges
  • Reportable charges → routing.queue = Insufficient Data (because identity is insufficient)
  • Dismissed charges → routing.queue = Automation (Not Reportable bypasses identity concern)
  • routing.identity_level = Not Enough Info on reportable charges, Medium on dismissed charges

Scenario 7 — Insufficient Reportability Data

Search ID: 40697757 | Candidate: Bryanna Carr | State: NC | Type: USA_CRIMINAL Identity qualifies as a match (85%) but offense data is too sparse — charges are “Not Specified” with missing dispositions. The engine cannot determine reportability, so charges go to MANUAL_REVIEW and route to Auditor. What to Assert:
  • decision.record_decision = REPORTABLE
  • decision.search_queue = Auditor
  • id_match.is_match = true, match_score = 0.85
  • charge_decision = MANUAL_REVIEW (not enough info to auto-decide)
  • routing.reportability = Not Enough Info
  • routing.reportability_insufficient = true
  • cited_rules = [] (no rules could be applied)
  • validation.issues.errors count = 16 (extensive missing data)

Error and Edge-Case Scenarios

Input Validation Errors (HTTP 422)

cases[] Behavior

Processing Failures — Court Search ID / Offense ID Count Mismatch (HTTP 500 on /evaluate)

Authentication Errors (HTTP 401/403)

Rate Limiting (HTTP 429)

Rate limits are enforced per API key. Include retry logic with exponential backoff for 429 responses. Contact the AI Team for your account’s specific limit.

Identity Match and Routing Impact

Identity matching determines who the record belongs to. The identity score directly controls which routing queue a charge is assigned to.

Identity-to-Routing Matrix

Routing is driven by whether the identity matches the candidate (is_match) and the charge’s reportability:

How Identity Score is Calculated

Common Score Scenarios

Identity Impact in Our Samples

Search Type Differences

The ubs_search_type field in the response reflects the type of search that was requested. The response format is identical across all types.

Rationale Structure Guide

Each offense in the response includes a rationale field (human-readable text) and a cited_rules array (machine-readable rule identifiers). Your back-office can aggregate these to build case-level summaries.

Per-Offense Fields

Building a Case-Level Rationale

To build the format:
Map from these response fields:

Example — Scenario 4 (Mixed Decisions)

From search 41991032, case 08291 OWIN027732:
From the same search, case 08291 NTA0064479:

Queue Rollup Logic

Offense-level queues roll up to case, court, and search level using a fixed precedence.

Precedence (highest wins)

  1. Insufficient Data — if any child queue is Insufficient Data, the parent is Insufficient Data
  2. Auditor — if any child queue is Auditor, the parent is Auditor
  3. Automation — parent is Automation only when every child is Automation

Rollup Examples from Our Samples

Scenario 4 — One reportable escalates the whole search:
Scenario 6 — Insufficient data overrides everything:
Scenario 2 — Clean automation:

Field Reference

Response Envelope

Decision Fields

Offense Fields

Validation Fields


Decision Flow