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
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/spotopendataReturns 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/historyopendataReturns 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/currenciesopendataLists 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/corridorsopendataReturns 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-destinationsopendataRanks 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/quoteopenfinancePrices 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/accountsopenbankingReturns 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/searchopenbankingPages 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}openbankingLoads 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/remittancesopenfinanceBooks 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/queryopenfinancePages 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/ratesopendataReturns 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}osintLoads 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
- 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/scheduledopenbankingPages 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