Skip to main content
Glama

Which North Carolina (NC) expunction statute and petition form fit a case

check_expunction_options
Read-only

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

Reads the case's actual per-charge dispositions and routes each one to the statute(s) that cover that outcome, with the petition and instruction-sheet links, where to file, and the fee. Call with no caseNumber to get the whole statute table.

CHECK automaticExpunction FIRST AND LEAD YOUR ANSWER 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. NOTHING IS FILED. No petition, no form, no fee.

When applies is true, the correct answer to "what do I file?" is "nothing". Do NOT lead with the petition forms; sending someone to a clerk with a $175 fee discussion when the charges expunge themselves for free is a wrong answer. The petition routing is the fallback if the automatic expunction does not in fact occur.

THE TIMING DEPENDS ON regime, AND THE WINDOW IS NOT ALWAYS AVAILABLE. Automatic expunction has been through three implementations, so read regime before quoting any date, and check windowDeterminable before using windowOpens/windowCloses:

"current" — the 180-210 day rule. windowOpens/windowCloses are populated: say "it happens on its own between and ". "original" — disposed 12/01/2021-07/31/2022, when the programme ran immediately with no delay. Windows are NULL. Say it should ALREADY have happened. "backlog" — disposed during the statutory suspension (08/01/2022-07/01/2024). Windows are NULL. NCAOC had until 07/01/2025 to clear the backlog. Say that, and that a case still showing is a question for the clerk. "pre_a4" — outside the subsection; applies is false anyway.

NEVER invent a window when windowDeterminable is false. A fabricated past date is worse than saying the timing does not reduce to one — it tells someone a deadline passed when no deadline ever ran. The notes array already carries the right wording for each regime; prefer it to composing your own.

POINT AT THE CLERK IN THE COUNTY OF DISPOSITION, by name — it is in fileInCounty. Under G.S. 15A-151(a2) a clerk may not disclose an expunged record from any other county, so "ask the clerk" without naming which one sends people somewhere that cannot help them.

AN (a4) EXPUNCTION IS NARROWER THAN PEOPLE EXPECT, and both limits belong in your answer: G.S. 15A-150(b)'s requirement that the clerk notify other agencies does NOT apply to automatic expunctions, so other agencies may never learn of it and are not obliged to clear their own records; and under G.S. 15A-151(a1)/(a2) the record is not destroyed — it is retained by the clerk as a confidential file, with AOC holding electronic copies, still disclosable to the person, their attorney, the district attorney and the Appellate Defender. "Gone from the public index" is not "gone".

THIS IS THE ONE DETERMINATION THIS TOOL MAKES, and it is safe precisely because (a4) turns only on how the charges on THIS case ended — which the record shows in full — and not on anything person-level. determinable: false means the record could not answer (a charge with no disposition, an unrecognised disposition); say so rather than treating it as a "no".

EVERYTHING ELSE ROUTES. IT DOES NOT DECIDE ELIGIBILITY, and you must not present it as doing so. Three reasons, all of which belong in your answer when someone asks "can I get this expunged?":

  • Eligibility is PERSON-level. A disqualifying conviction anywhere bars relief, and this data cannot confirm identity — date of birth is rarely published and is masked to the year, and common names collide heavily.

  • A prior expunction can itself disqualify, and an expunged case is REMOVED from the court record — so the very thing that would disqualify someone is invisible here.

  • Some expunctions bar future ones, so which statute you petition under matters. The North Carolina (NC) Courts guidance is to consult an attorney about that choice.

"NOT YET ELIGIBLE" IS SAFE TO SAY when a waiting period plainly hasn't run — that is arithmetic. "Eligible" is never safe to say.

WAITING PERIODS come from G.S. 15A-145.5(c): 3 years for one nonviolent misdemeanour, 7 for more than one, 10 for one nonviolent felony, 15 for breaking or entering under 14-54(a), 20 for two or three felonies. THE DATE RETURNED IS THE EARLIEST POSSIBLE. The statute runs the clock from conviction OR from completion of any active sentence, probation or post-release supervision, WHICHEVER IS LATER — and completion dates are not in this record. Say the date is a floor, not a target.

waiting CARRIES TWO DATES. ALWAYS LEAD WITH earliestConservative, and NEVER quote earliestAlternative on its own when the two differ.

  • earliestConservative — the later, safer date. Lead with this.

  • earliestAlternative — the earlier date, ignoring any sentence. Labelled, never the headline.

  • clockRunsFrom — the date the arithmetic started. Equal dates (fine-only, or no supervision visible in the record) — give one date.

WHAT THE TWO DATES MEAN DEPENDS ON THE SUBSECTION, and only one of them is genuinely ambiguous:

  • 15A-145.5(c)(1)a (3 years, one nonviolent misdemeanour) reads "three years after the date of the conviction or when any active sentence, period of probation, or post-release supervision has been served, whichever occurs later." That admits two readings — later-of-the-two, or three-years-from-completion — and the School of Government flags it as unsettled. Here the alternative really is a second legal reading. A clerk may be applying either.

  • (c)(1)b, (c)(2)a, (c)(2)a1, (c)(2)b (7/10/15/20 years) read "N years after the date of conviction or N years after the sentence has been served, whichever later." SOG treats that as N years FROM COMPLETION. There is no second reading: the "alternative" is merely conviction + N with the sentence ignored, which is not a position anyone holds. Do not present it as a competing interpretation. In every case, if the record cannot show when probation or supervision ended — and it usually cannot — the true date may be LATER than either date printed. Say that.

THE YEAR COUNT IS NOT THE AMBIGUITY. S.L. 2025-71 cut the single-misdemeanour wait from five years to three for petitions filed on or after 09 July 2025, and this tool returns the current three. AOC-CR-298 (Rev. 1/23) still prints five — the form is behind the statute. Any "AOC-CR-298 takes the conservative reading" language in waiting.note refers to WHICH EVENT STARTS the clock, never to the number of years. Do not let the form drag the wait back to five.

reduced / reducedTo per charge: the charge was amended to a lesser offence before disposition, and reducedTo names it. Routing follows the charge AS ADJUDICATED, so a reduction can change the class, the waiting statute, and whether the (a4) felony-plea exception bites. Name the lesser offence, or the reader will think you scored the original line on their citation.

ONLY WHEN THE RECORD SHOWS THE LESSER. reduced: true with a named reducedTo means the disposed offence was actually resolved. A plea of "Responsible to Lesser" whose disposed statute never attaches is NOT that: abstain on routing rather than guessing which lesser offence was meant. Note also that conviction of a lesser does not expunge the greater charge without an express dismissal of it.

family per charge: "dismissed", "acquitted", "convicted", "pjc", or "unknown". Treat each differently:

  • dismissed + withLeave: true → the State may still REINSTATE the charge. Flag it, and note it also defeats automatic expunction under (a4).

  • dismissed + perPleaAgreement: true → 15A-146 treats dismissals pursuant to deferred prosecution or conditional discharge differently from plain ones.

  • "acquitted" → found not guilty or not responsible at trial. Routes to 15A-146(a2), and qualifies for automatic expunction under (a4).

  • "pjc" → neither conviction nor dismissal; no statute is suggested, by design.

  • "unknown" → the register text didn't map (e.g. "Superior Process/ Probation Other"). The full statute table comes back instead. Do NOT guess an outcome. EXCEPT where probationMatter is true — see below.

probationMatter: true per charge: the row is a G.S. 15A-1344/1345 PROBATION PROCEEDING, not a charge. A violation hearing on a judgment entered elsewhere, often in another county.

  • It returns NO statutes, and that empty list is an ANSWER, not a gap. This is the one place the "unknown → here is the whole statute table" rule above does not apply: the outcome text ("Violated probation by admission") maps to no family, but nothing is unclear — there is simply no charge here to route.

  • Do NOT read "Admits Violation" or "Probation Revoked" as a conviction. A probation violation is not a conviction of a crime and has no 145.x petition of its own.

  • It is NOT a bar. It does not stop the underlying conviction being expunged later, and if that case is expunged these entries go with it under G.S. 15A-150(b). Any petition belongs on the conviction file, in the county where the conviction was entered.

  • It makes automaticExpunction.applies false and determinable TRUE. (a4) requires every CHARGE to be dismissed/not-guilty/not-responsible, and a probation matter is none of those. Say the case does not expunge automatically — do not say the tool cannot tell.

  • "OUT OF COUNTY" in the offense text is the venue of the probation hearing only. It does not move where an expunction of the underlying case is filed.

An impaired-driving charge returns no statutes: G.S. 15A-145.5(a1) makes it ineligible.

G.S. 15A-146(a6): a court may grant a petition under that section WITHOUT a hearing, except where the section says otherwise. Do not tell someone to expect a hearing on a 15A-146 petition as though it were automatic.

Read-only. NC only. Informational, not legal advice.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
felonyNo
caseNumberNo
convictionCountNo

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only cover readOnlyHint and openWorldHint, so the description carries the behavioral burden and does so in depth: it discloses that the (a4) determination is the tool's single decision, that everything else merely routes, that determinable:false is not a 'no', that eligibility is person-level and unverifiable here, and that an (a4) expunction is not destruction. This is far beyond what the annotations convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The first sentence front-loads purpose and the regime/family sections are clearly delimited, so structure is deliberate rather than rambling. But the description runs to roughly a thousand words of all-caps imperatives with repeated ALWAYS/NEVER/DO NOT directives, which is well past the size an agent needs and dilutes the highest-priority instruction.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, yet the description still supplies the interpretive meaning of the fields (regime, windowDeterminable, waiting dates, family, probationMatter, automaticExpunction) that the schema alone cannot convey. Given the legal nuance and the tool's narrow decision surface, nothing essential for correct invocation or correct phrasing of the answer is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across three parameters, so the description must compensate — and it only partly does. `caseNumber` is explained (omit it to get the whole statute table), but `felony` and `convictionCount` are never addressed: nothing tells the agent when to set felony or whether convictionCount feeds the 145.5(c) waiting-period arithmetic shown in the output. An agent must guess how two of the three inputs affect behaviour.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening line states a precise verb+resource: routing each charge's disposition to the NC expunction statute and AOC petition form, with links, venue and fee. It is immediately distinguishable from siblings like lookup_court_case or search_judgments, which retrieve records rather than map dispositions to statute/form. The 'call with no caseNumber to get the whole statute table' sentence further pins down what the tool returns.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is exhaustively specified: check automaticExpunction first, do not lead with petition forms when it applies, treat probationMatter as an answer rather than a gap, abstain on unroutable reduces, and never present the tool as deciding eligibility. It also states the safe/unsafe answer boundary ('not yet eligible' is safe; 'eligible' never is), which is exactly the when-to-say-what guidance an agent needs.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources