Skip to main content
Webhooks send selected Polpo project events to your backend as signed HTTP POST requests.

Create a webhook

Open the project, then go to Project Settings > Webhooks and add an HTTPS endpoint.
The 201 response has this shape:
The signing secret is returned only when the webhook is created or its secret is rotated. Store it before discarding the response.
If events is omitted, it defaults to ["*"].

Event filters

Filters support exact event names, category wildcards such as task:*, and the global * wildcard. Combine multiple filters in the events array. The event catalog is generated from the runtime and can change as event types are added. Read the current public catalog instead of maintaining a hard-coded list:

Payload

Every delivery body contains the event name, event-specific data, and an ISO timestamp:
The delivery ID is not part of the JSON body. It is sent in a header.

Headers and signature

Each request includes: The signature is HMAC-SHA256 over <timestamp>.<raw-request-body>. Verify the raw bytes before parsing JSON and compare signatures in constant time:
Also reject timestamps outside a short tolerance window in your application to limit replay attacks.

Delivery and retries

A 2xx response marks an attempt successful. Each request has a 10-second timeout. Polpo retries network failures, timeouts, HTTP 408, HTTP 429, and 5xx responses. Backoff is exponential with jitter and is capped at one hour. A delivery is attempted at most five times. Other 4xx responses are treated as permanent failures. Every attempt is persisted with status, status code, truncated response body, error, duration, attempt number, and next retry time.

Delivery operations

List recent attempts, newest first:
Use the returned next_cursor as the before query parameter for the next page. Queue a new delivery from a past payload:
Rotate the signing secret:
Rotation returns the new secret once. New deliveries, including manual redeliveries, use the current secret.