Back to neotek ↗Get Sandbox Access

FeeInquiry

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

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

What a Ministry of Interior service costs for one person.

Body — always required:

ParameterRequiredDescription
bankCodeRequiredwhich bank performs the inquiry: RJHISARI or ARNBSARI
billerCodeRequiredthe biller, as a 3-digit code
serviceCodeRequiredthe service, as a 3-digit code
beneficiaryIdRequireda 10-digit national ID, iqama or border number

Body — conditional. Which of these apply is decided by the billerCode and serviceCode pair, so send only what that service needs:

duration, licenseType, visaType, visaNumber, visaCount, vehicleSequence, vehicleCustomCardNumber, registrationType, bodyType, newOwnerId, violationId, verdictNumber, issuanceReason, cardVersionNumber, passportType, eventDate, sponsorId, citizenId, jobCategory, dependentCount, issuingEntityId, violationCategoryId

Headers:

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

Response — some services return several line items, so traffic violations come back as individual fines

JSON
{  "success": true,  "code": "SUCCESS",  "message": "MOI fee inquiry successful",  "billerCode": "091",  "serviceCode": "022",  "beneficiaryId": "1234567890",  "beneficiaryName": "أحمد محمد",  "totalFee": "100.00",  "fees": [    { "type": "Government Fee", "amount": "40.00" },    { "type": "Service Fee", "amount": "60.00" }  ]}

Use totalFee, not the sum of fees[]. totalFee is the authoritative figure and the value you pass as amount when paying.

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, bad beneficiaryId
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