Create a webhook endpoint
Registers a URL to deliver events to and returns the signing secret you verify deliveries against.
Parameters
| Parameter | Description |
|---|---|
| urlstring (uri)required | The URL BillKit sends events to: http or https, with a public host. Private and loopback addresses are refused. Must be an absolute URL. At most 2083 characters. |
| descriptionstring | nulloptional | An optional note about the endpoint. At most 255 characters. |
| enabled_eventsarray of stringoptional | The event types to send to this endpoint, as listed by GET /v1/webhook_endpoints/event_types, or * for every event, including types added later. Defaults to ["*"]. |
Returns
The endpoint, with secret populated. This is the only response that carries this secret: every later read returns secret_fingerprint instead. Store the secret when you get it. If you lose it, rotate: the rotate response carries the new one, once.
Leave enabled_events off and the endpoint receives everything. An unknown event type is a 400; GET /v1/webhook_endpoints/event_types lists the valid ones. A mode holds at most 16 endpoints, disabled ones included, and creating one more is a 409 with code webhook_endpoint_limit_reached. Rotating the secret signs every delivery with both the old and the new secret for 24 hours, then with the new one only, so read Rotating a secret before you do it on a live endpoint.
Verify every payload. Check the BillKit-Signature header against this endpoint’s secret before
trusting the body. See Verify the signature.
Test it
Point the endpoint at a tunnel, or skip registration entirely and forward deliveries straight to localhost with billkit listen.
Errors
| Status | Cause |
|---|---|
| 400 | The request was refused (type: invalid_request_error): a required parameter is missing (parameter_missing), one failed validation (parameter_invalid) or is not one the operation takes (parameter_unknown), and param names it. |
| 401 | No credential, or one that does not authenticate. |
| 402 | The account is suspended (tenant_suspended), or the payment provider refused a charge or refund the call made (type: payment_error, code: payment_refused). |
| 403 | Authenticated, but not allowed: missing scope (insufficient_scope), a key of the wrong mode (mode_mismatch), or a refused origin. Needs the webhook_endpoints:write scope. |
| 404 | No such object in this account and mode. |
| 409 | Conflicts with the object's current state (state_conflict, or a more specific code), or an operation still in flight (operation_pending). |
| 413 | The request body is larger than the API accepts. |
| 429 | Rate limited. Retry-After says when to try again. |
| 500 | Something failed on BillKit's side (type: api_error). Retry with the same Idempotency-Key. |
| 502 | The payment provider failed or did not answer. |
| 503 | Temporarily unable to serve. reason says whether the request was attempted. |
Other webhook endpoints operations
- List webhook endpoints GET /v1/webhook_endpoints
- Delete webhook endpoint DELETE /v1/webhook_endpoints/{endpoint_id}
- Get webhook endpoint GET /v1/webhook_endpoints/{endpoint_id}
- Update webhook endpoint POST /v1/webhook_endpoints/{endpoint_id}
- List webhook endpoint deliveries GET /v1/webhook_endpoints/{endpoint_id}/deliveries
- Get webhook delivery GET /v1/webhook_endpoints/{endpoint_id}/deliveries/{delivery_id}
- Redeliver webhook delivery POST /v1/webhook_endpoints/{endpoint_id}/deliveries/{delivery_id}/redeliver
- Rotate webhook endpoint secret POST /v1/webhook_endpoints/{endpoint_id}/rotate_secret
- List event types GET /v1/webhook_endpoints/event_types
BillKit