# JPMC-PDP Documentation from https://developer.payments.jpmorgan.com # ACH FX: Send low-value funds in a different currency ## Overview An ACH Foreign Exchange (ACH FX) transaction is a transfer of low-value funds using ACH payment rails ([US ACH](/docs/treasury/jp-morgan-wallet/capabilities/payments/outgoing/payout-us-ach), [UK BACS](/docs/treasury/jp-morgan-wallet/capabilities/payments/outgoing/payout-uk-bacs), and [EU SEPA](/docs/treasury/jp-morgan-wallet/capabilities/payments/outgoing/payout-eu-sepa)) where the funds are converted from one currency to another. When you execute an ACH FX transaction, funds don't actually move between countries. Instead, the debtor account is debited using its local clearing system, and the creditor account is credited using its local clearing system. For example, you can request a PayOut transaction from a J.P. Morgan Wallet™ Demand Deposit Account (DDA) in the US, where the funds are in USD, to a DDA in the UK, where the funds are converted to GBP. US ACH debits the US DDA and UK BACS credits the UK DDA. For an overview of payment types in Wallet, see [Payments](/docs/treasury/jp-morgan-wallet/capabilities/payments/overview). ### Supported use cases You can use ACH FX to send funds in one currency and convert them to another currency. For example: - Business paying international suppliers: A business in the US with funds in USD can use ACH FX to pay a supplier in the UK in GBP. - Marketplace paying international sellers: A marketplace in the UK with funds in GBP can use ACH FX to pay a seller in Luxembourg in EUR. - Employer paying international employees: An employer in Luxembourg with funds in EUR can use ACH FX to pay an employee in the US in USD. ### Key information The following table describes important information about ACH FX. **Key information for ACH FX** | Production endpoint | v3.x: https://apigateway.jpmorgan.com/tsapi/v3/jpmwallet/payments/advanced-batch Use if you need to send funds from Japan or handle BGN currency. | v2.x: https://apigateway.jpmorgan.com/tsapi/v2/jpmwallet/payments/advanced-batch Use if you don't require v3. | | --- | --- | --- | | Client testing endpoint | v3.x: https://apigatewaycat.jpmorgan.com/tsapi/v3/jpmwallet/payments/advanced-batch | v2.x: https://apigatewaycat.jpmorgan.com/tsapi/v2/jpmwallet/payments/advanced-batch | | API reference | v3.x: [Initiate one or many PayOuts](/api/treasury/jp-morgan-wallet/doc#/operations/generatePayoutBatchTransactions) | v2.x: [Initiate one or many PayOuts](/api/treasury/jp-morgan-wallet/doc-2#/operations/generatePayoutBatchTransactions) | | Supported branches | All Wallet-supported J.P. Morgan Chase branches (see [Reference - Supported branches and their BICs](/docs/treasury/jp-morgan-wallet/reference#supported-branches-and-their-business-identifier-codes-bics)) | | Supported currencies | All currencies supported by each branch (see [Reference - Supported account currencies by branch](/docs/treasury/jp-morgan-wallet/reference#supported-account-currencies-by-branch)) | | Supported account types | All (Demand Deposit Account - DDA and Customer Money Account - CMA) | | Payment type | - PayOut | | Payment flows | - Domestic, same currency: N/A - Domestic, Foreign Exchange (FX): Check supported currencies for each branch (see [Reference - Supported account currencies by branch](/docs/treasury/jp-morgan-wallet/reference#supported-account-currencies-by-branch)) - Cross-border, same currency: N/A - Cross-border, FX: Check supported currencies for each branch (see [Reference - Supported account currencies by branch](/docs/treasury/jp-morgan-wallet/reference#supported-account-currencies-by-branch)) | | Transaction limit | - US ACH: No default limit - UK BACS: £20,000,000 - EU SEPA: No default limit | | Cut-off time | - US ACH: 2:00pm ET on business days - UK BACS: 7:00pm GMT on business days - EU SEPA: 2:00pm local time on business days | | Settlement period | - US ACH: 1-2 business days - UK BACS: 3 business days - EU SEPA: 2 business days | | Returns, recalls, and reversals | - US ACH: Supports returns initiated within two business days of the transaction settlement date. - UK BACS: Not supported - EU SEPA: Supports returns initiated within eight weeks of the transaction settlement date. | | Service level code | - US ACH: Set serviceLevel.proprietary to NURGFX - UK BACS: Set serviceLevel.proprietary to NURGFX - EU SEPA: Set serviceLevel.proprietary to SEPAFX | ### Prerequisites Before you can execute ACH FX transactions, you must configure your Wallet program for ACH FX. If you are transferring funds to another country, your Wallet program must have cross-border payments enabled. For more information, ask your J.P. Morgan representative. ### Reporting ACH FX transactions appear on your daily **TRANSACTION ACTIVITY** reports. The following table is an example of what an ACH FX transaction on a **TRANSACTION ACTIVITY** report might look like. Note the following rows that provide information about the FX transaction: - FX EXECUTION DATE/TIME: The date and time when Wallet executed the FX transaction. - EXECUTED RATE: The exchange rate at which Wallet executed the FX transaction. - BANK FX RATE: The bank's exchange rate, which is the final rate that is used when converting the funds. **TRANSACTION ACTIVITY report example** | CLIENT ID | 0001318690 | | --- | --- | | PROGRAM ID | 1000000003 | | BUSINESS PROCESSING DATE | 3/10/2026 | | BANK NAME | JPM New York | | WALLET DDA NUMBER | XXXXXXXXXX | | WALLET CURRENCY | USD | | RECEIVED DATE | 3/10/2026 | | REQUESTED VALUE DATE | 3/10/2026 | | VALUE DATE | 3/10/2026 | | CLIENT TXN ID | 20260310002801820 | | TXN TYPE | PAYOUT | | DEBTOR ACCOUNT | XXXXXXXXXX | | DEBTOR NAME | ewallet | | DEBTOR VIRTUAL ACCOUNT ID | SANGITA-VA-04 | | DEBTOR AGENT | JPMORGAN CHASE BANK N.A. | | DEBTOR AGENT ID | CHASUS33XXX | | DEBIT AMOUNT | 2.12 | | DEBIT CURRENCY | USD | | CREDITOR ACCOUNT | XXXXXXXXXX | | CREDITOR NAME | Corporate Beneficiary Name | | CREDITOR AGENT ID | CHASDEFX | | CREDIT AMOUNT | 1.77 | | CREDIT CURRENCY | EUR | | STATUS | COMPLETED | | SETTLEMENT METHOD | ACHFX | | PRN | XXXXXXXXXX | | REMITTANCE INFO | Remittance text 123456 | | BATCH ID | 20260310002801820 | | FX EXECUTION DATE/TIME | 2026-03-10T04:28:35.000+0000 | | EXECUTED RATE | 1.200975 | | BANK FX RATE | 1.1865 | | BANK SPREAD AMOUNT | 0 | | MATCHED REFERENCE ID | MMK4MBFJ3S03 | | DDA NARRATIVE | Remittance text 123456 | ### Equivalent amount versus instructed amount When you send funds, you specify both the *debit currency* (the currency of the funds in the debtor account) and the *credit currency* (the currency of the funds in the creditor account). For example, if you are converting funds from USD to GBP, the debit currency would be USD and the credit currency would be GBP. You can specify the amount of funds to send in two ways: - Equivalent amount: You specify the amount of funds in the debit currency in amount.equivalentAmount. Wallet automatically determines the amount in the credit currency. For example, send 100 USD and allow Wallet to determine the credit amount in GBP. - Instructed amount: You specify the amount of funds in the credit currency in amount.instructedAmount. Wallet automatically determines the amount in the debit currency. For example, send 100 GBP and allow Wallet to determine the debit amount in USD. You cannot specify both `equivalentAmount` and `instructedAmount`. To specify `instructedAmount`, contact your J.P. Morgan representative. ### Fixed rate versus spot rate You can choose to convert funds in two ways: - Fixed rate: Agree upon an exchange rate with us before making the transaction. This rate is available for a specific amount of time and can be used for multiple transactions. We provide you with a rate ID that you can use to lock in the exchange rate when you make the transaction. You provide the rate ID in the exchangeRateInformation.contractIdentification body parameter. - Spot rate: Use the current exchange rate at the time that you execute the transaction. ## Important parameters The following sections list important parameters in the ACH FX PayOut request along with their requirements. Not all parameters are listed here—for a complete list, see the API reference. ### Header parameters Include the following parameters in the header. **Header parameters for ACH FX PayOut request** | Parameter | Required / Optional | Description | | --- | --- | --- | | programId | Required | Your Wallet program ID. | | transactionType | Required | The type of transaction. Set to PAYOUT if you are transferring funds to an external DDA. | ### Body parameters Note the following important parameters for ACH FX PayOut transactions. #### groupHeader The `groupHeader` object contains information about the batch of transactions. **Important body parameters in groupHeader object** | Parameter | Required / Optional | Description | | --- | --- | --- | | controlSum | Optional | Sum of the transaction amounts in the request. | | creationDateTime | Required | Date and time when the batch was created. Must be in local time with the time zone offset to UTC in the following format: YYYY-MM-DDThh:mm:ss±hh:mm | | initiatingParty.name | Conditionally required | Name of the initiating party (you). Maximum 35 characters. At least one parameter in initiatingParty is required. | | messageIdentification | Required | Unique ID of the batch of transactions. Maximum 35 characters. | | numberOfTransactions | Required | Total number of transactions in the batch. Must be 1-500. | The following code snippet is an example of the `groupHeader` object. ```json { "groupHeader": { "messageIdentification": "X20240614010327", "creationDateTime": "2024-06-14T13:03:27-04:00", "numberOfTransactions": 1, "controlSum": 0.05, "initiatingParty": { "name": "JPMC Client Name" } } } ``` #### paymentInformation The `paymentInformation` object contains parameters related to the payment. **Important parameters in paymentInformation object** | Parameter | Required / Optional | Description | | --- | --- | --- | | controlSum | Optional | Sum of the transaction amounts in the batch. | | numberOfTransactions | Optional | Total number of transactions in the batch. Must be 1-500. | | paymentInformationIdentification | Required | Unique ID of the payment. Maximum 35 characters. | | paymentMethod | Required | Set to TRF. For more information about payment methods, see [Payments - Payment methods](/docs/treasury/jp-morgan-wallet/capabilities/payments/overview#payment-methods). | | paymentTypeInformation.instructionPriority | Optional | Priority of the request. Must be one of the following: - HIGH: High priority. - NORM: Normal priority. | | paymentTypeInformation.serviceLevel.proprietary | Required | Set to one of the following values depending on the payment rail: - US ACH: NURGFX - UK BACS: NURGFX - EU SEPA: SEPAFX | | requestedExecutionDate | Required | Date when the transaction should be executed in YYYY-MM-DD format. Can be up to seven business days in the past (T-7) or 90 business days in the future (T+90). | The following code snippet is an example of the `paymentInformation` object. ```json { "paymentInformation": { "paymentInformationIdentification": "X20240614010327", "numberOfTransactions": 1, "controlSum": 0.05, "paymentMethod": "TRF", "paymentTypeInformation": { "instructionPriority": "HIGH", "serviceLevel": { "proprietary": "NURGFX" } }, "requestedExecutionDate": "2024-06-14" } } ``` #### paymentInformation.debtor The paymentInformation.`debtor` object contains information about the individual or business that represents the debtor. **paymentInformation.debtor important parameters** | Parameter | Required / Optional | Description | | --- | --- | --- | | name | Conditionally required | Name of the debtor. Maximum 140 characters. At least one parameter in paymentInformation.debtor is required. | | postalAddress | Conditionally required | Postal address of the debtor. At least one parameter in paymentInformation.debtor is required. | The following code snippet is an example of the paymentInformation.`debtor` object. ```json { "paymentInformation": { "debtor": { "name": "JPMC bank", "postalAddress": { "streetName": "Street Name", "buildingNumber": "123", "postCode": "12345", "townName": "Town", "country": "US", "addressLine": [ "Address line 1", "Address line 2", "Address line 3" ] } } } } ``` #### paymentInformation.debtorAccount The paymentInformation.`debtorAccount` object contains information about the bank account of the debtor. **paymentInformation.debtorAccount important parameters** | Parameter | Required / Optional | Description | | --- | --- | --- | | currency | Optional | Currency of the funds in the debtor account. | | identification.IBAN | Conditionally required | International Bank Account Number (IBAN) of the debtor account. Maximum 34 characters. Either this parameter or identification.other.identification is required. | | identification.other.identification | Conditionally required | Debtor account ID. Maximum 35 characters. At least one parameter in identification is required. | | name | Optional | Name of the debtor account. Maximum 140 characters. | The following code snippet is an example of the paymentInformation.`debtorAccount` object. ```json { "paymentInformation": { "debtorAccount": { "name": "JPMC Client Name", "identification": { "other": { "identification": "XXXXXXXXXX" } }, "currency": "USD" } } } ``` #### paymentInformation.debtorAgent The paymentInformation.`debtorAgent` object contains information about the debtor bank branch. **paymentInformation.debtorAgent important parameters** | Field | Required / Optional | Description | | --- | --- | --- | | financialInstitutionIdentification.bic | Conditionally required | Business Identifier Code (BIC) of the debtor bank branch. Maximum 11 characters. Either the BIC (this parameter) or the routing number (financialInstitutionIdentification.clearingSystemMemberIdentification) is required. For US ACH, you must provide the routing number (see [Reference - Debtor/creditor agent requirements for US payment rails](/docs/treasury/jp-morgan-wallet/reference#debtorcreditor-agent-requirements-for-us-payment-rails)). | | financialInstitutionIdentification.clearingSystemMemberIdentification.clearingSystemIdentification.code | Conditionally required | Clearing system ID code of the debtor bank branch (see [Payments - Clearing system identification codes](/docs/treasury/jp-morgan-wallet/capabilities/payments/overview#clearing-system-identification-codes)). Either the BIC (financialInstitutionIdentification.bic) or the routing number (financialInstitutionIdentification.clearingSystemMemberIdentification) is required. For US ACH, you must provide the routing number (see [Reference - Debtor/creditor agent requirements for US payment rails](/docs/treasury/jp-morgan-wallet/reference#debtorcreditor-agent-requirements-for-us-payment-rails)). | | financialInstitutionIdentification.clearingSystemMemberIdentification.memberIdentification | Conditionally required | Routing number of the debtor bank branch. Required if financialInstitutionIdentification.clearingSystemMemberIdentification is present. Either the BIC (financialInstitutionIdentification.bic) or the routing number (financialInstitutionIdentification.clearingSystemMemberIdentification) is required. For US ACH, you must provide the routing number (see [Reference - Debtor/creditor agent requirements for US payment rails](/docs/treasury/jp-morgan-wallet/reference#debtorcreditor-agent-requirements-for-us-payment-rails)). | | financialInstitutionIdentification.postalAddress | Optional | Postal address of the debtor bank branch. | The following code snippet is an example of the paymentInformation.`debtorAgent` object. ```json { "paymentInformation": { "debtorAgent": { "financialInstitutionIdentification": { "clearingSystemMemberIdentification": { "clearingSystemIdentification": { "code": "USABA" }, "memberIdentification": "021000021" }, "postalAddress": { "streetName": "Street Name", "buildingNumber": "123", "postCode": "12345", "townName": "Town", "country": "US", "addressLine": [ "Address line 1", "Address line 2", "Address line 3" ] } } } } } ``` #### paymentInformation.creditTransferTransactionInformation The paymentInformation.`creditTransferTransactionInformation` object contains information about the transaction such as the creditor, the ultimate debtor, and the ultimate creditor. **paymentInformation.creditTransferTransactionInformation** | Parameter | Required / Optional | Description | | --- | --- | --- | | amount.equivalentAmount.amount | Conditionally required | Amount of funds to be transferred in the debit currency. Required if amount.equivalentAmount is present. You must include either amount.equivalentAmount or amount.instructedAmount, but not both. For more information, see [Equivalent amount versus instructed amount](#equivalent-amount-versus-instructed-amount). | | amount.equivalentAmount.currency | Conditionally required | Three-character ISO 4217 currency code of the debit currency. Required if amount.equivalentAmount is present. You must include either amount.equivalentAmount or amount.instructedAmount, but not both. For more information, see [Equivalent amount versus instructed amount](#equivalent-amount-versus-instructed-amount). | | amount.equivalentAmount.currencyOfTransfer | Conditionally required | Three-character ISO 4217 currency code of the credit currency. Required if amount.equivalentAmount is present. You must include either amount.equivalentAmount or amount.instructedAmount, but not both. For more information, see [Equivalent amount versus instructed amount](#equivalent-amount-versus-instructed-amount). | | amount.instructedAmount.amount | Conditionally required | Amount of funds to be transferred in the credit currency. Maximum 18 digits with six decimal places. Required if amount.instructedAmount is present. You must include either amount.equivalentAmount or amount.instructedAmount, but not both. For more information, see [Equivalent amount versus instructed amount](#equivalent-amount-versus-instructed-amount). | | amount.instructedAmount.currency | Conditionally required | Three-character ISO 4217 currency code of the credit currency. Required if amount.instructedAmount is present. You must include either amount.equivalentAmount or amount.instructedAmount, but not both. For more information, see [Equivalent amount versus instructed amount](#equivalent-amount-versus-instructed-amount). | | creditor.name | Optional | Name of the creditor. Maximum 140 characters. | | creditor.postalAddress | Optional | Postal address of the creditor. | | creditorAccount.currency | Optional | Currency of the funds in the creditor account. | | creditorAccount.identification.IBAN | Conditionally required | International Bank Account Number (IBAN) of the creditor bank account. Maximum 34 characters. Either this parameter or creditorAccount.identification.other.identification is required. | | creditorAccount.identification.other.identification | Conditionally required | Account number of the creditor bank account. Maximum 35 characters. Either this or creditorAccount.identification.IBAN is required. | | creditorAgent.financialInstitutionIdentification.bic | Conditionally required | SWIFT BIC of the creditor bank branch. Maximum 11 characters. Either the BIC (this parameter) or the routing number (creditorAgent.financialInstitutionIdentification.clearingSystemMemberIdentification) is required. If this is a US ACH transaction, you must provide the routing number. | | creditorAgent.financialInstitutionIdentification.clearingSystemMemberIdentification.clearingSystemIdentification.code | Conditionally required | Clearing system ID code of the creditor bank branch. Either the BIC (creditorAgent.financialInstitutionIdentification.bic) or the routing number (creditorAgent.financialInstitutionIdentification.clearingSystemMemberIdentification) is required. If this is a US ACH transaction, you must provide the routing number. If you provide the routing number, either this parameter or creditorAgent.financialInstitutionIdentification.clearingSystemMemberIdentification.clearingSystemIdentification.proprietary is required. For more information, see [Payments - Clearing system identification codes](/docs/treasury/jp-morgan-wallet/capabilities/payments/overview#clearing-system-identification-codes). | | creditorAgent.financialInstitutionIdentification.clearingSystemMemberIdentification.clearingSystemIdentification.proprietary | Conditionally required | String indicating the clearing system of the creditor bank branch. Either the BIC (creditorAgent.financialInstitutionIdentification.bic) or the routing number (creditorAgent.financialInstitutionIdentification.clearingSystemMemberIdentification) is required. If this is a US ACH transaction, you must provide the routing number. If you provide the routing number, either this parameter or creditorAgent.financialInstitutionIdentification.clearingSystemMemberIdentification.clearingSystemIdentification.code is required. | | creditorAgent.financialInstitutionIdentification.clearingSytemMemberIdentification.memberIdentification | Conditionally required | Routing number of the creditor bank branch. Either the BIC (creditorAgent.financialInstitutionIdentification.bic) or the routing number (this parameter) is required. If this is a US ACH transaction, you must provide the routing number. | | creditorAgent.financialInstitutionIdentification.name | Optional | Name of the creditor bank branch. Maximum 140 characters. | | creditorAgent.financialInstitutionIdentification.postalAddress | Optional | Postal address of the creditor bank branch. | | exchangeRateInformation.contractIdentification | Optional | Rate ID for setting a fixed exchange rate. For more information, see [Fixed rate versus spot rate](#fixed-rate-versus-spot-rate). | | paymentIdentification.endToEndIdentification | Required | Unique ID for tracing requests and responses for this transaction. Maximum 16 characters. | | paymentIdentification.instructionIdentification | Optional | Unique ID of the instruction. Maximum 35 characters. | | purpose.code | Conditionally required | Purpose of the transaction. Maximum four characters. If you include the purpose parameter, you must include either purpose.code or purpose.proprietary. | | purpose.proprietary | Conditionally required | Purpose of the transaction. Maximum 35 characters. If you include the purpose parameter, you must include either purpose.code or purpose.proprietary. | | remittanceInformation.unstructured | Optional | Array of strings of remittance information. Each string must be a maximum of 140 characters. | | ultimateDebtor.identification.organisationIdentification.other.identification | Conditionally required | ID of the VTA to debit. Required if you include the ultimateDebtor parameter. | | ultimateDebtor.identification.organisationIdentification.other.schemeName.proprietary | Conditionally required | Required if you include the ultimateDebtor parameter. Set to virtualAccountIdentification. | | ultimateDebtor.name | Optional | Name of the ultimate debtor. Maximum 140 characters. | The following code snippet is an example of the paymentInformation.`creditTransferTransactionInformation` object. ```json { "paymentInformation": { "creditTransferTransactionInformation": [ { "paymentIdentification": { "instructionIdentification": "X20240614010327", "endToEndIdentification": "X20240614010327" }, "amount": { "equivalentAmount": { "amount": 0.05, "currency": "USD", "currencyOfTransfer": "AUD" } }, "exchangeRateInformation": { "contractIdentification": "RF946D8E7FD7F430927C5DA02BFA26" }, "ultimateDebtor": { "name": "JPMC bank", "identification": { "organisationIdentification": { "other": [ { "identification": "VAID00002", "schemeName": { "proprietary": "virtualAccountIdentification" } } ] } } }, "creditorAgent": { "financialInstitutionIdentification": { "bic": "CHASAU2XXXX", "clearingSystemMemberIdentification": { "clearingSystemIdentification": { "proprietary": "AUD ROUTING" }, "memberIdentification": "212-200" }, "name": "Europe Agent", "postalAddress": { "addressType": "ADDR", "streetName": "BriarwoodCt", "buildingNumber": "111", "postCode": "19460", "townName": "Phoenixville", "country": "AU", "addressLine": [ "4901 Memorial Pkwy" ] } } }, "creditor": { "name": "JPMC bank", "postalAddress": { "addressType": "ADDR", "streetName": "BriarwoodCt", "buildingNumber": "111", "postCode": "19460", "townName": "Phoenixville", "country": "AU", "addressLine": [ "4901 Memorial Pkwy" ] } }, "creditorAccount": { "identification": { "other": { "identification": "XXXXXXXXXX" } }, "currency": "AUD" }, "purpose": { "code": "SALA" }, "remittanceInformation": { "unstructured": [ "TRANSFER CREDIT B/O: PUBLIC BANK BERHAD" ] } } ] } } ``` ## Examples ### Request with minimum required data (non-TP3) - ACH FX PayOut using spot rate The following example shows the minimum data required to execute an ACH FX PayOut transaction. Because a rate ID is not specified, Wallet uses the spot rate to convert the funds. ```json TODO ``` ### Request with optional data - ACH FX PayOut using a fixed rate The following example shows an ACH FX PayOut request using a fixed rate. Note the rate ID specified in exchangeRateInformation.`contractIdentification`. ```json TODO ``` ### Request with optional data - ACH FX PayOut using credit currency The following example shows an ACH FX PayOut request converting USD to AUD, specifying the amount in the credit currency (AUD). Note that amount.`instructedAmount` is set to the amount of funds in AUD. ```json TODO ``` ### Response The following example shows a synchronous response to an ACH FX PayOut request. **Note:** Wallet does not return the rate ID in the response. ```json TODO ``` ### Notification The following example shows an asynchronous notification that Wallet sends after executing an ACH FX PayOut transaction. Note the following fields in statusReasonInformation.`additionalInformation`: - contractIdentification: ID of the actual contract booked for this FX transaction. Note that this is NOT equivalent to contractIdentification in the request body. - exchangeRate: Exchange rate that was used in the transaction. - fxPaymentDate: Date when the funds are paid out to the creditor account. - fxValueDate: Date when the transaction is finalized and settled. - rateIdentification: Rate ID equivalent to contractIdentification in the request body. ```json TODO ```