POST to an endpoint you control.
Webhooks are configured from the dashboard only. There is no API to create or manage endpoints.
Add an endpoint
In the dashboard, open Webhooks and click Add endpoint:| Field | Description |
|---|---|
| Endpoint URL | The HTTPS URL Proceeds sends events to — for example https://api.example.com/webhooks/proceeds. |
| Description | Optional label to identify the endpoint. |
| Events to send | The event types this endpoint receives. Use Select all or pick individually. |
Events
Choose which events each endpoint receives:| Group | Event | Fires when |
|---|---|---|
| Payments | payment.requested | A 402 challenge was issued for a request. |
payment.pending | A payment attempt exists but isn’t yet validated and proxied. | |
payment.succeeded | A payment was validated and the request was proxied successfully. | |
payment.failed | A payment or fulfillment failed. | |
| Paywalls | paywall.created | A paywall was created. |
paywall.updated | A paywall was updated. | |
paywall.deleted | A paywall was deleted. | |
| Services | service.created | A service was created. |
Verify each delivery
Every request includes anX-Webhook-Signature header. Each endpoint has its own signing secret (prefixed whsec_), shown in the endpoint list.
Before trusting a payload:
- Read the
X-Webhook-Signatureheader from the incoming request. - Compute the expected signature from the raw request body using your endpoint’s
whsec_secret. - Reject the request if the signatures don’t match.
Delivery and retries
Proceeds expects your endpoint to respond with a2xx status. If it doesn’t, the delivery is retried — up to 3 attempts per event.
Open an endpoint’s Recent deliveries to inspect history:
| Column | Meaning |
|---|---|
| Event | The event type delivered. |
| Status | Succeeded or failed. |
| Code | The HTTP status your endpoint returned. |
| Attempts | Delivery attempts used, out of 3. |
| Time | When the delivery was sent. |
| Resend | Manually replay the delivery. |
Manage endpoints
The Webhooks list shows each endpoint’s Status (active or paused), subscribed Events, Last delivery, and signing Secret. From there you can pause, edit, or delete an endpoint.Best practices
- Respond fast. Return
2xximmediately and process the event asynchronously so deliveries don’t time out. - Verify the signature. Always check
X-Webhook-Signaturebefore acting on a payload. - Be idempotent. A retried or resent delivery can arrive more than once — de-duplicate on the event so repeats are safe.
- Subscribe narrowly. Only enable the events each endpoint actually needs.
Transactions
The payment state that
payment.* events mirror.Events
The request lifecycle you can also inspect in the dashboard.

