# JPMC-PDP Documentation from https://developer.payments.jpmorgan.com # Move funds between virtual accounts (Virtual-to-Virtual) ## Overview A Virtual-to-Virtual (V2V) transaction virtually transfers funds within a J.P. Morgan Wallet™ Demand Deposit Account (DDA), from one Virtual Transaction Account (VTA) to another. Some examples of moving funds between VTAs are: - From the [Default (Reconciliation) VTA](/docs/treasury/jp-morgan-wallet/capabilities/accounts/overview#standard-virtual-accounts) to another VTA in cases where payments are returned - From a counterparty's VTA to a revenue VTA - Between VTAs in cases of errors For an overview of payment types in Wallet, see [Payments](/docs/treasury/jp-morgan-wallet/capabilities/payments/overview). ### Use cases The following are examples of use cases where you might execute a V2V transaction: - Merchant services platform: Needs to allocate funds to pay its merchants. When a customer pays at one of its terminals, it transfers the funds to its "revenue VTA." It keeps a portion of the funds, and executes a V2V transaction to transfer the rest from the revenue VTA to the merchant's VTA. Finally, it pays out the funds to the merchant's DDA. - Video game company: Needs to allocate funds representing in-game currency for its players. When a player buys in-game currency, the company transfers the funds to its "revenue VTA." Then, it executes a V2V transaction to transfer the funds from the revenue VTA to the player's VTA. - Marketplace platform: Needs to allocate funds to pay its sellers. When a customer buys something, the platform transfers the funds to its "revenue VTA." It keeps a portion of the funds, and executes a V2V transaction to transfer the rest from the revenue VTA to the seller's VTA. Finally, it pays out the funds to the seller's DDA. ### Key information The following table describes important information about V2V transactions. **Key information for V2V** | Production endpoint | v3.x: Not supported | v2.x: https://apigateway.jpmorgan.com/tsapi/v2/jpmwallet/payments/batch | | --- | --- | --- | | Client testing endpoint | v3.x: Not supported | v2.x: https://apigatewaycat.jpmorgan.com/tsapi/v2/jpmwallet/payments/batch | | API reference | v3.x: N/A | v2.x: [Initiate one or many PayIn, PayTo, PayInto or v2v transfers](/api/treasury/jp-morgan-wallet/doc-2#/operations/batchPayments) | | Supported branches | All Wallet-supported J.P. Morgan Chase Bank branches (see [Reference - Supported branches and their Business Identifier Codes](/docs/treasury/jp-morgan-wallet/reference#supported-branches-and-their-business-identifier-codes-bics)) | | Supported currencies | All Wallet-supported currencies (see [Reference - Supported account currencies by branch](/docs/treasury/jp-morgan-wallet/reference#supported-account-currencies-by-branch)) | | Supported account types | Demand Deposit Account (DDA) | | Payment type | V2V | | Payment flows | - Domestic, same currency: All Wallet-supported currencies - Domestic, Foreign Exchange (FX): Not supported - Cross-border, same currency: Not supported - Cross-border, FX: Not supported | | Transaction limit | No limit | | Cut-off time | Virtual accounting is available 24x7 | | Settlement period | N/A | | Returns, recalls, and reversals | Not supported - send a [V2V](/docs/treasury/jp-morgan-wallet/capabilities/payments/internal/v2v) request to transfer funds back to original VTA | | Service level code | N/A | ### Prerequisites We enable V2V transactions when we configure your Wallet program. For more information, ask your J.P. Morgan representative. ### Reporting V2V transactions appear on your daily **TRANSACTION ACTIVITY** reports. The following table is an example of what a V2V transaction on a **TRANSACTION ACTIVITY** report might look like. **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 | 2026031000312915 | | TXN TYPE | V2V | | DEBTOR ACCOUNT | XXXXXXXXXX | | DEBTOR VIRTUAL ACCOUNT ID | SANGITA-VA-01 | | DEBTOR AGENT | JPMORGAN CHASE BANK N.A. | | DEBTOR AGENT ID | CHASUS33XXX | | DEBIT AMOUNT | 0.01 | | DEBIT CURRENCY | USD | | CREDITOR ACCOUNT | XXXXXXXXXX | | CREDITOR VIRTUAL ACCOUNT | SANGITA-VA-03 | | CREDITOR AGENT | JPMORGAN CHASE BANK N.A. | | CREDITOR AGENT ID | CHASUS33XXX | | CREDIT AMOUNT | 0.01 | | CREDIT CURRENCY | USD | | STATUS | COMPLETED | | PRN | XXXXXXXXXX | | BATCH ID | V2V2026031000312915 | | MATCHED REFERENCE ID | 2026031000312915 | ### Notes Note the following points about V2V transactions. - You can view V2V transactions in Wallet reports and queries. - You can only initiate one transaction per request. - Both the debited VTA and the credited VTA must be held at the same branch, use the same currency, and be located in the same Wallet program. - You must include both an ultimate debtor and an ultimate creditor in the request body because you must specify the VTA to debit and the VTA to credit. ## Important parameters The following sections list important parameters in the V2V 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 V2V request** | Parameter | Required / Optional | Description | | --- | --- | --- | | programId | Required | Your Wallet program ID. | | transactionType | Required | The type of the transaction. Set to V2V. | ### Body parameters Note the following important body parameters for V2V. #### groupHeader The `groupHeader` object contains information about the batch of transactions. **V2V: groupHeader** | Parameter | Required / Optional | Description | | --- | --- | --- | | creationDateTime | Required | Date and time when the request 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 | | controlSum | Optional | Sum of the transaction amounts in the request. | | messageIdentification | Required | Unique request ID. Maximum 35 characters. | | numberOfTransactions | Required | Total number of transactions in the request. Must be 1. | The following code snippet is an example of the `groupHeader` object. ```json { "groupHeader": { "messageIdentification": "G1750764132", "creationDateTime": "2025-06-24T11:22:11.000+0000", "numberOfTransactions": 1, "controlSum": 50 } } ``` #### paymentInformation The `paymentInformation` object contains parameters related to the payment. **V2V: paymentInformation** | 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. | | paymentInformationIdentification | Required | Unique ID of the payment. Maximum 35 characters. | | paymentMethod | Required | Set to BOOK. For more information about payment methods, see [Payments - Payment methods](/docs/treasury/jp-morgan-wallet/capabilities/payments/overview#payment-methods). | | requestedExecutionDate | Required | Date when the transaction should be executed in YYYY-MM-DD format. Must be either the date that you submit the request (T) or the previous day (T-1). | The following code snippet is an example of the `paymentInformation` object. ```json { "paymentInformation": { "paymentInformationIdentification": "V2VG1750764132", "numberOfTransactions": 1, "controlSum": 50, "paymentMethod": "BOOK", "requestedExecutionDate": "2025-06-24" } } ``` #### paymentInformation.debtorAccount The paymentInformation.`debtorAccount` object contains information about the bank account of the debtor. **V2V: paymentInformation.debtorAccount** | Parameter | Required / Optional | Description | | --- | --- | --- | | identification.other.identification | Required | ID of the Wallet DDA. The debited VTA and the credited VTA must be located in the same Wallet DDA. Maximum 34 characters. | The following code snippet is an example of the paymentInformation.`debtorAccount` object. ```json { "paymentInformation": { "debtorAccount": { "identification": { "other": { "identification": "XXXXXXXXXX" } } } } } ``` #### paymentInformation.debtorAgent The paymentInformation.`debtorAgent` object contains information about the debtor bank branch. **V2V: paymentInformation.debtorAgent** | Field | Required / Optional | Description | | --- | --- | --- | | financialInstitutionIdentification.bic | Required | SWIFT BIC of the branch where the Wallet DDA is located. The debited VTA and the credited VTA must be located in the same branch. Maximum 11 characters. | The following code snippet is an example of the paymentInformation.`debtorAgent` object. ```json { "paymentInformation": { "debtorAgent": { "financialInstitutionIdentification": { "bic": "CHASUS33XXX" } } } } ``` #### 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.instructedAmount.amount | Required | Amount of money to transfer between VTAs. Must be less than or equal to the amount currently in the ultimate debtor VTA. Maximum 18 digits with six decimal places. | | amount.instructedAmount.currency | Required | Currency of the funds in the Wallet DDA. | | creditorAccount.identification.other.identification | Conditionally required | ID of the Wallet DDA. The debited VTA and the credited VTA must be located in the same Wallet DDA. Maximum 34 characters. Required if creditorAccount is present. | | creditorAgent.financialInstitutionIdentification.bic | Required | SWIFT BIC of the branch where the Wallet DDA is located. The debited VTA and the credited VTA must be located in the same branch. Maximum 11 characters. | | paymentIdentification.endToEndIdentification | Required | Unique ID for tracing requests and responses for this transaction. Maximum 16 characters. | | ultimateCreditor.identification.organisationIdentification.other.identification | Required | ID of the VTA to credit. | | ultimateCreditor.identification.organisationIdentification.other.schemeName.proprietary | Required | Set to virtualAccountIdentification. | | ultimateDebtor.identification.organisationIdentification.other.identification | Required | ID of the VTA to debit. | | ultimateDebtor.identification.organisationIdentification.other.schemeName.proprietary | Required | Set to virtualAccountIdentification. | The following code snippet is an example of the paymentInformation.`creditTransferTransactionInformation` object. ```json { "paymentInformation": { "creditTransferTransactionInformation": [ { "paymentIdentification": { "endToEndIdentification": "G1750764132" }, "amount": { "instructedAmount": { "amount": 50, "currency": "USD" } }, "ultimateDebtor": { "identification": { "organisationIdentification": { "other": [ { "identification": "VAID00002", "schemeName": { "proprietary": "virtualAccountIdentification" } } ] } } }, "creditorAgent": { "financialInstitutionIdentification": { "bic": "CHASUS33XXX" } }, "creditorAccount": { "identification": { "other": { "identification": "XXXXXXXXXX" } } }, "ultimateCreditor": { "identification": { "organisationIdentification": { "other": [ { "identification": "VTA-G1731681820", "schemeName": { "proprietary": "virtualAccountIdentification" } } ] } } } } ] } } ``` ## Examples ### Request with minimum required data The following example shows a request with the minimum data required to execute a V2V transaction from one VTA to another. ```json { "groupHeader": { "messageIdentification": "G1750764132", "creationDateTime": "2025-06-24T11:22:11.000+0000", "numberOfTransactions": 1 }, "paymentInformation": { "paymentInformationIdentification": "V2VG1750764132", "paymentMethod": "BOOK", "requestedExecutionDate": "2025-06-24", "debtorAccount": { "identification": { "other": { "identification": "XXXXXXXXXX" } } }, "debtorAgent": { "financialInstitutionIdentification": { "bic": "CHASUS33XXX" } }, "creditTransferTransactionInformation": [ { "paymentIdentification": { "endToEndIdentification": "G1750764132" }, "amount": { "instructedAmount": { "amount": 50, "currency": "USD" } }, "ultimateDebtor": { "identification": { "organisationIdentification": { "other": [ { "identification": "VAID00002", "schemeName": { "proprietary": "virtualAccountIdentification" } } ] } } }, "creditorAgent": { "financialInstitutionIdentification": { "bic": "CHASUS33XXX" } }, "ultimateCreditor": { "identification": { "organisationIdentification": { "other": [ { "identification": "VTA-G1731681820", "schemeName": { "proprietary": "virtualAccountIdentification" } } ] } } } } ] } } ``` ### Request with optional data The following example shows a request to execute a V2V transaction from one VTA to another with optional parameters. ```json { "groupHeader": { "messageIdentification": "G1750764132", "creationDateTime": "2025-06-24T11:22:11.000+0000", "numberOfTransactions": 1, "controlSum": 50 }, "paymentInformation": { "paymentInformationIdentification": "V2VG1750764132", "numberOfTransactions": 1, "controlSum": 50, "paymentMethod": "BOOK", "requestedExecutionDate": "2025-06-24", "debtorAccount": { "identification": { "other": { "identification": "XXXXXXXXXX" } } }, "debtorAgent": { "financialInstitutionIdentification": { "bic": "CHASUS33XXX" } }, "creditTransferTransactionInformation": [ { "paymentIdentification": { "endToEndIdentification": "G1750764132" }, "amount": { "instructedAmount": { "amount": 50, "currency": "USD" } }, "ultimateDebtor": { "identification": { "organisationIdentification": { "other": [ { "identification": "VAID00002", "schemeName": { "proprietary": "virtualAccountIdentification" } } ] } } }, "creditorAgent": { "financialInstitutionIdentification": { "bic": "CHASUS33XXX" } }, "creditorAccount": { "identification": { "other": { "identification": "XXXXXXXXXX" } } }, "ultimateCreditor": { "identification": { "organisationIdentification": { "other": [ { "identification": "VTA-G1731681820", "schemeName": { "proprietary": "virtualAccountIdentification" } } ] } } } } ] } } ``` ### Response The following is the synchronous response to the previous example request. ```json { "groupHeader": { "messageIdentification": "e79209a2-4809-465f-989d-1d227be6729f", "creationDateTime": "2025-06-24T11:22:15.000+0000" }, "originalGroupInformationAndStatus": { "originalMessageIdentification": "G1750764132", "originalMessageNameIdentification": "API-V2V", "originalCreationDateTime": "2025-06-24T11:22:11.000+0000", "originalNumberOfTransactions": 1, "originalControlSum": 50, "groupStatus": "ACTC", "statusReasonInformation": [], "numberOfTransactionsPerStatus": [ { "detailedNumberOfTransactions": "1", "detailedStatus": "ACTC", "detailedControlSum": 50 } ] }, "originalPaymentInformationAndStatus": { "originalPaymentInformationIdentification": "V2VG1750764132", "paymentInformationStatus": "ACTC", "statusReasonInformation": [], "numberOfTransactionsPerStatus": [ { "detailedNumberOfTransactions": "1", "detailedStatus": "ACTC", "detailedControlSum": 50 } ], "transactionInformationAndStatus": [ { "originalEndToEndIdentification": "G1750764132", "transactionStatus": "ACTC", "statusReasonInformation": [], "acceptanceDateTime": "2025-06-24T11:22:15.346+0000", "accountServicerReference": "ed5d7f04-dfaa-4e96-8d5d-758439ad69b5", "originalTransactionReference": { "amount": { "instructedAmount": { "amount": 50, "currency": "USD" } }, "requestedExecutionDate": "2025-06-24", "paymentMethod": "BOOK", "ultimateDebtor": { "identification": { "organisationIdentification": { "other": [ { "identification": "VAID00002", "schemeName": { "proprietary": "virtualAccountIdentification" } } ] } } }, "debtorAccount": { "identification": { "other": { "identification": "XXXXXXXXXX" } }, "currency": "USD", "name": "WALLET DDA" }, "debtorAgent": { "financialInstitutionIdentification": { "bic": "CHASUS33XXX" } }, "creditorAgent": { "financialInstitutionIdentification": { "bic": "CHASUS33XXX" } }, "creditorAccount": { "identification": { "other": { "identification": "XXXXXXXXXX" } }, "currency": "USD" }, "ultimateCreditor": { "identification": { "organisationIdentification": { "other": [ { "identification": "VTA-G1731681820", "schemeName": { "proprietary": "virtualAccountIdentification" } } ] } } } } } ] } } ``` ### Notification The following is the asynchronous notification that Wallet sends after completing the previous example request. ```json { "groupHeader": { "messageIdentification": "13a56e71-f2e3-46b4-876f-b59ba5ed9b57", "creationDateTime": "2025-06-24T11:22:21.731+0000" }, "originalGroupInformationAndStatus": { "originalMessageIdentification": "G1750764132", "originalMessageNameIdentification": "API-V2V", "originalNumberOfTransactions": 1 }, "originalPaymentInformationAndStatus": { "originalPaymentInformationIdentification": "V2VG1750764132", "transactionInformationAndStatus": [ { "originalEndToEndIdentification": "G1750764132", "transactionStatus": "ACSC", "statusReasonInformation": [ { "additionalInformation": [ "/eventType/PaymentComplete", "/POSTED-BALANCE:ultimateCreditor:ACCOUNT-TYPE/TRANSACTION", "/POSTED-BALANCE:ultimateCreditor:VERSION/1", "/POSTED-BALANCE:ultimateCreditor:ITBD/60.0", "/POSTED-BALANCE:ultimateCreditor:ITAV/60.0", "/POSTED-BALANCE:ultimateCreditor:XPCD/60.0", "/POSTED-BALANCE:ultimateCreditor:EFFECTIVE-DATE/2025-06-24", "/POSTED-BALANCE:ultimateCreditor:TIMESTAMP/2025-06-24T11:22:17.792+00:00", "/POSTED-BALANCE:ultimateDebtor:ACCOUNT-TYPE/TRANSACTION", "/POSTED-BALANCE:ultimateDebtor:VERSION/1", "/POSTED-BALANCE:ultimateDebtor:ITBD/899532864.37420", "/POSTED-BALANCE:ultimateDebtor:ITAV/897039147.92420", "/POSTED-BALANCE:ultimateDebtor:XPCD/899532960.22420", "/POSTED-BALANCE:ultimateDebtor:EFFECTIVE-DATE/2025-06-24", "/POSTED-BALANCE:ultimateDebtor:TIMESTAMP/2025-06-24T11:22:17.792+00:00" ] } ], "acceptanceDateTime": "2025-06-24T11:22:16.194+0000", "originalTransactionReference": { "amount": { "instructedAmount": { "amount": 50, "currency": "USD" } }, "requestedExecutionDate": "2025-06-24", "paymentMethod": "BOOK", "ultimateDebtor": { "identification": { "organisationIdentification": { "other": [ { "identification": "XXXXXXXXX", "schemeName": { "proprietary": "virtualAccountIdentification" } } ] } } }, "debtorAccount": { "identification": { "other": { "identification": "XXXXXXXXXX" } }, "currency": "USD" }, "debtorAgent": { "financialInstitutionIdentification": { "bic": "XXXXXXXXXXX" } }, "creditorAgent": { "financialInstitutionIdentification": { "bic": "XXXXXXXXXXX" } }, "creditorAccount": { "identification": { "other": { "identification": "XXXXXXXXXX" } }, "currency": "USD" }, "ultimateCreditor": { "identification": { "organisationIdentification": { "other": [ { "identification": "XXXXXXXXXXXXXXX", "schemeName": { "proprietary": "virtualAccountIdentification" } } ] } } } } } ] } } ```