Skip to main content
The Ingo Banking Platform delivers webhook events to the webhook_url configured for your program. Events fire asynchronously as platform actions occur — onboarding, account issuance, money movement, and card state changes.
The Ingo Banking Platform joined the Ingo Payments family through the acquisition of Deposits Inc. in 2024, expanding Ingo’s money mobility capabilities with bank-grade account creation, ledgering, and card issuance. As part of Ingo Payments’ broader platform integration effort, Banking webhooks are delivered through a purpose-built architecture optimized for account and card lifecycle events — reflected in the envelope structure documented on this page. We are actively working toward a unified developer experience across all Ingo Payments products.

Delivery

  • Every event is delivered as an HTTP POST to your registered webhook_url
  • Content-Type: application/json
  • Return any 2xx status within a few seconds to acknowledge receipt
  • Non-2xx responses are retried with exponential backoff
  • Receivers must be idempotent — the same event may be delivered more than once under transient failure

Common Envelope

Every event uses the same outer structure. The event field and data.event_type always carry the same value.

Field Conventions


Receiver Best Practices

Deduplicate on data.event_id. The same event may be redelivered under transient failure. Store processed event IDs and skip duplicates. Acknowledge fast, process async. Return 2xx quickly; defer heavy work to a background job. Slow responses will cause retries. Parse defensively. New optional fields may be added to the data block in future platform versions. Do not reject events with unknown fields. Handle unknown card.status.* values as a no-op. The platform may emit any value from the card status enum. Unknown statuses should not cause errors. Use event_description to identify account issuance type. account.issue.created and account.issue.failed are emitted for both VBAN and RBA issuance. The event_description field distinguishes them — common values are "Virtual Bank Account" and "Routable Bank Account". Disambiguate bulk vs. single assignment events. account.assignment.success and account.assignment.failed are emitted in two distinct payload shapes. Branch on the presence of process_id:
  • Single-record — includes entity_id, entity_type, and an account block describing the assigned account
  • Bulk — includes process_id, data.event_type set to the constant "account.assignment.bulk", and a batch block with run statistics

Platform Notes

The status field on card lifecycle events (including card.issue.failed) carries the value "completed". This reflects the event-delivery status, not the card outcome. Use the event name itself to determine whether the operation succeeded or failed.
Transfer reversal and block events (account.transfer.reversed, account.transfer.blocked) use a slimmer payload than created/completed/failed events — they omit account_id, account_type, currency, amount, and memo.

Event Categories

Card Lifecycle and Card Authorization events correspond to the Card Issuance capability, which is currently in development. These events are documented here so you can build and test your handlers in advance. They will not fire until Card Issuance is enabled for your program.
Select an event from the sidebar to view its full payload schema and example.