Transfers

The Stables Transfers API enables the movement of value between stablecoin and fiat payout rails through a single, unified interface. This allows integrators to initiate cross-rail transactions without needing to manage on-chain interactions, FX execution, or banking integrations directly.

The Transfers API currently supports

  • Stablecoin → Fiat

We're working to bring live the following transfer routes:

  • Fiat → Stablecoin
  • Stablecoin → Stablecoin
  • Fiat → Fiat

Transfers are designed for single-use payments, enabling one-time movement of funds between dynamic source and destination accounts.

Additionally, for on-ramp use cases, our Virtual Accounts provide static, reusable fiat account details that enable seamless fund collection and automated off-ramping.


High level flow

  • Request a Quote
    Request a quote by specifying the source asset, amount, and destination details. The quote provides expected conversion amounts, applicable fees, and payout estimates for the transaction.
  • Create a Transfer
    Using the returned quote, submit a transfer request to the Transfers API. This creates the transfer and generates the associated funding instructions.
  • Receive Collection Instructions
    As Stables does not custody funds, each transfer generates unique, single-use source_deposit_instructions containing the required blockchain or banking details for that specific transaction.
  • Customer Deposit
    The customer completes the deposit using the provided instructions.
  • Processing and Payout
    Once funds are received and confirmed, Stables processes the transfer, performs any required conversion, and routes the payout to the specified destination.

If your organisation holds a balance with Stables, you can pay for a transfer from funds you already hold instead of collecting a deposit. Those transfers skip the deposit step entirely and start immediately — see Transfer from balance.


Create a transfer

Get a Quote

{
  "source": {
    "currency": "USDT",
    "network": "polygon",
    "amount": "1000.00"
  },
  "destination": {
    "currency": "EUR",
    "country": "GR",
    "network": "swift"
  }
}

Initiate the Transfer

Request

{
  "quote_id": "550e8400-e29b-41d4-a716-446655440000",
  "customer_id": "550e8400-e29b-41d4-a716-446655440001",
  "destination": {
    "type": "bank",
    "account_holder_name": "Nikos Papadopoulos",
    "iban": "GR1601101250000000012300695",
    "bank_name": "National Bank of Greece",
    "bank_country": "GR",
    "currency": "EUR",
    "swift_code": "ETHNGRAA"
  }
}

Response

{
  "id": "550e8400-e29b-41d4-a716-446655440002",
  "tenant_id": "550e8400-e29b-41d4-a716-446655440003",
  "customer_id": "550e8400-e29b-41d4-a716-446655440001",
  "quote_id": "550e8400-e29b-41d4-a716-446655440000",
  "type": "offramp",
  "status": "created",
  "created_at": "2025-01-01T00:00:00Z",
  "updated_at": "2025-01-01T00:00:00Z",
  "source_deposit_instructions": {
    "wallet_address": "0x1234567890abcdef1234567890abcdef12345678",
    "currency": "USDT",
    "network": "polygon",
    "amount": "1000.00"
  },
  "destination": {
    "amount": "920.50",
    "currency": "EUR",
    "network": "swift",
    "account_holder_name": "Nikos Papadopoulos",
    "iban": "GR1601101250000000012300695",
    "bank_name": "National Bank of Greece",
    "bank_country": "GR",
    "swift_code": "ETHNGRAA"
  },
  "fees": {
    "fx_fee": { "amount": "0.50", "currency": "EUR" },
    "integrator_fee": { "amount": "0.00", "currency": "EUR" },
    "platform_fee": { "amount": "1.00", "currency": "EUR" },
    "payment_method_fee": { "amount": "0.00", "currency": "EUR" },
    "network_fee": { "amount": "0.00", "currency": "EUR" },
    "total_fee": { "amount": "1.50", "currency": "EUR" }
  },
  "exchange_rate": 0.922,
  "origin": "api"
}

Collection Instructions

Stablecoin

Direct your customer to deposit the specified token, on the specified network, for the exact quoted amount.

Each transfer generates a unique deposit address. This address is single-use and must only be used for the associated transfer to ensure accurate reconciliation and processing

...
  "source_deposit_instructions": {
    "wallet_address": "0x1234567890abcdef1234567890abcdef12345678",
    "currency": "USDT",
    "network": "polygon",
    "amount": "1000"
  }
...

Transfer Delivery

Once we receive the deposit for your transfer, we will move the funds to the destination. You can use the Transfers API to check the state of the transfer or listen to webhooks.

On this page