Skip to main content
IMBA POSTs terminal (and smoke-test) events to the HTTPS URL configured for your tenant.

Delivery semantics

  • At-least-once delivery
  • Idempotency key: event_id (UUID). Duplicate delivery → return 200 without applying twice
  • Signature header: X-IMBA-Signature
  • Content-Type: application/json
Allowlist IMBA egress IPs (list from onboarding / ops) on your firewall if required.

Signature

Verify against the raw request body bytes before JSON parsing. Use the HMAC secret you registered with IMBA. Constant-time compare recommended. The body is not minified: there is a space after every : and ,, and key order is IMBA’s, not alphabetical. Re-serializing the parsed JSON produces a different signature — sign the bytes exactly as received.

Envelope

Field name is event (not event_type).

Event types (v1)

Not in v1: chargebacks, separate reconciliation settled events, unfreeze events.

data fields

Minimum: ext_id, status, document_status. Often also ref_id / order_id, card_id, http_status, error / message, and when present amount / currency / network / to_address / offer_id. card.otp is not a status change and has no status / document_status — see below.

card.otp — 3-D Secure code

Sent when an acquirer asks for a confirmation code on a card issued to you. The same code goes to the cardholder e-mail you supplied at issue — the webhook does not replace that mail. It exists so your own support can read the code out to the buyer.
No cardholder contacts (e-mail, phone, name) and no card secrets are in the event: card_id + otp already identify the code, and you supplied the holder data yourself at issue. The code lives about 2 minutes. Handle the event immediately; do not queue it behind slow work. Idempotency. A provider retry of the same code on the same card does not create a second event. A new code on the same card is always a new event. Stay idempotent by event_id, and optionally by delivery_id. Only cards issued to a partner tenant produce this event; retail IMBA Wallet cards do not. If your webhook endpoint is missing or disabled there is no event and the cardholder mail goes out as usual.

Secrets — never trust webhooks for these

Webhook payloads must not be treated as a source of card numbers, CVV, JWE, epin, or LPA. The single exception is the 3-D Secure code in card.otp (field otp), where the code is the event; there is no pull endpoint for it. Automated delivery of voucher / card credentials after purchase is the product GET, not the webhook. See FAQ.

Smoke test

IMBA can send test.ping from the admin console. Expect HTTP 2xx. Respond 200 for duplicate event_id.