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
USER_REVIEW_UPDATETriggered when a user account completes a risk or compliance review and the account’s risk status is updatedNo — contact support to enable
GIFT_CARD_ISSUED
Breeze Credit has been created on your behalf and purchased by Breeze. The Breeze Credit is in issued status. Await the GIFT_CARD_REDEEMED event to deliver the product and/or service
Yes
GIFT_CARD_REDEEMEDThe Breeze Credit has been redeemed by a customer. Breeze Credit transitions from issued to redeemed. This is the trigger for you to deliver the product and/or service to the customerYes
GIFT_CARD_REFUNDEDBreeze Credit transitions from redeemed to refunded. The customer has been refunded in full. The corresponding amount will be deducted from your Wallet in accordance with the Services AgreementYes

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 delivery on a fixed schedule — immediately, then at 2s, 5s, 10s, 30s, 1m, 5m, 10m, 30m, 1h, 1.5h, 2h, 3h, 4h, 6h, 12h, and 24h after the initial attempt (up to 17 retries) — with the final retry 24 hours after the event.
  • Once a 200 OK is received, retries stop (Breeze skips any remaining scheduled retries).
  • 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.


Did this page help you?