Skip to main content
Breet sends webhook notifications to your server whenever important events occur, such as incoming crypto deposits or withdrawal status changes. Your application can listen for these events and respond accordingly.
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 later trade.completed.
  • The confirmations field indicates how many blockchain confirmations the transaction has received. This is especially important for trade.completed events.
  • 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.pending is always sent first.
  • txHash will not be present until the withdrawal is completed.
  • Always rely on the event and status fields to determine the current state of a withdrawal.

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:
Requests from any other IP addresses should be considered untrusted and ignored.

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:
To verify a webhook request:
  1. Retrieve the x-webhook-secret header from the incoming request.
  2. Compare it against the secret configured in your dashboard.
  3. Only process the request if the secrets match.
Keep your webhook secret secure. Do not expose it in public repositories, client-side code, or logs.
  1. Check the request IP against the allowed Breet IPs.
  2. Validate the x-webhook-secret header against the configured secret.
  3. Only process the payload if both checks pass.
  4. 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: After the final retry (24 hours), 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.
Breet does not retry events where your server returns 2xx, even if the response body contains an error.

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 the id and event fields together to detect duplicates and ensure your processing logic is idempotent.
  • 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 the Webhooks API reference.

List delivery history

Retrieve a paginated list of all outgoing webhook events sent to your endpoint.
You can filter results using optional query parameters:

View a single event

Fetch full details for a specific webhook event, including every delivery attempt with timestamps and HTTP status codes.
The response includes the 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.
The 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.
Resent webhooks contain the same payload as the original event. Make sure your processing logic is idempotent — use the id and event fields to detect duplicates and avoid processing the same event twice.