Create a webhook subscription
Scopewebhooks:writeDeprecated. Use POST /v1/accounts/{account_id}/webhooks, which behaves identically.
Registers an HTTPS endpoint to receive notifications for the event types listed
in events.
secret: returned only in this response and never again. Store it before discarding the body; deliveries are signed with it and carry the signature in theBeeL-Signatureheader.test_delivery: a one-off signed delivery sent to your URL as part of creating the subscription, so you learn whether your endpoint answers without a second call. It is best effort: the subscription exists and is active whatever it says, and the field isnullwhen the test could not be run at all.account_relationship: which accounts the subscription receives events from —own(the default),managed, orall.- Limits: an account holds at most 10 active subscriptions; creating an eleventh is rejected. Registering the same URL twice creates two subscriptions, and the endpoint then receives each event twice.
Keys are prefixed beel_sk_, and each one carries the scopes it was created with: a key
short of the scope an operation needs is answered 403. The scope an operation requires
is shown next to its title, and the full catalogue lives in the Scopes reference.
Keys are created from the BeeL dashboard. They are secret credentials: do not share them or commit them to source control.
In: header
Header Parameters
Idempotency key to prevent duplicates in sensitive operations.
- Any unique client-generated string (e.g. an order id). A UUID also works but is not required
- Allowed characters: letters, digits,
_and-(max 255 chars) - If the same key is sent twice, the result of the first operation is returned
- Keys expire 24 hours after processing
The key is scoped per user and environment, and bound to the request body, so retrying after a network timeout replays the stored response instead of repeating the operation.
| Status | Code | When |
|---|---|---|
400 | INVALID_IDEMPOTENCY_KEY | The key breaks the format rules above. |
409 | IDEMPOTENCY_KEY_PROCESSING | The first request is still in flight. Wait and retry with the same key. |
409 | IDEMPOTENCY_KEY_MISMATCH | The key was already used with a different body. Use a new key. |
^[a-zA-Z0-9_-]+$length <= 255HTTPS endpoint URL that will receive webhook POST requests.
uriList of event types to subscribe to.
1 <= items"own" | "managed" | "all"Response Body
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://app.beel.es/api/v1/webhooks" \ -H "Content-Type: application/json" \ -d '{ "url": "https://yourapp.com/webhooks/beel", "events": [ "verifactu.status.updated" ] }'{
"success": true,
"data": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"url": "http://example.com",
"events": [
"string"
],
"active": true,
"account_relationship": "own",
"deactivated_by": "owner",
"deactivated_at": "2019-08-24T14:15:22Z",
"last_error": "string",
"last_error_cause": "dns",
"consecutive_failures": 0,
"last_used_at": "2019-08-24T14:15:22Z",
"created_at": "2019-08-24T14:15:22Z",
"secret": "whsec_a3f5b2e1c9d8f7e6b5a4c3d2e1f0a9b8c7d6e5f4a3b2c1d0e9f8a7b6c5d4e3f2",
"test_delivery": {
"delivery_success": true,
"http_status": 0,
"duration_ms": 0,
"error": "string",
"failure_cause": "dns"
}
},
"meta": {
"timestamp": "2025-01-15T10:30:00Z",
"request_id": "4bf92f3577b34da6a3ce929d0e0e4736"
}
}{
"success": false,
"error": {
"code": "BAD_REQUEST",
"message": "Invalid request"
},
"meta": {
"timestamp": "2025-01-15T10:30:00Z",
"request_id": "4bf92f3577b34da6a3ce929d0e0e4736"
}
}{
"success": false,
"error": {
"code": "UNAUTHORIZED",
"message": "Authentication is required to access this resource"
},
"meta": {
"timestamp": "2025-01-15T10:30:00Z",
"request_id": "4bf92f3577b34da6a3ce929d0e0e4736"
}
}{
"success": false,
"error": {
"code": "FORBIDDEN",
"message": "You do not have permission to access this resource"
},
"meta": {
"timestamp": "2025-01-15T10:30:00Z",
"request_id": "4bf92f3577b34da6a3ce929d0e0e4736"
}
}{
"success": false,
"error": {
"code": "VALIDATION_ERROR",
"message": "Validation error",
"details": {
"field_name": "Field is required"
}
},
"meta": {
"timestamp": "2025-01-15T10:30:00Z",
"request_id": "4bf92f3577b34da6a3ce929d0e0e4736"
}
}{
"success": false,
"error": {
"code": "UNSUPPORTED_MEDIA_TYPE",
"message": "Unsupported media type: text/plain. Supported: application/json"
},
"meta": {
"timestamp": "2025-01-15T10:30:00Z",
"request_id": "4bf92f3577b34da6a3ce929d0e0e4736"
}
}Retry a failed webhook delivery POST
Re-sends the original payload of a delivery immediately. - **Payload:** the one captured when the event happened, not a fresh snapshot, so changes made to the entity since then are not reflected. - **History:** the outcome is recorded as a new entry and the original entry is kept as it was. `attempt_number` continues the same sequence, so it can exceed the 5 automatic attempts.
List the webhook subscriptions GET
**Deprecated.** Use `GET /v1/accounts/{account_id}/webhooks`, which behaves identically. Returns the webhook subscriptions of the authenticated account, active and inactive alike. The signing secrets are never included.