How user-to-user cross-border payments work on Stellar

Overview

Globe Illustration
  • Laura in the USA wants to send money to Victor in Brazil.
  • Both Laura and Victor already have digital wallets they use to store, transfer, and trade Stellar-network tokens.
  • Laura wants to send her local currency, USD, but Victor wants to receive his local currency, BRL.
  • The following diagram shows how that payment – which involves 2 users, 2 wallets, and 2 anchors – unfolds on Stellar
  • It assumes both wallets and both anchors support SEP-6 and SEP-12, and SEP-10. The anchor-to-wallet interactions are all handled via API.

What the user sees

1

Laura funds her account

Deposit screen
  • Laura enters the amount of USD she’d like to deposit
  • Enters her KYC info
  • Receives deposit instructions
  • Transfers funds via ACH
  • Receives USD tokens in her wallet
See what happens in the background
2

Laura sends money to Victor

Deposit screen
  • Laura enters Victor’s wallet address
  • Chooses to send USD
  • And for Victor to receive BRL
  • Confirms the payment
  • Victor receives the payment in his wallet a few seconds later
See what happens in the background
3

Victor withdraws from his wallet

Deposit screen
  • Victor selects the amount of BRL he’d like to withdraw
  • Enters his KYC info
  • Enters his bank account info
  • Confirms the withdrawal
  • Receives BRL in his bank account via ACH
See what happens in the background

What happens in the background

1

Laura funds her account

Laura starts her deposit

  • Laura opens her wallet app and enters the amount of USD she'd like to deposit.
  • Phone icon
    Arrow right
    Anchor icon
    The wallet pings USAnchor’s Transfer Server and discovers that it requires an authenticated user session to proceed.
  • Phone icon
    Arrow right
    Anchor icon
    The wallet pings USAnchor’s WEB_AUTH_ENDPOINT, goes through challenge/response, receives a JWT token to authenticate the user session.
  • Phone icon
    Arrow right
    Anchor icon
    The wallet pings USAnchor's Transfer Server with Laura’s Stellar account, and with the amount and type of deposit she’d like to make.
  • Phone icon
    Arrow left
    Anchor icon
    USAnchor's Transfer Server responds and requests required KYC info.
  • The wallet prompts Laura to enter KYC info.

Laura's KYC verification

  • Laura enters the required KYC info into her wallet. If she uploaded it for a previous transaction, the wallet may already have that info on hand.
  • Phone icon
    Arrow right
    Anchor icon
    The wallet uploads Laura’s KYC info to USAnchor’s /customer endpoint.
  • Phone icon
    Arrow left
    Anchor icon
    USAnchor’s /customer endpoint lets the wallet know the upload was a success.
  • USAnchor analyzes Laura’s KYC info — how they do that is up to them.

Laura deposits USD and receives USD tokens

  • Phone icon
    Arrow right
    Anchor icon
    When Laura passes USAnchor’s KYC check, her wallet pings USAnchor’'s Transfer Server again with Laura’s Stellar account, and the amount and type of deposit she’d like to make.
  • Phone icon
    Arrow left
    Anchor icon
    USAnchor’s Transfer Server responds with instructions for depositing into USAnchor’s bank account.
  • Laura’s wallet displays deposit instructions.
  • Laura sends funds to USAnchor's account via ACH, wire, or whatever method USAnchor supports.
  • That transfer happens on a traditional banking system, so it can take a few days.
  • Anchor icon
    Arrow left
    Phone icon
    USAnchor detects Laura’s deposit as it arrives and transfers USD tokens to her wallet’s Stellar account.
  • That transfer happens on the Stellar network, so it just takes a few seconds.
2

Laura sends money to Victor

Laura makes the payment

  • Using her funded wallet, Laura specifies the amount of USD she’d like to send, and the currency Victor would like to receive, BRL.

USD-to-BRL conversion

  • Phone icon
    Arrow right
    Stellar icon
    The wallet executes a pathpayment on the Stellar network, which debits USD from Laura’s account, converts it to BRL using the built-in network orderbooks, and credits Victor with that BRL, all in a single transaction.

Payment is complete

  • Victor gets the BRL in his wallet app a few seconds later.
3

Victor withdraws from his wallet

Victor starts his withdrawal

  • Victor opens his wallet app and enters the amount of BRL he’d like to withdraw.
  • He enters information about his Brazilian bank account, which is where he will receive the funds.
  • Phone icon
    Arrow right
    Anchor icon
    The wallet pings AnchorBrazil’s Transfer Server and discovers that it requires an authenticated user session to proceed.
  • Phone icon
    Arrow right
    Anchor icon
    The wallet pings AnchorBrazil’s WEB_AUTH_ENDPOINT, goes through challenge/response, receives a JWT token to authenticate the user session.
  • Phone icon
    Arrow right
    Anchor icon
    The wallet pings AnchorBrazil’s Transfer Server to pass along Victor’s withdrawal request and bank account info.
  • Phone icon
    Arrow left
    Anchor icon
    Like USAnchor, AnchorBrazil requires KYC info, so it responds with a request detailing the required KYC fields.
  • The wallet prompts Victor to enter KYC info.

Victor's KYC Verification

  • Victor's KYC proceeds like Laura's, above.

Victor's withdrawal is completed

  • Phone icon
    Arrow right
    Anchor icon
    When Victor passes AnchorBrazil’s KYC check, his wallet pings AnchorBrazil's Transfer Server again.
  • Phone icon
    Arrow left
    Anchor icon
    AnchorBrazil’s Transfer Server responds with AnchorBrazil’s Stellar address.
  • Phone icon
    Arrow right
    Stellar icon
    Victor’s wallet sends the specified amount of BRL tokens to AnchorBrazil’s Stellar address.
  • This transaction happens on the Stellar network, and only takes a few seconds.
  • AnchorBrazil transfers an equivalent amount of BRL from their bank account to Victor’s bank account via ACH.
  • That transfer happens on a traditional banking system, so it can take a few days.