Transfer Lifecycle
Each partner transfer moves through a series of states from creation to completion.States
| Status | Description |
|---|---|
CREATED | Transfer created, points deducted from user. Webhook pending delivery. |
SENT | Webhook successfully dispatched to partner. |
ACCEPTED | Partner confirmed acceptance. Payout to partner wallet will be initiated. |
REFUSED | Partner refused the transfer. User’s points are refunded. |
State Diagram
Terminal States
- ACCEPTED — the transfer is complete. Bankroll initiates a payout to your partner wallet address.
- REFUSED — the transfer is rolled back. The original points deduction is cancelled and a reversal transaction refunds the user.
409 Conflict.
Reconciliation
Bankroll runs a periodic reconciliation job that handles edge cases:- Stale CREATED transfers — if a transfer remains in
CREATEDfor more than 30 seconds, the webhook is redispatched. This handles cases where the initial delivery failed silently. - Accepted transfers without payout — if an
ACCEPTEDtransfer doesn’t have a corresponding payout, the reconciliation job initiates one.
Event Log
Every state transition is recorded as aPartnerTransferEvent with a timestamp and optional metadata. This provides a full audit trail for each transfer:
| Event Type | Description |
|---|---|
CREATE | Transfer created |
SEND | Webhook dispatched |
ACCEPT | Transfer accepted by partner |
REFUSE | Transfer refused by partner (includes reason) |