Remitly: Send Money & Transfer is the Android client of Seattle-based Remitly, Inc. for people who send money home across corridors — bank deposit, cash pickup, mobile wallet and a Remitly debit card on the receiving side. Senders pick a country pair, see an Economy or Express speed, fund with debit card, bank account, open banking (Plaid in the US, TrueLayer in Europe) or the in-app wallet, and follow the transfer on a money-tracker timeline. The same logged-in shell also holds a USD wallet with Circle USDC balance, Remitly Advance / Flex credit products, a membership and cashback layer, business send, PIX in Brazil and Singpass in Singapore. It competes with Wise, Western Union, MoneyGram, WorldRemit and bank FX desks for migrant and family senders moving funds from the United States and the euro area toward India, Mexico, Brazil, Indonesia, Nigeria and the Gulf.
Send-corridor FX quotes pin baseRate and promotionalExchangeRate against a conduit of source and target currencies, while the recipient book stores preferredDestinationPublicId, relationship and payout institutionCode. Wallet jars expose balance plus a Circle circleBalance; live transfers report pollResultStatus, collectionAmount and a deliveryPromise datetime.
Payroll and gig platforms reconcile those quotes against the ledger, compliance desks ingest the beneficiary register before a family remittance batch, and budgeting clients park the USD jar next to bank accounts. openData Studio turns that corridor, recipient and wallet surface 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.
Bootstrap customer profile
POST
/v1/customers/bootstraposintLoads the signed-in RemitlyCustomer after login — email, birth date, send-country mutability and structured address — used to paint the home shell and KYC gates.
Auth: Bearer access token issued at sign-in; a native auth module holds the session and refreshes it via a dedicated token endpoint.
- id
- emailAddress
- ftt
- birthDate
- sendCountryChangeable
- line1
- city
- country
- postalCode
- subdivision
- firstName
- lastName
POST /v1/customers/bootstrap HTTP/1.1 Authorization: Bearer <accessToken> Content-Type: application/json { "sections": ["identity", "address", "kyc"] }{ "id": "cust_8f21c4a0", "emailAddress": "[email protected]", "ftt": false, "birthDate": "1991-04-18", "sendCountryChangeable": true, "address": { "line1": "1201 2nd Ave", "line2": "Apt 14", "city": "Seattle", "country": "USA", "postalCode": "98101", "subdivision": "WA" }, "name": { "firstName": "Maria", "middleName": "", "lastName": "Santos", "secondLastName": "", "initials": "MS" } }Customer send and receive corridor
POST
/v1/customers/corridoropendataReturns the customer's active send and receive country codes that drive corridor selection on the home FX bar and send flow.
Auth: Bearer access token issued at sign-in; a native auth module holds the session and refreshes it via a dedicated token endpoint.
- id
- sendCountryCode
- receiveCountryCode
POST /v1/customers/corridor HTTP/1.1 Authorization: Bearer <accessToken> Content-Type: application/json { "scope": "active" }{ "id": "cust_8f21c4a0", "sendCountryCode": "USA", "receiveCountryCode": "PHL" }Best corridor FX rate
POST
/v1/fx/quoteopendataQuotes the corridor's baseRate and promotionalExchangeRate for the home FX bar and send-amount calculator, including any first-transfer promotional rate.
Auth: Bearer access token issued at sign-in; a native auth module holds the session and refreshes it via a dedicated token endpoint.
- bestRate
- baseRate
- promotionalExchangeRate
- sourceCurrency
- targetCurrency
- alpha3
- displayCode
- requiredSendAmount
- requiredPaymentMethods
- welcomeMessage
POST /v1/fx/quote HTTP/1.1 Authorization: Bearer <accessToken> Content-Type: application/json { "sourceCountry": "USA", "targetCountry": "PHL", "availablePayInMethods": ["DEBIT_CARD", "BANK_ACCOUNT", "OPEN_BANKING"] }{ "bestRate": { "baseRate": 57.42, "promotionalExchangeRate": 58.1, "sourceCurrency": { "alpha3": "USD", "displayCode": "USD" }, "targetCurrency": { "alpha3": "PHP" } }, "requiredSendAmount": { "amount": "200.00", "currency": "USD" }, "requiredPaymentMethods": [ "DEBIT_CARD" ], "welcomeMessage": "Promotional rate for first-time senders" }Remittance price estimates
POST
/v1/remittances/estimateopenfinanceReturns per-pay-in-method remittance quotes (exchange rate plus fixed and proportional fees) that fill the send-flow calculator and speed merchandising cards.
Auth: Bearer access token issued at sign-in; a native auth module holds the session and refreshes it via a dedicated token endpoint.
- remittanceEstimate
- conduit
- sourceCountry
- targetCountry
- payInMethod
- payInEstimates
- exchangeRate
- baseRate
- finalFeeAmount
- fixedFeeAmount
- proportionalFeeAmount
- proportionalFeePercentage
- payOutMethod
POST /v1/remittances/estimate HTTP/1.1 Authorization: Bearer <accessToken> Content-Type: application/json { "sendAmount": { "amount": "500.00", "currency": "USD" }, "sourceCountry": "USA", "targetCountry": "PHL" }{ "remittanceEstimate": { "conduit": { "sourceCountry": "USA", "sourceCurrency": { "alpha3": "USD" }, "targetCountry": "PHL", "targetCurrency": { "alpha3": "PHP" } }, "payInMethod": "DEBIT_CARD", "payInEstimates": { "estimates": [ { "groupId": "debit-economy", "payInMethod": "DEBIT_CARD", "exchangeRate": { "baseRate": 57.42, "promotionalExchangeRate": 57.42 }, "fee": { "finalFeeAmount": { "amount": "3.99", "currency": "USD" }, "fixedFeeAmount": { "amount": "3.99", "currency": "USD" }, "proportionalFeeAmount": { "amount": "0.00", "currency": "USD" }, "proportionalFeePercentage": 0 } } ] }, "payOutMethod": "BANK_DEPOSIT" } }Initialize send-flow draft
POST
/v1/transfers/draftsopenfinanceCreates the TransactionDraft that carries corridor, destinationType, recipientId and paymentMethod through the send-flow steps until submit.
Auth: Bearer access token issued at sign-in; a native auth module holds the session and refreshes it via a dedicated token endpoint.
- draft
- id
- draftType
- amount
- corridor
- destinationId
- destinationType
- recipientId
- productType
- paymentMethod
- publicId
- institutionCode
- receiveMarket
POST /v1/transfers/drafts HTTP/1.1 Authorization: Bearer <accessToken> Content-Type: application/json { "corridor": "USA-PHL", "destinationType": "BANK_DEPOSIT" }{ "draft": { "id": "draft_9c11e2", "draftType": "REMITTANCE", "amount": { "amount": "500.00", "currency": "USD" }, "corridor": "USA-PHL", "destinationId": "dest_bpi_bank", "destinationType": "BANK_DEPOSIT", "recipientId": "rcpt_4412", "productType": "ECONOMY", "paymentMethod": "DEBIT_CARD" }, "destination": { "id": "dest_bpi_bank", "publicId": "PH-BPI-BANK", "name": "BPI Bank Deposit", "type": "BANK_DEPOSIT", "institutionCode": "BPI", "receiveMarket": { "country": { "alpha3": "PHL" }, "currency": { "alpha3": "PHP" } } } }List recipients
POST
/v1/recipients/searchopenfinanceReturns the customer's recipient book with preferred payout destination, last-sent date and relationship, used by the select-recipient screen.
Auth: Bearer access token issued at sign-in; a native auth module holds the session and refreshes it via a dedicated token endpoint.
- allRecipients
- id
- displayName
- firstName
- lastName
- phoneNumber
- emailAddress
- city
- country
- preferredDestinationPublicId
- preferredSendAmount
- lastSentDate
- productType
- relationship
- isSelf
POST /v1/recipients/search HTTP/1.1 Authorization: Bearer <accessToken> Content-Type: application/json { "receiveCountry": "PHL" }{ "allRecipients": [ { "id": "rcpt_4412", "name": { "displayName": "Ana Reyes", "firstName": "Ana", "lastName": "Reyes" }, "phoneNumber": "+639171234567", "emailAddress": "[email protected]", "address": { "city": "Quezon City", "country": "PHL" }, "preferences": { "preferredDestinationPublicId": "PH-BPI-BANK", "preferredSendAmount": "500.00", "lastSentDate": "2026-09-28T16:04:00Z", "productType": "ECONOMY" }, "relationship": "FAMILY", "isSelf": false } ] }Create recipient
POST
/v1/recipientsopenfinanceAdds a recipient (name, address, phone, relationship) to the book and invalidates the bootstrap recipient cache.
Auth: Bearer access token issued at sign-in; a native auth module holds the session and refreshes it via a dedicated token endpoint.
- createRecipient
- id
- customerID
- firstName
- lastName
- displayName
- line1
- city
- country
- postalCode
- phoneNumber
- relationship
- version
POST /v1/recipients HTTP/1.1 Authorization: Bearer <accessToken> Content-Type: application/json { "name": { "firstName": "Ana", "lastName": "Reyes" }, "address": { "city": "Quezon City", "country": "PHL" }, "phoneNumber": "+639171234567", "relationship": "FAMILY" }{ "createRecipient": { "id": "rcpt_4412", "customerID": "cust_8f21c4a0", "name": { "firstName": "Ana", "lastName": "Reyes", "displayName": "Ana Reyes" }, "address": { "line1": "14 Maginhawa St", "city": "Quezon City", "country": "PHL", "postalCode": "1101" }, "phoneNumber": "+639171234567", "relationship": "FAMILY", "version": 1 } }List transfers
POST
/v1/transfers/searchopenbankingPages the customer's remittance history (TransfersConnection) for the activity and home transfer lists.
Auth: Bearer access token issued at sign-in; a native auth module holds the session and refreshes it via a dedicated token endpoint.
- transfers
- edges
- cursor
- node
- id
- pageInfo
- hasNextPage
- endCursor
POST /v1/transfers/search HTTP/1.1 Authorization: Bearer <accessToken> Content-Type: application/json { "first": 20, "filters": {} }{ "transfers": { "edges": [ { "cursor": "cursor_01", "node": { "id": "txn_7b90" } }, { "cursor": "cursor_02", "node": { "id": "txn_7b91" } } ], "pageInfo": { "hasNextPage": true, "endCursor": "cursor_02" } } }Transfer status poll
POST
/v1/transfers/statusopenbankingPolls a transfer's live status (pollResultStatus, displayType) and any client action such as open-banking authentication, used by the money-tracker screen.
Auth: Bearer access token issued at sign-in; a native auth module holds the session and refreshes it via a dedicated token endpoint.
- id
- pollResultStatus
- displayType
- retryErrorCode
- authenticationType
- errorKey
- message
- transferClientAction
- code
- paymentId
- tokenId
- sessionId
POST /v1/transfers/status HTTP/1.1 Authorization: Bearer <accessToken> Content-Type: application/json { "id": "txn_7b90" }{ "transfer": { "id": "txn_7b90", "status": { "pollResultStatus": "IN_PROGRESS", "displayType": "DELIVERING", "retryErrorCode": null, "authenticationType": "OPEN_BANKING", "transferErrorDetails": null, "transferClientAction": { "code": "COMPLETE_PAYMENT", "details": "Awaiting bank authorization", "resource": "ob-session-aa12", "metadata": { "product": "REMITTANCE", "paymentId": "pay_991", "tokenId": "tok_ob_14", "sessionId": "sess_ob_9" } } } } }Transfer details
POST
/v1/transfers/detailsopenbankingLoads a single transfer's send/receive amounts, collectionAmount, conduit and deliveryPromise for the transfer-details receipt screen.
Auth: Bearer access token issued at sign-in; a native auth module holds the session and refreshes it via a dedicated token endpoint.
- id
- amount
- converted
- input
- collectionAmount
- conduit
- deliveryPromise
- datetime
- template
- recipient
- relationship
- displayName
- phoneNumber
POST /v1/transfers/details HTTP/1.1 Authorization: Bearer <accessToken> Content-Type: application/json { "transferId": "txn_7b90", "includeSmartRate": true }{ "transfer": { "id": "txn_7b90", "amount": { "converted": { "amount": "28710.00", "currency": "PHP" }, "input": { "amount": "500.00", "currency": "USD" } }, "collectionAmount": { "amount": "503.99", "currency": "USD" }, "conduit": "USA-PHL", "deliveryPromise": { "datetime": "2026-10-17T08:00:00Z", "template": "MINUTES" }, "recipient": { "id": "rcpt_4412", "relationship": "FAMILY", "name": { "displayName": "Ana Reyes", "firstName": "Ana", "lastName": "Reyes" }, "phoneNumber": "+639171234567" } } }Wallet account balance
POST
/v1/wallets/accounts/balanceopenbankingReads a Remitly wallet account's current balance and currency for the wallet home and spend screens.
Auth: Bearer access token issued at sign-in; a native auth module holds the session and refreshes it via a dedicated token endpoint.
- wallet
- account
- id
- balance
- currency
POST /v1/wallets/accounts/balance HTTP/1.1 Authorization: Bearer <accessToken> Content-Type: application/json { "accountId": "acct_wallet_usd", "includeDeletedRelations": false }{ "wallet": { "account": { "id": "acct_wallet_usd", "balance": "245.80", "currency": "USD" } } }Wallet home snapshot
POST
/v1/wallets/overviewopenbankingReturns the wallet home snapshot: activation flag, profile, filteredAccounts (balance/currency/state) and circleBalance for the stablecoin jar.
Auth: Bearer access token issued at sign-in; a native auth module holds the session and refreshes it via a dedicated token endpoint.
- isUserActivated
- profile
- firstName
- lastName
- accounts
- id
- balance
- currency
- accountName
- state
- accountType
- circleBalance
POST /v1/wallets/overview HTTP/1.1 Authorization: Bearer <accessToken> Content-Type: application/json {}{ "wallet": { "isUserActivated": true, "profile": { "id": "prof_88", "status": "ACTIVE", "firstName": "Maria", "lastName": "Santos", "email": "[email protected]" }, "accounts": [ { "id": "acct_wallet_usd", "balance": "245.80", "currency": "USD", "accountName": "Remitly USD", "state": "OPEN", "accountType": "STANDARD" } ], "circleBalance": { "balance": "0.00", "currency": "USDC" } } }Open banking providers
POST
/v1/payin/bank-providersopenbankingLists bank institutions (Plaid / TrueLayer) the customer can pay in from, with per-corridor transactionLimit text for the open-banking picker.
Auth: Bearer access token issued at sign-in; a native auth module holds the session and refreshes it via a dedicated token endpoint.
- openBankingProviders
- items
- name
- countryCode
- institutionOrNetworkCode
- status
- networkScheme
- circularLogoUrl
- displayedLimitText
POST /v1/payin/bank-providers HTTP/1.1 Authorization: Bearer <accessToken> Content-Type: application/json { "country": "USA", "currency": "USD", "payInMethod": "OPEN_BANKING", "sendAmount": { "amount": "500.00", "currency": "USD" } }{ "openBankingProviders": { "items": [ { "name": "Chase", "countryCode": "USA", "institutionOrNetworkCode": "ins_chase", "status": "AVAILABLE", "networkScheme": "PLAID", "circularLogoUrl": "https://cdn.example.com/banks/chase.svg", "rectangularLogoUrl": "https://cdn.example.com/banks/chase.svg", "transactionLimit": { "status": "OK", "displayedLimitText": "Up to $2,999 per transfer" } } ] } }Payment instruments
POST
/v1/payin/instrumentsopenbankingLists saved pay-in instruments (debit cards, bank accounts) with paymentsAvailableAfter, used by the payment-method picker.
Auth: Bearer access token issued at sign-in; a native auth module holds the session and refreshes it via a dedicated token endpoint.
- financialInstruments
- resourceName
- legacyId
- paymentsAvailableAfter
- deletedAt
- updatedAt
POST /v1/payin/instruments HTTP/1.1 Authorization: Bearer <accessToken> Content-Type: application/json { "country": "USA", "currency": "USD", "type": [ "DEBIT_CARD", "BANK_ACCOUNT" ] }{ "financialInstruments": [ { "resourceName": "fi/card_visa_4412", "legacyId": "pp_debit_19", "paymentsAvailableAfter": "2026-10-16T12:00:00Z", "deletedAt": null, "updatedAt": "2026-10-12T09:14:00Z" } ] }Remittance wallet
POST
/v1/wallets/remittanceopenbankingReads the remittance-wallet jar (authorizing vs resolved balance and default payout institution) used when sending from wallet instead of a card.
Auth: Bearer access token issued at sign-in; a native auth module holds the session and refreshes it via a dedicated token endpoint.
- remittanceWallet
- resourceName
- owner
- currency
- status
- defaultPayout
- method
- institution
- authorizingBalance
- resolvedBalance
POST /v1/wallets/remittance HTTP/1.1 Authorization: Bearer <accessToken> Content-Type: application/json { "customerResourceName": "customers/cust_8f21c4a0" }{ "remittanceWallet": { "resourceName": "remittanceWallets/rw_88", "owner": "customers/cust_8f21c4a0", "currency": "USD", "status": "ACTIVE", "defaultPayout": { "country": "PHL", "currency": "PHP", "method": "BANK_DEPOSIT", "institution": "BPI" }, "balance": { "currency": "USD", "authorizingBalance": { "amount": { "amount": "245.80", "currency": "USD" } }, "resolvedBalance": { "amount": { "amount": "245.80", "currency": "USD" } } } } }
Data categories
- balances
- transactions
- fx-rates
- recipients
- kyc-profile
- open-banking
Where teams use this data
Corridor FX and fee reconciliation
Treasury jobs pull BestFxRate and PriceMerchandisingEstimates nightly, matching baseRate, promotionalExchangeRate and finalFeeAmount against the ledger so a payroll or gig platform can show the same USD→PHP quote the sender saw in the calculator.
Recipient payout book for compliance
A compliance desk syncs GetAllRecipients — displayName, relationship, preferredDestinationPublicId, city and country — into its beneficiary register before releasing a batch of family remittances.
Wallet balance for personal-finance apps
A budgeting client reads WalletAccountBalance and WalletHomeData (balance, currency, circleBalance, accountType) so the customer's Remitly USD jar and USDC circle sit next to their bank accounts.
Transfer tracking for support and ERP
Support bots poll GetTransferStatus for pollResultStatus and transferClientAction, then open TransferDetailsScreen for collectionAmount, conduit and deliveryPromise when a sender asks where the money is.
Frequently asked questions
What customer fields does the bootstrap call return?
The customer bootstrap returns the signed-in profile: id, emailAddress, birthDate, sendCountryChangeable and a structured address (line1, city, country, postalCode, subdivision) plus name.firstName / lastName — the same record the corridor call later reduces to sendCountryCode and receiveCountryCode.
How are FX quotes and fees split?
The corridor rate call exposes the corridor's baseRate and any promotionalExchangeRate. The remittance estimate call then attaches per-pay-in-method fees: finalFeeAmount, fixedFeeAmount, proportionalFeeAmount and proportionalFeePercentage, with sourceCountry / targetCountry on the conduit.
Can I read wallet balance and transfer tracking, not just quotes?
Yes. The wallet balance call returns account.balance and currency, and the wallet overview adds filteredAccounts and circleBalance. A transfer status poll returns pollResultStatus and transferClientAction, and the transfer details call adds collectionAmount, conduit and deliveryPromise.
How does the app authenticate these calls?
Every call sends an Authorization: Bearer access token minted at sign-in; a native session module refreshes the token in the background. Open-banking pay-in still goes through Plaid or TrueLayer after the customer picks an institutionOrNetworkCode.
Apps similar to Remitly: Send Money & Transfer
- Wise: International Transfers — Wise (formerly TransferWise) is a London-based international money app that sends and receives across currencies and holds a multi-currency account with local bank details.
- Western Union — Western Union is a Denver-based money-transfer company whose app sends remittances to bank accounts, mobile wallets or cash-pickup locations in 200+ countries and territories.
- MoneyGram — MoneyGram is a Dallas-based peer-to-peer money-transfer service that sends funds in-app, online or in person to a bank account, wallet or cash pickup in more than 200 countries and territories.
- WorldRemit — WorldRemit is a London-based digital remittance app that sends money to 130+ countries, with payout via bank deposit, mobile money, cash pickup or airtime top-up.
- Xoom — Xoom is PayPal's international money-transfer service that sends funds from the United States, Canada, the United Kingdom and select European countries to bank accounts, mobile wallets or cash pickup in 160 countries.
- 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 covering 190+ countries.
- Sendwave — Sendwave is a Zepz mobile remittance app that sends from North America, Europe and Asia to mobile wallets and bank accounts in Africa, Asia and other emerging markets.
- Taptap Send — Taptap Send is an international remittance app for corridors into Africa, Asia and Latin America, with payout as bank deposits, mobile money or cash pickups.
Topics
- Remitly API
- remittance data API
- sendCountryCode
- baseRate
- wallet balance
- recipient payout
- open banking Remitly
- collectionAmount
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