---
title: "Which expunction statute and AOC petition form fit how each charge ended"
method: GET
path: "/api/expunction-options"
---

# Which expunction statute and AOC petition form fit how each charge ended

`GET /api/expunction-options`

## Request

- Base URL: `https://app.courtdelta.com`
- URL: `https://app.courtdelta.com/api/expunction-options`
- Auth: none required

Reads a case's per-charge dispositions and routes each to the NC expunction statute(s) covering that outcome, with AOC petition/instruction links, the filing county, and the fee. CHECK `automaticExpunction` FIRST AND LEAD WITH IT: under G.S. 15A-146(a4) a case where EVERY charge was dismissed without leave, dismissed by the court, or ended in a not-guilty/not-responsible finding — all disposed on or after 12/01/2021, with no felony dismissed pursuant to a plea agreement — is expunged BY OPERATION OF LAW, with NO petition, NO form and NO fee. That is the one determination this endpoint makes, and it is safe because (a4) turns only on how the charges on this case ended, not on anything person-level; `determinable:false` means the record could not answer (an undisposed or unrecognised disposition) and must not be read as a 'no'. Do not lead with petition forms when `applies` is true. TIMING DEPENDS ON `automaticExpunction.regime` AND THE WINDOW IS NOT ALWAYS AVAILABLE — check `windowDeterminable` before using `windowOpens`/`windowCloses`. `current` = the 180-210 day rule, windows populated. `original` (disposed 12/01/2021-07/31/2022) = the programme ran immediately with no delay, windows NULL, it should already have happened. `backlog` (disposed during the statutory suspension 08/01/2022-07/01/2024) = windows NULL, NCAOC had until 07/01/2025 to clear the backlog. NEVER invent a window when `windowDeterminable` is false — a fabricated past date tells someone a deadline passed when none ever ran; the `notes` array carries the correct wording per regime. Point at the clerk in `fileInCounty` BY NAME: under G.S. 15A-151(a2) a clerk cannot disclose another county's expunged record. Both limits of an (a4) expunction belong in any answer: G.S. 15A-150(b)'s agency-notice requirement does NOT apply to automatic expunctions, so other agencies may never learn of it; and under 15A-151(a1)/(a2) the record is retained by the clerk as a confidential file, with AOC holding electronic copies, still disclosable to the person, their attorney, the DA and the Appellate Defender — 'gone from the public index' is not 'gone'. OTHERWISE THIS ROUTES; IT DOES NOT DETERMINE ELIGIBILITY. Eligibility is person-level — a disqualifying conviction anywhere bars relief and identity cannot be confirmed here (DOB rarely published, masked to the year); a prior expunction can itself disqualify and an expunged case is REMOVED from the record, so that disqualifier is structurally invisible; and some expunctions bar future ones, so which statute you petition under matters. 'Not yet eligible' is safe to say (it is arithmetic); 'eligible' never is. Waiting periods are G.S. 15A-145.5(c): 3 years one nonviolent misdemeanour, 7 more than one, 10 one nonviolent felony, 15 for 14-54(a) breaking/entering, 20 for two or three felonies — and THE DATE RETURNED IS THE EARLIEST POSSIBLE, because the statute runs the clock from conviction OR completion of any sentence/probation/post-release supervision, whichever is later, and completion dates are not in the record. Per charge, `family` is dismissed | acquitted | convicted | pjc | unknown: a dismissal with `withLeave:true` can be REINSTATED by the State (and defeats (a4)); `perPleaAgreement:true` routes to the deferred-prosecution branch of 15A-146; 'acquitted' is a not-guilty/not-responsible finding, routing to 15A-146(a2) and qualifying under (a4); 'pjc' is neither conviction nor dismissal so no statute is suggested; 'unknown' means the register text did not map (e.g. 'Superior Process/ Probation Other') and the full table is returned instead — do not guess. A charge with `probationMatter:true` is the exception: that is a G.S. 15A-1344/1345 probation proceeding, not a charge, and it returns NO statutes by design — an empty list there is an answer, not a gap. It is not a conviction and not a bar; any petition belongs on the underlying conviction file, in the county where that conviction was entered (G.S. 15A-150(b)). Impaired-driving charges return no statutes (G.S. 15A-145.5(a1)). G.S. 15A-146(a6): a court may grant a petition under that section without a hearing except where it provides otherwise. Also exposed as the `check_expunction_options` MCP tool.

## Query parameters

- `case` string
- `felony` boolean
- `convictionCount` integer

## Response `200`

Per-charge routing, filing details and caveats

## Other responses

- `400`: Not a valid NC case number
- `502`: The court record service could not be reached

---

[API](https://skmtc.dev/courtdelta/apis/court-delta-public-api.md) · [All operations](https://skmtc.dev/courtdelta/apis/court-delta-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/courtdelta/apis/court-delta-public-api/revisions/813e5b14be89?raw)
