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

Control plane

Webhook endpoints

Register endpoints and receive signed event envelopes with automatic retries.

POST/v1/webhook_endpointsCreate a webhook endpoint
GET/v1/webhook_endpointsList webhook endpoints
GET/v1/webhook_endpoints/{webhook_endpoint_id}Retrieve a webhook endpoint
PATCH/v1/webhook_endpoints/{webhook_endpoint_id}Update a webhook endpoint
DELETE/v1/webhook_endpoints/{webhook_endpoint_id}Delete a webhook endpoint
GET/v1/webhook_endpoints/{webhook_endpoint_id}/deliveriesList webhook deliveries
POST/v1/webhook_endpoints

Create a webhook endpoint

Registers an HTTPS endpoint for signed event deliveries. The signing_secret is returned once, on this response only - store it; you need it to verify Anvil-Signature headers.

§ Body
FieldType
url
required
string · HTTPS URL that receives event POSTs.
enabled_events
optional
array · Event types to deliver. Omit (or pass ["*"]) for all events.
# sandbox: full surface, no production data
curl -X POST https://api.kineticanvil.com/v1/webhook_endpoints \
  -H "Authorization: Bearer kx_test_xxxxxxxxxxxxxxxx" \
  -H "Anvil-Version: 2026-07-05" \
  -H "Content-Type: application/json" \
  -d '{"url":"string","enabled_events":[]}'
import requests

resp = requests.post(
    "https://api.kineticanvil.com/v1/webhook_endpoints",
    headers={
        "Authorization": "Bearer kx_test_xxxxxxxxxxxxxxxx",
        "Anvil-Version": "2026-07-05",
    },
    json={"url":"string","enabled_events":[]},
)
print(resp.json())
const resp = await fetch("https://api.kineticanvil.com/v1/webhook_endpoints", {
  method: "POST",
  headers: {
    "Authorization": "Bearer kx_test_xxxxxxxxxxxxxxxx",
    "Anvil-Version": "2026-07-05",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({"url":"string","enabled_events":[]}),
});
console.log(await resp.json());
● 201Anvil-Request-Id: req_01J…
201 Response
{
  "webhook_endpoint_id": "string",
  "url": "string",
  "enabled_events": [
    "string"
  ],
  "status": "enabled",
  "created_at": "2026-07-05T00:00:00Z",
  "signing_secret": "string"
}
GET/v1/webhook_endpoints

List webhook endpoints

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

resp = requests.get(
    "https://api.kineticanvil.com/v1/webhook_endpoints",
    headers={
        "Authorization": "Bearer kx_test_xxxxxxxxxxxxxxxx",
        "Anvil-Version": "2026-07-05",
    },
)
print(resp.json())
const resp = await fetch("https://api.kineticanvil.com/v1/webhook_endpoints", {
  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": [
    {
      "webhook_endpoint_id": "string",
      "url": "string",
      "enabled_events": [],
      "status": "enabled",
      "created_at": "2026-07-05T00:00:00Z"
    }
  ],
  "has_more": true
}
GET/v1/webhook_endpoints/{webhook_endpoint_id}

Retrieve a webhook endpoint

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

resp = requests.get(
    "https://api.kineticanvil.com/v1/webhook_endpoints/{webhook_endpoint_id}",
    headers={
        "Authorization": "Bearer kx_test_xxxxxxxxxxxxxxxx",
        "Anvil-Version": "2026-07-05",
    },
)
print(resp.json())
const resp = await fetch("https://api.kineticanvil.com/v1/webhook_endpoints/{webhook_endpoint_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
{
  "webhook_endpoint_id": "string",
  "url": "string",
  "enabled_events": [
    "string"
  ],
  "status": "enabled",
  "created_at": "2026-07-05T00:00:00Z"
}
PATCH/v1/webhook_endpoints/{webhook_endpoint_id}

Update a webhook endpoint

Update the URL, event filter, or status. Disabled endpoints stop receiving deliveries immediately.

§ Path parameters
ParameterType
webhook_endpoint_id
required · path
string
§ Body
FieldType
url
optional
string
enabled_events
optional
array
status
optional
string · enabled | disabled
# sandbox: full surface, no production data
curl -X PATCH https://api.kineticanvil.com/v1/webhook_endpoints/{webhook_endpoint_id} \
  -H "Authorization: Bearer kx_test_xxxxxxxxxxxxxxxx" \
  -H "Anvil-Version: 2026-07-05" \
  -H "Content-Type: application/json" \
  -d '{"url":"string","enabled_events":[],"status":"enabled"}'
import requests

resp = requests.patch(
    "https://api.kineticanvil.com/v1/webhook_endpoints/{webhook_endpoint_id}",
    headers={
        "Authorization": "Bearer kx_test_xxxxxxxxxxxxxxxx",
        "Anvil-Version": "2026-07-05",
    },
    json={"url":"string","enabled_events":[],"status":"enabled"},
)
print(resp.json())
const resp = await fetch("https://api.kineticanvil.com/v1/webhook_endpoints/{webhook_endpoint_id}", {
  method: "PATCH",
  headers: {
    "Authorization": "Bearer kx_test_xxxxxxxxxxxxxxxx",
    "Anvil-Version": "2026-07-05",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({"url":"string","enabled_events":[],"status":"enabled"}),
});
console.log(await resp.json());
● 200Anvil-Request-Id: req_01J…
200 Response
{
  "webhook_endpoint_id": "string",
  "url": "string",
  "enabled_events": [
    "string"
  ],
  "status": "enabled",
  "created_at": "2026-07-05T00:00:00Z"
}
DELETE/v1/webhook_endpoints/{webhook_endpoint_id}

Delete a webhook endpoint

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

resp = requests.delete(
    "https://api.kineticanvil.com/v1/webhook_endpoints/{webhook_endpoint_id}",
    headers={
        "Authorization": "Bearer kx_test_xxxxxxxxxxxxxxxx",
        "Anvil-Version": "2026-07-05",
    },
)
print(resp.json())
const resp = await fetch("https://api.kineticanvil.com/v1/webhook_endpoints/{webhook_endpoint_id}", {
  method: "DELETE",
  headers: {
    "Authorization": "Bearer kx_test_xxxxxxxxxxxxxxxx",
    "Anvil-Version": "2026-07-05",
  },
});
console.log(await resp.json());
● 200Anvil-Request-Id: req_01J…
200 Response
{
  "webhook_endpoint_id": "string",
  "deleted": true
}
GET/v1/webhook_endpoints/{webhook_endpoint_id}/deliveries

List webhook deliveries

Read-only delivery log for one of your webhook endpoints, most recent first. Each row records the outcome of delivery attempts for a single event. Payloads, signatures, signing secrets, and request headers are never exposed through this endpoint.

§ Path parameters
ParameterType
webhook_endpoint_id
required · path
string
§ Query parameters
ParameterType
limit
optional · query
integer
starting_after
optional · query
string
ending_before
optional · query
string
# sandbox: full surface, no production data
curl https://api.kineticanvil.com/v1/webhook_endpoints/{webhook_endpoint_id}/deliveries \
  -H "Authorization: Bearer kx_test_xxxxxxxxxxxxxxxx" \
  -H "Anvil-Version: 2026-07-05"
import requests

resp = requests.get(
    "https://api.kineticanvil.com/v1/webhook_endpoints/{webhook_endpoint_id}/deliveries",
    headers={
        "Authorization": "Bearer kx_test_xxxxxxxxxxxxxxxx",
        "Anvil-Version": "2026-07-05",
    },
)
print(resp.json())
const resp = await fetch("https://api.kineticanvil.com/v1/webhook_endpoints/{webhook_endpoint_id}/deliveries", {
  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",
      "object": "webhook_delivery",
      "webhook_endpoint_id": "string",
      "event_id": "string",
      "event_type": "string",
      "status": "queued",
      "attempts": 0,
      "last_status_code": 0,
      "last_error": "string",
      "created_at": "2026-07-05T00:00:00Z",
      "next_attempt_at": "2026-07-05T00:00:00Z",
      "delivered_at": "2026-07-05T00:00:00Z"
    }
  ],
  "has_more": true
}