Transfer between accounts (PG or cross-channel)
Transfers funds from the given PG account (remitter) to a beneficiary under the same merchant. Compatible-extend contract: omit beneficiary_channel (or set PG) and pass beneficiary_account_number for intra-PG movement; set beneficiary_channel=KYC to credit the merchant KYC credit-pool (Shanghai §6.7 + IVS local TRANSFER_CREDIT, no MONEY_IN). BILLER is reserved. Requires request signature headers (verify.signature-internal).
Idempotency: send an optional merchant_ref_no unique per merchant. If a value already used by the same merchant is submitted again, the original transfer is returned (HTTP 200) and no new movement is created — regardless of which of the merchant’s accounts is the remitter. If merchant_ref_no is omitted or empty, the platform auto-generates a unique reference (format AM-<timestamp>-<random>) and returns it in the response.
Authorizations
JWT issued by POST /api/v1.1/access-token/b2b. Send Authorization: Bearer <token>.
Merchant API key (Credential.api_key). Required on every request.
Path Parameters
ULID of the source (remitter) PG account.
Body
Compatible-extend contract: PG→PG still uses beneficiary_account_number. Cross-channel (KYC / future BILLER) sets beneficiary_channel and omits the PG account number. Optional beneficiary_account_id is reserved for multi-pool peer products.
Transfer amount in IDR. Must be at least 1 and not exceed the remitter account available balance.
500000
Destination product channel. Omit or PG for intra-PG movement. KYC credits the merchant KYC credit-pool. BILLER reserved until biller Shanghai provisioning.
PG, KYC, BILLER "KYC"
Required when beneficiary_channel is PG (or omitted). 12-digit PG account number of the destination account; must belong to the same merchant and be active.
"123456789012"
Optional peer-product account selector. Unused for KYC today (one pool per merchant). Reserved for future multi-pool / BILLER.
null
Optional merchant-supplied idempotency reference. Unique per merchant across all account movements: reusing a value already used by the same merchant returns the original transfer (HTTP 200) without creating a duplicate. If omitted or empty, the platform auto-generates a unique reference (format AM-<timestamp>-<random>) and returns it in the response — a generated reference is unique per request and therefore provides no replay protection. A different merchant may reuse the same value.
191"MOVE-20260702-001"
Response
Transfer completed successfully. The data object contains the created transfer record.
