Back to neotek ↗Get Sandbox Access

SinglePayment

POSThttps://test.api.neotek.sa/b2b-unified/v1/payments/single

Sandbox URL · in Production call https://api.neotek.sa

Sends one payment from one account to one beneficiary.

Body — the payment itself:

ParameterRequiredDescription
bankCodeRequiredwhich bank executes the payment, by BIC: RJHISARI or ARNBSARI
transactionReferenceRequiredyour own reference, up to 16 characters
paymentDateRequiredthe date the payment is made
currencyRequiredfor example SAR
amountRequiredthe amount as a string, for example 1000.00
purposeCodeRequiredwhy the payment is being made
transactionDescriptionOptionalup to 35 characters
chargeOptionOptionalwho bears the charges: SHA (the default), OUR or BEN

Who pays:

ParameterRequiredDescription
debtorNameRequiredup to 35 characters
debtorAccountIbanRequiredthe account the money leaves
debtorAddressLine1, debtorAddressLine2, debtorAddressLine3Requiredup to 35 characters each

Who is paid:

ParameterRequiredDescription
beneficiaryNameRequiredup to 35 characters
beneficiaryAccountIbanRequiredthe account the money arrives in
beneficiaryBankBicRequiredthe receiving bank's BIC, 8 or 11 characters
beneficiaryAddressLine1, beneficiaryAddressLine2, beneficiaryAddressLine3Requiredup to 35 characters each

Headers:

ParameterRequiredDescription
authorizationRequiredBearer <ACCESS_TOKEN>
content-typeRequiredapplication/json
cURL
curl -X POST 'https://test.api.neotek.sa/b2b-unified/v1/payments/single' \  --header 'authorization: Bearer <ACCESS_TOKEN>' \  --header 'content-type: application/json' \  --data '{    "bankCode": "ARNBSARI",    "transactionReference": "TXN04540615001",    "paymentDate": "2026-02-11",    "currency": "SAR",    "amount": "1000.00",    "debtorName": "Neotek Trading Co",    "debtorAccountIban": "SA1030000012345678901004",    "debtorAddressLine1": "Building 123, King Fahd Road",    "debtorAddressLine2": "Al Olaya District",    "debtorAddressLine3": "Riyadh, Saudi Arabia",    "beneficiaryName": "Ahmed Hassan Trading",    "beneficiaryAccountIban": "SA1080000012345678901003",    "beneficiaryBankBic": "RJHISARI",    "beneficiaryAddressLine1": "Office 456",    "beneficiaryAddressLine2": "Al Malaz District",    "beneficiaryAddressLine3": "Riyadh, Saudi Arabia",    "purposeCode": "Payroll and Benefits",    "transactionDescription": "Invoice #INV-2026-001 payment"  }'

Response

JSON
{  "success": true,  "code": "PAYMENT_ACCEPTED",  "message": "Payment accepted and processing",  "transactionId": "OB20260115123456",  "paymentStatus": "PAYMENT_STATUS_ACCEPTED",  "statusMessage": "INITIATED"}

Errors — each failure carries an error category and a specific code

StatusCodesTypical cause
400 ERROR_CATEGORY_VALIDATION_FAILEDINVALID_IBAN, INVALID_AMOUNT, INVALID_ACCOUNT, INVALID_CURRENCY, INVALID_BANK_CODE, INVALID_REFERENCE, ACCOUNT_NOT_FOUND, BENEFICIARY_NOT_FOUNDBad or missing field — wrong IBAN format, unknown bankCode, reference over 16 characters
401 ERROR_CATEGORY_AUTH_FAILEDAUTH_FAILED, CREDENTIALS_NOT_FOUND, UNAUTHORIZEDToken missing or expired, or no vault credentials for your app with that bank
404 ERROR_CATEGORY_NOT_FOUNDNOT_FOUNDResource not found
409 ERROR_CATEGORY_DUPLICATEDUPLICATE_TRANSACTION, DUPLICATE_REFERENCE, DUPLICATE_PAYMENTYou reused a transactionReference
422 ERROR_CATEGORY_BANK_REJECTEDINSUFFICIENT_FUNDS, AMOUNT_LIMIT_EXCEEDED, DAILY_LIMIT_EXCEEDED, INVALID_PAYMENT_DATE, ACCOUNT_BLOCKED, ACCOUNT_CLOSED, PAYMENT_NOT_ALLOWEDThe request was valid; the bank declined it
500 ERROR_CATEGORY_SYSTEM_FAILURESYSTEM_ERROR, INTERNAL_ERRORGateway-side failure
503 ERROR_CATEGORY_TEMPORARY_FAILURESERVICE_UNAVAILABLE, BANK_UNAVAILABLE, NETWORK_ERROR, NETWORK_TIMEOUT, CONNECTION_REFUSED, REQUEST_TIMEOUTTransient — retry with backoff