Skip to main content

Documentation Index

Fetch the complete documentation index at: https://developers-sandbox.uqpaytech.com/llms.txt

Use this file to discover all available pages before exploring further.

When a Card Issuance API call fails, the gateway returns a non-2xx HTTP status with a JSON error body. Use this page to identify what went wrong and how to recover.

Error response formats

The Card Issuance API uses two response envelopes. Which one you receive depends on which handler processed the request.
Most card and cardholder errors return this envelope. type determines the HTTP status.
{
  "type": "card_error",
  "code": "card_not_found",
  "message": "card not found or deactivated"
}
FieldMeaning
typeHigh-level category. Maps to HTTP status (see Error types).
codeMachine-readable string identifier. Use for programmatic handling.
messageHuman-readable description. Safe to log, not safe to surface verbatim to end-users.

Error types

Envelope A groups codes into types, each of which maps to a fixed HTTP status.
typeHTTPWhen it appears
invalid_request_error400Request failed validation.
card_error400Card resource rule violated.
cardholder_error400Cardholder resource rule violated.
account_error400Account / product / balance rule violated.
idempotency_error400Idempotency key replay or mismatch.
unauthorized_error401 / 403API key missing, invalid, or lacks permission. code is unauthorized_error for 401 and forbidden for 403.
api_error500Internal server error. Safe to retry with the same Idempotency-Key.
Envelope B does not carry a type field; branch on the message to distinguish cases.

Common errors

These can appear on any authenticated endpoint.

Envelope A (string codes)

codetypeMessageWhat to do
invalid_request_errorinvalid_request_error(varies — field path and validation rule in message)TODO
unauthorized_errorunauthorized_errorToken expired, IP not allowed, or access token dependencies unavailableRequest a new access token via Access Token, confirm your caller IP is on the allow-list, and retry with a fresh x-auth-token header.
forbiddenunauthorized_errorReturned when the API key lacks permission (currently guards GET /cards/{id}/secure)Ask your UQPAY solutions engineer to enable the sensitive-card-details permission on your API key, then retry.
api_errorapi_error(varies — generic internal server error)TODO
account_not_foundaccount_erroraccount not found or deactivatedVerify the client_id / API key you are using belongs to an active UQPAY account. If the account was recently created, confirm onboarding is complete.
sub_account_not_foundaccount_errorsub-account associated with the on-behalf-of not found or deactivatedVerify the on-behalf-of header targets an existing, active sub-account under your parent account, or omit the header to act as the parent account.
user_not_foundaccount_erroruser associated with account not found or deactivatedConfirm the user bound to your API key is still active. Contact your UQPAY solutions engineer if the user was recently disabled.
request_being_processedidempotency_errorrequest is being processedRetry shortly with the same Idempotency-Key — the original request is still being processed. Do not change the request body between retries.
invalid_key_formatidempotency_errorinvalid idempotency key formatProvide an Idempotency-Key header that is a non-empty string up to 255 characters (a UUID v4 is recommended).
key_mismatch_accountidempotency_errorkey does not belong to accountThe Idempotency-Key was previously used by a different account — generate a fresh key scoped to the current account.
key_mismatch_apiidempotency_errorapi associated with key is not the originalReuse the Idempotency-Key only on the exact same endpoint + method that first used it. Generate a new key for a different endpoint.

Envelope B (legacy flat 400)

codeMessageWhat to do
400Request parameters invalidVerify every required field is present and correctly typed against the endpoint’s schema in the API Reference.
400Params JSON errorThe request body failed JSON parsing — check for trailing commas, unescaped quotes, or a missing Content-Type: application/json header.
400Account does not exist.Confirm the API key belongs to an active account and that the resolved account has not been deactivated.
400An internal error occurred, please try againRetry the request with the same Idempotency-Key after a short backoff. If the error persists, contact your UQPAY solutions engineer with the request timestamp.
400Login expiredRequest a new access token via Access Token and retry with the fresh x-auth-token.
429Request is too frequentBack off and retry with exponential delay. Sensitive-card and PAN-token endpoints are per-card rate-limited — do not poll tighter than a few seconds apart.

Resource errors

Card errors

Create Card · List Cards · Update Card · Retrieve Card · Update Card Status · Retrieve Sensitive Card Details · Create PAN Token · Card Recharge · Card Withdraw · Retrieve Card Order · Activate Card · Reset Card PIN · Assign Card
Envelope A types: card_error, plus account_error (product_not_found, account_balance_error) during card creation. Envelope A
codeMessageTypical endpointsWhat to do
card_not_foundcard not found or deactivatedAny endpoint that takes {card_id}Verify the card_id exists under your account and is not cancelled. Use List Cards or Retrieve Card to confirm.
operation_not_authorizedrequested card operation type is not authorizedCreate CardYour account does not have permission to issue this card type — contact your UQPAY solutions engineer to enable it on your account.
risk_control_not_allowedrisk control setting is not allowedCreate CardRemove or adjust the risk_controls entries that exceed what your card product permits. Supported configurations are listed in the Supported BINs for risk control configurations guide.
currency_not_allowedcard currency is not allowedCreate CardSet currency to one of the currencies your selected card product supports. Check the product configuration with your UQPAY solutions engineer.
limit_out_of_rangecard limit is either less than minimum card limit or greater than maximum card limitCreate CardSet spending_controls.spending_limit between the product’s configured min and max. The bounds are set per card product — confirm them with your UQPAY solutions engineer.
cardholder_quota_exceededcard quota of cardholder exceeds limitCreate CardThis cardholder has hit the maximum number of active cards allowed. Cancel an existing card via Update Card Status before issuing another, or use a different cardholder.
account_quota_exceededcard quota of account exceeds limitCreate CardYour account-wide card quota is reached. Cancel unused cards via Update Card Status, or contact your UQPAY solutions engineer to raise the quota.
insufficient_sub_bininsufficient available cards for sub-binCreate CardThe sub-BIN pool for this card product has no available card numbers left under your account. This is an inventory issue, not a request issue — provide your account ID and the card product / BIN to UQPAY OPS so they can replenish the pool. Retrying the same request will keep failing until the pool is topped up.
card_expired_errorcard has expiredReset Card PINThe card is past its expiry date — PIN reset is no longer allowed. Issue a replacement card if needed.
status_not_supportedcard status or activation status not supported by requestReset Card PIN · Create PAN Token · Retrieve Sensitive Card DetailsThe card must be in an active, usable state for this operation. Check the card’s status with Retrieve Card and activate or unblock it first.
virtual_card_pin_errorvirtual cards do not allow pin settingsReset Card PINVirtual cards do not have a PIN — call this endpoint only for physical cards.
auto_cancel_trigger cannot be empty(the code string is itself the message — no separate message is sent)Create CardProvide auto_cancel_trigger when the card product requires it (typically one-time cards).
invalid auto_cancel_trigger(the code string is itself the message)Create CardUse one of the allowed auto_cancel_trigger values documented on Create Card.
expiry_at cannot be empty(the code string is itself the message)Create CardProvide expiry_at when the card product requires an explicit expiry date.
invalid expiry_at(the code string is itself the message)Create CardSend expiry_at as a future ISO 8601 timestamp within the product’s maximum allowed lifetime.
product_not_foundproduct not found or inactiveCreate CardVerify card_product_id refers to a product enabled on your account. Use your UQPAY dashboard or contact your solutions engineer to confirm.
account_balance_errorinsufficient balance or currency balance unavailableCreate CardFund your issuing balance in the card’s currency before retrying. See the Fund your issuing balance guide.
Envelope B
codeMessageTypical endpointsWhat to do
400Card does not existsAny endpoint that takes {card_id}Verify the card_id exists under your account. Use List Cards to confirm.
400card bin not configCreate Card · Assign CardThis BIN is not configured on your account, so cards cannot be created or assigned against it. Provide your account ID and the target BIN to UQPAY OPS to enable it.
400card number not existAssign CardThe card_number is not in the available pool for your account. Verify: (1) the card number was provided to you by UQPAY for this account; (2) the digit length is correct — no spaces, no leading/trailing characters, no missing digits; (3) the card has not already been assigned to another cardholder.
400Create card errorCreate CardRetry the request with the same Idempotency-Key. If it persists, double-check the request body against the Create Card schema and contact your UQPAY solutions engineer.
400Update card errorUpdate Card · Activate CardRetry the request. If the failure persists, verify the card is in an updatable state via Retrieve Card and that the fields you are changing are allowed for that product.
400Card retrieve errorRetrieve Card · Retrieve Sensitive Card DetailsRetry after a short backoff. If the card was recently created, wait a few seconds for propagation.
400Card status is invalidUpdate Card StatusSet status to one of the values allowed for the card’s current state (see Card lifecycle guide). You cannot move a cancelled card back to active, for example.
400The card is failed.Retrieve CardThe card provisioning failed at the issuer — it cannot be retrieved or used. Create a replacement card.
400The card is not active.Update Card · Card Recharge · Card WithdrawActivate the card via Activate Card before updating it, recharging, or withdrawing funds.
400Update reason is too longUpdate Card StatusShorten the reason field. It is stored in a bounded column — keep it under a few hundred characters.
400The card has expiredUpdate Card · Update Card Status · Activate CardThe card is past expiry_at and can no longer be modified or activated. Issue a replacement card.
400Invalid expiry dateCard Recharge · Card WithdrawThe card has expired — recharge and withdraw are blocked. Issue a replacement if the cardholder still needs funds.
400Card holder not exists or is illegalCreate Card · Retrieve CardVerify cardholder_id exists under your account via List Cardholders and is in an active state.
400Cardholder not found or deactivatedList CardsConfirm the cardholder_id filter points at an active cardholder under your account.
400Invalid card type.Create CardSet card_type to VIRTUAL or PHYSICAL as supported by your card product.
400Card currency is not supportCreate CardUse a currency that the selected card product allows. Check supported currencies with your UQPAY solutions engineer.
400Card limit is illegalCreate CardSet spending_controls.spending_limit to a positive integer in minor units, within the product’s allowed range.
400Update card limit is less than the amount of used cardUpdate CardThe new limit must be at least equal to the card’s current utilized amount. Check available_balance / used_amount via Retrieve Card and raise the limit accordingly.
400Failed Update. Card Limit should be greater than 0Update CardSet spending_controls.spending_limit to a value greater than 0.
400Failed Update. Card Limit should be greater than Per transactionUpdate CardThe overall spending_limit must be greater than or equal to the per-transaction limit — raise the spending limit or lower the per-transaction cap.
400Failed Update. Your transaction limit should be greater than 0Update CardSet the per-transaction limit to a value greater than 0.
400The single card not support changing card limitsUpdate CardOne-time cards have a fixed limit set at creation — the limit cannot be changed afterwards.
400This operation cannot be performed on One-Time Card.Update Card · Card Recharge · Card WithdrawOne-time cards cannot be updated, recharged, or withdrawn. Issue a new card if additional funds are needed.
400Card recharge is errorCard RechargeRetry the request with the same Idempotency-Key. If it persists, confirm the card’s status, currency, and your issuing balance.
400Card withdraw not supportCard WithdrawThe card product does not support withdrawal. Use Update Card Status to cancel the card and recover the balance instead.
400Card available limit insufficientCard WithdrawThe withdrawal amount exceeds the card’s available balance. Retrieve the card’s current balance with Retrieve Card and lower amount.
400Recharge amount is invalidCard RechargeSend amount as a positive integer in the card’s minor units (e.g. cents). Check precision matches the card currency.
400Withdraw amount is invalidCard WithdrawSend amount as a positive integer in the card’s minor units that does not exceed the current card balance.
400The card product currently does not support creationCreate CardThe card product is not enabled for new card creation. Contact your UQPAY solutions engineer to enable issuance.
400The card currently does not support withdrawCard WithdrawWithdrawal is disabled for this card product. Cancel the card via Update Card Status to reclaim the balance.
400The card currently does not support rechargeCard RechargeRecharge is disabled for this card product (e.g. one-time cards). Issue a new card if additional funds are needed.
400The card currently does not support cancelUpdate Card StatusThe card’s current status cannot be transitioned to cancelled (e.g. already cancelled, or pending). Retrieve the card to inspect its status first.
400The card has been activated.Activate CardThe card is already active — no further activation needed. Use Retrieve Card to confirm its state.
400Invalid activation code.Activate CardConfirm activation_code matches the code printed on the physical card carrier. Codes are single-use per attempt.
400Card order is not existsRetrieve Card OrderVerify the order_id is correct and was returned from a previous card creation call.
400Card product is errorCreate Card · Activate CardThe card_product_id is misconfigured. Confirm the product is enabled for your account with your UQPAY solutions engineer.
400Not found card productsCreate Card · Update Card · Card Recharge · Card WithdrawNo matching card product is enabled for your account — contact your UQPAY solutions engineer to enable the product.
400Product not openedCard RechargeThe card product is not enabled for recharge. Contact your UQPAY solutions engineer.
400Account card quota exceeded.Create Card · Assign CardYour account-wide active-card limit is reached. Cancel unused cards via Update Card Status or request a higher quota from your UQPAY solutions engineer.
400Cardholder card quota exceeded.Create Card · Assign CardThis cardholder has hit the maximum number of active cards. Cancel one of their cards or use a different cardholder.
400Account balance not existsCreate Card · Card Recharge · Card WithdrawYour account does not hold a balance in the card’s currency. Fund the issuing balance first — see Fund your issuing balance.
400Insufficient balanceCreate Card · Card Recharge · Card WithdrawTop up your issuing balance in the card’s currency before retrying.
400Spending controls is errorUpdate CardThe spending_controls payload failed validation — check spending_limit, per_transaction_limit, and any allow/block-list fields against Update Card schema.
400Metadata is invalidUpdate Cardmetadata must be a flat string → string map. Remove nested objects and ensure keys and values are within size limits.
400risk control setting is not allowedUpdate CardThe risk_controls combination is not permitted for this card product. See Supported BINs for risk control configurations for allowed settings.
400Exceed restrict max authorization amountCreate CardThe requested limit exceeds the product’s maximum authorization amount. Lower spending_limit or ask your UQPAY solutions engineer to raise the product ceiling.
400Restrict config errorUpdate CardThe update violates the card product’s restriction configuration — verify any category, currency, or MCC allow-lists you are setting.
400Not found product restrictUpdate Card · Card Recharge · Card WithdrawThe card product’s restriction config is missing on the platform. Contact your UQPAY solutions engineer.
400Convert data errorCreate Card · Update CardInternal data conversion failed — retry with the same Idempotency-Key. If it persists, report the request ID to your UQPAY solutions engineer.
400Content type is not supported, please upload the correct formatCreate CardSend the request with Content-Type: application/json.
400no pin payment amount failed.Update Card · Activate CardThe no_pin_payment_amount you supplied failed validation. Confirm the value, precision, and currency match the card product’s configuration.
400Negative no pin payment amount.Activate CardSend no_pin_payment_amount as a non-negative integer.
400Invalid no pin payment amount precision.Activate CardMatch the precision to the card currency’s minor units (e.g. 2 decimals for USD, 0 for JPY). Send the value as an integer in minor units.
400invalid no pin payment amount for the current currency.Update Card · Activate CardThe value exceeds the allowed ceiling for the card’s currency. Lower no_pin_payment_amount or check product configuration.
400The no_pin_payment_amount restrict configuration cannot be foundUpdate Card · Activate CardThis card product does not support a no-PIN payment limit — omit the field from the request.
429Request is too frequentCreate PAN Token · Retrieve Sensitive Card DetailsBack off and retry with exponential delay. These endpoints are per-card rate-limited; do not poll tightly in loops.

Cardholder errors

Create Cardholder · List Cardholders · Update Cardholder · Retrieve Cardholder · Create Card (one-time issuance path)
type: cardholder_error Envelope A
codeMessageTypical endpointsWhat to do
cardholder_not_foundcardholder not found or deactivatedAny endpoint that takes {cardholder_id} · Create CardVerify the cardholder_id exists under your account via List Cardholders and is in an active state.
cardholder_already_existscardholder already existsCreate CardA cardholder with the same identifying details is already on file — reuse that cardholder’s cardholder_id instead of creating a new one.
email_duplicatedemail already used by another cardholder under accountCreate Cardholder · Create CardProvide a different email or reuse the existing cardholder record — look it up via List Cardholders.
phone_number_duplicatedphone number used by another cardholder under accountCreate Cardholder · Create CardProvide a different phone number or reuse the existing cardholder record — look it up via List Cardholders.
invalid_phone_numberinvalid phone number or country codeCreate Cardholder · Update Cardholder · Create CardSend phone.country_code as an ISO digits-only country calling code and phone.number as digits-only in E.164 national form.
invalid_first_nameinvalid first name, only letters and spaces allowed, no leading or trailing spacesCreate Cardholder · Create CardUse only ASCII letters and spaces in first_name. Strip leading/trailing whitespace and remove punctuation or digits.
invalid_last_nameinvalid last name, only letters and spaces allowed, no leading or trailing spacesCreate Cardholder · Create CardUse only ASCII letters and spaces in last_name. Strip leading/trailing whitespace and remove punctuation or digits.
invalid_date_of_birthcardholder under 18 or invalid date of birth formatCreate Cardholder · Update CardholderCardholders must be at least 18. Send date_of_birth as YYYY-MM-DD.
missing_date_of_birthmissing legal date of birth for document uploadCreate Cardholder · Update Cardholder · Create CardInclude date_of_birth whenever you upload identity documents — the document check needs it.
invalid_delivery_addressinvalid delivery addressCreate Cardholder · Update Cardholder · Create CardPopulate every required subfield of the delivery address: country, state, city, postal_code, line1. Use ISO country codes.
missing_country_codecountry_code is required for SUMSUB_REDIRECT KYC verificationCreate Cardholder · Update Cardholder · Create CardWhen kyc_method is SUMSUB_REDIRECT, include the cardholder’s residence country_code (ISO 3166-1 alpha-2).
document_duplicateddocument already successfully reviewedUpdate CardholderThis identity document is already approved on the cardholder — do not re-upload it.
file_type_not_supportedunsupported document file typeCreate Cardholder · Update Cardholder · Create CardUpload the document as JPEG, PNG, or PDF.
invalid_file_contentinvalid base64 encoded document contentCreate Cardholder · Update Cardholder · Create CardEnsure the file bytes are standard Base64-encoded (no data-URL prefix, no line breaks) before sending.
document_size_exceededdocument size exceeds 2MB limitCreate Cardholder · Update Cardholder · Create CardCompress or re-scan the document so the decoded file is under 2 MB.
document_review_requiredcardholder’s document requires reviewCreate CardThe cardholder’s document is still in manual review. Wait for the cardholder.kyc_status webhook or poll Retrieve Cardholder until KYC is approved.
identity_file_missingrequired identity file is missingCreate Cardholder · Update Cardholder · Create CardUpload the expected identity document (e.g. both front and back of an ID card) in the identity_documents payload.
invalid_identity_typeinvalid identity type, must be ID_CARD or PASSPORTCreate Cardholder · Update Cardholder · Create CardSet identity_type to ID_CARD or PASSPORT.
invalid_kyc_methodinvalid KYC verification method, must be THIRD_PARTY or SUMSUB_REDIRECTCreate Cardholder · Update Cardholder · Create CardSet kyc_method to THIRD_PARTY or SUMSUB_REDIRECT.
kyc_proof_requiredkyc_proof is required when method is THIRD_PARTYCreate Cardholder · Update Cardholder · Create CardInclude a kyc_proof payload describing your own KYC provider’s check when kyc_method is THIRD_PARTY.
reference_id_duplicatedreference_id already used by another cardholderCreate Cardholder · Update Cardholder · Create CardSupply a unique reference_id — another cardholder on this account already uses the one you sent.
reference_id_too_shortreference_id must be at least 10 characters longCreate Cardholder · Update Cardholder · Create CardUse a reference_id of 10 characters or more.
cardholder_kyc_pendingcardholder KYC is under review, cannot proceedCreate CardWait for KYC to complete. Poll Retrieve Cardholder or listen for the cardholder.kyc_status webhook before retrying.
cardholder_kyc_failedcardholder KYC has been rejectedCreate CardAsk the cardholder to resubmit identity documents or create a new cardholder record. Contact your UQPAY solutions engineer if the rejection reason is unclear.
kyc_insufficientcardholder information does not meet this product’s requirements (response includes missing_fields)Create CardUpdate the cardholder with the fields listed in the response’s missing_fields array via Update Cardholder, then retry.
supplement_fields_incompletesupplemented cardholder fields are incomplete (response includes missing_fields)Create CardProvide every field listed in the response’s missing_fields inside cardholder_required_fields on the retry.
cardholder_cannot_update_during_reviewcannot update KYC fields while review is pendingUpdate CardholderWait for KYC review to finish before editing identity or address fields. Non-KYC fields (e.g. metadata) can still be updated.
bin_required_fields_not_configuredrequired_fields not configured for this card BIN, cannot proceed with card creationCreate CardThe card BIN’s required-fields configuration is missing on the platform. Contact your UQPAY solutions engineer.
cardholder_missing_infoeither cardholder_id or complete cardholder_required_fields must be providedCreate CardSend either cardholder_id for an existing cardholder, or cardholder_required_fields with the full one-time issuance payload.
cardholder_incomplete_fieldscardholder_required_fields is incomplete for one-time card issuance (response includes missing_fields)Create CardAdd every field from the response’s missing_fields to cardholder_required_fields and retry.

Balance errors

Retrieve Issuing Balance · List Issuing Balances · List Issuing Balances Transactions
type: account_error Envelope A
codeMessageTypical endpointsWhat to do
account_balance_errorinsufficient balance or currency balance unavailableRetrieve Issuing Balance · List Issuing Balances · List Issuing Balances TransactionsConfirm your account holds a balance in the requested currency. Call List Issuing Balances to see all available currency balances.

Transaction errors

List Cards Transactions · Retrieve Cards Transaction · Simulate Authorization · Simulate Reversal
Envelope A types: invalid_request_error (transaction not found / not under the connected account). Envelope A
codeMessageTypical endpointsWhat to do
invalid_request_errortransaction[<id>] not found under the connected accountRetrieve Cards TransactionVerify the transaction_id exists under your account. Use List Cards Transactions to find valid IDs.
Envelope B
codeMessageTypical endpointsWhat to do
400Card authorize transaction is errorSimulate AuthorizationRetry the simulator call. If it persists, confirm the target card is active and the amount/currency match the card. This endpoint is sandbox-only.
400Card reversal transaction is errorSimulate ReversalVerify the transaction_id you are reversing exists and refers to a previously-simulated authorization. This endpoint is sandbox-only.
400Invalid channel codeSimulate Authorization · Simulate ReversalSet channel to a supported sandbox channel value. Ask your UQPAY solutions engineer for the allowed list.
400MCC is errorSimulate AuthorizationProvide a 4-digit numeric mcc code allowed for the card’s spending controls.
400Account status errorSimulate Authorization · Simulate ReversalThe account cannot simulate authorizations in its current state. Confirm the account is active via your UQPAY dashboard.
400Restrict config errorSimulate Authorization · Simulate ReversalThe simulated transaction violates the card’s spending controls (MCC, currency, country, or limit). Adjust the simulator request or the card’s spending_controls.