Skip to content

Transfer to a member

POST /v1/partners/groups/{external_group_id}/members/{external_id}/transfers

Moves part of your balance into the wallet of a member you provisioned. Read Member transfers and the deposit first: it explains the limit and the rule for systems that debit the member before calling.

Permissiontransfer-to-member — issued by Moria, not creatable in the console
IdempotencyRequired — X-Idempotency-Key, 8–128 characters
Answers200
POST /v1/partners/groups/branch-jakarta/members/emp-00412/transfers
Authorization: Bearer sk_live_xxxxxxxxxxxxxxxx
x-partner-signature: <hmac-sha256 of the raw body, hex>
X-Idempotency-Key: convert-emp-00412-2026-10-12-001
Content-Type: application/json
{
"amount": "150000",
"wallet": "open_loop"
}
FieldRequiredNotes
amountyesWhole rupiah as a string, greater than zero, no decimals
walletnoopen_loop (default) or closed_loop — see Which wallet

external_group_id and external_id are your own identifiers, the ones you used when you provisioned the group and the member.

The idempotency key covers the amount, the member and the wallet. Leaving wallet out and sending "open_loop" are the same request, so a retry may use either. Reusing a key with a different amount, member or wallet is refused with REQUEST_IDEMPOTENCY_KEY_REUSED; nothing moves.

{
"data": {
"id": "3f9a…",
"reference": "PGW-3F9AC1…",
"status": "succeeded",
"is_final": true,
"external_group_id": "branch-jakarta",
"external_id": "emp-00412",
"wallet": "open_loop",
"amount": "150000.0000",
"deposit_used": "50000.0000",
"currency": "IDR",
"status_url": "/v1/partners/member-transfers/3f9a…",
"created_at": "2026-10-12T03:15:00.000Z",
"finalized_at": "2026-10-12T03:15:01.000Z"
},
"request_id": "req_…"
}

No fee is taken: the member receives amount. deposit_used is the part your deposit covered because released money did not reach that far.

Most transfers answer succeeded in the same call. A failed transfer carries failure_code (the provider’s refusal code, or PROVIDER_REJECTED) and its amount is back in your balance already.

created_at and finalized_at are UTC instants, like every time the API returns.

CodeHTTPMeans
REQUEST_IDEMPOTENCY_KEY_REQUIRED400X-Idempotency-Key is missing or not 8–128 printable characters
REQUEST_INVALID_PAYLOAD400amount is not a whole rupiah greater than zero, or wallet is not a known value
REQUEST_IDEMPOTENCY_KEY_REUSED400The key already belongs to a transfer with a different amount, member or wallet
FUNDS_INSUFFICIENT_BALANCE400More than transferable_to_members
FUNDS_SETTLEMENT_PENDING400The provider has not released enough to your account yet
FUNDS_TRANSFER_SUSPENDED403Not switched on for your account, or paused for review
STATE_CONFLICT403The member’s group link or membership is not active
STATE_MEMBER_WALLET_NOT_READY409The member’s wallet is not active yet
RESOURCE_NOT_FOUND404No such group or member under your account
PROVIDER_UNAVAILABLE503Your balance at the provider could not be read. Nothing moved; retry with the same key