Transfer to a member
POST /v1/partners/groups/{external_group_id}/members/{external_id}/transfersMoves 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.
| Permission | transfer-to-member — issued by Moria, not creatable in the console |
| Idempotency | Required — X-Idempotency-Key, 8–128 characters |
| Answers | 200 |
Request
Section titled “Request”POST /v1/partners/groups/branch-jakarta/members/emp-00412/transfersAuthorization: Bearer sk_live_xxxxxxxxxxxxxxxxx-partner-signature: <hmac-sha256 of the raw body, hex>X-Idempotency-Key: convert-emp-00412-2026-10-12-001Content-Type: application/json{ "amount": "150000", "wallet": "open_loop"}| Field | Required | Notes |
|---|---|---|
amount | yes | Whole rupiah as a string, greater than zero, no decimals |
wallet | no | open_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.
Response
Section titled “Response”{ "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.
An unclear outcome stays pending
Section titled “An unclear outcome stays pending”Errors
Section titled “Errors”| Code | HTTP | Means |
|---|---|---|
REQUEST_IDEMPOTENCY_KEY_REQUIRED | 400 | X-Idempotency-Key is missing or not 8–128 printable characters |
REQUEST_INVALID_PAYLOAD | 400 | amount is not a whole rupiah greater than zero, or wallet is not a known value |
REQUEST_IDEMPOTENCY_KEY_REUSED | 400 | The key already belongs to a transfer with a different amount, member or wallet |
FUNDS_INSUFFICIENT_BALANCE | 400 | More than transferable_to_members |
FUNDS_SETTLEMENT_PENDING | 400 | The provider has not released enough to your account yet |
FUNDS_TRANSFER_SUSPENDED | 403 | Not switched on for your account, or paused for review |
STATE_CONFLICT | 403 | The member’s group link or membership is not active |
STATE_MEMBER_WALLET_NOT_READY | 409 | The member’s wallet is not active yet |
RESOURCE_NOT_FOUND | 404 | No such group or member under your account |
PROVIDER_UNAVAILABLE | 503 | Your balance at the provider could not be read. Nothing moved; retry with the same key |
- Member transfer detail to follow a
pendingone to the end - Check your balance for
transferable_to_members