Xe Money Transfer & Currency icon

Xe FX rates and transfer data API

XE.com Inc. · Banking

Xe Money Transfer & Currency is the Android client from New York–based XE.com Inc., the FX brand now inside Euronet Worldwide (alongside Ria Money Transfer). People convert 180-plus currencies on the home converter, watch a pair on interactive charts, set rate alerts, and send money as bank deposit, cash pickup or mobile wallet — funded by card, bank transfer, open banking (Plaid in the US, Volt in Europe) or a multi-currency Xe balance. Signed-in users also hold currency accounts, order a multicurrency card, buy a travel eSIM, and follow transfers on an activity timeline with scheduled and forward orders. It sits with Wise, Remitly and bank FX desks for consumers and SMEs moving funds from the United States and the euro area toward India, Mexico, Brazil and the Gulf.

Mid-market USD crosses land in rates keyed by ISO code, while chart batches expose batchList of startTime, interval and rates samples so a pair can paint latestRate against openRate. Corridor quotes carry sellCcy, buyCcy, rate, inverseRate, transferFee and paymentMethodFee per settlementMethod.

Currency jars report accountCurrency with availableBalance and currentBalance accountCurrencyAmounts; the activity ledger adds creditAmount, dealReference and createdDate. Booked sends key off contractReference, sellAmount, receiveAmount and transactionActivityStatus. Treasury dashboards, FX desks and payout engines consume those fields — openData Studio turns them into callable open data.

Screenshots

  • Xe Money Transfer & Currency screenshot 1
  • Xe Money Transfer & Currency screenshot 2
  • Xe Money Transfer & Currency screenshot 3
  • Xe Money Transfer & Currency screenshot 4
  • Xe Money Transfer & Currency screenshot 5
  • Xe Money Transfer & Currency screenshot 6
  • Xe Money Transfer & Currency screenshot 7
  • Xe Money Transfer & Currency screenshot 8

API surface

The endpoints and request/response examples below are reconstructed from the app's interface — illustrative, not a live capture.

  • Live mid-market FX rates

    POST /v1/fx/spot opendata

    Returns USD-cross mid-market rates for the requested ISO codes so the converter, home widgets and in-app calculator can price a pair without a signed-in transfer session.

    Auth: Hashed device token carried in the request body's user object; no Bearer session is needed. Home-screen widgets call the same resource.

    • rates
    • currencies
    • deviceId
    • tier
    • deviceType
    • token
    POST /v1/fx/spot HTTP/1.1
    Content-Type: application/json
    
    {
      "user": {
        "deviceId": "3f2a9c1e-7b44-4d21-9c08-aa11bb22cc33",
        "tier": "free",
        "platform": "android",
        "deviceType": "app",
        "versionNumber": "8.0.0",
        "token": "<device-token>"
      },
      "analytics": {
        "language": "en",
        "platform": "android"
      },
      "currencies": [
        "USD",
        "EUR",
        "GBP",
        "INR",
        "MXN"
      ]
    }
    {
      "rates": {
        "USD": 1,
        "EUR": 0.9215,
        "GBP": 0.7812,
        "INR": 83.41,
        "MXN": 17.08
      }
    }
  • Historical FX chart batches

    POST /v1/fx/history opendata

    Returns sampled mid-market history for a currency pair as batchList of startTime/interval/rates so the Charts screen and rate-alert composer can derive latestRate, openRate, minRate and maxRate.

    Auth: Same hashed device token in the user object as live rates; anonymous converter traffic is enough.

    • batchList
    • startTime
    • interval
    • rates
    • fromCurrency
    • toCurrency
    • period
    • latestRate
    • openRate
    POST /v1/fx/history HTTP/1.1
    Content-Type: application/json
    
    {
      "user": {
        "deviceId": "3f2a9c1e-7b44-4d21-9c08-aa11bb22cc33",
        "tier": "free",
        "platform": "android",
        "deviceType": "app",
        "versionNumber": "8.0.0",
        "token": "<device-token>"
      },
      "analytics": {
        "language": "en-US",
        "platform": "android"
      },
      "fromCurrency": "USD",
      "toCurrency": "EUR",
      "period": 10
    }
    {
      "batchList": [
        {
          "startTime": 1760328000000,
          "interval": 3600000,
          "rates": [
            0.9211,
            0.922,
            0.9198
          ]
        }
      ]
    }
  • Tradable currency catalog

    GET /v1/catalog/currencies opendata

    Lists ISO currencies the sender country can sell or the destination can buy, feeding the converter pair picker and send-money currency lists.

    Auth: Session optional; converter bootstrap sends country, countryTo and brandId without a Bearer token.

    • isoCode
    • name
    • canSell
    • canBuy
    • country
    • countryTo
    • brandId
    GET /v1/catalog/currencies?country=US&countryTo=IN&brandId=8 HTTP/1.1
    Accept: application/json
    [
      {
        "isoCode": "USD",
        "name": "US Dollar",
        "canSell": true,
        "canBuy": true
      },
      {
        "isoCode": "INR",
        "name": "Indian Rupee",
        "canSell": false,
        "canBuy": true
      }
    ]
  • Send corridors by origin country

    GET /v1/catalog/corridors opendata

    Returns destination countries reachable from CountryFrom with the delivery methods each corridor offers — bank deposit, cash pickup, mobile wallet — used by the send-money country picker.

    Auth: Anonymous quote traffic is enough. Signed-in calls attach a Bearer access token.

    • countryCode
    • deliveryMethods
    • CountryFrom
    GET /v1/catalog/corridors?CountryFrom=US HTTP/1.1
    Accept: application/json
    [
      {
        "countryCode": "IN",
        "deliveryMethods": [
          "BankDeposit",
          "CashPickup",
          "MobileWallet"
        ]
      },
      {
        "countryCode": "MX",
        "deliveryMethods": [
          "BankDeposit",
          "CashPickup"
        ]
      }
    ]
  • Top receive destinations

    GET /v1/catalog/popular-destinations opendata

    Ranks popular receive countries and currencies for a buyCcy + senderCountry pair so the send-money start screen can pin frequent corridors.

    Auth: Converter and send-money bootstrap. Bearer attached when signed in.

    • buyCcy
    • senderCountry
    • topCountries
    • topCurrencies
    GET /v1/catalog/popular-destinations?buyCcy=INR&senderCountry=US HTTP/1.1
    Accept: application/json
    {
      "topCountries": [
        "IN",
        "MX",
        "PH",
        "NG"
      ],
      "topCurrencies": [
        "INR",
        "MXN",
        "PHP",
        "NGN"
      ]
    }
  • Create corridor FX quote

    POST /v1/pricing/quote openfinance

    Prices a send corridor at Xe’s rate plus transfer and payment-method fees, returning per-settlementMethod quotes the send calculator locks before booking.

    Auth: Bearer access token issued at sign-in; anonymous quotes also run with an anonymous session id. Native requests add device identification and signed request headers.

    • userCountry
    • sellCcy
    • buyCcy
    • fixedCcy
    • quoteStatus
    • rate
    • inverseRate
    • sellAmount
    • buyAmount
    • transferFee
    • paymentMethodFee
    • settlementMethod
    • deliveryMethod
    • offeredDeliveryMethods
    • individualQuotes
    • pricingLevelCode
    POST /v1/pricing/quote?language=en HTTP/1.1
    Authorization: Bearer <access-token>
    Content-Type: application/json
    
    {
      "userCountry": "US",
      "countryTo": "IN",
      "amount": 1000,
      "amountTo": 0,
      "sellCcy": "USD",
      "buyCcy": "INR",
      "fixedCcy": "USD",
      "deliveryMethod": "BankDeposit",
      "paymentMethod": "DebitCard",
      "valueDateType": "Spot"
    }
    {
      "quote": {
        "quoteStatus": "Success",
        "sellCcy": "USD",
        "buyCcy": "INR",
        "fixedCcy": "USD",
        "countryTo": "IN",
        "pricingLevelCode": "STANDARD",
        "offeredDeliveryMethods": [
          {
            "method": "BankDeposit",
            "isEnabled": true,
            "unavailableReason": null
          }
        ],
        "individualQuotes": [
          {
            "settlementMethod": "DebitCard",
            "deliveryMethod": "BankDeposit",
            "sellAmount": "1000.00",
            "buyAmount": "83120.00",
            "rate": 83.41,
            "inverseRate": 0.01199,
            "transferFee": "3.99",
            "paymentMethodFee": "2.50",
            "totalCostAmount": "1006.49",
            "leadTime": "0-1 days",
            "isDefault": true,
            "isEnabled": true
          }
        ]
      }
    }
  • List multi-currency account balances

    GET /v1/balances/accounts openbanking

    Returns every currency jar on the signed-in profile — total, available and current amounts — used to paint the balances home and fund-from-balance send path.

    Auth: Bearer access token; an expired token is renewed with the refresh token and the call retried.

    • currencyAccounts
    • accountCurrency
    • totalBalance
    • availableBalance
    • currentBalance
    • accountCurrencyAmount
    • showAll
    GET /v1/balances/accounts?showAll=true HTTP/1.1
    Authorization: Bearer <access-token>
    Accept: application/json
    {
      "currencyAccounts": [
        {
          "accountCurrency": "USD",
          "totalBalance": {
            "accountCurrencyAmount": 2450.35
          },
          "availableBalance": {
            "accountCurrencyAmount": 2380.0
          },
          "currentBalance": {
            "accountCurrencyAmount": 2450.35
          }
        },
        {
          "accountCurrency": "EUR",
          "totalBalance": {
            "accountCurrencyAmount": 910.12
          },
          "availableBalance": {
            "accountCurrencyAmount": 910.12
          },
          "currentBalance": {
            "accountCurrencyAmount": 910.12
          }
        }
      ]
    }
  • Currency-account activity ledger

    POST /v1/balances/activity/search openbanking

    Pages credits and debits on one currency account — dealReference, creditAmount, details — behind the balance-activity and all-transactions screens.

    Auth: Bearer access token from the signed-in session.

    • accountCurrency
    • balanceActivityType
    • balanceActivityClassification
    • creditAmount
    • creditCurrency
    • details
    • dealReference
    • createdDate
    • cardId
    POST /v1/balances/activity/search HTTP/1.1
    Authorization: Bearer <access-token>
    Content-Type: application/json
    
    {
      "accountCurrency": "USD",
      "cardId": null,
      "balanceActivityType": "Credit",
      "balanceActivityClassification": null
    }
    {
      "items": [
        {
          "creditAmount": 250.0,
          "creditCurrency": "USD",
          "details": "Promotion credit",
          "dealReference": "XE-20261018-88421",
          "createdDate": "2026-10-18T14:22:01Z"
        }
      ]
    }
  • Transfer order detail

    GET /v1/orders/{orderId} openbanking

    Loads one booked transfer by order number — amounts, currencies, recipient, delivery provider and activity status — for the activity-detail screen and share-receipt flow.

    Auth: Bearer access token.

    • contractReference
    • sellAmount
    • receiveAmount
    • sellCcyCode
    • receiveCurrency
    • paymentMethod
    • deliveryProvider
    • recipientAccountName
    • transactionActivityStatus
    • transactionDetailStatus
    • platformTransferId
    • valueDate
    • riaOrderPin
    GET /v1/orders/XE-20261018-88421 HTTP/1.1
    Authorization: Bearer <access-token>
    Accept: application/json
    {
      "contractReference": "XE-20261018-88421",
      "paymentMethod": "DebitCard",
      "sellAmount": 1000.0,
      "receiveAmount": 83120.0,
      "sellCcyCode": "USD",
      "receiveCurrency": "INR",
      "recipientFirstName": "Priya",
      "recipientLastName": "Sharma",
      "recipientAccountName": "Priya Sharma",
      "deliveryProvider": "BankDeposit",
      "transactionType": "Spot",
      "valueDate": "2026-10-19",
      "transactionDate": "2026-10-18T14:22:01Z",
      "platformTransferId": "tr_9f21",
      "actionsRequired": "None",
      "transactionDetailStatus": "InProgress",
      "transactionActivityStatus": "InProgress",
      "riaOrderPin": null
    }
  • Book a money transfer

    POST /v1/remittances openfinance

    Books the locked quote into a live transfer so the creating/summary screens can show contractReference and begin tracking.

    Auth: Bearer access token. Outdated app builds receive an upgrade-required response, and a correlation id header is logged on each booking.

    • caller
    • platformType
    • mobileOSLeadSource
    • quoteId
    • recipientId
    • contractReference
    • platformTransferId
    • transactionActivityStatus
    POST /v1/remittances HTTP/1.1
    Authorization: Bearer <access-token>
    Content-Type: application/json
    X-Correlation-Id: 8c21e4a0-12ab-4cde-9f00-aa11bb22cc33
    
    {
      "caller": "android",
      "platformType": "mobile",
      "mobileOSLeadSource": "app",
      "quoteId": "q_7c90",
      "recipientId": 441982,
      "paymentMethod": "DebitCard"
    }
    {
      "contractReference": "XE-20261018-88421",
      "platformTransferId": "tr_9f21",
      "transactionActivityStatus": "InProgress",
      "sellAmount": 1000.0,
      "receiveAmount": 83120.0
    }
  • Search saved recipients

    POST /v1/recipients/query openfinance

    Pages the signed-in profile’s recipient book — bank country, currency, business/own-account flags and field bag — for the recipient picker and count badge.

    Auth: Bearer access token.

    • filters
    • searches
    • sorts
    • offset
    • limit
    • total
    • id
    • bankCountryCode
    • currencyCode
    • isBusiness
    • isOwnAccount
    • nameVerified
    • fields
    POST /v1/recipients/query HTTP/1.1
    Authorization: Bearer <access-token>
    Content-Type: application/json
    
    {
      "filters": [],
      "searches": [],
      "sorts": [
        {
          "fieldName": "id",
          "sortDirection": "ASC"
        }
      ],
      "offset": 0,
      "limit": 20
    }
    {
      "data": [
        {
          "id": 441982,
          "bankCountryCode": "IN",
          "currencyCode": "INR",
          "isBusiness": false,
          "isOwnAccount": false,
          "nameVerified": true,
          "fields": [
            {
              "name": "accountName",
              "value": "Priya Sharma"
            }
          ]
        }
      ],
      "limit": 20,
      "offset": 0,
      "total": 12
    }
  • List FX rate alerts

    GET /v1/alerts/rates opendata

    Returns saved rate-alert rules (fromCurrency/toCurrency target toAmount) that fire when the mid-market cross hits the Charts-set threshold.

    Auth: Bearer access token. Creating, updating and deleting an alert use the same session on the singular alert resource.

    • id
    • fromCurrency
    • toCurrency
    • fromAmount
    • toAmount
    • status
    GET /v1/alerts/rates HTTP/1.1
    Authorization: Bearer <access-token>
    Accept: application/json
    [
      {
        "id": "alert_12ab",
        "fromCurrency": "USD",
        "toCurrency": "EUR",
        "fromAmount": 1,
        "toAmount": 0.93,
        "status": "Active"
      }
    ]
  • Customer profile and KYC flags

    GET /v1/customers/{customerId} osint

    Loads the signed-in customer — name, email, KYC and document status, country and feature flags — used to gate currency accounts, scheduled payments and send-money.

    Auth: Bearer access token issued by the sign-in call (credentials plus device identification).

    • profileId
    • accountName
    • accountStatus
    • accountKycStatus
    • accountType
    • clientNumber
    • country
    • dateOfBirth
    • email
    • firstName
    • lastName
    • nationality
    • kycRefreshStatus
    • documentStatus
    • balancesEnabled
    • scheduledPaymentEnabled
    GET /v1/customers/1842291 HTTP/1.1
    Authorization: Bearer <access-token>
    Accept: application/json
    {
      "profile": {
        "profileId": 1842291,
        "accountName": "Alex Rivera",
        "accountStatus": "Active",
        "accountKycStatus": "Approved",
        "accountType": "Personal",
        "accountRestricted": false,
        "clientNumber": "XE-88421",
        "country": "US",
        "countryOfBirth": "US",
        "dateOfBirth": "1988-03-12",
        "email": "[email protected]",
        "fullName": {
          "firstName": "Alex",
          "middleName": "",
          "lastName": "Rivera"
        },
        "nationality": "US",
        "occupation": "Engineer",
        "kycRefreshStatus": "Current",
        "documentStatus": "Approved",
        "balancesEnabled": true,
        "scheduledPaymentEnabled": true,
        "maxScheduledPaymentDays": 365,
        "features": {
          "quickTransactionsEnabled": true
        }
      }
    }
  • Scheduled payment queue

    GET /v1/payments/scheduled openbanking

    Pages standing and scheduled transfers, filtering ActionRequired rows for the home badge and scheduled-payments list.

    Auth: Bearer access token; gated by the profile's scheduled-payment feature flag.

    • offset
    • limit
    • contractReference
    • transactionActivityStatus
    • sellAmount
    • receiveAmount
    • sellCcyCode
    • receiveCurrency
    • valueDate
    GET /v1/payments/scheduled?offset=0&limit=50 HTTP/1.1
    Authorization: Bearer <access-token>
    Accept: application/json
    [
      {
        "contractReference": "XE-SCH-10044",
        "transactionActivityStatus": "ActionRequired",
        "sellAmount": 500.0,
        "receiveAmount": 41550.0,
        "sellCcyCode": "USD",
        "receiveCurrency": "INR",
        "valueDate": "2026-11-01"
      }
    ]

Data categories

  • fx-rates
  • quotes
  • balances
  • transactions
  • recipients
  • profiles
  • corridors

Where teams use this data

  • Treasury mid-market tape

    A treasury dashboard polls live USD crosses (rates keyed by ISO code) and historical batchList samples so an FX desk can chart latestRate versus openRate on the same pairs the converter shows, without waiting on a booked transfer.

  • Corridor quote before payout

    A payout engine posts sellCcy/buyCcy/userCountry into a quote, then reads rate, inverseRate, transferFee and paymentMethodFee per settlementMethod to pick bank deposit versus card before it books contractReference.

  • Multi-currency balance sync

    An ERP job lists currencyAccounts (accountCurrency, availableBalance.accountCurrencyAmount) and pages the activity ledger (dealReference, creditAmount, createdDate) to reconcile Xe jars against the general ledger overnight.

  • Transfer ops and KYC gate

    Ops tools load profile accountKycStatus, documentStatus and scheduledPaymentEnabled, then follow transactionActivityStatus and riaOrderPin on each contractReference so cash-pickup exceptions surface before valueDate.

Frequently asked questions

Does Xe expose live FX rates without a transfer login?

Yes. The converter and home-screen widgets send a hashed device token and a currencies list; the response rates map is keyed by ISO code (USD, EUR, INR). Historical Charts use the same device token and return batchList samples.

What fields does a send quote return?

A corridor quote includes sellCcy, buyCcy, rate, inverseRate, sellAmount, buyAmount, transferFee, paymentMethodFee and offeredDeliveryMethods. Each individualQuotes row is one settlementMethod (debit card, bank, balance, open banking).

Can I read multi-currency balances and transfer history?

Signed-in profiles list currencyAccounts with availableBalance.accountCurrencyAmount, page the activity ledger by dealReference, and load a booked send by its order number with contractReference, sellAmount, receiveAmount and transactionActivityStatus.

How does the app authenticate transfer calls?

Sign-in returns a Bearer access token with refresh and ID tokens, alongside a device identifier and device token. Live rates use a hashed device token instead of that Bearer session.

Apps similar to Xe Money Transfer & Currency

  • Wise: International Transfers — Wise (formerly TransferWise) is a London-based international money app that sends transfers to 140-plus countries, holds a multi-currency account and issues a debit card using the mid-market exchange rate.
  • Remitly: Send Money & Transfer — Remitly is an international remittance app that sends money from the United States and 30-plus other countries to more than 175 destinations as bank deposit, cash pickup or mobile wallet.
  • Western Union Send Money Now — Western Union sends funds online, in its app or in person to bank accounts, mobile wallets or cash pickup at agent locations in more than 200 countries and territories.
  • Xoom: Send Money & Transfer — Xoom is PayPal's digital money-transfer service for sending funds from the United States to bank accounts, debit cards, mobile wallets (including UPI and PIX) or cash pickup abroad.
  • Ria Money Transfer — Ria Money Transfer is a Euronet Worldwide subsidiary that specializes in customer-to-customer international remittances through agent locations, stores and a mobile app.
  • WorldRemit — WorldRemit is a London-based digital remittance app, part of the Zepz group, that sends money to more than 130 countries with payout via bank deposit, mobile money, cash pickup or airtime top-up.
  • MoneyGram — MoneyGram is a Dallas-based peer-to-peer money-transfer company that sends funds through agents, financial institutions, online services and mobile wallets in more than 200 countries and territories.
  • OFX — OFX is an Australian international-payments company that moves money for people and businesses across 180-plus countries, with spot transfers, forward contracts, limit orders and rate-alert tools.

Topics

  • Xe API
  • Xe exchange rates
  • Xe money transfer
  • FX quote API
  • multi-currency balance
  • corridor rates
  • Xe currency converter

Need this app's data API integrated?

We deliver scoped integrations for any named app — from USD 500 with source-code handoff, or hosted access billed per call. Tell us the data you need.

  • NDA + SOW on every engagement
  • Delivery in 3–7 days
  • Payment only after acceptance
  • Work scoped to authorized use

Get a quote