Webhooks Overview

Breeze uses webhooks to notify your server about important payment events — such as when a payment succeeds, fails, or expires. Webhooks allow your backend to update order statuses and trigger post-payment logic automatically. Breeze fires a webhook event on every status transition — your server does not need to poll for updates.

Event Format

Each webhook is sent as a POST request to your configured webhook URL with this JSON structure:

{
  "type": "<event-type>",
  "data": { ... },
  "signature": "<hmac-sha256-signature>"
}
  • type — the event name (e.g. PAYMENT_SUCCEEDED)
  • data — the full event payload
  • signature — HMAC-SHA256 of the sorted data object, used to verify authenticity (see Webhook Signature Verification)

For full payload examples for every event type, see Webhook Event Reference.

Supported Events

Event typeDescriptionEnabled by default
PAYMENT_CREATEDPayment page created; customer hasn't paid yetMerchants onboarded after 25 Aug 2025
PAYMENT_SUCCEEDEDPayment completed successfullyYes
PAYMENT_EXPIREDPayment page timed out unpaidYes
PAYMENT_ATTEMPT_FAILEDA payment attempt was declinedNo — contact support to enable
REFUND_STATUS_UPDATERefund status changed (newprocessingsucceeded / failed)Yes
PAYOUT_PAGE_STATUS_UPDATEPayout page status changedYes
PAYOUT_PAGE_PENDING_STATUS_UPDATEPayout page sub-status changed while in PENDINGYes
SUBSCRIPTION_STATUS_UPDATEDSubscription status changedYes
INVOICE_STATUS_UPDATEDSubscription invoice status changedYes
KYC_DATA_REQUIREDBreeze is requesting KYC data for a customerYes
HEADLESS_KYC_STATUS_UPDATEDHeadless KYC request status changedYes (fires only when using the Headless KYC API)
FRAUD_REPORTEDPayment reported as fraudulent by card networksNo — contact support to enable
DISPUTE_STATUS_UPDATEDispute status changedNo — contact support to enable
LIQUIDATION_ADDRESS_TRANSACTION_STATUS_UPDATECrypto deposit-and-convert transaction status changedYes (fires only for merchants using liquidation addresses)
CONNECT_SUCCEEDEDA team member was added to your accountYes
CONNECT_DELETEDA team member was removed from your accountYes

Deprecated Events

Event typeReplacement
OFFRAMP_STATUS_UPDATEPAYOUT_PAGE_STATUS_UPDATE
PAYOUT_STATUS_UPDATEPAYOUT_PAGE_STATUS_UPDATE

Retry Policy

  • If your server returns a non-200 status, Breeze retries up to 10 times over a 60-minute window with exponential backoff (2s, 5s, 10s…).
  • Once a 200 OK is received, retries stop.
  • In the dashboard event log, a failed delivery appears as status: -1.
⚠️

Webhook delivery failures do not affect payment or payout status. A payment that succeeded will remain PAID regardless of webhook delivery. Always treat webhooks as a notification mechanism — if delivery fails, use the Get Payment Page endpoint to poll for current status.

Idempotency

Webhook handlers must be idempotent — the same event may be delivered more than once due to retries. Use pageId or clientReferenceId to detect duplicates before processing.

Security

Signature verification (recommended): Compute HMAC-SHA256 of the sorted data object using your webhook secret and compare against the signature field. See Webhook Signature Verification for code examples in Node.js, Python, PHP, and Java.

Static IP allowlist (optional): Contact [email protected] to get Breeze's static IPs if you want to restrict webhook sources at the network level.

Best Practices

  • Log all incoming webhooks for debugging and audit trails.
  • Always return 200 OK after successful processing.
  • Do not rely solely on client-side redirects to determine payment success.
  • Make your handler robust against duplicate events and transient failures.