Skip to main content
These endpoints register the URLs OptimalDial calls when something happens to one of your uploads. For the receiving side — payload shape, signature verification, retry behaviour — see the Receiving webhooks guide.

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

Registers a URL to receive events. The endpoint must respond 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

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

Returns every endpoint registered for the API key’s organization, newest first.

Response

A JSON array of WebhookEndpoint objects.

Retrieve a webhook endpoint

Errors


Update a webhook endpoint

Partial update — send only the fields you want to change. The secret is not updatable; rotate by deleting and recreating the endpoint.

Request body

Errors


Delete a webhook endpoint

Hard delete. There is no archive — once deleted, no further events are delivered and the endpoint disappears from list calls. Existing in-flight deliveries are marked exhausted.

Response


List deliveries for a webhook endpoint

Returns recent delivery attempts for this endpoint, newest first. Useful for debugging — you can see exactly what we sent and what your endpoint replied with for each attempt.

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.

The WebhookDelivery object

Auto-disable

If an endpoint racks up 20 consecutive failed deliveries, we set is_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.