Skip to main content
POST
Wallet → Bank (payout)

Authorizations

Authorization
string
header
required

The access token received from the authorization server in the OAuth 2.0 flow.

Body

application/json

Pay out from a wallet to a bank account (intent_type=payout).

The required payment_type selects the flow and drives validation:

  • send — pay another party. Provide payee_destination_id (recommended) or the legacy payee_payment_method_id; do NOT send payment_method_id.
  • transfer — withdraw to the user's OWN bank. Provide payment_method_id (the user's linked bank, the same one they fund from); do NOT send a payee. A Plaid-linked bank is connected to the payout provider on demand if it is not already.

Either way the payout is SUA-gated, moves available → escrow on submit, and settles via webhook.

wallet_id
string<uuid>
required

Source wallet UUID — the tenant's master wallet or one of the user's wallets. Server validates tenant ownership and currency and resolves the owner from it.

Example:

"a1b2c3d4-e5f6-7890-abcd-ef1234567890"

amount
number
required

Amount in major currency units (e.g. dollars).

Example:

100.5

payment_type
enum<string>
required

Required. send pays a payee (use payee_destination_id); transfer withdraws to the user's own bank (use payment_method_id).

Available options:
send,
transfer
Example:

"send"

idempotency_key
string
required

Unique key to ensure idempotent payment creation.

Required string length: 1 - 120
Example:

"pay_req_20260604_abc123"

product_id
string<uuid>
required

UUID of the payout product (rail + provider route).

Example:

"d4e5f6a7-b8c9-0123-4567-890abcdef012"

user_id
string<uuid> | null

Optional safety cross-check — when sent, must match the owner of wallet_id.

Example:

"b3a9b622-cc63-4d3c-aad6-2d8e29e6f9d4"

currency
string
default:USD

ISO 4217 currency code.

Required string length: 3
Example:

"USD"

metadata
Metadata · object

Arbitrary key-value metadata to attach to the payment.

Example:
payment_category
integer | null

Optional. The payment category code to tag this payment with, recording what the payment was for. Omit it and the payment is created exactly as before, untagged. If you do send one it must be a code your platform can currently use, otherwise the request is rejected and no money moves. Fetch the codes from GET /v1/platform/catalog/payment-categories. Codes are issued separately in test and live, so read the list in each mode — the same number does not mean the same category across them.

Required range: x > 0
Example:

1

from_hold
boolean
default:false

Draw this payout from the wallet's frozen (held) funds instead of its available balance. The held balance must cover the amount plus any payer-borne fee, or the request is rejected with insufficient_held_funds. Omit for a normal payout from available balance.

Example:

false

payee_destination_id
string<uuid> | null

send only. UUID of the payee's destination (recommended) — the canonical field for ACH-push and digital-check auto-deposit. Either this or payee_payment_method_id is required when payment_type=send.

Example:

"c8d9e0f1-a2b3-4567-89ab-cdef01234567"

payee_payment_method_id
string<uuid> | null
deprecated

Deprecated legacy payee target (send only) — use payee_destination_id instead.

Example:

"f6a7b8c9-d0e1-2345-6789-0abcdef01234"

payment_method_id
string<uuid> | null

transfer only. UUID of the user's OWN linked bank account to withdraw to. Must belong to the wallet owner and be active. A Plaid-linked bank is connected to the payout provider on demand if it is not already.

Example:

"e5f6a7b8-c9d0-1234-5678-90abcdef0123"

Response

Successful Response

Standard response wrapper for single-object responses and errors.

Generic over the payload type. A route that declares CommonResponse[SomeModel] gets the real data schema rendered in OpenAPI/Swagger; a bare CommonResponse leaves data untyped.

status_code
integer
required

HTTP status code for the response.

data
any
required

Payload or error details.

query_generated_time
integer
required

UTC timestamp (milliseconds since epoch) when response was generated.