Skip to main content
POST
/
api
/
payouts
/
transfer
/
v2
Create a v2 transfer
curl --request POST \
  --url https://business.madhousewallet.com/api/payouts/transfer/v2 \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "quote_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "wallet_address": "0xAb5801a7D398351b8bE11C439e05C5B3259aeC9B",
  "amount": 500,
  "recipientId": 12345678,
  "source_token": "usdc",
  "source_network": "base",
  "customer_uuid": "550e8400-e29b-41d4-a716-446655440000",
  "customer_email": "customer@example.com"
}
'
{
  "transfer_id": "507f1f77bcf86cd799439011",
  "deposit_address": "0xBC91bCF38e3c0DE1E3fD0cF50Be7c0e52D55D00e",
  "source_token": "usdc",
  "source_network": "base",
  "amount": 500,
  "currency": "EUR",
  "wallet_address": "0xAb5801a7D398351b8bE11C439e05C5B3259aeC9B",
  "instructions": {
    "send_amount": 500,
    "send_token": "USDC",
    "send_network": "base",
    "deposit_address": "0xBC91bCF38e3c0DE1E3fD0cF50Be7c0e52D55D00e",
    "note": "Send exactly 500 USDC on base to deposit_address, then call POST /api/payouts/transfer/v2/confirm-transfer with transfer_id and tx_hash to trigger the payout pipeline."
  }
}

Authorizations

Authorization
string
header
required

Pass your API key as a Bearer token: Authorization: Bearer mw_live_<keyId>_<secret>

Body

application/json
quote_id
string<uuid>
required

UUID returned by GET /api/payouts/quote. Must be used within 5 minutes.

Example:

"a1b2c3d4-e5f6-7890-abcd-ef1234567890"

amount
number
required

USD amount to transfer (max 2 decimal places, must match the quoted amount ±$0.01).

Example:

500

recipientId
integer
required

Recipient account ID from GET /api/payouts/recipients or POST /api/payouts/recipients.

Example:

12345678

source_token
enum<string>
required

Source token. Only usdc is accepted on v2. Use POST /api/payouts/transfer for USDT.

Available options:
usdc
Example:

"usdc"

source_network
enum<string>
required

Network on which you will send USDC to the deposit address.

Available options:
base,
solana,
polygon,
arbitrum,
avalanche,
ethereum
Example:

"base"

customer_uuid
string<uuid>
required

Your own UUID for this transfer — stored for audit and duplicate prevention. A duplicate UUID is rejected with 409.

Example:

"550e8400-e29b-41d4-a716-446655440000"

wallet_address
string

The address on source_network that will send USDC to the deposit address. Conditionally required: required if compliance screening or KYC verification is enabled for your account; may be omitted otherwise (stored and returned as an empty string). When compliance screening is enabled (the default), it must be an EVM address (0x + 40 hex chars) and is screened before processing — Solana addresses are rejected. When screening is disabled, both EVM (0x + 40 hex chars) and Solana (base58, 32–44 chars) addresses are accepted; if KYC is enabled it must be a KYC-verified wallet.

Example:

"0xAb5801a7D398351b8bE11C439e05C5B3259aeC9B"

keep_recipient
boolean

When true, the recipient is not automatically deleted after the transfer reaches a terminal state. Defaults to false.

Example:

false

customer_email
string<email>

Email address to receive payout status notifications (sent and failed). If omitted, notifications are sent to the authenticated account's email address.

Example:

"customer@example.com"

Response

Transfer created — deposit address returned

transfer_id
string
required

Unique transfer reference. Use this ID with POST /api/payouts/transfer/v2/confirm-transfer.

Example:

"507f1f77bcf86cd799439011"

deposit_address
string
required

The address to send USDC to on source_network. This is a fixed offloader wallet address.

Example:

"0xBC91bCF38e3c0DE1E3fD0cF50Be7c0e52D55D00e"

source_token
string
required

Token to send (always usdc on v2).

Example:

"usdc"

source_network
string
required

Network on which to send USDC.

Example:

"base"

amount
number
required

USD amount to send.

Example:

500

currency
string
required

Target payout currency.

Example:

"EUR"

wallet_address
string
required

Your sender address as supplied in the request. Empty string when omitted (KYC not enabled for your account).

Example:

"0xAb5801a7D398351b8bE11C439e05C5B3259aeC9B"

instructions
object
required

Human-readable instructions for completing the transfer.