KINETIC
KINETIC ANVILProtocol · API reference
Anvil-Version 2026-07-05 Start in the sandbox

Getting started

Quickstart

1. Get a sandbox key

Sandbox keys are prefixed kx_test_ and run the full surface against synthetic data. Production keys (kx_live_) are issued with an Operator plan. Start in the sandbox → Sandbox keys are issued instantly.

2. Create a matter

A matter is the case container. Every judgment belongs to one.

curl -X POST https://api.kineticanvil.com/v1/matters \
  -H "Authorization: Bearer kx_test_xxxxxxxxxxxxxxxx" \
  -H "Anvil-Version: 2026-07-05" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Atlas v. Halcyon",
    "mode": "enforcement",
    "lead_counsel": "Calloway & Marsh LLP"
  }'
import requests

resp = requests.post(
    "https://api.kineticanvil.com/v1/matters",
    headers={
        "Authorization": "Bearer kx_test_xxxxxxxxxxxxxxxx",
        "Anvil-Version": "2026-07-05",
    },
    json={
        "name": "Atlas v. Halcyon",
        "mode": "enforcement",
        "lead_counsel": "Calloway & Marsh LLP",
    },
)
matter = resp.json()
print(matter["id"])  # mtr_...
const resp = await fetch("https://api.kineticanvil.com/v1/matters", {
  method: "POST",
  headers: {
    "Authorization": "Bearer kx_test_xxxxxxxxxxxxxxxx",
    "Anvil-Version": "2026-07-05",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    name: "Atlas v. Halcyon",
    mode: "enforcement",
    lead_counsel: "Calloway & Marsh LLP",
  }),
});
const matter = await resp.json();
console.log(matter.id); // mtr_...

The response returns a matter_id (mtr_…). Use it in the next step.

3. Intake the judgment

curl -X POST https://api.kineticanvil.com/v1/judgments/intake \
  -H "Authorization: Bearer kx_test_xxxxxxxxxxxxxxxx" \
  -H "Anvil-Version: 2026-07-05" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: 4f8a-bd31" \
  -d '{
    "matter_id": "mtr_xxxxxxxx",
    "court": "SDNY",
    "case_number": "1:26-cv-04412",
    "jurisdiction": "US-NY",
    "creditor": "Atlas Recovery Fund LP",
    "debtor": "Halcyon Digital Holdings Ltd",
    "amount": { "amount": 12400000, "currency": "USD" },
    "date_entered": "2026-05-28"
  }'
import requests

resp = requests.post(
    "https://api.kineticanvil.com/v1/judgments/intake",
    headers={
        "Authorization": "Bearer kx_test_xxxxxxxxxxxxxxxx",
        "Anvil-Version": "2026-07-05",
        "Idempotency-Key": "4f8a-bd31",
    },
    json={
        "matter_id": "mtr_xxxxxxxx",
        "court": "SDNY",
        "case_number": "1:26-cv-04412",
        "jurisdiction": "US-NY",
        "creditor": "Atlas Recovery Fund LP",
        "debtor": "Halcyon Digital Holdings Ltd",
        "amount": {"amount": 12400000, "currency": "USD"},
        "date_entered": "2026-05-28",
    },
)
print(resp.json())
const resp = await fetch("https://api.kineticanvil.com/v1/judgments/intake", {
  method: "POST",
  headers: {
    "Authorization": "Bearer kx_test_xxxxxxxxxxxxxxxx",
    "Anvil-Version": "2026-07-05",
    "Idempotency-Key": "4f8a-bd31",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    matter_id: "mtr_xxxxxxxx",
    court: "SDNY",
    case_number: "1:26-cv-04412",
    jurisdiction: "US-NY",
    creditor: "Atlas Recovery Fund LP",
    debtor: "Halcyon Digital Holdings Ltd",
    amount: { amount: 12400000, currency: "USD" },
    date_entered: "2026-05-28",
  }),
});
console.log(await resp.json());

4. Validate readiness

POST /v1/judgments/{judgment_id}/validate returns ready true/false and names every failing gate. A pass emits judgment.validated.

5. Continue the case

From there: parties, trace jobs, enforcement packets, and the recovery ledger. Every response carries an audit_ref. See the case lifecycle →

Tools

Import the full surface as a collection: Download the Postman collection ↓ (45 operations, 11 folders). Set {{api_key}} to your sandbox key and {{base_url}} defaults to the sandbox host. Or try calls in the browser with the live API explorer →.