Make a cross-border FX payout
This section describes how digital platforms such as marketplaces, SaaS, e-commerce and fintech companies can use J.P. Morgan Embedded Payments (EP) APIs to convert and settle cross-currency payouts directly into a recipient’s local bank account. The payout is funded from the EP limited or transaction account and delivered to the designated payee (recipient).
Use this section when:
- The funding account is held in one currency (such as USD) and the payee (recipient) is paid in another currency (such as EUR, GBP, INR) in their local bank account.
- You want J.P. Morgan to apply the Foreign Exchange (FX) rate and settle the local currency payouts.
Do not use this section when:
- Both payouts are in the same currency. For more information, see Payouts.
- You are moving funds between two of your own EP accounts. For more information, see Initiate transfers.
Before you begin
For limited accounts
- Onboard to Embedded Payments and complete client onboarding.
- Collect the additional KYC fields required for cross-border payouts from your client.
- Real-time market rates and pre-agreed rates are available. Integrate with FX Rate Sheet API, if you want pre-agreed rates.
- Subscribe to webhooks for
TRANSACTION_COMPLETEDandTRANSACTION_FAILED.
For transaction accounts
- Onboard to Embedded Payments with transaction account in funding currency with sufficient balance.
- Real-time market rates and pre-agreed rates are available. Integrate with FX Rate Sheet API, if you want pre-agreed rates.
- Subscribe to webhooks for
TRANSACTION_COMPLETEDandTRANSACTION_FAILED.
Sequence diagram
Rail eligibility
In the U.S., wire is used for higher-value FX payouts and ACH is used for lower-value payouts. As the product expands globally, we may add additional payment rails. The following table summarizes the available FX payment rails, their intended use cases and typical settlement timelines.
| Payment rail | Use case | Settlement period |
|---|---|---|
| FX Low-value (e.g. ACH) | Non-urgent cross-currency payouts | Two to five business days |
| FX High-value (e.g. Wire) | Time-critical cross-currency payouts | Same or next business day |
Availability
FX payout is available from the New York (NY) branch with USD as the debit currency. The following table lists the supported payout destinations and credit currencies by region, along with the available rails for limited and transaction accounts.
| Regions | Countries | Credit currencies | Limited accounts | Transaction accounts |
|---|---|---|---|---|
| North America (NAMR) | Canada |
CAD | - | ACH |
| Asia-Pacific (APAC) | Australia | AUD | Wire, ACH | Wire, ACH |
| Hong Kong | HKD | Wire, ACH | Wire, ACH | |
| India | INR | Wire, ACH | Wire, ACH | |
| Philippines | PHP | Wire, ACH | Wire, ACH | |
| South Korea | KRW | Wire | Wire | |
| Singapore | SGD | ACH | ACH | |
| Vietnam | VDN | Wire | Wire | |
| Europe, Middle East, and Africa (EMEA) | EU | EUR | Wire | Wire |
| Poland | PLN | ACH | ACH | |
| Romania | RON | ACH | ACH | |
| Sweden | SEK | - | ACH | |
| United Arab Emirates | AED | ACH | ACH | |
| United Kingdom | GBP | Wire | ACH | |
| Latin America (LATAM) | Brazil | BRL | Wire | Wire |
| Mexico | MXN | Wire | Wire |
Account eligibility
The following table shows which EP account types support FX payouts and the required beneficiary model:
| Account type | FX payout | Beneficiary model |
|---|---|---|
| TRANSACTION_ACCOUNT | Supported | Inline payee (creditorPayee) required. No pre-registered recipient needed. |
LIMITED_DDA_PAYMENTS |
Supported, if FX capability is enabled. | Registered recipient (creditorRecipientId) required. |
| LIMITED_DDA | Not supported | - |
| PROCESSING, MANAGEMENT, DEFAULT, OFFSET | Not supported | - |
How it works
1. Create payee (one-time setup for LIMITED_ACCOUNTS only): Use POST /recipients to create a payee with the target currency specified in account.currencyCode. The payee's currency determines the target for automatic FX conversion. Save the recipientId returned in the response for use in transactions.
2. Subscribe to webhooks (one-time setup): Use POST /webhooks to set up webhook subscriptions. Subscribe to transaction events (TRANSACTION_COMPLETED and TRANSACTION_FAILED) to receive status updates with FX details.
3. Obtain rates: Use the FX real-time market rate or Rate Sheet API to retrieve your current rate sheet with pre-agreed exchange rates for supported currencies. The rates are valid for 24 hours. Extract the rateId for your desired currency to lock in the pre-agreed rate.
4. Initiate FX transaction: Use POST /transactions with the recipientId to create a transaction. Specify the amount in USD. The Embedded Payments platform automatically retrieves the current exchange rate for the payee's target currency, applies the FX conversion, and returns both the USD amount and converted target amount with exchange rate details.
5. Receive FX payment details: The transaction response includes, targetAmount (amount the payee receives in their local currency), targetCurrency (payee's currency code) and fxInformation (exchange rate, contract ID, rate ID and spread details) along with standard transaction fields and status.
Implementation
Use the following section to implement each step. It includes prerequisites, required fields and sample API requests and responses.
1. Create payee
For platforms creating registered payee (LIMITED_DDA_PAYMENTS only)
To send FX payouts, you must create payee with the correct currency and country information using the POST /recipients API. The payee's currencyCode and countryCode determine the target currency for FX conversion. Once you create a payee, you can reuse them for multiple transactions, and their currency preferences are automatically applied to all payouts.
In addition to standard payee (recipient) fields, you must include the following FX-specific fields:
account.currencyCode: The currency code for FX conversion target currency (for example, "HKD", "GBP"). This is a critical field for enabling FX payouts.account.countryCode: The alpha-2 country code where the bank account is located. (for example, "HK")account.routingInformation: An array of routing objects withroutingNumber,transactionType, androutingCodeType.partyDetails.address.countryCode: The country code for payee's physical address.
For FX cross-border payouts, you are required to collect additional Know Your Customer (KYC) information from your clients to process transactions. For more information on the required fields and compliance details, contact us.
2. Subscribe to webhooks
To receive real-time notifications for FX payout events, subscribe to webhooks through the developer portal. Once subscribed, your endpoint receives HTTP POST requests whenever a payout event is triggered, such as payment initiation, status updates or failures.
Use POST /webhooks to set up webhook subscriptions. For more information, see Notifications.
Sample response:
{
"eventId": "5123",
"eventType": "TRANSACTION_COMPLETED",
"resourceType": "TRANSACTIONS",
"resource": "{\"id\":\"8JJOCLKW3c1sIOp\",\"clientId\": \"1000010400\",\"transactionReferenceId\": \"34jsa668931301jkp\",\"type\":\"ACH\",\"debtorAccountId\":\"d5aaf0db11e747daa2d955806f6eb14e\",\"recipientId\": \"d9dab78e-e366-4dde-ac9d-fb3f9d48437b\",\"amount\":\"20.88\",\"currency\":\"USD\",\"status\":\"COMPLETED\",\"targetAmount\":\"724.38\",\"targetCurrency\":\"INR\",\"fxInformation\":{\"exchangeRate\":\"34.477678\",\"contractId\":\"00490202\",\"rateId\":\"R1C8E57DF6964F981D6DDB5EEf78D8\",\"clientSpread\":\"0.500000\"},\"paymentDate\":\"2024-04-23\",\"ledgerBalance\":\"10.00\"}",
"resourceObject": {
"id": "8JJOCLKW3c1sIOp",
"clientId": "1000010400",
"transactionReferenceId": "34jsa668931301jkp",
"type": "ACH",
"debtorAccountId": "d5aaf0db11e747daa2d955806f6eb14e",
"recipientId": "d9dab78e-e366-4dde-ac9d-fb3f9d48437b",
"amount": "20.88",
"currency": "USD",
"status": "COMPLETED",
"targetAmount": "724.38",
"targetCurrency": "INR",
"fxInformation": {
"exchangeRate": "34.477678",
"contractId": "00490202",
"rateId": "R1C8E57DF6964F981D6DDB5EEf78D8",
"clientSpread": "0.500000"
},
"paymentDate": "2024-04-23",
"ledgerBalance": "10.00"
}
}3. Obtain rates
Using FX Ratesheet API
The FX Ratesheet API is a separate API that provides foreign exchange rates for cross-border payouts. You can use FX Rate Sheet API to retrieve rate sheets with pre-agreed exchange rates, or you can process transactions at real-time market rate.
To use a pre-agreed rate:
- Call the FX Rate Sheet API to retrieve your current rate sheet.
- Extract the
rateIdfor your currency. - Include the
rateIdin your transaction request.
For complete API specifications, authentication details, and integration instructions, see the FX Rate Sheet API.
4. Initiate FX transactions
Payout with a registered payee
Once you have created a payee (recipient) with currency information, you can initiate cross-border payouts using POST /transactions. The system performs currency conversion based on the payee's currencyCode.
There are two options for obtaining an FX rate when initiating a transaction:
- Real-time market rates: Omit the rateId field and the transaction processes at the current real-time market rate.
- Pre-agreed rates via FX Rate Sheet API: Retrieve a rate sheet, extract the
rateId, and include it in your transaction request to lock in a pre-agreed rate. See the FX Rate Sheet API for details.
Sample request (with pre-agreed rate):
{
"transactionReferenceId": "fxtxn20260110001",
"amount": 11,
"currency": "USD",
"type": "ACH",
"recipientId": "400e06ed-1745-4051-a1ed-5e4f751b6528",
"debtorAccountId": "c3a9b877ab4647e6a9eff2cfd7ee6764",
"targetCurrency": "AUD",
"memo": "Invoice",
"fxInformation": {
"rateId": "R1C8E57DF6964F981D6DDB5EEF78D8"
}
}If you do not have a pre-agreed rate or prefer real-time pricing, omit the rateId field and the transaction processes at the current real-time market rate.
Sample request (with real-time market rate):
{
"transactionReferenceId": "fxtxn20260110001",
"amount": 11,
"currency": "USD",
"targetCurrency": "AUD",
"type": "ACH",
"recipientId": "400e06ed-1745-4051-a1ed-5e4f751b6528",
"debtorAccountId": "c3a9b877ab4647e6a9eff2cfd7ee6764",
"memo": "Invoice",
}Sample response:
{
"id": "8h1MiAA97hS7vm6",
"transactionReferenceId": "fxtxn20260110001",
"status": "PENDING",
"type": "ACH",
"debtorAccountId": "c3a9b877ab4647e6a9eff2cfd7ee6764",
"creditorAccountId": null,
"amount": 11,
"currency": "USD",
"localInstrumentCode": null,
"createdAt": "2026-06-05T11:40:43Z",
"targetCurrency": "AUD",
"targetAmount": null,
"recipientId": "400e06ed-1745-4051-a1ed-5e4f751b6528",
"memo": "/PRN/40000000010794",
"fxInformation": null,
"debtorName": "EDOARDO FINANCE INTEGRATION",
"creditorName": "Oil Yc Industry",
"debtorAccountNumber": "...0794",
"creditorAccountNumber": "...3456",
"paymentDate": "2026-01-29"
}Payout with an unregistered payee
Sample request:
{
"transactionReferenceId": "fxwire202617",
"type": "WIRE",
"memo": "Memo for Transaction EP-POWIRE",
"currency": "USD",
"executionDate": "2025-10-31",
"amount": 1.23,
"debtor": {
"account": {
"type": "REGISTERED_ACCOUNT",
"registeredAccount": {
"id": "c3a9b877ab4647e6a9eff2cfd7ee6764"
}
}
},
"creditor": {
"id": "3301d211-81ad-4e68-a54e-1c4906312808"
}
}Sample response:
{
"id": "8KDwH10a5WuIgbCf",
"transactionReferenceId": "fxwire202617",
"requestedExecutionDate": "2026-01-02"
}5. Receive FX payment details
After the transaction is processed, use GET /transactions/{transactionId} to retrieve the complete transaction details including FX conversion information.
Sample response:
{
"transactionReferenceId": "d5205014630d4816a5f3d0013577503e",
"id": "lQJw2nCKrKBATl8",
"status": "COMPLETED",
"type": "ACH",
"requestedExecutionDate": "2025-12-31",
"valueDate": "2025-12-31",
"localInstrumentCode": "PPD",
"memo": "Memo for Transaction EP-AUD",
"amount": "9.99",
"rateId": "R1C8E57DF6964F981D6DDB5EEF78D8",
"currency": "USD",
"debtor": {
"clientId": "1000014199",
"partyDetails": {
"name": "ewallet",
"address": {
"buildingNumber": "1605",
"streetName": "Anywhere St",
"city": "Phoenixville",
"country": "US",
"countrySubDivision": "NY",
"postalCode": "012345"
}
},
"account": {
"type": "REGISTERED_ACCOUNT",
"registeredAccount": {
"id": "c3a9b877ab4647e6a9eff2cfd7ee6764",
"number": "...0794",
"ledgerBalance": "71178.91",
"postingVersion": 238
}
}
},
"creditor": {
"partyDetails": {
"name": "ewallet creditor",
"address": {
"buildingNumber": "1605",
"streetName": "Briarwood Ct",
"city": "Phoenixville",
"country": "US",
"countrySubDivision": "NY",
"postalCode": "19460"
}
},
"account": {
"type": "CHECKING",
"externalAccount": {
"number": "...8800",
"bankName": "WALLET BANK",
"routingInformation": [
{
"routingNumber": "CHASUS33XXX",
"transactionType": "ACH",
"routingCodeType": "BIC"
}
],
"currency": "USD",
"country": "US"
}
}
}
}Reconciliation and reporting
Reconciliation and reporting capabilities are available. To learn more or get started, contact us.