Endpoint
- Method:
POST - URL:
{{LIQUIDITY_URL}}/v1/ext/linked-accounts/:currency/:linkedAccountId/withdrawal - Auth: Bearer
{{accessToken}}(scopeexternal.apis) - Rate limit: 1 withdrawal per minute per user (and IP). Returns 429 if exceeded.
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
currency | string | Yes | Currency code. Supported: USD only. |
linkedAccountId | string | Yes | UUID of the linked payout account (bank or card) to send funds to. Must be a valid UUID of an existing linked account whose wallet is associated with the authenticated entity. See Link Bank Account, Link Card Account, or Link International Bank Account for how to link an account. |
Headers
| Header | Required | Description |
|---|---|---|
Authorization | Yes | Bearer <token> with scope external.apis. |
Content-Type | Yes | application/json. |
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
amount | number | Yes | Payout amount (e.g. dollars for USD). Must be > 0. |
walletType | string | Yes | Must be "SPEND". Withdrawal is from the SPEND wallet tied to the linked account. |
reason | string | Yes | Reason or reference for the payout (e.g. “Contractor payment”, “Payout”). |
routingType | string | No | Allowed: ACH, RTP, WIRE, BANK. Used for bank linked accounts; ignored for card (push-to-card). |
transactionType | string | No | If "payout" (case-insensitive), treated as PAYMENT; otherwise PAYOUT. |
mfaCode.
Request
Response (200)
Response Fields
| Field | Type | Description |
|---|---|---|
success | boolean | Whether the request succeeded. |
message | string | Status message (e.g. “Payment queued”). |
data.id | string | Transaction UUID for tracking. |
data.status | string | Transaction status (e.g. SUCCESS, PENDING). |
data.fees | string | Fee amount as string. |
data.amount | string | Total debit amount (amount + fees) as string. |
Error (4xx / 5xx)
Typical Error Cases
| Situation | HTTP | Message / cause |
|---|---|---|
| Invalid or missing body | 400 | Validation errors (e.g. missing amount, walletType, reason). |
| Invalid routingType | 400 | Only ACH, RTP, WIRE, BANK allowed. |
| Unauthorized / wrong scope | 401 | Invalid or expired token, or missing external.apis scope. |
| Linked account not found | 404 | Wrong ID or linked account not accessible. |
| Application token expired | 400 | Payment-link token expired/inactive. |
| Amount mismatch (payment link) | 400 | Merchant-funded and amount ≠ token amount. |
| Insufficient balance | 400 | "Insufficient Funds #912". |
| Rate limit | 429 | 1 withdrawal per minute per user. |
| Server / processing error | 500 | Server or processing error. |
Supported Payout Types
| Linked account type | routingType (optional) | Result |
|---|---|---|
| BANK | RTP | Real-time payment (RTP). |
| BANK | ACH or BANK or omitted | ACH transfer. |
| BANK | WIRE | Wire (method-dependent). |
| CARD | any or omitted | Push-to-card; routingType ignored. |
Validation Rules
- amount – Required, number, > 0.
- walletType – Required, must be
"SPEND". - reason – Required, string.
- routingType – Optional. If present:
ACH,RTP,WIRE,BANKonly. - currency – From path; must be
USD(only supported currency). - linkedAccountId – From path; valid UUID of existing linked account for the authenticated entity. See Link Bank Account, Link Card Account, or Link International Bank Account for how to link an account.
- MFA – Not required; do not send
mfaCode.
Payment-Link / Merchant-Funded
If the request is in the context of a payment link withwithdrawalSource === 'MERCHANT_WALLET':
- amount in the body must equal the amount on the application token; otherwise 400 “Malformed request”.
- On success, the application token is invalidated immediately.
Notes
- Linked account must exist and be associated with the entity’s SPEND wallet.
- Success response means “queued”; final status may come via webhooks or status API.
- 1 request per minute per user (and IP). No idempotency keys; implement client-side idempotency if needed.