Look up a case or citation (read-only, no side effects)
Read-only NC case/citation lookup for agents: returns case status, upcoming hearings, charges, and traffic-citation waiver eligibility. Unlike /api/court-date-lookup it does NOT send email or create any records. Also exposed as the lookup_court_case tool on the MCP server at https://mcp.courtdelta.com/mcp.
Request
- Base URL: https://app.courtdelta.com
- URL: https://app.courtdelta.com/api/case-lookup-public
- Auth: none required
Query parameters
NC case number (e.g. 26CV001234-012) or citation number (e.g. 92403H2).
Response
Trimmed, read-only case summary
Normalized case category from the case-number class code (e.g. 21CVS→civil, 25CR→criminal, 15SP→special_proceeding). Use this to interpret null fields: on a NON-criminal category, bailRisk:null and citationOptions:null mean NOT APPLICABLE, not 'none found'. null only on not_found.
Traffic-citation waiver eligibility AND reduction guidance; present only when the case has traffic charges AND is still open. NULL on disposed/closed cases — the reduction path (amountDue, Guide & File, DA) is no longer a live option once disposed. Fields: requiresAppearance, allWaivable, conditional, isSpeeding, charges[] (per-charge class + reason, plus viaCompanionCharge:true where a charge is waivable alone but mandatory on this citation under AOC mandatory item #39), county, onlineReductionAvailable, guideAndFileUrl (NC Guide & File online reduction link when available), drivingRecordUrl (for speeding), documentsNeeded[], amountDue (fine + court costs), and howToRequest (plain-language next step — online via Guide & File, or in person via the District Attorney).
Link to the full case view (all public case detail) on Court Delta. Present for agent-surface (MCP/WebMCP) lookups of real cases; null otherwise.
Bail / FTA underwriting signals for criminal cases with a bond or bail activity; null otherwise. Fields: hasBond, bond{amount,type,secured}, ftaCount (distinct failure-to-appear instances, date-deduped; excludes stricken/entered-in-error entries), ftaDates[] (Register-of-Actions event dates — NOT hearing-calendar dates; an FTA need not map 1:1 to a row in pastHearings), ftaEvents[] ({date, description} of the actual counted FTA register entries, after the stricken/in-error exclusion — for auditing that nothing voided is counted), ordersForArrest (distinct FTA-triggered arrest-order ISSUANCES; excludes the initial charge warrant and Returned/Assigned lifecycle updates), bondExecutedOn (the 'Bond Posted' docket date for the operative bond — the latest posting on or before the forfeiture notice; null when no posting is docketed), priorFtasAtExecution (FTAs dated strictly BEFORE bondExecutedOn — the count NCGS §15A-544.5(f) actually turns on, not the case total; null when the execution date is unknown), setAsideBarInapplicable (RELIABLE: true when 0-1 FTAs preceded execution, so (f) cannot bar a set-aside — safe to state affirmatively), setAsideBarPossible (NOT a finding that the bar applies — true only means the TIMING fits (2+ prior FTAs). Under (f) actual notice exists ONLY where a judicial official noted the prior failures on the defendant's release order, and the register never exposes that notation, so NEVER report this as 'the forfeiture cannot be set aside'; say the timing is consistent and the release order must be checked. Both booleans are false when bondExecutedOn is null — neither ruled out nor suggested. NOTE the superseded setAsideBlocked field used ftaCount>=2, which ignored timing and was wrong in most cases where it fired; for the forward-looking question 'could a bond I write NOW be barred?' use ftaCount instead), releaseOrderUrl (portal PDF of the release order governing that bond — the latest one issued on or before bondExecutedOn. This is the document the (f) question turns on: the judicial official's 'second or subsequent failure to appear' notation appears on it (AOC-CR-200) and exists in NO structured field. PRESENT THIS LINK whenever setAsideBarPossible is true, even when releaseOrderFBox resolved the question — the order is the authority and the user can open it), releaseOrderFBox (a READ of that checkbox, present only on barred cases where the order could be fetched and parsed. 'unchecked' = on its face (f) does NOT bar a set-aside, so relief is worth pursuing — say so and add that they should confirm on the order; 'checked' = (f) MAY bar it, so never say 'cannot be set aside' and tell them to confirm BEFORE filing, because a failed motion uses up the single opportunity for relief; 'ambiguous' = the order was opened and the box could NOT be read — say exactly that and hand over the link, because the notation is a flattened checkbox with no glyph in the text layer so the printed label appears whether or not it is marked, and rounding this to 'unchecked' tells a bondsman to abandon a recoverable bond; absent/null = no read was attempted or it failed, which is ALSO not 'unchecked'), forfeiture{status (none|noticed|in_effect|set_aside|final_judgment) — reflects the latest DOCKETED forfeiture event and may lag the clock; noticedOn (the date the 150 days runs from) with noticeAnchor telling you where it came from — 'notice_event' = an explicit forfeiture NOTICE docket line, which is what G.S. 15A-544.5(d)(1a) anchors to; 'earliest_forfeiture_event' = no notice line was docketed so the earliest forfeiture entry (usually 'Bond Forfeited') stands in, which is EARLIER than a true notice, making the deadline conservative but a proxy (and daysFtaToNotice then measures FTA-to-forfeiture, not FTA-to-notice); deadline (notice + 150 days), daysRemaining, windowOpen — windowOpen/daysRemaining are computed live and are the AUTHORITATIVE 'is the set-aside window open' signal, so once windowOpen is false the ordinary window has closed even if status still reads in_effect (no final-judgment event is docketed); deadlineNextBusinessDay = the first day the clerk's office is open on or after deadline (equal to deadline when that is already a business day, later when it lands on a weekend or NC court holiday) — ADVISORY ONLY, it never moves daysRemaining/windowOpen, and null means UNDETERMINED (the deadline year is outside the published NC holiday calendar), NOT 'no adjustment needed'; triggeringFta = the latest counted FTA on or before noticedOn and daysFtaToNotice = the calendar-day gap between them — a factual OBSERVATION about the register (how long after the failure the notice was docketed), deliberately reported without any threshold or defect flag, since whether a given gap affects the notice's validity is a legal question for counsel}, forfeitureProceeding (true when THIS record is the standalone 'Bond Forfeiture' civil docket rather than the criminal case — the bond/FTA/OFA data then lives on the Criminal record under the same case number, so hasBond:false and zero counts here mean 'not on this docket', not 'clean'), agent (bonding agent — the Fiduciary party), and surety (insurer — the Surety party). All from public NC eCourts records. Informational, not legal advice.
Changes
No recorded changes to this operation across all 1 revision of this API.