Common questions and solutions gathered from real integration experiences. If you don’t find your answer here, contact your UQPAY account manager.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.
Authentication and API Keys
Where do I find my API credentials (x-client-id and x-api-key)?
Where do I find my API credentials (x-client-id and x-api-key)?
x-client-id and x-api-key in the Dashboard. If the Create button is not visible, your account’s API functionality has not been activated yet — contact your account manager to enable it.I get 'API functionality is not activated, please contact the administrator' when creating an API key.
I get 'API functionality is not activated, please contact the administrator' when creating an API key.
I'm getting 403 Forbidden when calling the token endpoint. What's wrong?
I'm getting 403 Forbidden when calling the token endpoint. What's wrong?
- Wrong base URL — Make sure you are using the correct environment URL. Sandbox:
https://api-sandbox.uqpaytech.com; Production:https://api.uqpay.com. - Wrong credentials — Sandbox credentials do not work on production and vice versa. Confirm which environment your
x-client-idandx-api-keywere created in. - IP allowlist — If you configured an IP restriction when creating the API key, requests from other IPs will be blocked. You can remove or update the IP restriction in the Dashboard API Key settings.
I get 'Access to this resource is forbidden from UAT' when calling sandbox.
I get 'Access to this resource is forbidden from UAT' when calling sandbox.
"error": "Forbidden", "message": "Access to this resource is forbidden from UAT") means the credentials you are using were created in the production environment but you are calling the sandbox URL, or the account has not been provisioned for sandbox access. Ask your account manager to enable sandbox access for your account and provide sandbox-specific credentials.How long does the access token last, and when should I refresh it?
How long does the access token last, and when should I refresh it?
Sub-accounts and Account Structure
What is the difference between a house account, a sub-account, and a virtual account (VA)?
What is the difference between a house account, a sub-account, and a virtual account (VA)?
- House account (also referred to as Master account): Your primary UQPAY account. All API credentials belong to this account.
- Sub-account: A child account created under your house account, representing one of your end customers or business units. Sub-accounts hold balances and can have their own virtual accounts.
- Virtual account (VA): A bank account number (e.g., IBAN, account number with sort code) assigned to a sub-account. Incoming funds sent to the VA are deposited into the sub-account’s balance.
x-on-behalf-of header with the sub-account’s account_id (the long UUID format). See Virtual Account, Global Account, and Local Account.Can I create a sub-account via API, or does it have to be done through the Dashboard?
Can I create a sub-account via API, or does it have to be done through the Dashboard?
x-on-behalf-of header.How does x-on-behalf-of work? Can I pass the parent account ID to query a sub-account's data?
How does x-on-behalf-of work? Can I pass the parent account ID to query a sub-account's data?
x-on-behalf-of to the sub-account’s account_id (the long UUID). You must use the sub-account’s own ID — passing the parent/house account ID will not return sub-account data on any endpoint.For deposit queries: the deposit account_id in the webhook notification is the sub-account UUID. You can pass that value in x-on-behalf-of when calling the deposit detail endpoint.Which account_id format should I use — the short CB-prefixed ID or the long UUID?
Which account_id format should I use — the short CB-prefixed ID or the long UUID?
- The short
CB-prefixed ID (e.g.,CB4316632576) is used in the Dashboard and in some webhook fields asshort_entity_id. - The long UUID is used in API request headers (
x-on-behalf-of), API response bodies, and as the canonical identifier when calling most endpoints.
A sub-account I created only has one VA and there is no 'Add VA' button. Why?
A sub-account I created only has one VA and there is no 'Add VA' button. Why?
Virtual Account Creation
The Create VA response returns empty results (total_items: 0) when I query with x-on-behalf-of. Why?
The Create VA response returns empty results (total_items: 0) when I query with x-on-behalf-of. Why?
- The
x-on-behalf-ofvalue is set to the sub-account’s ID but the VA was created under a different account. - The sub-account has not been approved / activated yet.
- The token used to authenticate the request was issued for the parent account, but
x-on-behalf-ofis set to an unrelated sub-account ID.
x-on-behalf-of value matches the account_id of the sub-account that owns the VA, and that the account has completed KYC.How do I know which VA the deposit_id in a webhook belongs to?
How do I know which VA the deposit_id in a webhook belongs to?
account_id field containing the sub-account UUID that received the funds. Use this UUID in x-on-behalf-of when calling GET /api/v1/deposits/{deposit_id} to retrieve the full deposit detail, including the receiving account number. You should store the mapping of account_id → VA account number in your own system to avoid needing to query on every notification.Payouts (POBO)
I'm getting 'beneficiary account not exists' when submitting a payout. The beneficiary ID looks correct.
I'm getting 'beneficiary account not exists' when submitting a payout. The beneficiary ID looks correct.
beneficiary_id passed in the payout request does not exist in the sub-account context you are operating under. Check that:- The
x-on-behalf-ofheader matches the sub-account that created the beneficiary. - The beneficiary was not deleted. Once deleted, a beneficiary ID is invalid.
- You are not mixing sandbox and production beneficiary IDs.
What is the correct clearing_system value for South Africa (ZAR) payouts?
What is the correct clearing_system value for South Africa (ZAR) payouts?
clearing_system depends on the payment type. When creating a beneficiary for ZAR via local rails, include "clearing_system": "LOCAL" in bank_details. Also make sure to include the routing_code_type1 field. The API error 'bank_details.clearing_system' is required confirms the field is missing from your request body.Payout to Colombia (COP) fails with 'Field additional_info.msisdn failed on e164 validation'. What format is required?
Payout to Colombia (COP) fails with 'Field additional_info.msisdn failed on e164 validation'. What format is required?
msisdn field for Colombian mobile money payouts must be in E.164 format, which requires the country code prefix. For Colombia, prepend +57 to the local number. For example, a local number 3122885049 should be submitted as +573122885049. Verify this format works for the specific clearing network being used.FX Conversion
I'm getting 'conversion date is invalid' when calling the quote endpoint with a specific date.
I'm getting 'conversion date is invalid' when calling the quote endpoint with a specific date.
GET /api/v1/conversion/conversion_dates?currency_to=X¤cy_from=Y to retrieve the list of valid settlement dates for a given currency pair. Only dates returned from this endpoint are acceptable in the conversion_date field. Weekends and public holidays are typically excluded.I get 'account not config fx product' when calling the conversion quote endpoint.
I get 'account not config fx product' when calling the conversion quote endpoint.
Webhooks
How do I trigger deposit webhooks in the sandbox for testing?
How do I trigger deposit webhooks in the sandbox for testing?
I'm not receiving deposit.pending or deposit.completed webhooks. How do I set up webhook endpoints?
I'm not receiving deposit.pending or deposit.completed webhooks. How do I set up webhook endpoints?
deposit.pending and deposit.completed event types for the banking product.See Webhooks Setup and Webhook Delivery Troubleshooting.The deposit webhook payload doesn't include the VA account number (IBAN/account number). How do I know which account received the funds?
The deposit webhook payload doesn't include the VA account number (IBAN/account number). How do I know which account received the funds?
deposit event includes the account_id (sub-account UUID) and deposit_id. To get the full deposit details including the receiving account number, call GET /api/v1/deposits/{deposit_id} with x-on-behalf-of set to the account_id from the webhook. The response includes the receiver’s account number. Consider caching the account_id → VA number mapping at onboarding time to avoid repeated lookups.Sandbox Testing
How do I get sandbox access and credentials?
How do I get sandbox access and credentials?
- Provision a sandbox account and send you the login credentials, or
- Guide you to self-register at
https://app-sandbox.uqpaytech.comand then activate sandbox banking products for your account.
https://api-sandbox.uqpaytech.com as the base URL for all API calls.I created a sub-account in sandbox via KYC API and it's stuck in a non-approved state. How do I get it approved for testing?
I created a sub-account in sandbox via KYC API and it's stuck in a non-approved state. How do I get it approved for testing?
account_id (CB-prefixed short ID or UUID) and specify the desired end state (e.g., Active). Similarly, if you need to test the RFI flow, ask them to set the account to a Returned state so you can test the resubmission path.How do I top up sandbox balance for testing payouts and conversions?
How do I top up sandbox balance for testing payouts and conversions?
Balance and Transfers
How do I query balance for a specific currency?
How do I query balance for a specific currency?
How do I transfer funds from a sub-account back to the house account?
How do I transfer funds from a sub-account back to the house account?
POST /api/v1/transfer). Set the source account using x-on-behalf-of (sub-account) and specify the destination account ID in the request body. See Create Transfer.How does the fee_paid_by (OURS vs SHARED) option work for payouts?
How does the fee_paid_by (OURS vs SHARED) option work for payouts?

