Skip to main content
Create a Transfer
Use this endpoint to initiate a money movement for a verified customer. SpherePay supports two transfer directions: on-ramp (fiat → crypto) and off-ramp (crypto → fiat). You define the direction by the types you supply for source and destination — a bank_account source with a wallet destination creates an on-ramp, and the reverse creates an off-ramp. The response includes deposit instructions your customer needs to fund the transfer.
The customer must have an approved verification profile before you can create a transfer on their behalf.

Authorizations

Authorization
string
header
required

Bearer authentication header of the form Bearer <token>, where <token> is your auth token.

Body

application/json
customer
string
required

The customer's ID.

Pattern: ^customer_[a-z0-9]+$
Example:

"customer_1234567890"

quoteId
string
required

The quote ID from a previously created quote. The transfer uses the locked exchange rate, currency, and network from the quote.

Example:

"quote_a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6"

source
object
required
destination
object
required
externalId
string

Integrator-defined external reference. The value is not stored as unique.

Example:

"merchant_ref_123"

paymentReason
enum<string>

The reason for the payment. Required for SWIFT transfers, BRL transfers, and for third-party off-ramp transfers (where the destination bank account owner relationship is not self).

Available options:
personal,
investment,
real_estate,
tax,
loan,
bills,
reimbursement,
professional_services,
family_support,
education,
rent,
donation,
gift,
insurance,
medical,
savings,
travel,
mortgage,
fine,
dividend,
agriculture,
import_export,
art,
other
Example:

"professional_services"

paymentDescription
string

A free-text description of the payment purpose. Required for third-party off-ramp transfers (where the destination bank account owner relationship is not self). Max 500 characters.

Required string length: 1 - 500
Example:

"INV-2026-004 - Q1 software services"

documentId
string

ID of a pre-uploaded supporting document (from POST /v2/document with target transfer). Required for third-party transfers on certain routes. A transfer is considered third-party when the destination bank account owner is not the customer themselves (i.e. the bank account relationship is not self). The document should evidence the purpose of the transfer - for example, an invoice, contract, payment agreement, or proof of services rendered.

Minimum string length: 1
Pattern: ^document_[a-z0-9]+$
Example:

"document_a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6"

Response

id
string
required

A unique identifier for transfer.

Pattern: ^payout_[a-z0-9]{24}$
Example:

"payout_a1b2c3d4e5f6a7b8c9d0e1f2"

type
enum<string>
required

The transfer type.

Available options:
on_ramp,
off_ramp,
unmatched_deposit,
microdeposit
Example:

"on_ramp"

status
enum<string>
required

The transfer status. See Transfer Lifecycle for status definitions and transitions.

Available options:
pendingFunding,
pendingReview,
fundsReceived,
processing,
succeeded,
undeliverable,
returned,
pendingRefundInformation,
failed,
canceled,
refunded,
unexpectedError,
failedPrecondition,
expired
Example:

"pendingFunding"

statusHistory
Transfer Status History Entry · object[]
required

Timeline of status transitions for this transfer, ascending by transitionedAt.

Example:
customer
string
required

The customer ID.

Example:

"customer_b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7"

source
Source Bank Account · object
required

The source of an on ramp transfer.

Example:
destination
Destination Wallet · object
required

The destination of an On-ramp transfer. See Wallets for registration.

depositAccount
Deposit Bank Account · object
required

The deposit bank account for an on ramp transfer.

updated
string<date-time>
required

The last datetime the transfer was updated.

Example:

"2021-01-01T00:00:00.000Z"

created
string<date-time>
required

The datetime the transfer was created.

Example:

"2021-01-01T00:00:00.000Z"

externalId
string

The external reference (not stored as unique).

Example:

"merchant_ref_123"

fees
object

Fee breakdown for the transfer. For floating-rate BRL transfers, this is omitted until settlement is complete.

quote
object

The quote used for this transfer, if any. When present, the locked exchange rate from the quote was applied to the destination amount and exchange rate.

paymentReason
string

The reason for the payment. Present on BRL transfers and third-party off-ramp transfers.

Example:

"professional_services"

paymentDescription
string

A free-text description of the payment purpose. Present on third-party off-ramp transfers.

Example:

"INV-2026-004 - Q1 software services"

Last modified on June 18, 2026