● 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 →.