Outgoing delivery logs & manual resend: To list stored deliveries, view attempt history for one event, or trigger a one-off resend by trade/withdrawal reference, use the Webhooks group in the API reference tab (endpoints under
/transactions/webhooks). This guide covers incoming payloads and verification on your server.Crypto wallet deposit webhooks
These webhooks fire whenever a wallet address receives crypto assets. You will receive events for the following transaction states:Payload example
Payload fields
Auto-settlement fields
When a bank account is linked to a wallet address and auto-settlement is enabled, the webhook payload includes additional fields. For a full explanation of how auto-settlement works, see the Auto-settlement guide.If a markup percentage is set, it is deducted from the transaction amount before the final payout is calculated. For example, if a trade amount is 1,000 USD and a 5% markup is applied, 50 USD is deducted and the settlement is calculated based on 950 USD.
Behavior notes
-
The webhook may send multiple events for the same transaction as its status changes. For example, a transaction may first trigger
trade.pending, then latertrade.completed. UseeventTimeto order them — see Ordering and duplicates. -
The
confirmationsfield indicates how many blockchain confirmations the transaction has received. This is especially important fortrade.completedevents. -
trade.deletedis terminal: nothing is credited and notrade.completedfollows for thatid. A deposit that fails this way may have already sent you atrade.pending. -
trade.flaggedaddsbalanceRemainingto the payload above — the USD still needed on that address to clear the minimum: - For auto-settlement trades, withdrawal events are also sent and the related trade ID is included in the notification response.
Address creation webhook
This webhook fires as a fallback when a wallet address is successfully generated. It confirms the address is live and ready to receive deposits.Payload example
Payload fields
Fiat/Crypto withdrawal webhooks
These webhooks fire whenever a withdrawal is created or when its status changes.Payload example
Payload fields
Behavior notes
- A single withdrawal may trigger multiple webhook events as its status progresses.
withdrawal.pendingis always sent first.txHashwill not be present until the withdrawal is completed.- Always rely on the
eventandstatusfields to determine the current state of a withdrawal. - Events may arrive out of order after a failed delivery is retried — see Ordering and duplicates.
Ordering and duplicates
Breet delivers each event at least once, and delivery is not ordered. A failed delivery is retried on its own schedule while newer events for the same trade or withdrawal keep flowing, so a retriedtrade.pending can reach you after the trade.completed for the same trade.
Every payload carries two fields for this:
eventId— an opaque identifier for the event. It is derived from the event’s identity, so every retry and every manual resend of the same event carries the sameeventId.eventTime— the moment the state actually changed, in ISO 8601.
- Deduplicate on
eventId. It identifies one event. Receiving it twice means a retry or a resend, not a new state change. (id+eventidentifies the same thing if you already key on that pair.) - Keep the last applied
eventTimeperid. Discard any event whoseeventTimeis older than or equal to the one you last applied for thatid. - Never move a terminal state backwards. Once a trade is
completedor a withdrawal iscompleted,rejected, orreversed, ignore any later-arrivingpendingorprocessingevent for it.
2xx as soon as you have stored the event. Returning a non-2xx triggers the retry schedule below, which is what causes out-of-order arrivals.
Webhook verification
To ensure the security and authenticity of incoming webhook notifications, Breet provides multiple layers of verification.IP whitelisting
All webhook requests originate from Breet’s secure servers. Verify that incoming requests come from one of the following IP addresses:Webhook secret
Each webhook endpoint is configured with a webhook secret, visible in your dashboard (Go to Settings → For Developer) under the Webhook Verification Secret Key. The secret is included in every webhook request as a header:- Retrieve the
x-webhook-secretheader from the incoming request. - Compare it against the secret configured in your dashboard.
- Only process the request if the secrets match.
Recommended verification flow
- Check the request IP against the allowed Breet IPs.
- Validate the
x-webhook-secretheader against the configured secret. - Only process the payload if both checks pass.
- As an extra check, call Fetch Transaction by ID or Fetch Withdrawal by ID to confirm the transaction exists on Breet before taking any action.
Webhook retries
If your server does not respond with a successful 2xx status code, Breet automatically retries delivering the webhook using an exponential backoff schedule. Each delay is measured from the end of the previous attempt:
Breet makes 7 delivery attempts in total: the initial delivery plus 6 retries, spanning roughly 25 hours. Times exclude your endpoint’s own response time. After the final retry, the webhook attempt is marked as permanently failed.
Retry conditions
Retries occur when:- Your webhook endpoint returns any non-2xx HTTP status code (including 3xx, 4xx, or 5xx).
- Your webhook endpoint times out.
- Your server is unreachable.
Best practices
- Return a 2xx status code as soon as your server receives and accepts the webhook.
- Handle duplicate deliveries. Breet may deliver the same event more than once during retries. Use
eventIdto detect duplicates and ensure your processing logic is idempotent. - Handle out-of-order deliveries. A retried event can arrive after a newer one for the same trade or withdrawal. Use
eventTimeto discard stale updates — see Ordering and duplicates. - Log all received events and failures to aid debugging.
Resending webhooks
If your server missed a webhook or you need to replay events for debugging, Breet lets you inspect delivery history and trigger manual resends. All outgoing webhook events are persisted for 7 days. You can resend webhooks in two ways:- From the dashboard — Go to Settings → For Developer → Webhook Logs to view all outgoing events, inspect delivery statuses, and resend any event with a single click.
- Via the API — Use the endpoints below to programmatically list, inspect, and resend webhook events.
The API endpoints below require an active integration with API access (VIP partners). For full request/response schemas, see List outgoing webhook events, Get a single webhook event, and Resend all webhooks for a reference.
List delivery history
Retrieve a paginated list of all outgoing webhook events sent to your endpoint.View a single event
Fetch full details for a specific webhook event, including every delivery attempt with timestamps and HTTP status codes.attempts array, which records each delivery try with the response status code and timestamp — useful for diagnosing endpoint failures.
Resend by reference
Trigger an immediate redelivery of all webhook events associated with a given trade or withdrawal reference.reference is the trade or withdrawal document ID (the same value as id in your webhook payloads). The response returns the result of each resend attempt:
When to resend
- Your server was down during the original delivery and all automatic retries have been exhausted.
- You deployed a bug fix and need to replay events that previously failed processing.
- You want to verify your webhook handler is working correctly in a staging environment.