Skip to main content
Use internal transfers to move available Global Account balance between a master account and one of its sub-accounts. This is typically used to fund a sub-account before payout, sweep funds from a sub-account back to the master account, or rebalance balances across your account structure. Internal transfers are different from payouts and deposits:

Supported transfer directions

The transfer must involve the account represented by the authenticated API token. Direct sub-account to sub-account transfers are not supported. To move funds from one sub-account to another, transfer from the source sub-account to the master account first, then from the master account to the target sub-account. The source and target must be different accounts. Both accounts must be active, and the transfer product must be enabled for both sides.

Prerequisites

Before creating a transfer, confirm the following:
  • The authenticated account is either the source account or the target account.
  • The source and target accounts belong to the same master-sub-account relationship.
  • Both accounts are active. If an individual account is involved, it must also be verified.
  • The transfer product is enabled for both accounts and for the transfer direction.
  • The source account has enough available balance for the transfer amount and any applicable fee.
  • You have the account IDs for both sides. For sub-accounts, use the account_id from Account Center connected account APIs, not the short display ID.
  • You generate a unique x-idempotency-key for each create request.

Step 1: Check the source balance

Use Retrieve Balance or List Balances to confirm the source account has enough available balance.
If the available balance is lower than the transfer amount plus fees, create transfer will fail. For zero-decimal currencies such as IDR and JPY, the transfer amount must be an integer.

Step 2: Create the transfer

Call Create Transfer with the source account, target account, currency, amount, and transfer reason.
A successful response returns the transfer identifiers:
Store both identifiers. Use transfer_id for API retrieval and short_reference_id for operations, finance, or customer support workflows.

Idempotency

Create Transfer requires x-idempotency-key. Use a UUID generated by your system and reuse the same key only when retrying the exact same request after a timeout or network failure. If the same idempotency key is retried with the same request body, UQPAY returns the original transfer identifiers. If the same key is reused with a different request body, the request is rejected. Recommended retry behavior:
  • Retry on network timeouts, connection resets, or uncertain client-side failures.
  • Reuse the same x-idempotency-key for retries of the same transfer.
  • Do not create a new idempotency key unless you intend to create a separate transfer.
  • After receiving a response, use Retrieve Transfer to confirm the final status.

Step 3: Retrieve the transfer

Use Retrieve Transfer to get the latest status and transfer details.
The response includes the source and destination account names, transfer amount, reason, status, and timestamps. Common transfer statuses:

Step 4: List transfers for reconciliation

Use List Transfers to reconcile internal movement over a period.
You can filter by:
  • page_size and page_number
  • start_time and end_time
  • transfer_status
  • currency
Use the returned transfer_id, short_reference_id, source_account_name, destination_account_name, transfer_amount, and complete_time fields to match internal ledger entries.

Common validation failures