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

Execution

Packets

Enforcement packets. One creator, typed by packet; eleven packet types.

GET/v1/packets/{packet_id}Get packet
POST/v1/packets/{packet_id}/exportExport packet
POST/v1/packetsAssemble a packet
GET/v1/packetsList packets
GET/v1/packets/exports/{export_id}Retrieve a packet export
GET/v1/packets/{packet_id}

Get packet

Gets packet, source manifest, review state, authorized sender, and export state.

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

resp = requests.get(
    "https://api.kineticanvil.com/v1/packets/{packet_id}",
    headers={
        "Authorization": "Bearer kx_test_xxxxxxxxxxxxxxxx",
        "Anvil-Version": "2026-07-05",
    },
)
print(resp.json())
const resp = await fetch("https://api.kineticanvil.com/v1/packets/{packet_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
{
  "packet_id": "string",
  "matter_id": "string",
  "type": "string",
  "status": "string",
  "authorized_sender": "string",
  "review_state": {
    "review_required": true,
    "review_status": "string",
    "review_owner": "string",
    "review_notes": "string"
  },
  "source_refs": [
    {
      "source_id": "string",
      "source_type": "string",
      "title": "string",
      "uri": "string",
      "hash": "string",
      "chain_of_custody_id": "string",
      "admissibility_notes": "string"
    }
  ],
  "audit": {
    "request_id": "string",
    "actor_id": "string",
    "organization_id": "string",
    "matter_id": "string",
    "timestamp": "2026-07-05T00:00:00Z"
  }
}
POST/v1/packets/{packet_id}/export

Export packet

Exports packet to PDF/ZIP/JSON bundle and records export audit event.

scope · packets:export
§ Path parameters
ParameterType
packet_id
required · path
string
§ Body
FieldType
format
optional
string
redaction_profile
optional
string
# sandbox: full surface, no production data
curl -X POST https://api.kineticanvil.com/v1/packets/{packet_id}/export \
  -H "Authorization: Bearer kx_test_xxxxxxxxxxxxxxxx" \
  -H "Anvil-Version: 2026-07-05" \
  -H "Content-Type: application/json" \
  -d '{"format":"string","redaction_profile":"string"}'
import requests

resp = requests.post(
    "https://api.kineticanvil.com/v1/packets/{packet_id}/export",
    headers={
        "Authorization": "Bearer kx_test_xxxxxxxxxxxxxxxx",
        "Anvil-Version": "2026-07-05",
    },
    json={"format":"string","redaction_profile":"string"},
)
print(resp.json())
const resp = await fetch("https://api.kineticanvil.com/v1/packets/{packet_id}/export", {
  method: "POST",
  headers: {
    "Authorization": "Bearer kx_test_xxxxxxxxxxxxxxxx",
    "Anvil-Version": "2026-07-05",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({"format":"string","redaction_profile":"string"}),
});
console.log(await resp.json());
● 201Anvil-Request-Id: req_01J…
201 Response
{
  "export_id": "string",
  "object_type": "string",
  "object_id": "string",
  "format": "string",
  "status": "string",
  "download_url": "string",
  "audit_id": "string"
}
POST/v1/packets

Assemble a packet

Assemble an enforcement packet of the given type from the matter's persisted state. The packet binds the matter, judgment, wallets, and recorded recovery events, and is content-hashed for provenance. New packet types never widen the surface: they are values of `type`.

scope · packets:write
§ Body
FieldType
matter_id
required
string
type
required
string · exchange_intercept | vasp_legal_process | exchange_freeze | exchange_turnover | turnover_workflow | sanctions_review | law_enforcement_referral | issuer_freeze | burn_reissue | destination_wallet_certificate | ofac_report
judgment_id
optional
string
wallets
optional
array
source_refs
optional
array
legal_authority_id
optional
string
authorized_sender
optional
string
# sandbox: full surface, no production data
curl -X POST https://api.kineticanvil.com/v1/packets \
  -H "Authorization: Bearer kx_test_xxxxxxxxxxxxxxxx" \
  -H "Anvil-Version: 2026-07-05" \
  -H "Content-Type: application/json" \
  -d '{"matter_id":"string","type":"exchange_intercept","judgment_id":"string","wallets":[],"source_refs":[],"legal_authority_id":"string","authorized_sender":"string"}'
import requests

resp = requests.post(
    "https://api.kineticanvil.com/v1/packets",
    headers={
        "Authorization": "Bearer kx_test_xxxxxxxxxxxxxxxx",
        "Anvil-Version": "2026-07-05",
    },
    json={"matter_id":"string","type":"exchange_intercept","judgment_id":"string","wallets":[],"source_refs":[],"legal_authority_id":"string","authorized_sender":"string"},
)
print(resp.json())
const resp = await fetch("https://api.kineticanvil.com/v1/packets", {
  method: "POST",
  headers: {
    "Authorization": "Bearer kx_test_xxxxxxxxxxxxxxxx",
    "Anvil-Version": "2026-07-05",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({"matter_id":"string","type":"exchange_intercept","judgment_id":"string","wallets":[],"source_refs":[],"legal_authority_id":"string","authorized_sender":"string"}),
});
console.log(await resp.json());
● 201Anvil-Request-Id: req_01J…
201 Response
{
  "packet_id": "string",
  "matter_id": "string",
  "type": "exchange_intercept",
  "status": "string",
  "authorized_sender": "string",
  "review_state": {
    "review_required": true,
    "review_status": "string",
    "review_owner": "string",
    "review_notes": "string"
  },
  "source_refs": [
    {
      "source_id": "string",
      "source_type": "string",
      "title": "string",
      "uri": "string",
      "hash": "string",
      "chain_of_custody_id": "string",
      "admissibility_notes": "string"
    }
  ],
  "audit": {
    "request_id": "string",
    "actor_id": "string",
    "organization_id": "string",
    "matter_id": "string",
    "timestamp": "2026-07-05T00:00:00Z"
  },
  "object": "packet",
  "content_hash": "string"
}
GET/v1/packets

List packets

List assembled packets. Filter by matter_id or type.

scope · packets:read
§ Query parameters
ParameterType
matter_id
optional · query
string
type
optional · query
string
# sandbox: full surface, no production data
curl https://api.kineticanvil.com/v1/packets \
  -H "Authorization: Bearer kx_test_xxxxxxxxxxxxxxxx" \
  -H "Anvil-Version: 2026-07-05"
import requests

resp = requests.get(
    "https://api.kineticanvil.com/v1/packets",
    headers={
        "Authorization": "Bearer kx_test_xxxxxxxxxxxxxxxx",
        "Anvil-Version": "2026-07-05",
    },
)
print(resp.json())
const resp = await fetch("https://api.kineticanvil.com/v1/packets", {
  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
{
  "object": "list",
  "data": [
    {
      "packet_id": "string",
      "matter_id": "string",
      "type": "exchange_intercept",
      "status": "string",
      "authorized_sender": "string",
      "review_state": {},
      "source_refs": [],
      "audit": {},
      "object": "packet",
      "content_hash": "string"
    }
  ],
  "has_more": true
}
GET/v1/packets/exports/{export_id}

Retrieve a packet export

Read back an export artifact by id. The export_hash folds in the packet's own content_hash, so the artifact is verifiably the export of exactly that packet.

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

resp = requests.get(
    "https://api.kineticanvil.com/v1/packets/exports/{export_id}",
    headers={
        "Authorization": "Bearer kx_test_xxxxxxxxxxxxxxxx",
        "Anvil-Version": "2026-07-05",
    },
)
print(resp.json())
const resp = await fetch("https://api.kineticanvil.com/v1/packets/exports/{export_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
{
  "export_id": "string",
  "object_type": "string",
  "object_id": "string",
  "format": "string",
  "status": "string",
  "download_url": "string",
  "audit_id": "string"
}