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

Proof

Events

The account event log. Every signed webhook envelope, listed and replayable by id.

GET/v1/eventsList events
GET/v1/events/{event_id}Retrieve an event
GET/v1/events/verify-chainVerify the event chain
GET/v1/events

List events

Lists events emitted on your account, most recent first. Each event mirrors the signed webhook envelope.

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

resp = requests.get(
    "https://api.kineticanvil.com/v1/events",
    headers={
        "Authorization": "Bearer kx_test_xxxxxxxxxxxxxxxx",
        "Anvil-Version": "2026-07-05",
    },
)
print(resp.json())
const resp = await fetch("https://api.kineticanvil.com/v1/events", {
  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": [
    {
      "id": "string",
      "type": "string",
      "created": "2026-07-05T00:00:00Z",
      "livemode": true,
      "data": {}
    }
  ],
  "has_more": true
}
GET/v1/events/{event_id}

Retrieve an event

Retrieves a single event by id.

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

resp = requests.get(
    "https://api.kineticanvil.com/v1/events/{event_id}",
    headers={
        "Authorization": "Bearer kx_test_xxxxxxxxxxxxxxxx",
        "Anvil-Version": "2026-07-05",
    },
)
print(resp.json())
const resp = await fetch("https://api.kineticanvil.com/v1/events/{event_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
{
  "id": "string",
  "type": "string",
  "created": "2026-07-05T00:00:00Z",
  "livemode": true,
  "data": {}
}
GET/v1/events/verify-chain

Verify the event chain

Verify the tenant's append-only event hash chain. Every event links to its predecessor with a sha256 chain; this walks the log and reports the first break, if any.

scope · events:read
# sandbox: full surface, no production data
curl https://api.kineticanvil.com/v1/events/verify-chain \
  -H "Authorization: Bearer kx_test_xxxxxxxxxxxxxxxx" \
  -H "Anvil-Version: 2026-07-05"
import requests

resp = requests.get(
    "https://api.kineticanvil.com/v1/events/verify-chain",
    headers={
        "Authorization": "Bearer kx_test_xxxxxxxxxxxxxxxx",
        "Anvil-Version": "2026-07-05",
    },
)
print(resp.json())
const resp = await fetch("https://api.kineticanvil.com/v1/events/verify-chain", {
  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": "chain_verification",
  "valid": true,
  "events_checked": 0,
  "first_break": "string",
  "verified_at": "2026-07-05T00:00:00Z"
}