● Execution
Packets
Enforcement packets. One creator, typed by packet; eleven packet types.
| GET | /v1/packets/{packet_id} | Get packet |
| POST | /v1/packets/{packet_id}/export | Export packet |
| POST | /v1/packets | Assemble a packet |
| GET | /v1/packets | List 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
| Parameter | Type |
|---|---|
| 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
| Parameter | Type |
|---|---|
| packet_id required · path | string |
§ Body
| Field | Type |
|---|---|
| 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
| Field | Type |
|---|---|
| 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
| Parameter | Type |
|---|---|
| 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
| Parameter | Type |
|---|---|
| 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"
}