Skip to main content
POST
/
accounts
/
{account_id}
/
deposits
Initiate a new deposit
curl --request POST \
  --url https://service.bluumfinance.com/v1/accounts/{account_id}/deposits \
  --header 'Authorization: Basic <encoded-value>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "amount": "1000.00",
  "method": "manual_bank_transfer",
  "currency": "USD",
  "description": "Initial funding for investment account",
  "metadata": {
    "phone_number": "+233123456789",
    "redirect_url": "https://app.example.com/deposit/callback"
  },
  "manual_options": {},
  "wire_options": {}
}
'
{
  "deposit_id": "dep_a1b2c3d4e5f6g7h8",
  "account_id": "3d0b0e65-35d3-4dcd-8df7-10286ebb4b4b",
  "wallet_id": "wal_x1y2z3a4b5c6d7e8",
  "method": "manual_bank_transfer",
  "status": "pending",
  "amount": "1000.00",
  "currency": "USD",
  "description": "Initial funding",
  "method_details": {
    "referenceCode": "BLUUM-ABC123XY",
    "bankDetails": {
      "bankName": "Choice Financial Group",
      "bankAddress": "4501 23rd Avenue S Fargo, ND 58104 US",
      "accountName": "Bluum Finance, Inc.",
      "accountNumber": "202534766488",
      "accountKind": "Savings",
      "routingNumber": "091311229",
      "swiftCode": "CHFGUS44021",
      "beneficiaryAddress": "131 Continental Dr, Suite 305 Newark, DE 19713 US",
      "instructions": "Include reference code \"BLUUM-ABC123XY\" in your transfer memo."
    }
  },
  "initiated_at": "2026-01-15T10:00:00.000Z",
  "received_at": "2026-01-16T11:00:00.000Z",
  "completed_at": "2026-01-16T12:00:00.000Z",
  "expires_at": "2026-01-22T10:00:00.000Z",
  "failure_reason": "Insufficient funds",
  "created_at": "2026-01-15T09:00:00.000Z"
}

Documentation Index

Fetch the complete documentation index at: https://docs.bluumfinance.com/llms.txt

Use this file to discover all available pages before exploring further.

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 deposit amount as a decimal string with up to 2 decimal places.

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

"1000.00"

method
enum<string>
required

The funding method for the deposit:

  • ach: ACH bank transfer
  • manual_bank_transfer: Manual wire/ACH to Bluum's bank account
  • wire: Wire transfer
  • mobile_money: Mobile money collection (e.g. MTN MoMo, Airtel Money)
  • card: Debit/credit card payment
Available options:
ach,
manual_bank_transfer,
wire,
mobile_money,
card
Example:

"manual_bank_transfer"

currency
string
default:USD

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

Required string length: 3
Example:

"USD"

description
string

Optional description for the deposit.

Maximum string length: 500
Example:

"Initial funding for investment account"

metadata
object

Method-specific options passed to the funding provider. Fields vary by method:

  • mobile_money: phone_number (required) — the mobile money number to debit.
  • card: redirect_url (recommended) — URL to redirect after 3DS/payment page.
manual_options
object

Options for manual bank transfers. Currently no options required.

Example:
{}
wire_options
object

Options for wire transfers. (Future implementation)

Example:
{}

Response

Deposit initiated successfully

Deposit record returned by the API.

deposit_id
string

Unique identifier for the deposit.

Example:

"dep_a1b2c3d4e5f6g7h8"

account_id
string<uuid>

The investor account ID associated with the deposit.

Example:

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

wallet_id
string

The wallet ID where funds will be credited.

Example:

"wal_x1y2z3a4b5c6d7e8"

method
enum<string>

The funding method used.

Available options:
ach,
manual_bank_transfer,
wire,
mobile_money,
card
Example:

"manual_bank_transfer"

status
enum<string>

Current status of the deposit:

  • pending: Awaiting funds (manual) or processing initiation
  • processing: Transfer in progress
  • received: Funds received, pending completion (manual transfers)
  • completed: Funds credited to wallet
  • expired: Manual transfer not completed in time
  • canceled: Cancelled by user or system
  • failed: Transfer failed
Available options:
pending,
processing,
received,
completed,
expired,
canceled,
failed
Example:

"pending"

amount
string

The deposit amount.

Example:

"1000.00"

currency
string

The currency code.

Example:

"USD"

description
string | null

User-provided description.

Example:

"Initial funding"

method_details
object

Method-specific details. For manual_bank_transfer, includes:

  • referenceCode: Unique code to include in bank transfer memo
  • bankDetails: Bank account information for the transfer
  • bankDetails.bankAddress: Physical address of the receiving bank
  • bankDetails.beneficiaryAddress: Physical address of the beneficiary
  • bankDetails.accountKind: Account type (e.g. Savings, Checking)
Example:
{
"referenceCode": "BLUUM-ABC123XY",
"bankDetails": {
"bankName": "Choice Financial Group",
"bankAddress": "4501 23rd Avenue S Fargo, ND 58104 US",
"accountName": "Bluum Finance, Inc.",
"accountNumber": "202534766488",
"accountKind": "Savings",
"routingNumber": "091311229",
"swiftCode": "CHFGUS44021",
"beneficiaryAddress": "131 Continental Dr, Suite 305 Newark, DE 19713 US",
"instructions": "Include reference code \"BLUUM-ABC123XY\" in your transfer memo."
}
}
initiated_at
string<date-time> | null

When the deposit was initiated.

Example:

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

received_at
string<date-time> | null

When funds were received (manual transfers).

Example:

"2026-01-16T11:00:00.000Z"

completed_at
string<date-time> | null

When the deposit was completed and funds credited.

Example:

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

expires_at
string<date-time> | null

When a pending manual deposit will expire.

Example:

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

failure_reason
string | null

Reason for failure, if applicable.

Example:

"Insufficient funds"

created_at
string<date-time>

When the deposit record was created.

Example:

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