J.P. Morgan Wallet™
The J.P. Morgan Wallet™ API enables you to leverage virtual accounts to facilitate payments to a large number of counterparties. You can send requests 24 hours a day, 365 days a year and make domestic, cross-border, same-currency, and foreign currency payments.
This documentation describes the business logic and use cases of the API. For the full specification, see the API reference.
Capabilities
Wallet transforms one treasury account into an embedded payment engine for global money movement. Wallet is built for scale—Wallet moves billions of dollars and handles millions of transactions each month.
Manage payments at scale
Instantly manage payments at scale within your own platform or interface across counterparties, currencies, payment methods, and regions, with infrastructure backed by the world's most trusted bank.
Set up virtual accounts
Set up fully routable virtual accounts for each counterparty, tracking and reconciling across funds owed and received—in real-time, with full transparency.
Maximize revenue growth
Maximize revenue growth and cost efficiency with industry-leading financial configurability and control.
What you can build
Wallet supports rapid business expansion and is highly scalable. You can use Wallet to:
- Create a scalable sub-ledgering system under a single physical account to manage transactions at an individual counterparty level.
- Put counterparties at the center of the solution to retain them within your ecosystem.
- Gain access to real-time, low-value and high-value payment rails and pay counterparties around the world.
- Effectively manage receipts by assigning virtual accounts and clearing routable numbers to each counterparty.
How it works
Using Wallet, you maintain a single physical account, then create virtual accounts for individual counterparties to record amounts owed and settled with our global payment network.
You initiate payments and transfers which we record and process. We provide access to information about these transactions through real-time queries and regular reports.
Each Wallet solution contains the following components:
- A source funding Demand Deposit Account (DDA)
- A Wallet DDA
- A sub-ledger hierarchy structure containing virtual accounts
- A unique program ID
- Secure APIs
- Payment methods
- Daily reports
You can set up and manage your Wallet program by following these high-level steps:
- Establish a source funding DDA and a Wallet DDA.
- Create a project in the Payments Developer Portal (PDP).
- Set up relevant payment systems (for example, ACH).
- Set up a virtual account structure.
- Start moving money and making payments.
Use cases
Wallet targets a wide variety of clients that need to facilitate payments to numerous counterparties. Here are some examples of use cases for Wallet:
- Pay sellers on e-commerce platforms
- Pay developers on app stores
- Pay workers on gig economy platforms
- Pay airline customers for inconvenience
- Pay businesses on travel marketplaces
- Pay out rewards to customers
- Pay players and publishers on gaming platforms
- Collect utility payments
- Collect subscription payments
- Collect rent payments on real estate
- Collect insurance premiums
Compliance with industry standards
Wallet complies with industry standards to provide a familiar experience for developers:
- RESTful: Wallet adheres to the Representational State Transfer (REST) architectural style.
- JSON format: Wallet uses the JavaScript Object Notation (JSON) format for serializing and transmitting request and response objects between applications. JSON is a lightweight data format compared to XML.
- ISO-compliant payment services: Wallet provides a set of payment-related services, such as payment initiation, changes, cancellation, and tracking. All bank-related API services leverage the data structure elements from ISO20022.
Endpoints
Wallet has the following endpoints for managing virtual accounts and transactions.
Virtual accounts
| HTTP method | Request | Description | v2.xx | v3.xx |
|---|---|---|---|---|
POST |
Create a virtual account | Create a Virtual Transaction Account (VTA) or a Virtual Summary Account (VSA). | /wallets/batch |
/wallets |
GET |
Get details about a virtual account | Get details about a Virtual Transaction Account such as the ID of the parent virtual account and the virtual account state. | /wallets/{accountIdentification} |
/wallets/{accountIdentification} |
GET |
Get the balance of a virtual account | Get the balance of a Virtual Transaction Account, including or excluding pending transactions. | /wallets/{accountIdentification}/balance |
Not supported |
POST |
Update a virtual account | Update the attributes of a Virtual Transaction Account such as its state and minimum/maximum balance. | Not supported | /wallets/{accountIdentification}/update |
POST |
Add a posting restriction to a virtual account | Restrict certain types of transactions (debits, credits, or both) from being posted to a Virtual Transaction Account. | Not supported | /wallets/{accountIdentification}/postingrestriction |
POST |
Remove a posting restriction from a virtual account | Remove a posting restriction that was previously added to a Virtual Transaction Account. | Not supported | /wallets/{accountIdentification}/postingrestriction/remove |
POST |
Get virtual accounts based on filters | Get a list of virtual accounts based on filters such as the parent ID or the minimum/maximum balance. | Not supported | /wallets/search |
Transactions
| HTTP method | Request | Description | v2.xx | v3.xx |
|---|---|---|---|---|
POST |
Initiate PayIn, PayTo, PayInto, and Virtual-to-Virtual (V2V) transactions | Initiate transactions that do not move physical funds outside of the J.P. Morgan ecosystem. | /payments/batch |
Not supported |
POST |
Initiate PayOut transactions | Move funds from virtual accounts in your Wallet program to physical external bank accounts. Use payment rails such as ACH, WIRE, and real-time payment, and pay in either domestic or foreign exchange currencies. | /payments/advanced-batch |
/payments/advanced-batch |
POST |
Initiate PayInto Collection transactions / Issued Direct Debit Transfers (IDDT) | Move funds from physical external bank accounts into your Wallet virtual accounts. | /direct-debits/advanced-batch |
Not supported |
POST |
Approve or reject a PayOut Collection request (Positive Pay) | Approve or deny a request to direct debit a virtual account to ensure the transaction is authorized before funds are deducted from your Wallet account. | /payments/approval-decision |
Not supported |
GET |
Get details about a transaction | Get details about a transaction such as the status and the acceptance date/time. | /payments/{paymentIdentification} |
Not supported |
GET |
Get the transaction history | Get a list of transactions, optionally filtering by date range. | /payments |
Not supported |
POST |
Get transactions based on filters | Get a list of transactions, filtering on parameters such as the end-to-end ID or the acceptance date/time. | /payments/advanced-search |
Not supported |
Note: The API version can change with future enhancements. Always use PDP for the most current information. We communicate any changes to the versioning of the APIs through release notes.
Availability
We strive to maintain access to Wallet during business hours (US-EST), evenings, and weekends. However, we do not guarantee availability.
Reasons the environment might not be available include:
- Scheduled software updates and infrastructure upgrades
- Unplanned outages
Get started
If you're ready to start using the Wallet API, see Getting started to set up your Wallet program.