CheckboxDocs

Webhook endpoints API

Endpoints that receive signed events.

Verify Checkbox-Signature with the endpoint secret (HMAC-SHA256 of "{t}.{raw body}", 5-minute tolerance). Failed deliveries are retried with backoff for about three days.

OperationEndpoint
List webhook endpointsGET /v1/webhook_endpoints
Create a webhook endpointPOST /v1/webhook_endpoints
Retrieve a webhook endpointGET /v1/webhook_endpoints/{webhook_endpoint}
Update a webhook endpointPOST /v1/webhook_endpoints/{webhook_endpoint}
Delete a webhook endpointDELETE /v1/webhook_endpoints/{webhook_endpoint}
Roll a webhook signing secretPOST /v1/webhook_endpoints/{webhook_endpoint}/roll_secret

The WebhookEndpoint object

Where Checkbox sends signed event notifications (Checkbox-Signature: t=…,v1=…).

FieldTypeDescription
idstringUnique identifier of the webhook endpoint (we_…).
objectenumString representing the object's type. Always "webhook_endpoint".
livemodebooleantrue for live-mode objects, false for test mode (ck_test_ keys act on an isolated sandbox).
urlstringHTTPS URL Checkbox POSTs events to.
descriptionstring | nullYour description.
enabled_eventsarray of stringsEvent types sent to this endpoint ("*" = all).
statusenumDisabled endpoints receive nothing. One of enabled, disabled.
api_versionstringAPI version events are rendered with.
metadataobjectUp to 20 key/value string pairs you can attach to the object.
secretstringSigning secret (whsec_…). Only returned when the endpoint is created or the secret is rolled; store it.
createdintegerWhen the endpoint was created. Unix timestamp in seconds.

List webhook endpoints

GET /v1/webhook_endpoints

Webhook endpoints of this mode, newest first.

Scope webhook_endpoints:read · Operation listWebhookEndpoints

SDK: checkbox.webhookEndpoints.list() (Node) · checkbox.webhook_endpoints.list() (Python). MCP / agents: operation listWebhookEndpoints.

Parameters

ParameterInTypeDescription
limitqueryintegerNumber of objects to return, 1-100 (default 10).
starting_afterquerystringCursor: an object id; returns the objects after it (older).
ending_beforequerystringCursor: an object id; returns the objects before it (newer).

Returns

Returns a list ({ object: "list", data, has_more, url }) of WebhookEndpoint objects.

Errors use the standard envelope with a stable code and, where useful, next_action.

curl -G https://app.checkbox.site/v1/webhook_endpoints \
  -u "$CHECKBOX_SECRET_KEY:" \
  -d limit=3
Response
{
  "object": "list",
  "data": [
    {
      "id": "we_3f9a1c2e7b4d4e0f9a8b7c6d5e4f3a2b",
      "object": "webhook_endpoint",
      "livemode": false,
      "url": "https://acme.example/webhooks/checkbox",
      "description": "Production listener",
      "enabled_events": [
        "*"
      ],
      "status": "enabled",
      "api_version": "2026-10-30",
      "metadata": {
        "order_ref": "A-1001"
      },
      "secret": "whsec_6Jf…",
      "created": 1793318400
    }
  ],
  "has_more": false,
  "url": "/v1/sites"
}

Create a webhook endpoint

POST /v1/webhook_endpoints

Registers an HTTPS endpoint for the given event types. The response contains the signing secret (only now). Respond 2xx quickly; do slow work asynchronously.

Scope webhook_endpoints:write · Idempotent (send Idempotency-Key) · Operation createWebhookEndpoint

SDK: checkbox.webhookEndpoints.create() (Node) · checkbox.webhook_endpoints.create() (Python). MCP / agents: operation createWebhookEndpoint.

Body

FieldTypeDescription
url requiredstringHTTPS URL.
enabled_events requiredarray of stringsEvent types to send, or ["*"] for all: site.score_changed, site.insurable_changed, finding.created, finding.resolved, scan.completed, scan.failed, law.changed, certificate.issued, certificate.lapsed, certificate.revoked, notice.sent, consent.created, test_run.completed, test_run.failed, plan.updated, site.compliant, task.verified.
descriptionstringDescription.
metadataobjectUp to 20 key/value string pairs you can attach to the object.

Returns

Returns a WebhookEndpoint object.

Errors use the standard envelope with a stable code and, where useful, next_action.

curl https://app.checkbox.site/v1/webhook_endpoints \
  -u "$CHECKBOX_SECRET_KEY:" \
  -H "Content-Type: application/json" \
  -d '{
  "url": "https://acme.example/webhooks/checkbox",
  "enabled_events": [
    "finding.created",
    "site.insurable_changed"
  ]
}'
Response
{
  "id": "we_3f9a1c2e7b4d4e0f9a8b7c6d5e4f3a2b",
  "object": "webhook_endpoint",
  "livemode": false,
  "url": "https://acme.example/webhooks/checkbox",
  "description": "Production listener",
  "enabled_events": [
    "*"
  ],
  "status": "enabled",
  "api_version": "2026-10-30",
  "metadata": {
    "order_ref": "A-1001"
  },
  "secret": "whsec_6Jf…",
  "created": 1793318400
}

Retrieve a webhook endpoint

GET /v1/webhook_endpoints/{webhook_endpoint}

One webhook endpoint (without its secret).

Scope webhook_endpoints:read · Operation retrieveWebhookEndpoint

SDK: checkbox.webhookEndpoints.retrieve() (Node) · checkbox.webhook_endpoints.retrieve() (Python). MCP / agents: operation retrieveWebhookEndpoint.

Parameters

ParameterInTypeDescription
webhook_endpoint requiredpathstringUnique identifier of the webhook endpoint (we_…).

Returns

Returns a WebhookEndpoint object.

Errors use the standard envelope with a stable code and, where useful, next_action.

curl https://app.checkbox.site/v1/webhook_endpoints/we_3f9a1c2e7b4d4e0f9a8b7c6d5e4f3a2b \
  -u "$CHECKBOX_SECRET_KEY:"
Response
{
  "id": "we_3f9a1c2e7b4d4e0f9a8b7c6d5e4f3a2b",
  "object": "webhook_endpoint",
  "livemode": false,
  "url": "https://acme.example/webhooks/checkbox",
  "description": "Production listener",
  "enabled_events": [
    "*"
  ],
  "status": "enabled",
  "api_version": "2026-10-30",
  "metadata": {
    "order_ref": "A-1001"
  },
  "secret": "whsec_6Jf…",
  "created": 1793318400
}

Update a webhook endpoint

POST /v1/webhook_endpoints/{webhook_endpoint}

Changes the URL, event types, description, metadata, or disables / re-enables the endpoint.

Scope webhook_endpoints:write · Idempotent (send Idempotency-Key) · Operation updateWebhookEndpoint

SDK: checkbox.webhookEndpoints.update() (Node) · checkbox.webhook_endpoints.update() (Python). MCP / agents: operation updateWebhookEndpoint.

Parameters

ParameterInTypeDescription
webhook_endpoint requiredpathstringUnique identifier of the webhook endpoint (we_…).

Body

FieldTypeDescription
urlstringHTTPS URL.
enabled_eventsarray of stringsEvent types to send, or ["*"] for all: site.score_changed, site.insurable_changed, finding.created, finding.resolved, scan.completed, scan.failed, law.changed, certificate.issued, certificate.lapsed, certificate.revoked, notice.sent, consent.created, test_run.completed, test_run.failed, plan.updated, site.compliant, task.verified.
descriptionstring | nullDescription (null clears it).
disabledbooleantrue disables the endpoint, false enables it.
metadataobjectUp to 20 key/value string pairs you can attach to the object.

Returns

Returns a WebhookEndpoint object.

Errors use the standard envelope with a stable code and, where useful, next_action.

curl https://app.checkbox.site/v1/webhook_endpoints/we_3f9a1c2e7b4d4e0f9a8b7c6d5e4f3a2b \
  -u "$CHECKBOX_SECRET_KEY:" \
  -H "Content-Type: application/json" \
  -d '{
  "enabled_events": [
    "finding.created",
    "site.insurable_changed"
  ]
}'
Response
{
  "id": "we_3f9a1c2e7b4d4e0f9a8b7c6d5e4f3a2b",
  "object": "webhook_endpoint",
  "livemode": false,
  "url": "https://acme.example/webhooks/checkbox",
  "description": "Production listener",
  "enabled_events": [
    "*"
  ],
  "status": "enabled",
  "api_version": "2026-10-30",
  "metadata": {
    "order_ref": "A-1001"
  },
  "secret": "whsec_6Jf…",
  "created": 1793318400
}

Delete a webhook endpoint

DELETE /v1/webhook_endpoints/{webhook_endpoint}

Deletes the endpoint; pending deliveries to it are dropped.

Scope webhook_endpoints:write · Operation deleteWebhookEndpoint

SDK: checkbox.webhookEndpoints.del() (Node) · checkbox.webhook_endpoints.delete() (Python). MCP / agents: operation deleteWebhookEndpoint.

Parameters

ParameterInTypeDescription
webhook_endpoint requiredpathstringUnique identifier of the webhook endpoint (we_…).

Returns

Returns a DeletedWebhookEndpoint object.

Errors use the standard envelope with a stable code and, where useful, next_action.

curl https://app.checkbox.site/v1/webhook_endpoints/we_3f9a1c2e7b4d4e0f9a8b7c6d5e4f3a2b \
  -u "$CHECKBOX_SECRET_KEY:" \
  -X DELETE
Response
{
  "id": "we_3f9a1c2e7b4d4e0f9a8b7c6d5e4f3a2b",
  "object": "webhook_endpoint",
  "deleted": true
}

Roll a webhook signing secret

POST /v1/webhook_endpoints/{webhook_endpoint}/roll_secret

Replaces the signing secret immediately and returns the new one (only now).

Scope webhook_endpoints:write · Idempotent (send Idempotency-Key) · Operation rollWebhookEndpointSecret

SDK: checkbox.webhookEndpoints.rollSecret() (Node) · checkbox.webhook_endpoints.roll_secret() (Python). MCP / agents: operation rollWebhookEndpointSecret.

Parameters

ParameterInTypeDescription
webhook_endpoint requiredpathstringUnique identifier of the webhook endpoint (we_…).

Returns

Returns a WebhookEndpoint object.

Errors use the standard envelope with a stable code and, where useful, next_action.

curl https://app.checkbox.site/v1/webhook_endpoints/we_3f9a1c2e7b4d4e0f9a8b7c6d5e4f3a2b/roll_secret \
  -u "$CHECKBOX_SECRET_KEY:" \
  -H "Content-Type: application/json" \
  -d '{}'
Response
{
  "id": "we_3f9a1c2e7b4d4e0f9a8b7c6d5e4f3a2b",
  "object": "webhook_endpoint",
  "livemode": false,
  "url": "https://acme.example/webhooks/checkbox",
  "description": "Production listener",
  "enabled_events": [
    "*"
  ],
  "status": "enabled",
  "api_version": "2026-10-30",
  "metadata": {
    "order_ref": "A-1001"
  },
  "secret": "whsec_6Jf…",
  "created": 1793318400
}

Checkbox is compliance software, not a law firm; nothing in these docs is legal advice (details). For AI agents: every page is available as Markdown at the same URL plus .md; the index is /llms.txt.