---
title: "Assess whether a court-payment demand matches known NC court-scam patterns"
method: POST
path: "/api/court-scam-check"
tags: ["public"]
---

# Assess whether a court-payment demand matches known NC court-scam patterns

`POST /api/court-scam-check`

## Request

- Base URL: `https://app.courtdelta.com`
- URL: `https://app.courtdelta.com/api/court-scam-check`
- Auth: none required

Answers "is this court-payment demand a scam?" for a contact someone received — a missed-jury-duty penalty, unpaid court costs, a warrant, a bond. THE ASSESSMENT IS DETERMINISTIC: a fixed rule set plus NC Judicial Branch facts, not a model judgement, and it is the same code path the public /court-scam-check page uses. SEVERITY 0 DOES NOT MEAN LEGITIMATE — it means none of the patterns checked for were present in what was described, and callers must report it in those terms; a false all-clear is how someone ends up sending money. Hard facts escalate to 2: a payment method NC courts never accept, a jury-duty demand above the $50 statutory penalty, or a cold contact (call/text/email) that also carries a payment demand or arrest threat. A cold channel alone or a single behavioural flag caps at 1. If `case_or_citation_number` is supplied, `caseLookup.status` returns `pending` — the court-record lookup is deliberately NOT blocking (a cold portal solve is 20-45s); fetch it separately from /api/case-lookup-public. A case that does not exist is strong evidence of a scam; a case that DOES exist does not make the payment demand legitimate. Turnstile-protected: send `turnstileToken`, or the trusted-caller `X-Internal-Secret` header. Rate limited per IP. Every field is optional — a partial description still gets an assessment. NC only. Informational, not legal advice.

## Request body

- object
  - `claim_type` 'jury_duty_penalty' | 'court_costs_or_fine' | 'bail_or_bond' | 'warrant_or_arrest' | 'missed_court_date' | 'other': What the contact claimed the money was for.
  - `contact_channel` 'phone_call' | 'text_sms' | 'email' | 'mail' | 'in_person': How they made contact. Cold channels (call/text/email) weigh heavier.
  - `amount_demanded` number: USD. For a jury-duty claim, anything above the $50 statutory penalty is a hard scam signal.
  - `payment_method_requested` 'gift_card' | 'cryptocurrency' | 'virtual_currency_kiosk_atm' | 'wire_transfer_caller_directed' | 'peer_to_peer_app' | 'phone_requested_money_transfer' | 'mailed_check_to_clerk' | 'in_person_at_courthouse' | 'not_asked': NC courts never take gift cards, crypto, kiosks, caller-directed wires or P2P apps.
  - `behavioral_flags` string[]
  - `raw_description` string: Anything else they were told, in their own words. Used for the assessment and to derive category tags; the text itself is not stored.
  - `county` string: NC county named in the contact, if any.
  - `case_or_citation_number` string: If they cited one. Returns caseLookup.status=pending; look the record up separately.
  - `turnstileToken` string: Cloudflare Turnstile token. Not required when sending the trusted-caller X-Internal-Secret header.

## Response `200`

Assessment

- object
  - `severity` 0 | 1 | 2: 2 LIKELY SCAM · 1 USE CAUTION · 0 none of the checked patterns appeared (NOT a finding of legitimacy).
  - `findings` object[]
    - `id` string
    - `label` string
    - `detail` string, nullable
    - `severity` 'high' | 'medium'
  - `caseLookup` object
    - `status` 'pending' | 'not_provided'
    - `note` string
  - `facts` string[]: What NC courts actually do.
  - `reporting` object: Where to report, incl. the FBI IC3 route if money was already sent.

## Other responses

- `400`: Invalid body, or Turnstile verification failed
- `429`: Rate limited

---

[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)
