Webhook Events
Event envelope
All webhook events use a JSON envelope:| Field | Type | Description |
|---|---|---|
id | string | Stable event identifier (the event ID). Use this for deduplication. This is not the same as data.id. |
type | string | Event type, such as transfer.completed. |
created | string | UTC timestamp when the event was created. |
data | object | Event-specific payload. data.id is the resource ID (e.g., transfer ID or payment ID), which may differ from the event id. |
type.
transfer.created
Emitted when a Brale transfer is created.
Example:
- Treat
data.idas the transfer ID. - Additional fields may be present as the transfer schema evolves.
- Your integration should ignore unknown fields.
transfer.completed
Emitted when a Brale transfer reaches complete status.
Use this event to replace polling transfer status.
Example:
- Treat
data.idas the transfer ID. - Treat
data.statusas the completed transfer state. - Additional fields may be present as the transfer schema evolves.
- Your integration should ignore unknown fields.
payment.completed
Emitted when a payment reaches complete status.
Example:
transfer.canceled
Emitted when a Brale transfer is canceled.
Example:
- Treat
data.idas the transfer ID. - Treat
data.statusas the canceled transfer state. - Additional fields may be present as the transfer schema evolves.
- Your integration should ignore unknown fields.
account.verification.documents_required
Emitted when Brale’s KYB review determines one or more documents must be uploaded.
Use this event to prompt the account holder to submit the requested documents. For each document with status: "pending_upload", stage the file (use document_kind and person_label from the payload), then link staged submissions. You can also poll required documents instead of using this webhook.
Example:
- Treat
data.account_idas the account ID. - Each entry in
data.documentsdescribes a required document.statusispending_uploaduntil the document is submitted. - Include
person_labelwhen staging individual (KYC) documents. - Your integration should ignore unknown fields.
account.verification.completed
Emitted when account verification completes and the account is enabled.
Example:
- Treat
data.account_idas the account ID. - Treat
data.statusas the completed verification state (complete). - This event fires only when the account reaches
completestatus. - Your integration should ignore unknown fields.
Handling future event types
Brale may add new event types over time. Best practices:- Use
GET /webhooks/event_typesto discover supported events. - Branch on
event.type. - Acknowledge unknown event types safely.
- Ignore unknown fields in
data. - Do not assume event ordering.