Core resource
Events
Every state change and access-token mutation writes an immutable B2bEvent. Events are append-only — once written, they cannot be modified. Delivery to subscribed webhook endpoints is fire-and-forget on emission.
Event catalog
| Event type | Emitted on |
|---|---|
transaction.created | POST /transactions |
transaction.access_link_generated | POST /transactions/:id/access-tokens |
transaction.participant_engaged | First portal session exchange or approval |
transaction.funding_initiated | Portal fund succeeds at creating the PaymentIntent |
transaction.funded | payment_intent.succeeded |
transaction.released | Release succeeds end-to-end |
transaction.refunded | Administrative refund path (post-Finovate) |
transaction.cancelled | POST /transactions/:id/cancel |
transaction.expired | expires_at passed with no completion |
access_token.revoked | DELETE /access-tokens/:id |
webhook.delivery_succeeded | Endpoint returned 2XX |
webhook.delivery_failed | Endpoint returned non-2XX or timed out |
Envelope
Webhook deliveries wrap the event in a Stripe-compatible envelope:
Webhook envelopejson
{
"id": "b2bev_…",
"type": "transaction.funded",
"created_at": "2026-05-04T14:23:12.000Z",
"livemode": false,
"data": {
"transaction": { "id": "b2btxn_…", "status": "funded", … }
},
"metadata": { "stripe_payment_intent_id": "pi_…" }
}Query via API
GET
/api/v1/b2b/transactions/:id/eventsCursor pagination on starting_after, newest-first. Default limit 50, max 200. Scope: transactions:read.