v1.0.5Changelog

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" }
}