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

Proof

Ledger

The recovery ledger. Real recorded events with computed rollups, never invented numbers.

POST/v1/ledger/recovery-eventsCreate recovery event
POST/v1/ledger/remittance-eventsCreate remittance event
GET/v1/ledger/matters/{matter_id}Get matter ledger
POST/v1/waterfall/calculateCalculate waterfall
GET/v1/waterfall/matters/{matter_id}Get matter waterfall
POST/v1/ledger/recovery-events

Create recovery event

Records frozen, blocked, seized, turned over, remitted, settled, or recovered value.

scope · ledger:write
§ Body
FieldType
matter_id
required
string
event_type
optional
string
asset
optional
string
gross_amount
required
number · Canonical recovered amount. `usd_value` is accepted as a request alias when this field is absent.
network
optional
string
usd_value
optional
number · Accepted in the request as an alias for `gross_amount`. Responses always carry both fields.
source
optional
string
packet_id
optional
string
# sandbox: full surface, no production data
curl -X POST https://api.kineticanvil.com/v1/ledger/recovery-events \
  -H "Authorization: Bearer kx_test_xxxxxxxxxxxxxxxx" \
  -H "Anvil-Version: 2026-07-05" \
  -H "Content-Type: application/json" \
  -d '{"matter_id":"string","event_type":"string","asset":"string","gross_amount":0,"network":"string","usd_value":0,"source":"string","packet_id":"string"}'
import requests

resp = requests.post(
    "https://api.kineticanvil.com/v1/ledger/recovery-events",
    headers={
        "Authorization": "Bearer kx_test_xxxxxxxxxxxxxxxx",
        "Anvil-Version": "2026-07-05",
    },
    json={"matter_id":"string","event_type":"string","asset":"string","gross_amount":0,"network":"string","usd_value":0,"source":"string","packet_id":"string"},
)
print(resp.json())
const resp = await fetch("https://api.kineticanvil.com/v1/ledger/recovery-events", {
  method: "POST",
  headers: {
    "Authorization": "Bearer kx_test_xxxxxxxxxxxxxxxx",
    "Anvil-Version": "2026-07-05",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({"matter_id":"string","event_type":"string","asset":"string","gross_amount":0,"network":"string","usd_value":0,"source":"string","packet_id":"string"}),
});
console.log(await resp.json());
● 201Anvil-Request-Id: req_01J…
201 Response
{
  "recovery_event_id": "string",
  "matter_id": "string",
  "event_type": "string",
  "asset": "string",
  "gross_amount": 0,
  "status": "string",
  "audit": {
    "request_id": "string",
    "actor_id": "string",
    "organization_id": "string",
    "matter_id": "string",
    "timestamp": "2026-07-05T00:00:00Z"
  }
}
POST/v1/ledger/remittance-events

Create remittance event

Records remittance to receiver, court registry, custodian, claimant, or waterfall account.

scope · ledger:write
§ Body
FieldType
matter_id
required
string
destination
optional
string
amount
required
number
asset
optional
string
waterfall_id
optional
string
source_recovery_event_id
optional
string
# sandbox: full surface, no production data
curl -X POST https://api.kineticanvil.com/v1/ledger/remittance-events \
  -H "Authorization: Bearer kx_test_xxxxxxxxxxxxxxxx" \
  -H "Anvil-Version: 2026-07-05" \
  -H "Content-Type: application/json" \
  -d '{"matter_id":"string","destination":"string","amount":0,"asset":"string","waterfall_id":"string","source_recovery_event_id":"string"}'
import requests

resp = requests.post(
    "https://api.kineticanvil.com/v1/ledger/remittance-events",
    headers={
        "Authorization": "Bearer kx_test_xxxxxxxxxxxxxxxx",
        "Anvil-Version": "2026-07-05",
    },
    json={"matter_id":"string","destination":"string","amount":0,"asset":"string","waterfall_id":"string","source_recovery_event_id":"string"},
)
print(resp.json())
const resp = await fetch("https://api.kineticanvil.com/v1/ledger/remittance-events", {
  method: "POST",
  headers: {
    "Authorization": "Bearer kx_test_xxxxxxxxxxxxxxxx",
    "Anvil-Version": "2026-07-05",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({"matter_id":"string","destination":"string","amount":0,"asset":"string","waterfall_id":"string","source_recovery_event_id":"string"}),
});
console.log(await resp.json());
● 201Anvil-Request-Id: req_01J…
201 Response
{
  "remittance_event_id": "string",
  "matter_id": "string",
  "destination": "string",
  "asset": "string",
  "amount": 0,
  "status": "string",
  "audit": {
    "request_id": "string",
    "actor_id": "string",
    "organization_id": "string",
    "matter_id": "string",
    "timestamp": "2026-07-05T00:00:00Z"
  }
}
GET/v1/ledger/matters/{matter_id}

Get matter ledger

Gets recovery/remittance/collection ledger for a matter.

scope · ledger:read
§ Path parameters
ParameterType
matter_id
required · path
string
# sandbox: full surface, no production data
curl https://api.kineticanvil.com/v1/ledger/matters/{matter_id} \
  -H "Authorization: Bearer kx_test_xxxxxxxxxxxxxxxx" \
  -H "Anvil-Version: 2026-07-05"
import requests

resp = requests.get(
    "https://api.kineticanvil.com/v1/ledger/matters/{matter_id}",
    headers={
        "Authorization": "Bearer kx_test_xxxxxxxxxxxxxxxx",
        "Anvil-Version": "2026-07-05",
    },
)
print(resp.json())
const resp = await fetch("https://api.kineticanvil.com/v1/ledger/matters/{matter_id}", {
  method: "GET",
  headers: {
    "Authorization": "Bearer kx_test_xxxxxxxxxxxxxxxx",
    "Anvil-Version": "2026-07-05",
  },
});
console.log(await resp.json());
● 200Anvil-Request-Id: req_01J…
200 Response
{
  "matter_id": "string",
  "recovery_events": [
    {
      "recovery_event_id": "string",
      "matter_id": "string",
      "event_type": "string",
      "asset": "string",
      "gross_amount": "string",
      "status": "string",
      "audit": "string"
    }
  ],
  "remittance_events": [
    {
      "remittance_event_id": "string",
      "matter_id": "string",
      "destination": "string",
      "asset": "string",
      "amount": "string",
      "status": "string",
      "audit": "string"
    }
  ],
  "total_recovered": {
    "amount": 0,
    "currency": "string",
    "valuation_time": "2026-07-05T00:00:00Z"
  }
}
POST/v1/waterfall/calculate

Calculate waterfall

Calculates costs, counsel fees, Meridian economics, claimant distributions, holdbacks, and remittance constraints.

scope · waterfall:calculate
§ Body
FieldType
matter_id
required
string
recovery_event_ids
optional
array
costs
optional
object
meridian_percentage
optional
number
# sandbox: full surface, no production data
curl -X POST https://api.kineticanvil.com/v1/waterfall/calculate \
  -H "Authorization: Bearer kx_test_xxxxxxxxxxxxxxxx" \
  -H "Anvil-Version: 2026-07-05" \
  -H "Content-Type: application/json" \
  -d '{"matter_id":"string","recovery_event_ids":[],"costs":{},"meridian_percentage":0}'
import requests

resp = requests.post(
    "https://api.kineticanvil.com/v1/waterfall/calculate",
    headers={
        "Authorization": "Bearer kx_test_xxxxxxxxxxxxxxxx",
        "Anvil-Version": "2026-07-05",
    },
    json={"matter_id":"string","recovery_event_ids":[],"costs":{},"meridian_percentage":0},
)
print(resp.json())
const resp = await fetch("https://api.kineticanvil.com/v1/waterfall/calculate", {
  method: "POST",
  headers: {
    "Authorization": "Bearer kx_test_xxxxxxxxxxxxxxxx",
    "Anvil-Version": "2026-07-05",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({"matter_id":"string","recovery_event_ids":[],"costs":{},"meridian_percentage":0}),
});
console.log(await resp.json());
● 200Anvil-Request-Id: req_01J…
200 Response
{
  "waterfall_id": "string",
  "matter_id": "string",
  "gross_recovered": {
    "amount": 0,
    "currency": "string",
    "valuation_time": "2026-07-05T00:00:00Z"
  },
  "costs": {},
  "meridian_economics": {
    "amount": 0,
    "currency": "string",
    "valuation_time": "2026-07-05T00:00:00Z"
  },
  "claimant_distributions": [
    {
      "claimant_id": "string",
      "amount": 0
    }
  ],
  "holdbacks": [
    {}
  ],
  "review_state": {
    "review_required": true,
    "review_status": "string",
    "review_owner": "string",
    "review_notes": "string"
  }
}
GET/v1/waterfall/matters/{matter_id}

Get matter waterfall

Gets current matter economics and distribution waterfall.

scope · waterfall:read
§ Path parameters
ParameterType
matter_id
required · path
string
# sandbox: full surface, no production data
curl https://api.kineticanvil.com/v1/waterfall/matters/{matter_id} \
  -H "Authorization: Bearer kx_test_xxxxxxxxxxxxxxxx" \
  -H "Anvil-Version: 2026-07-05"
import requests

resp = requests.get(
    "https://api.kineticanvil.com/v1/waterfall/matters/{matter_id}",
    headers={
        "Authorization": "Bearer kx_test_xxxxxxxxxxxxxxxx",
        "Anvil-Version": "2026-07-05",
    },
)
print(resp.json())
const resp = await fetch("https://api.kineticanvil.com/v1/waterfall/matters/{matter_id}", {
  method: "GET",
  headers: {
    "Authorization": "Bearer kx_test_xxxxxxxxxxxxxxxx",
    "Anvil-Version": "2026-07-05",
  },
});
console.log(await resp.json());
● 200Anvil-Request-Id: req_01J…
200 Response
{
  "waterfall_id": "string",
  "matter_id": "string",
  "gross_recovered": {
    "amount": 0,
    "currency": "string",
    "valuation_time": "2026-07-05T00:00:00Z"
  },
  "costs": {},
  "meridian_economics": {
    "amount": 0,
    "currency": "string",
    "valuation_time": "2026-07-05T00:00:00Z"
  },
  "claimant_distributions": [
    {
      "claimant_id": "string",
      "amount": 0
    }
  ],
  "holdbacks": [
    {}
  ],
  "review_state": {
    "review_required": true,
    "review_status": "string",
    "review_owner": "string",
    "review_notes": "string"
  }
}