Debit Transactions
Cash withdrawal initiation and debit reversal. Supports ATM card-present PIN-verified withdrawals with optional access fee.
Cash Withdrawal
POST
/api/ssb/accountservices/{version}/transactions/debits
Posts a debit (cash withdrawal) to the specified account. Supports ATM card-present PIN-verified withdrawals. An optional surcharge can be included in amount.accessFee.
Operation ID: Debits
head.description
string
Yes
Transaction description. Example:
"ATM Cash Withdrawal"
transaction.rrn
string
Yes
12-digit RRN.
transaction.type
string
Yes
Must be:
CASHWITHDRAWAL
deviceInfo.terminalId
string
Yes
ATM terminal ID.
deviceInfo.terminalLoc
string
Yes
Terminal location.
deviceInfo.acceptorId
string
Yes
Acceptor ID.
paymentInstrument.account.id
string
Yes
Account to debit. From Account Lookup.
paymentInstrument.card.pan
string
No
Card PAN. Optional.
institution.id
string
Yes
Institution ID.
amount.amount
number
Yes
Withdrawal amount. Example:
200.00
amount.currencyCode
string
Yes
ISO 4217 code. Example:
"USD"
amount.accessFee
number
No
Surcharge / access fee. Example:
2.50
cash.amount
number
No
Cash amount dispensed (may differ from total if accessFee applied).
json
{
"head": {
"acquirerId": "10001",
"description": "ATM Cash Withdrawal"
},
"transaction": {
"rrn": "250603001020",
"date": "20260603",
"type": "CASHWITHDRAWAL"
},
"deviceInfo": {
"terminalId": "ATM00001",
"terminalLoc": "100 Main St, New York NY 10001",
"acceptorId": "ACCEPTOR000001"
},
"paymentInstrument": {
"account": { "id": "DDA1234567890" },
"card": { "pan": "543100XXXXXXXXX0781" }
},
"institution": { "id": "000100" },
"amount": {
"amount": 200,
"currencyCode": "USD",
"accessFee": 2.50
},
"cash": { "amount": 200 }
}
balances[].type
string
Available · Balance
balances[].amount
number
Updated balance after withdrawal.
balances[].currencyCode
string
ISO 4217 currency code.
status.responseCode
string
"000" = approved. Dispense cash.
status.authId
string
Authorization ID. Store for potential reversal.
branch.*
object
Branch ID, name, and address.
json — 200 OK
{
"transaction": {
"rrn": "250603001020",
"date": "20260603",
"type": "CASHWITHDRAWAL"
},
"paymentInstrument": {
"account": { "id": "DDA1234567890" }
},
"institution": { "id": "000100" },
"amount": {
"amount": 200,
"currencyCode": "USD",
"accessFee": 2.50
},
"branch": {
"id": "BR-001",
"name": "Main Street Branch",
"address": "100 Main Street, New York, NY 10001"
},
"balances": [
{ "type": "Available", "amount": 4619.00, "currencyCode": "USD" },
{ "type": "Balance", "amount": 4619.00, "currencyCode": "USD" }
],
"status": { "authId": "AUTH02", "responseCode": "000" }
}
Debit Reversal
POST
/api/ssb/accountservices/{version}/transactions/debits/reverse
Reverses a previously posted debit — for example, when the ATM is unable to dispense cash after the debit posted. Credits the account back for the reversal amount.
Operation ID: DebitsReverse
Use a New RRN for Reversals
Reversals are a new transaction — use a new transaction.rrn. Reference the original via reverseInfo.authId. Exception: 504 timeout retry — reuse the same RRN.
transaction.type
string
Yes
Must be:
CASHWITHDRAWALREVERSAL
transaction.rrn
string
Yes
New 12-digit RRN for this reversal.
paymentInstrument.account.id
string
Yes
Account originally debited.
institution.id
string
Yes
Institution ID.
amount.amount
number
Yes
Amount to reverse.
amount.currencyCode
string
Yes
ISO 4217 currency code.
reverseInfo.authId
string
No
Auth ID from original debit (
status.authId).
reverseInfo.reasonCode
string
Yes
Reversal reason. Example:
UNABLE_TO_DISPENSE
reverseInfo.amount
number
Yes
Amount being reversed.
json
{
"head": {
"acquirerId": "10001",
"description": "ATM Cash Withdrawal Reversal"
},
"transaction": {
"rrn": "250603001030",
"date": "20260603",
"type": "CASHWITHDRAWALREVERSAL"
},
"deviceInfo": {
"terminalId": "ATM00001",
"terminalLoc": "100 Main St, New York NY 10001",
"acceptorId": "ACCEPTOR000001"
},
"paymentInstrument": {
"account": { "id": "DDA1234567890" },
"card": { "pan": "543100XXXXXXXXX0781" }
},
"institution": { "id": "000100" },
"amount": {
"amount": 200,
"currencyCode": "USD",
"accessFee": 2.50
},
"reverseInfo": {
"authId": "AUTH02",
"reasonCode": "UNABLE_TO_DISPENSE",
"amount": 200
}
}
balances[].type
string
Balance type after reversal.
balances[].amount
number
Restored balance amount.
status.responseCode
string
"000" = reversal successful.
status.authId
string
Authorization ID for this reversal.
branch.*
object
Branch ID, name, and address.
json — 200 OK
{
"transaction": {
"rrn": "250603001030",
"type": "CASHWITHDRAWALREVERSAL"
},
"paymentInstrument": {
"account": { "id": "DDA1234567890" }
},
"institution": { "id": "000100" },
"amount": { "amount": 200, "currencyCode": "USD" },
"branch": {
"id": "BR-001",
"name": "Main Street Branch",
"address": "100 Main Street, New York, NY 10001"
},
"balances": [
{ "type": "Available", "amount": 4821.50, "currencyCode": "USD" }
],
"status": { "authId": "AUTH03", "responseCode": "000" }
}