Skip to main content

Documentation Index

Fetch the complete documentation index at: https://uqpay-ecc4f4d8.mintlify.app/llms.txt

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

When an Account Center 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 format

The Account Center API uses a single response envelope for errors:
{
  "code": 400,
  "message": "Legal business name in English is required"
}
FieldMeaning
codeNumeric status. In most cases equals the HTTP status on the response. 400 for validation and business-rule errors, 403 for authentication / authorization failures, 404 for unknown routes, 405 for unsupported HTTP methods, 500 for infrastructure failures in the idempotency middleware.
messageHuman-readable description. Safe to log, not safe to surface verbatim to end-users. Branch on the message to distinguish cases within a given code.
There is no type field and no string error codes — everything is a numeric code plus a message.

Error codes overview

codeHTTPWhen it appears
400400Validation failure, business-rule violation, malformed JSON, or any handler-level error. Branch on message for the specific case.
403403Authentication failure — missing, malformed, or expired access token; IP allow-list violation; missing client id claim.
404404The request path does not match any registered route.
405405The request method is not bound for this path.
500500Internal failure in the idempotency middleware (Redis / DB). Safe to retry with the same X-Idempotency-Key.

Common errors

These can appear on any authenticated endpoint regardless of the resource.
codeMessageWhat to do
403Authorization errorSend an x-auth-token header carrying a non-expired access token obtained from Access Token. Re-mint the token if it has expired and retry.
403x-client-id or email cannot be emptySupply the x-client-id header with the same client_id used when you called Access Token. Do not omit it on authenticated calls.
400IP not allowedEnsure the request originates from an IP on the developer key’s allow-list. Update the allow-list in the UQPAY dashboard, or retry from a permitted address.
400Request parameters invalidRe-check your request body and query parameters against the endpoint’s API Reference — one or more required fields are missing or have the wrong type.
400(varies — raw JSON binding / validator error text, e.g. Field 'X' is required, Invalid type for field 'X')Read the message verbatim: it names the offending field and the validator rule it failed. Fix that field in the request body and retry.
400access token errYour x-auth-token is missing, malformed, or its JWT claims cannot be resolved to an entity. Mint a fresh token from Access Token and retry.
400Idempotency key errorSupply an X-Idempotency-Key that is either a RFC-4122 UUID (for accounts created after 2024-08-15) or a 1–36 character string (for older accounts). Do not reuse expired keys.
400Idempotency key auth errorThe X-Idempotency-Key you sent has already been used by a different entity. Generate a new UUID per request, or retry using the original caller’s credentials.
400Idempotency endpoint errorThe X-Idempotency-Key was previously used on a different endpoint. Use a fresh key for each distinct endpoint, or retry against the original endpoint.
400Request is processing, please try again later. (body code reads 200)The original request is still executing. Wait a few seconds, then retry with the same X-Idempotency-Key to fetch the cached response.
500An internal error occurred, please try again later (no code field in body)A transient failure in the idempotency middleware (Redis / DB). Safe to retry with the same X-Idempotency-Key — if it keeps happening, contact UQPAY support.
401Invalid authorization header (emitted as { "error": ... })Your x-auth-token starts with Bearer but is not a valid Bearer <token> pair. Either drop the Bearer prefix and send the raw JWT, or send exactly Bearer <jwt> with a single space.
404Not foundCheck the request path and HTTP method against the API Reference — the route you called is not registered on the gateway.
405Method not allowedThe path is valid but you used the wrong HTTP method. Check the verb (GET / POST / PUT / DELETE) in the API Reference for that endpoint.

Resource errors

Authentication

Access Token
POST /v1/connect/token has its own handler (AccessHandler.AccessToken) that emits only flat HTTP 400 responses — including for auth-adjacent failures such as expired or unknown API keys. The message tells you the specific case.
codeMessageTypical endpointsWhat to do
400Request parameters invalidAccess TokenInclude both client_id and api_key as non-empty form fields (or JSON body fields) in your POST to /v1/connect/token.
400Invalid client idAccess TokenVerify the client_id value matches a developer credential in your UQPAY dashboard. Copy it again to rule out stray whitespace or typos.
400Invalid api keyAccess TokenVerify the api_key matches the key paired with your client_id. Regenerate the key pair from the dashboard if the current key has been rotated.
400Api key expiredAccess TokenYour api_key has passed its validity window. Generate a fresh key pair from the UQPAY dashboard and update your integration.
400Entity config not existAccess TokenThe entity that owns this client_id has no configured access profile. Contact your UQPAY solutions engineer to provision the entity configuration.
400Api trading status errorAccess TokenThe developer key is disabled or the entity’s trading status is not active. Check the key’s status in the UQPAY dashboard, or contact UQPAY support to reactivate.
400IP not allowedAccess TokenThe caller IP is not on the allow-list configured for this api_key. Add the IP in the UQPAY dashboard, or retry from a permitted address.
400Create access token errorAccess TokenAn internal signing / persistence failure occurred. Retry after a short delay; if the error persists, contact UQPAY support.

Entities

Create Account · Create SubAccount · List Connected Accounts · Retrieve Account · Get Additional Documents
Validation on account-creation requests is extensive (over 80 distinct field-level messages across Create Account and Create SubAccount). All are emitted as flat HTTP 400 with the exact validator message in message. Representative cases are listed below; branch on message for programmatic handling.
codeMessageTypical endpointsWhat to do
400access token errAny endpoint in this groupYour x-auth-token is missing or its claims cannot be resolved to a caller entity. Mint a fresh token from Access Token and retry.
400entity not existRetrieve AccountVerify the {id} path parameter refers to an account your credentials can see. Use List Connected Accounts to enumerate accessible accounts.
400unable to retrieve the corresponding entityinfoRetrieve AccountThe {id} exists but is not linked to your calling entity as a parent / child. Confirm the account belongs under your hierarchy before retrieving it.
400entity not foundRetrieve AccountThe {id} does not resolve to any account record. Double-check the ID — it should be one returned by List Connected Accounts.
400(field validation — varies, e.g. Legal business name in English is required, Country or territory is required, Invalid phone number format, Individual must be over 18 years old, Job title is required and must be one of director, beneficial_owner, beneficial_owner_and_director, authorized_representative, Entity type is required and must be one of COMPANY, INDIVIDUAL)Create Account · Create SubAccountRead the message — it names the offending field and rule. Fix that field in the business_details / identities / owners section of the request and retry.
400The country is not allowed to be used for onboardingCreate Account · Create SubAccountThe country in business_details.country or identities[].country is not on UQPAY’s supported list. Pick a supported jurisdiction or contact UQPAY support to check expansion plans.
400The country is a sanctioned countryCreate Account · Create SubAccountUQPAY cannot onboard accounts in sanctioned jurisdictions. No retry will succeed — do not retry with the same country.
400please check whether the master account has opened the corresponding serviceCreate Account · Create SubAccountYour master account is not entitled to the product (Acquiring / Banking / Issuing) implied by the request. Contact your UQPAY solutions engineer to enable the service.
400please check whether the master account has opened the create sub account serviceCreate SubAccountYour master account lacks the sub-account provisioning entitlement. Contact UQPAY to enable it before retrying.
400please completed the verification and activate your account firstCreate Account · Create SubAccountYour master account is still pending KYC / activation. Finish onboarding for the master account before creating sub-accounts.
400only banking can create individual accountCreate Account · Create SubAccountIndividual (non-company) accounts can only be created under a Banking product. Change the entity type to COMPANY, or request Banking provisioning for individual onboarding.
400failed to retrieve account configurationCreate Account · Create SubAccountAn internal lookup failed. Retry after a short delay; if it persists, contact UQPAY support.
400failed to retrieve parent account related infoCreate SubAccountAn internal lookup on the parent account failed. Verify the caller token belongs to a valid master account and retry.
400failed to check sub account limitCreate SubAccountAn internal limit-check failed. Retry after a short delay; if it persists, contact UQPAY support.
400(varies — e.g. same UEN sub account limit reached, current: 10, max: 10)Create SubAccountYou have reached the maximum number of sub-accounts allowed under a shared UEN / registration number. Consolidate existing sub-accounts or contact UQPAY to raise the limit.
400Company info, address, and ownership details are required when Inherit is falseCreate SubAccountEither set inherit: true to reuse the parent’s KYC data, or supply the full business_details, address, and owners blocks.
400Please check that you have correctly specified inheritCreate SubAccountThe inherit flag is inconsistent with the rest of the payload. Set inherit: true for inherited setup, or false with complete company details.
400representatives is emptyCreate Account · Create SubAccountSupply at least one entry in the representatives / identities array — UQPAY requires a named authorized representative.
400representative identification documents are emptyCreate Account · Create SubAccountAttach identification documents (passport / national ID) for each representative via Upload A File, then reference the returned file IDs in the representative record.
400one representative must be an applicantCreate Account · Create SubAccountMark exactly one representative as the applicant (is_applicant: true or role authorized_representative) in the request.
400Failed identification, at least one beneficiary submitted front and back identification photos and face photosCreate Account · Create SubAccountAt least one beneficial owner needs front ID, back ID, and a face photo uploaded via Upload A File. Reference the three file IDs on that owner record.
400document ID already existsCreate Account · Create SubAccountThe identification number you submitted is already tied to another entity at UQPAY. Use the correct entity or contact UQPAY support to resolve the collision.
400check that you have submitted the necessary documentsCreate Account · Create SubAccountOne or more required documents are missing — the set varies by entity type and country. Consult your UQPAY onboarding checklist and upload the missing items via Upload A File.
400businessDetails is nilCreate Account · Create SubAccountThe request body is missing the business_details object. Include it (or, for sub-accounts, set inherit: true to inherit from parent).
400entityBasicVersion is nilCreate Account · Create SubAccountInternal state issue on the parent record. Contact UQPAY support with the request ID — retrying without changes is unlikely to succeed.
400entity is nilCreate Account · Create SubAccountThe caller entity could not be resolved server-side. Re-mint your access token from Access Token and retry; if it persists, contact UQPAY support.
400server errorCreate Account · Create SubAccountAn internal failure occurred. Safe to retry after a short delay; if it persists, contact UQPAY support with the request ID.
400(generic persistence failure — raw DB or marshal error text wrapped by the service layer)Create Account · Create SubAccountCapture the exact message and contact UQPAY support — the wrapped error text identifies which persistence step failed. Retrying without changes is unlikely to succeed.

Files

Upload A File · Get File Download Links
codeMessageTypical endpointsWhat to do
400access token errUpload A File · Get File Download LinksYour x-auth-token is missing or cannot be resolved. Mint a fresh token from Access Token and retry.
400x-on-behalf-of value errUpload A File · Get File Download LinksThe x-on-behalf-of header must be the entity ID of a sub-account under the calling master account. Verify it via List Connected Accounts, or omit the header to act on the master account itself.
400Request parameters invalidUpload A File · Get File Download LinksCheck the required fields — for Upload A File, send the multipart file part; for Get File Download Links, send the file_ids array in the JSON body.
400Parse file failedUpload A FileThe multipart form could not be parsed. Confirm the request uses Content-Type: multipart/form-data, includes a boundary, and the file field is named file.
400File size error (threshold: 30 MiB)Upload A FileThe file exceeds 30 MiB. Compress or split the file before uploading.
400invalid file name, please check the fileUpload A FileThe uploaded file has an empty or unsupported filename. Provide a file with a valid name and a supported extension (.jpeg, .png, .jpg, .doc, .docx, .pdf).
400invalid file type, please check the file, only support jpeg, png, jpg, doc, docx, pdfUpload A FileConvert the file to one of the supported formats (JPEG / PNG / JPG / DOC / DOCX / PDF) and retry.
400unsupported file typeUpload A FileThe file’s MIME type is not in the supported list. Re-export as JPEG / PNG / PDF / DOC / DOCX and retry.
400(varies — e.g. file validation failed: mime type mismatch)Upload A FileRead the message — it names the validation rule that failed (commonly MIME type does not match the extension). Re-export the file cleanly and retry.
400open file occur error, please check the fileUpload A FileThe server could not open the uploaded file — usually because it is truncated or corrupt in transit. Re-select the source file and retry the upload.
400read file occur error, please check the fileUpload A FileThe uploaded file stream was unreadable. Retry with the original source file; if it persists, the file may be corrupt.
400seek file errorUpload A FileInternal I/O error while processing the upload. Retry the request; if it persists, contact UQPAY support.
400upload file occur error, please contact our teamUpload A FileCloud storage write failed. Retry after a short delay; if it persists, contact UQPAY support with the request ID.
400Query data errorGet File Download LinksOne or more file_ids do not exist or are not visible to your entity. Verify the IDs — they must be returned by a prior Upload A File call your credentials can access.

Idempotency

Create Account · Create SubAccount · Upload A File
The idempotency middleware runs on every POST that carries a body. It short-circuits before the handler executes when a replay is detected.
codeMessageTypical endpointsWhat to do
400Idempotency key errorCreate Account · Create SubAccount · Upload A FileSupply an X-Idempotency-Key that is a RFC-4122 UUID (for entities created after 2024-08-15) or a 1–36 character string (for older entities). Do not reuse keys older than 24 hours.
400Idempotency key auth errorCreate Account · Create SubAccount · Upload A FileThe X-Idempotency-Key is already cached against a different entity. Generate a new UUID per request, or retry with the original caller’s credentials.
400Idempotency endpoint errorCreate Account · Create SubAccount · Upload A FileThe same X-Idempotency-Key was previously used on a different endpoint. Use a distinct key per endpoint, or retry against the original endpoint.
200Request is processing, please try again later. (HTTP status is 400, body code is 200)Create Account · Create SubAccount · Upload A FileThe original request is still running. Wait a few seconds and retry with the same X-Idempotency-Key — the cached response will be returned once processing completes.
(none)An internal error occurred, please try again later (HTTP 500, body has no code field)Create Account · Create SubAccount · Upload A FileTransient infrastructure failure in the idempotency layer. Retry with the same X-Idempotency-Key; if it persists, contact UQPAY support.