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"

destination
object
required
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
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"

externalId
string

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

Example:

"merchant_ref_123"

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"

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"

Response

created
string<date-time>
required

The datetime the transfer was created.

Example:

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

customer
string
required

The customer ID.

Example:

"customer_b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7"

depositAccount
Deposit Bank Account · object
required

The deposit bank account for an on ramp transfer.

destination
Destination Wallet · object
required

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

id
string
required

A unique identifier for transfer.

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

"payout_a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6"

source
Source Bank Account · object
required

The source of an on ramp transfer.

Example:
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,
unfunded
Example:

"pendingFunding"

statusHistory
Transfer Status History Entry · object[]
required

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

Example:
type
enum<string>
required

The transfer type.

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

"on_ramp"

updated
string<date-time>
required

The last datetime the transfer was updated.

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.

paymentDescription
string

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

Example:

"INV-2026-004 - Q1 software services"

paymentReason
string

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

Example:

"professional_services"

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.

Last modified on June 18, 2026