All webhook payloads follow the same envelope:
{
"event" : "<event-type>" ,
"data" : { ... }
}
The data object shape depends on the event type. Every field documented below is present in the data object.
accounts.created
Fired when a new account is created for an entity.
The newly created account. Unique account identifier.
The ID of the entity that owns this account.
Account type. e.g. checking.
Human-readable account label.
Current account balance. Available balance in the smallest currency unit.
Current balance including pending transactions.
Key-value metadata attached to the account.
Creation timestamp in Unix milliseconds.
Last update timestamp in Unix milliseconds.
Summary of how this account creation affects the entity. Show entity_impact fields
Total number of accounts now held by this entity.
List of account types held by the entity.
Whether a default account has been set for this entity.
{
"event" : "accounts.created" ,
"data" : {
"account" : {
"id" : "01K6ZX7360026KPNA2SQ6NPNZY" ,
"entity_id" : "01K3P1JTKG133K4SKFH36F3FN6" ,
"type" : "checking" ,
"currency" : "USD" ,
"display_name" : "Primary USD Account" ,
"balance" : {
"available" : 0 ,
"current" : 0
},
"meta" : {
"external_ref" : "ext_acc_12345" ,
"purpose" : "operational"
},
"created" : 1759859936448 ,
"updated" : 1759859936448
},
"entity_impact" : {
"entity_id" : "01K3P1JTKG133K4SKFH36F3FN6" ,
"total_accounts" : 1 ,
"account_type" : [ "checking" ],
"default_account_set" : true
}
}
}
account_details.created
Fired when bank account numbers or wallet details are generated for an account.
The newly created account details record. Show account_details fields
Unique identifier for the account details record.
The ID of the entity that owns this account.
The ID of the account these details belong to.
The assigned account number.
The routing number (where applicable).
The issuing bank or institution. Account details status. e.g. active.
Creation timestamp in Unix milliseconds.
Last update timestamp in Unix milliseconds.
{
"event" : "account_details.created" ,
"data" : {
"account_details" : {
"id" : "01K6ZX8CWXXGFR9MJGQVCYTQSM" ,
"entity_id" : "01K3P1JTKG133K4SKFH36F3FN6" ,
"account_id" : "01K6ZX7360026KPNA2SQ6NPNZY" ,
"account_number" : "000987654321" ,
"routing_number" : "021000021" ,
"issuer" : {
"code" : "CHASE" ,
"name" : "JPMorgan Chase"
},
"status" : "active" ,
"created" : 1759859979165 ,
"updated" : 1759859979165
}
}
}
account_details.updated
Fired when account details are modified — for example, a status change or metadata update.
Unique identifier for the account details record.
The ID of the entity that owns this account.
The ID of the account these details belong to.
The issuing bank or institution.
Updated status of the account details record.
Original creation timestamp in Unix milliseconds.
Timestamp of this update in Unix milliseconds.
{
"event" : "account_details.updated" ,
"data" : {
"id" : "01K748A4WV5Q9NWG4TT2V15V5X" ,
"entity_id" : "01K3HJAK85YJP13WJ41P3CWAVM" ,
"account_id" : "01K7489GQWRD48TV4XYP27ZVSC" ,
"account_number" : "12345678" ,
"issuer" : {
"code" : "HSBC" ,
"name" : "HSBC UK"
},
"status" : "active" ,
"created" : 1760005788571 ,
"updated" : 1760005799179
}
}
inflows.completed
Fired when a payment is received into an account.
Unique identifier for the inflow transaction.
Amount received in the smallest currency unit.
Unique reference for the transaction. Use this to deduplicate events.
Identifier of the sending counterparty.
The ID of the account that received the funds.
The ID of the entity that owns the receiving account.
Transaction status. successful for completed inflows.
Human-readable status description.
Payment reference or description from the sender.
Fee applied to this transaction in the smallest currency unit.
Creation timestamp in Unix milliseconds.
Last update timestamp in Unix milliseconds.
{
"event" : "inflows.completed" ,
"data" : {
"id" : "01K6ZXCNMVA04GM3WQRCKQNCMB" ,
"amount" : 10000 ,
"currency" : "USD" ,
"unique_reference" : "01K6ZX7360026KPNA2SQ6NPNZY-1759504425996" ,
"counterparty_id" : "acct-01K6ZX7360026KPNA2SQ6NPNZY" ,
"account_id" : "01K6ZX7360026KPNA2SQ6NPNZY" ,
"entity_id" : "01K3P1JTKG133K4SKFH36F3FN6" ,
"status" : "successful" ,
"status_reason" : "Successful." ,
"narration" : "Invoice payment received" ,
"type" : "inflow" ,
"applicable_fee" : 0 ,
"meta" : {},
"created" : 1759860119195 ,
"updated" : 1759860119195
}
}
outflows.created
Fired when a transfer request is received and queued for processing.
Unique identifier for the outflow transaction.
Transfer amount in the smallest currency unit.
The idempotency key passed when initiating the transfer.
The ID of the recipient counterparty.
The ID of the source account being debited.
The ID of the entity initiating the transfer.
pending — transfer is queued and awaiting processing.
Fee applied to this transfer in the smallest currency unit.
Creation timestamp in Unix milliseconds.
Last update timestamp in Unix milliseconds.
{
"event" : "outflows.created" ,
"data" : {
"id" : "01K7H0QM421E9CB5M24W5AK3Q3" ,
"amount" : 5000 ,
"currency" : "GBP" ,
"unique_reference" : "PAY-2025-001" ,
"counterparty_id" : "01K76NZW807BYPWACT2JX6B9J8" ,
"account_id" : "01K747KD7QW8KQS2GRD8MQBT55" ,
"entity_id" : "01K3HJAK85YJP13WJ41P3CWAVM" ,
"status" : "pending" ,
"status_reason" : "awaiting_processing" ,
"narration" : "Vendor payment" ,
"type" : "outflow" ,
"applicable_fee" : 75 ,
"meta" : {},
"created" : 1760434049154 ,
"updated" : 1760434050159
}
}
outflows.completed
Fired when a transfer is delivered successfully to the recipient.
The payload shape is identical to outflows.created. The status field will be successful and status_reason will be processing_complete.
{
"event" : "outflows.completed" ,
"data" : {
"id" : "01K7H0QM421E9CB5M24W5AK3Q3" ,
"amount" : 5000 ,
"currency" : "GBP" ,
"unique_reference" : "PAY-2025-001" ,
"counterparty_id" : "01K76NZW807BYPWACT2JX6B9J8" ,
"account_id" : "01K747KD7QW8KQS2GRD8MQBT55" ,
"entity_id" : "01K3HJAK85YJP13WJ41P3CWAVM" ,
"status" : "successful" ,
"status_reason" : "processing_complete" ,
"narration" : "Vendor payment" ,
"type" : "outflow" ,
"applicable_fee" : 75 ,
"meta" : {},
"created" : 1760434049154 ,
"updated" : 1760434050159
}
}
outflows.failed
Fired when a transfer cannot be completed. Check status_reason for the failure cause.
The payload shape is identical to outflows.created. The status field will be failed.
Common status_reason values include insufficient_funds, invalid_account_details, and compliance_hold. Use status_reason to determine whether to retry the transfer or surface an error to your user.
{
"event" : "outflows.failed" ,
"data" : {
"id" : "01K7H0QM421E9CB5M24W5AK3Q3" ,
"amount" : 10000 ,
"currency" : "USD" ,
"unique_reference" : "PAY-2025-002" ,
"counterparty_id" : "01K76NZW807BYPWACT2JX6B9J8" ,
"account_id" : "01K747KD7QW8KQS2GRD8MQBT55" ,
"entity_id" : "01K3HJAK85YJP13WJ41P3CWAVM" ,
"status" : "failed" ,
"status_reason" : "insufficient_funds" ,
"narration" : "Contractor payment" ,
"type" : "outflow" ,
"applicable_fee" : 150 ,
"meta" : {},
"created" : 1760434049154 ,
"updated" : 1760434050159
}
}
outflows.cancelled
Fired when a transfer is cancelled before it is processed.
The payload shape is identical to outflows.created. The status field will be failed and status_reason will be cancelled_by_user.
{
"event" : "outflows.cancelled" ,
"data" : {
"id" : "01K7H0QM421E9CB5M24W5AK3Q3" ,
"amount" : 25000 ,
"currency" : "USD" ,
"unique_reference" : "PAY-2025-003" ,
"counterparty_id" : "01K76NZW807BYPWACT2JX6B9J8" ,
"account_id" : "01K747KD7QW8KQS2GRD8MQBT55" ,
"entity_id" : "01K3HJAK85YJP13WJ41P3CWAVM" ,
"status" : "failed" ,
"status_reason" : "cancelled_by_user" ,
"narration" : "Office supplies order" ,
"type" : "outflow" ,
"applicable_fee" : 250 ,
"meta" : {},
"created" : 1760434049154 ,
"updated" : 1760434050159
}
}