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

FieldTypeMeaning
credit.receivedmoney arrived and was pricedThe one most products live on. Carries gross, net, the fee split, and who it was for.
credit.unmatched_resolvedan unmatched credit was attributedMoney arrived on an account number nobody recognised, and an operator has since attached it.

Wallets

FieldTypeMeaning
wallet.transferredvalue moved between two walletsA token vend, for instance: a tenant spends balance with their estate.

Accounts

FieldTypeMeaning
account.disabledan account number stopped accepting moneyNothing new will land on it.
account.expireda time-limited account reached its endDynamic accounts only.
account.consumeda single-use account was usedDynamic accounts only.

Settlement

FieldTypeMeaning
settlement.createdthe bank reported a cycleIts credits are linked. Nothing has been paid yet.
settlement.settledthe cash landedThe collections account has the money; the bank pool is discharged.
settlement.failedthe cycle failedNo journal is posted and the credits go back to be swept again.

Payouts

FieldTypeMeaning
payout.requesteda group asked to be paid outNothing has moved: the money is still in their wallet, just reserved.
payout.approveda reviewer approved itThe money has left the group wallet for payout clearing.
payout.settledan operator paid it at the bankCarries the bank reference.
payout.rejecteda reviewer declined itNothing moved at any point.
payout.failedthe bank transfer failedThe clearing entry is reversed.

System

FieldTypeMeaning
webhook.verifyendpoint verificationSent 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.