Event catalogue
Everything Nineveh will tell you, and when. Subscribe to what you need; unknown types should be ignored rather than rejected, because this list grows.
Collection
| Field | Type | Meaning |
|---|
| credit.received | money arrived and was priced | The one most products live on. Carries gross, net, the fee split, and who it was for. |
| credit.unmatched_resolved | an unmatched credit was attributed | Money arrived on an account number nobody recognised, and an operator has since attached it. |
Wallets
| Field | Type | Meaning |
|---|
| wallet.transferred | value moved between two wallets | A token vend, for instance: a tenant spends balance with their estate. |
Accounts
| Field | Type | Meaning |
|---|
| account.disabled | an account number stopped accepting money | Nothing new will land on it. |
| account.expired | a time-limited account reached its end | Dynamic accounts only. |
| account.consumed | a single-use account was used | Dynamic accounts only. |
Settlement
| Field | Type | Meaning |
|---|
| settlement.created | the bank reported a cycle | Its credits are linked. Nothing has been paid yet. |
| settlement.settled | the cash landed | The collections account has the money; the bank pool is discharged. |
| settlement.failed | the cycle failed | No journal is posted and the credits go back to be swept again. |
Payouts
| Field | Type | Meaning |
|---|
| payout.requested | a group asked to be paid out | Nothing has moved: the money is still in their wallet, just reserved. |
| payout.approved | a reviewer approved it | The money has left the group wallet for payout clearing. |
| payout.settled | an operator paid it at the bank | Carries the bank reference. |
| payout.rejected | a reviewer declined it | Nothing moved at any point. |
| payout.failed | the bank transfer failed | The clearing entry is reversed. |
System
| Field | Type | Meaning |
|---|
| webhook.verify | endpoint verification | Sent once when you register an endpoint. Answer 2xx to activate it. |
Reading a payload
Every payload names the record it is about, labels it in your vocabulary, and gives money as { currency, value }. It gives you enough to act without a second call — but never so much that the event becomes a copy of the ledger.
json{
"type": "payout.settled",
"id": "evt_01J9...",
"data": {
"id": "pay_01J9...",
"rootGroup": "North Site",
"amount": { "currency": "NGN", "value": "45000.00" },
"destination": { "bank": "Zenith", "mask": "2098", "name": "North Site Association" },
"bankReference": "FT26091100123456",
"paidAt": "2026-09-11T16:04:00.000Z"
}
} Treat an event as news, not as truth. It tells you something happened; the ledger is where it happened. If the two ever disagree, the ledger is right — and Nineveh will have opened a break about it before you notice. See
Errors and idempotency.