Reconciliation
The Event Log is the authoritative reconciliation primitive for syncing your internal ledger with Avvio.
While webhooks provide real-time push notifications, the Events API provides guaranteed, replayable, sequence-ordered reconciliation.
text
Webhook Event Received
↓ (Trigger)
Read Latest Events Feed (GET /events?since=)
↓
Deduplicate by Event ID
↓
Update Internal LedgerThe Events Feed#
Fetch events since your last processed sequence number:
http
GET /payments/organizations/{orgId}/events?since=40Response:
json
{
"data": [
{
"id": "evt_01J9812A",
"sequence": "41",
"type": "payout.processing",
"payoutId": "payout_98124b89",
"status": "processing",
"createdAt": "2026-08-17T09:12:00.000Z"
},
{
"id": "evt_01J9813B",
"sequence": "42",
"type": "payout.completed",
"payoutId": "payout_98124b89",
"status": "completed",
"createdAt": "2026-08-17T09:12:35.000Z"
},
{
"id": "evt_01J9819Z",
"sequence": "43",
"type": "payout.returned",
"payoutId": "payout_98124b89",
"status": "failed",
"failureCode": "returned_by_bank",
"fundsReturned": true,
"createdAt": "2026-08-19T14:02:11.000Z"
}
],
"hasMore": false,
"nextSince": "43"
}Key Reconciliation Properties#
- Sequence-Based Cursor: The cursor is an integer
sequence, not a timestamp. Timestamps can produce ties across concurrent transactions, causing dropped events. StorenextSinceafter each sync batch. - At-Least-Once Delivery: The feed guarantees at-least-once delivery. Always deduplicate incoming events against the unique
id(evt_...). - Dedicated
payout.returnedEvent: Reversals produce a distinctpayout.returnedevent rather than a genericpayout.failed, allowing your accounting workers to immediately route ledger reversals. - Immutable History: Once written, an event record is immutable and never updated in place.
Events Feed vs Orders List#
| Feature | GET /events |
GET /orders |
|---|---|---|
| Ordering | Monotonic sequence |
createdAt descending |
| Old Payout Updates | Appended as new events at the end of the feed | Updates existing record without reordering |
| Primary Use Case | Automated ledger synchronization | Admin dashboard history & UI search |
| Pagination | since={sequence} |
Opaque cursor |
| Rate Limit | 600 requests / minute | 600 requests / minute |