Skip to main content
POST
/
accounts
/
{account_id}
/
withdrawals
Initiate a new withdrawal
curl --request POST \
  --url https://api.bluumfinance.com/v1/accounts/{account_id}/withdrawals \
  --header 'Authorization: Basic <encoded-value>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "amount": "500.00",
  "method": "ach_plaid",
  "currency": "USD",
  "description": "Monthly withdrawal to checking account",
  "plaid_options": {
    "item_id": "item_abc123",
    "account_id": "acc_xyz789"
  },
  "wire_options": {}
}
'
{
  "withdrawal_id": "wdr_a1b2c3d4e5f6g7h8",
  "account_id": "3d0b0e65-35d3-4dcd-8df7-10286ebb4b4b",
  "wallet_id": "wal_x1y2z3a4b5c6d7e8",
  "method": "ach_plaid",
  "status": "processing",
  "amount": "500.00",
  "currency": "USD",
  "description": "Monthly payout",
  "method_details": {
    "plaidTransferId": "trf_xyz789",
    "plaidAccountId": "acc_abc123"
  },
  "destination_details": {
    "bankName": "Chase Bank",
    "accountMask": "****5678"
  },
  "initiated_at": "2026-01-17T09:00:00.000Z",
  "submitted_at": "2026-01-17T10:00:00.000Z",
  "completed_at": "2026-01-18T12:00:00.000Z",
  "failure_reason": "Invalid bank account",
  "created_at": "2026-01-17T08:00:00.000Z"
}

Authorizations

Authorization
string
header
required

HTTP Basic Authentication using the API Key as username and API Secret as password.

Headers

Idempotency-Key
string

A unique key to ensure idempotency of the request. If a request with the same idempotency key has already been processed, the original response will be returned.

Path Parameters

account_id
string<uuid>
required

The unique identifier of the investor account.

Body

application/json
amount
string
required

The withdrawal amount as a decimal string with up to 2 decimal places.

Pattern: ^\d+(\.\d{1,2})?$
Example:

"500.00"

method
enum<string>
required

The funding method for the withdrawal:

  • ach_plaid: ACH transfer via Plaid to connected bank
  • wire: Wire transfer (future)
Available options:
ach_plaid,
wire
Example:

"ach_plaid"

currency
string
default:USD

The currency code (ISO 4217). Defaults to USD.

Required string length: 3
Example:

"USD"

description
string | null

Optional description for the withdrawal.

Maximum string length: 500
Example:

"Monthly withdrawal to checking account"

plaid_options
object

Options for Plaid ACH withdrawals. Requires a previously connected Plaid item.

wire_options
object

Options for wire withdrawals. (Future implementation)

Example:
{}

Response

Withdrawal initiated successfully

Withdrawal record returned by the API.

withdrawal_id
string

Unique identifier for the withdrawal.

Example:

"wdr_a1b2c3d4e5f6g7h8"

account_id
string<uuid>

The investor account ID associated with the withdrawal.

Example:

"3d0b0e65-35d3-4dcd-8df7-10286ebb4b4b"

wallet_id
string

The wallet ID from which funds are withdrawn.

Example:

"wal_x1y2z3a4b5c6d7e8"

method
enum<string>

The funding method used.

Available options:
ach_plaid,
wire
Example:

"ach_plaid"

status
enum<string>

Current status of the withdrawal:

  • pending: Awaiting processing
  • processing: Being processed
  • submitted: Submitted to external provider
  • completed: Funds sent successfully
  • canceled: Cancelled by user or system
  • failed: Transfer failed
Available options:
pending,
processing,
submitted,
completed,
canceled,
failed
Example:

"processing"

amount
string

The withdrawal amount.

Example:

"500.00"

currency
string

The currency code.

Example:

"USD"

description
string | null

User-provided description.

Example:

"Monthly payout"

method_details
object

Method-specific details. For ach_plaid, includes Plaid transfer information.

Example:
{
"plaidTransferId": "trf_xyz789",
"plaidAccountId": "acc_abc123"
}
destination_details
object

Details about the destination bank account.

Example:
{
"bankName": "Chase Bank",
"accountMask": "****5678"
}
initiated_at
string<date-time> | null

When the withdrawal was initiated.

Example:

"2026-01-17T09:00:00.000Z"

submitted_at
string<date-time> | null

When the withdrawal was submitted to the external provider.

Example:

"2026-01-17T10:00:00.000Z"

completed_at
string<date-time> | null

When the withdrawal was completed and funds sent.

Example:

"2026-01-18T12:00:00.000Z"

failure_reason
string | null

Reason for failure, if applicable.

Example:

"Invalid bank account"

created_at
string<date-time>

When the withdrawal record was created.

Example:

"2026-01-17T08:00:00.000Z"