The WebhookEndpoint object
Event types
If you don’t pass
events when creating an endpoint, you get the default subset ["upload.completed", "upload.failed"]. To receive upload.created, contact.completed, or contact.failed you must list them explicitly.
Create a webhook endpoint
2xx to a synchronous ping challenge before we’ll save it — this catches typos and unreachable URLs at registration time, not at first delivery.
Request body
- cURL
- Node.js
- Python
Response
secret is a 64-character hex string (32 bytes of entropy). It is returned only on creation — store it next to the API key. We use it to compute the HMAC signature on every event sent to this endpoint, and your receiver uses it to verify those signatures.
Errors
A 400 looks like:
List webhook endpoints
- cURL
- Node.js
- Python
Response
A JSON array ofWebhookEndpoint objects.
Retrieve a webhook endpoint
- cURL
- Node.js
- Python
Errors
Update a webhook endpoint
Request body
- cURL
- Node.js
- Python
Errors
Delete a webhook endpoint
- cURL
- Node.js
- Python
Response
List deliveries for a webhook endpoint
Query parameters
This endpoint is currently limit-only — there is no cursor parameter. To get older deliveries, lower the limit and rely on the natural ordering, or use the in-app developer panel.
- cURL
- Node.js
- Python
The WebhookDelivery object
Auto-disable
If an endpoint racks up 20 consecutive failed deliveries, we setis_active: false and stamp disabled_at. No further events go out until you re-enable it.
To bring it back online: fix whatever was wrong (likely an outage or wrong URL), then PATCH the endpoint with {"is_active": true}. That call resets consecutive_failures to 0 and clears disabled_at. Future deliveries resume immediately, but anything queued during the outage that exhausted its retries is gone — re-fetch the upload state via GET /api/v1/uploads to catch up.