Skip to main content

Wallet Events

Sakneen Wallets reflect installment schedules, physical cheques, and collection information. They are operational views of payment obligations and collections; they are not accounting ledgers.

One Wallet mutation can emit several events. Subscribe only to the resource families your integration needs.

All Wallet events use eventVersion: 1. Their resource.version is the Wallet revision after the mutation.

Shared Wallet context

Every Wallet-family event includes:

FieldTypeRequiredDescription
walletIdstringYesSakneen Wallet identifier
clientIdstringYesClient who owns the Wallet
unitIdstringYesUnit associated with the Wallet
currencystringYesWallet currency, such as EGP
reservationIdstringNoRelated reservation
contractRequestIdstringNoRelated contract request

Optional fields are omitted when unavailable.

Wallet

Event types

EventEmitted when
wallet.createdA Wallet and its initial schedule are created
wallet.updatedWallet-level state or its schedule changes
wallet.archivedThe Wallet is archived

Additional data fields

FieldTypeDescription
paymentPlanIdstring, optionalCurrent payment plan
confirmationStatusenumpending or confirmed
currentScheduleVersionpositive integerActive installment schedule version
revisionpositive integerCurrent Wallet revision
{
"eventId": "019c0f01-96b6-7ef5-aa43-e7a82659ec8d",
"eventType": "wallet.updated",
"eventVersion": 1,
"occurredAt": "2026-07-30T11:00:00.000Z",
"source": "sakneen",
"organizationId": "64f1a0d6d5d0a14a5c0e8a10",
"correlationId": "019c0f01-96b6-7945-aa0a-9b70a0c582f9",
"resource": {
"type": "wallet",
"id": "66a000000000000000000010",
"version": 4
},
"data": {
"walletId": "66a000000000000000000010",
"clientId": "66a000000000000000000011",
"unitId": "66a000000000000000000019",
"reservationId": "66a000000000000000000018",
"contractRequestId": "66a000000000000000000016",
"currency": "EGP",
"paymentPlanId": "66a000000000000000000017",
"confirmationStatus": "confirmed",
"currentScheduleVersion": 2,
"revision": 4
}
}

Wallet installment

Event types

EventEmitted when
wallet_installment.createdAn expected payment obligation is added
wallet_installment.updatedAn installment's current state changes
wallet_installment.supersededA newer schedule replaces the installment

Additional data fields

FieldTypeDescription
installmentIdstringInstallment identifier
scheduleVersionpositive integerSchedule version that owns the installment
sourcePaymentPlanIdstring, optionalPayment plan that produced it
sourceInstallmentKeystring, optionalStable installment key from its schedule
sequencepositive integerPosition within the schedule
titlestringDisplay title
categoryenumclub_membership, down_payment, finishing, installment, maintenance, other, or parking
expectedAmountnon-negative numberExpected amount in the Wallet currency
percentagenon-negative number, optionalSchedule percentage
dueDateISO 8601 stringInstallment due date
lifecycleStatusenumactive, cancelled, or superseded
{
"walletId": "66a000000000000000000010",
"clientId": "66a000000000000000000011",
"unitId": "66a000000000000000000019",
"currency": "EGP",
"installmentId": "66a000000000000000000012",
"scheduleVersion": 2,
"sourcePaymentPlanId": "66a000000000000000000017",
"sourceInstallmentKey": "installment-1",
"sequence": 1,
"title": "Quarterly installment",
"category": "installment",
"expectedAmount": 100000,
"percentage": 10,
"dueDate": "2026-08-15T00:00:00.000Z",
"lifecycleStatus": "active"
}

The example above is the event's data object.

Wallet cheque

Event types

EventEmitted when
wallet_cheque.createdA physical cheque is recorded against an installment
wallet_cheque.updatedCheque details or status change

Additional data fields

FieldTypeDescription
installmentIdstringInstallment receiving the cheque
chequeIdstringCheque identifier
numberstringCheque number
amountpositive numberCheque amount in the Wallet currency
bankenum, optionalIssuing bank
dueDateISO 8601 string, optionalCheque due date
statusenumheld, deposited, cleared, bounced, returned_to_client, replaced, or cancelled
replacesChequeIdstring, optionalCheque replaced by this cheque
{
"walletId": "66a000000000000000000010",
"clientId": "66a000000000000000000011",
"unitId": "66a000000000000000000019",
"currency": "EGP",
"installmentId": "66a000000000000000000012",
"chequeId": "66a000000000000000000013",
"number": "CHK-10001",
"amount": 25000,
"bank": "National Bank of Egypt",
"dueDate": "2026-08-15T00:00:00.000Z",
"status": "held"
}

The bank value is one of the following strings. Preserve the exact value and accept Other.

Allowed bank valuesAllowed bank values
Abu Dhabi Commercial Bank EgyptAbu Dhabi Islamic Bank
Agricultural Bank of EgyptAhli United Bank
Al Ahli Bank of KuwaitAl Baraka Bank
ALEXBANKArab African International Bank
Arab BankArab International Bank
Attijariwafa BankBank NXT
Banque du CaireBanque Misr
CitibankCommercial International Bank (CIB)
Credit Agricole EgyptEG Bank
Egyptian Arab Land BankEmirates NBD Egypt
Export Development Bank of EgyptFaisal Islamic Bank of Egypt
First Abu Dhabi Bank MisrHousing and Development Bank
HSBC Bank EgyptIndustrial Development Bank
Mashreq Bank EgyptMIDBank
National Bank of EgyptNational Bank of Kuwait Egypt
QNB EgyptSAIB
Suez Canal BankThe United Bank
Other

Wallet collection

Collections reflect received or attempted payment information and can allocate partial amounts to an installment.

Event types

EventEmitted when
wallet_collection.createdCollection information is recorded
wallet_collection.updatedCollection information or status changes
wallet_collection.reversedA recorded collection is reversed

Additional data fields

FieldTypeDescription
collectionIdstringCollection identifier
installmentIdstringInstallment receiving the allocation
chequeIdstring, optionalRelated cheque when the method is cheque
methodenumbank_transfer, card, cash, cheque, other, or unknown
amountpositive numberAmount allocated to the installment
statusenumpending, received, settled, failed, reversed, or unapplied
occurredAtISO 8601 stringBusiness time of the collection
sourceenumintegration, migration, system, or user
{
"walletId": "66a000000000000000000010",
"clientId": "66a000000000000000000011",
"unitId": "66a000000000000000000019",
"currency": "EGP",
"collectionId": "66a000000000000000000014",
"installmentId": "66a000000000000000000012",
"chequeId": "66a000000000000000000013",
"method": "cheque",
"amount": 25000,
"status": "received",
"occurredAt": "2026-08-15T10:30:00.000Z",
"source": "integration"
}

The nested data.source identifies who recorded the collection. The top-level event envelope source remains sakneen.

Processing recommendations

  • Deduplicate every event by eventId.
  • Track resource.version independently for each resource.id.
  • Use correlationId to trace multi-event Wallet mutations.
  • Do not calculate accounting balances from delivery order.
  • Treat collection events as reflected operational information, not financial settlement authority.