Back to neotek ↗Get Sandbox Access

FeePayment

POSThttps://test.api.neotek.sa/b2b-unified/v1/moi/payment

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

Pays the fee. The payment settles within the call, so the response comes back PAYMENT_COMPLETED and there is nothing to poll afterwards.

Body — everything FeeInquiry takes, including the same conditional fields, plus:

ParameterRequiredDescription
amountRequiredmust match totalFee from the inquiry
debitAccountIbanRequiredthe account the money leaves, SA plus 22 digits
transactionReferenceOptionalyour own reference, up to 16 characters. Generated if omitted

amount is authoritative here, unlike SADAD. SADAD ignores the amount you send and pays the actual due; MOI requires yours to match totalFee from the inquiry. Do not carry an assumption from one to the other.

Headers:

ParameterRequiredDescription
authorizationRequiredBearer <ACCESS_TOKEN>
content-typeRequiredapplication/json
cURL
curl -X POST 'https://test.api.neotek.sa/b2b-unified/v1/moi/payment' \  --header 'authorization: Bearer <ACCESS_TOKEN>' \  --header 'content-type: application/json' \  --data '{    "bankCode": "RJHISARI",    "billerCode": "090",    "serviceCode": "003",    "beneficiaryId": "2036108050",    "duration": 1,    "amount": "2500.00",    "debitAccountIban": "SA1030000012345678901004"  }'

Response

JSON
{  "success": true,  "code": "PAYMENT_COMPLETED",  "message": "MOI payment completed successfully",  "billerCode": "090",  "serviceCode": "003",  "beneficiaryId": "2036108050",  "beneficiaryName": "أحمد محمد",  "paidAmount": "2500.00",  "bankReference": "BNK123456",  "sadadReference": "DE1234567890",  "paymentStatus": "PAYMENT_STATUS_COMPLETED",  "transactionReference": "a1b2c3d4e5f6g7h8"}

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

StatusCodesCause
400 ERROR_CATEGORY_VALIDATION_FAILEDINVALID_ACCOUNT, INVALID_AMOUNT, INVALID_BANK_CODE, ACCOUNT_NOT_FOUNDUnknown biller or service code, a missing conditional field, amount not matching totalFee
401 ERROR_CATEGORY_AUTH_FAILEDAUTH_FAILED, CREDENTIALS_NOT_FOUNDToken expired, or missing account configuration for that bank
404 ERROR_CATEGORY_NOT_FOUNDNOT_FOUNDNo fee for that service and beneficiary
409 ERROR_CATEGORY_DUPLICATEDUPLICATE_TRANSACTIONYou reused a transactionReference
422 ERROR_CATEGORY_BANK_REJECTEDINSUFFICIENT_FUNDS, ACCOUNT_BLOCKED, PAYMENT_NOT_ALLOWEDThe bank declined it
503 ERROR_CATEGORY_TEMPORARY_FAILUREBANK_UNAVAILABLE, NETWORK_TIMEOUTRetry with backoff