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_idfrom Account Center connected account APIs, not the short display ID. - You generate a unique
x-idempotency-keyfor each create request.
Step 1: Check the source balance
Use Retrieve Balance or List Balances to confirm the source account has enough available balance.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.transfer_id for API retrieval and short_reference_id for operations, finance, or customer support workflows.
Idempotency
Create Transfer requiresx-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-keyfor 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.Step 4: List transfers for reconciliation
Use List Transfers to reconcile internal movement over a period.page_sizeandpage_numberstart_timeandend_timetransfer_statuscurrency
transfer_id, short_reference_id, source_account_name, destination_account_name, transfer_amount, and complete_time fields to match internal ledger entries.

