Approve or reject a PayOut Collection request (Positive Pay)
Overview
When a counterparty requests to direct debit a J.P. Morgan Wallet™ Virtual Transaction Account (VTA) using its Payment Routing Number (PRN), you can review the request and approve or deny it to ensure the transaction is authorized before funds are deducted from your Demand Deposit Account (DDA). This feature is called "Positive Pay."
The following steps outline the high-level process:
- A counterparty requests a direct debit of a VTA.
- Wallet receives the PayOut Collection request and sends you a notification.
- You approve or deny the request by sending your decision to the Wallet API.
- If you approve the request and the transaction succeeds, Wallet debits the funds from the VTA and transfers them to the counterparty's external account.
Positive Pay gives you more control over who can pull funds out of your DDA, helping reduce fraud and ensuring funds are debited with your explicit consent. This is in addition to any debit authority that you may have already given to the counterparty institution.
Use cases
The following are examples of use cases where you might use the Positive Pay feature:
- Merchant services platform: A customer returns an item and requests a refund. The customer should be able to receive a refund by tapping their credit card on a terminal, direct debiting the merchant's VTA. The merchant can approve or deny the refund using the Positive Pay feature.
- Video game company: A player sells an in-game item in exchange for in-game currency. The player should be able to direct debit the video game company's DDA to receive the in-game currency. The company can approve or deny the sale using the Positive Pay feature.
- Marketplace platform: A merchant on a marketplace platform wants to cash out its funds early. The merchant should be able to direct debit their VTA and transfer the funds to their external account. The platform can approve or deny the request using the Positive Pay feature.
Key information
The following table describes important information about Positive Pay.
| Supported branches | New York branch, or any of the Chase Affiliate Banks under the New York main office branch |
|---|---|
| Supported currencies | USD |
| Supported payment rails | US ACH |
| Cut-off time | Monday-Friday, 9:00 PM EST Note: If you do not approve or deny the request by the cut-off time, Wallet sends the default decision in the block rule. |
| Returns, recalls, and reversals | Completed PayOut Collection transactions are final after they are settled in the DDA. You can request a return, recall, or reversal using channels outside of Wallet such as eServe and J.P. Morgan Access. |
| Other notes |
|
Endpoints
Send an API request to one of the following endpoints to approve or reject a PayOut Collection request. For the specification, see the API reference.
| HTTP method | Request | v2.xx | v3.xx |
|---|---|---|---|
POST |
Direct Debit transaction decision | /payments/approval-decision |
Not supported |
Request
Header parameters
Include the following parameters in the header.
| Parameter | Required / Optional | Description |
|---|---|---|
programId |
Required | Your Wallet program ID. |
Body parameters
Include the following parameters in the request body.
| Parameter | Required / Optional | Description |
|---|---|---|
decisionInformation.approvalIdentification |
Required | ID of the approval request. Must match approvalIdentification in the PayOut Collection notification that you received. Maximum 36 characters. |
decisionInformation.approvedAt |
Required | Date and time when the PayOut Collection request was approved or rejected. Must be in local time with the time zone offset from UTC in the following format: YYYY-MM-DDThh:mm:ss.SSS±hhmm |
decisionInformation.approverId |
Required | ID of the individual making the decision to approve or reject the PayOut Collection request. Maximum 36 characters. |
decisionInformation.approverName |
Required | Name of the individual making the decision to approve or reject the PayOut Collection request. Must be 1-70 characters. |
decisionInformation.decision |
Required | Must be one of the following values:
|
decisionInformation.verifiedAt |
Optional | Date and time when the decision to approve or reject the PayOut Collection request was verified. Must be in local time with the time zone offset from UTC in the following format: YYYY-MM-DDThh:mm:ss.SSS±hhmm |
decisionInformation.verifierId |
Optional | ID of the individual verifying the decision to approve or reject the PayOut Collection request. Maximum 36 characters. |
decisionInformation.verifierName |
Optional | Name of the individual verifying the decision to approve or reject the PayOut Collection request. Maximum 70 characters. |
groupHeader.creationDateTime |
Required | Date and time when you created the request. Must be in local time with the time zone offset from UTC in the following format: YYYY-MM-DDThh:mm:ss.SSS±hhmm |
groupHeader.messageIdentification |
Required | Unique ID that you set to identify this request. Maximum 36 characters. |
Response
If the request is successful, Wallet returns a synchronous response containing much of the information that you provided in the request. It also provides the following fields.
| Field | Description |
|---|---|
decisionInfoAndStatus.errors |
Array of error objects. Present if status is FAILURE. Each error object contains the following fields:
|
decisionInfoAndStatus.status |
Status of the approval decision. Always one of the following values:
|
Notification
When a counterparty initiates a PayOut Collection request, Wallet sends you a notification requesting you to approve or deny the request. The notification contains the following fields related to the request.
| Field | Description |
|---|---|
ApprovalRequestInformation.approvalIdentification |
ID of the approval request. In your decision request, set approvalIdentification to this value. |
ApprovalRequestInformation.approvalRequestType |
The type of request for which approval is requested. Always PAYMENT. |
ApprovalRequestInformation.paymentInformation.amount |
Amount and currency of the funds in the PayOut Collection request. |
ApprovalRequestInformation.paymentInformation.cutOffDateTime |
If you do not approve or deny the request by this date and time, Wallet sends the default decision in your block rule. |
ApprovalRequestInformation.paymentInformation.defaultDecision |
Default decision that Wallet sends if you do not approve or deny the request by the cut-off time. |
ApprovalRequestInformation.paymentInformation.paymentIdentification |
ID of the PayOut Collection transaction. |
ApprovalRequestInformation.paymentInformation.postingType |
The type of posting that will be listed on the DDA when the transaction is completed. Always DEBIT. |
ApprovalRequestInformation.paymentInformation.requestedExecutionDate |
Requested execution date of the PayOut Collection transaction. |
ApprovalRequestInformation.paymentInformation.settlementMethod |
Payment rail of the PayOut Collection transaction. Always ACH. |
If you approve the PayOut Collection request and it is successful, Wallet sends a notification of the completed transaction.
See the following examples.
Examples
The following is an example of a notification that Wallet sends after a counterparty requests a PayOut Collection. Use the information in this notification to approve or deny the request.
{
"groupHeader": {
"messageIdentification": "4f8ea741-31ee-4650-9d7f-3b5d7ef0de77",
"creationDateTime": "2026-02-27T14:05:03.854+0000"
},
"approvalRequestInformation": {
"approvalIdentification": "4f8ea741-31ee-4650-9d7f-3b5d7ef0de77",
"approvalRequestType": "PAYMENT",
"paymentInformation": {
"amount": {
"amount": 0.03,
"currency": "USD"
},
"postingType": "DEBIT",
"requestedExecutionDate": "2026-02-27",
"settlementMethod": "ACH",
"cutOffDateTime": "2026-02-28T02:00:00.000+0000",
"defaultDecision": "DENY"
},
"accountIdentification": {
"identification": {
"other": {
"identification": "XXXXXXXXXX"
}
}
},
"virtualAccountInformation": {
"virtualAccountIdentification": "VTA-N77064063583730",
"virtualAccountState": "OPEN",
"paymentRoutingNumber": "XXXXXXXXXX",
"postingRestrictions": [],
"balanceInformation": {
"balanceType": [
{
"typeCode": "ITAV",
"amount": "0.31"
},
{
"typeCode": "ITBD",
"amount": "0.42"
},
{
"typeCode": "XPCD",
"amount": "0.42"
}
],
"balanceTimestamp": "2026-02-26T18:58:21.586+0000",
"balanceLimits": {
"minimumBalance": "-99999999999.99",
"maximumBalance": "999999999999.99"
}
}
},
"settlementDetails": [
{
"key": "originId",
"value": "1014942302"
},
{
"key": "originName"
},
{
"key": "originCompanyName",
"value": "Some Name 16char"
},
{
"key": "companyNickName"
},
{
"key": "companyEntryDescription",
"value": "1ST PAYMEN"
},
{
"key": "originatorDfiIdAba",
"value": "02100002"
},
{
"key": "standardEntryClassCode",
"value": "CCD"
},
{
"key": "individualId",
"value": "N77064072200511"
},
{
"key": "individualName",
"value": "Debtor Name"
},
{
"key": "traceNumber",
"value": "0000001"
}
]
}
}The following is an example of a request body to approve the previous PayOut Collection request from the counterparty.
{
"groupHeader": {
"messageIdentification": "ct-N77064072211638-4994-44126985c2",
"creationDateTime": "2026-02-27T12:00:38.029-0500"
},
"decisionInformation": {
"approvalIdentification": "4f8ea741-31ee-4650-9d7f-3b5d7ef0de77",
"decision": "ALLOW",
"approverId": "RS",
"approverName": "APPROVER NAME",
"approvedAt": "2026-02-27T12:00:38.029-0500",
"verifierId": "RS",
"verifierName": "VERIFIER NAME",
"verifiedAt": "2026-02-27T12:00:38.029-0500"
}
}The following is an example of a response that Wallet returns after you send the previous PayOut Collection approval request.
{
"groupHeader": {
"messageIdentification": "145c5101-fdf2-4a28-ab19-b7e18806d07c",
"creationDateTime": "2026-02-27T17:00:49.904+0000"
},
"decisionInfoAndStatus": {
"approvalIdentification": "4f8ea741-31ee-4650-9d7f-3b5d7ef0de77",
"originalDecision": "ALLOW",
"status": "SUCCESS",
"errors": []
}
}The following is an example of a notification that Wallet sends after you approve the previous PayOut Collection request and the transaction completes successfully.
{
"groupHeader": {
"messageIdentification": "08e3e525-3e1b-3e1b-3e1b-27314e773e1b",
"creationDateTime": "2025-11-20T07:30:51.638+0000"
},
"originalGroupInformationAndStatus": {
"originalMessageIdentification": "09dbe2cf-3e1b-4818-a32b-123452f1234",
"originalMessageNameIdentification": "API-PAYOUTCOLLECTION",
"originalNumberOfTransactions": 1
},
"originalPaymentInformationAndStatus": {
"originalPaymentInformationIdentification": "3985353212345140TC",
"transactionInformationAndStatus": [
{
"originalEndToEndIdentification": "3212345140TC",
"transactionStatus": "ACSC",
"acceptanceDateTime": "2025-11-20T07:30:50.049+0000",
"accountServicerReference": "3212345140TC",
"originalTransactionReference": {
"amount": {
"instructedAmount": {
"amount": 465.11,
"currency": "USD"
}
},
"requestedExecutionDate": "2025-11-20",
"paymentMethod": "BOOK",
"remittanceInformation": [
{
"remittanceInformationText": "ORIG CO NAME:XYZINC. ORIG ID:9101234505 DESC DATE:251119 CO ENTRY DESCR:MONTHY BILSEC:WEB TRACE#:041012312342140 EED:25112",
"remittanceSequenceNumber": "1"
},
{
"remittanceInformationText": "0 IND ID:12EQL1JABCD IND NAME:TOM ARTY VXR/1xxxxxxxxxxxx1234 ",
"remittanceSequenceNumber": "2"
},
{
"remittanceInformationText": " ACH TRANSACTION TRN: 3212345140TC",
"remittanceSequenceNumber": "3"
}
],
"ultimateDebtor": {
"identification": {
"organisationIdentification": {
"other": [
{
"identification": "VTA-MERCHANT-001",
"schemeName": {
"proprietary": "virtualAccountIdentification"
}
}
]
}
}
},
"debtorAccount": {
"identification": {
"other": {
"identification": "123XXXX938"
}
},
"currency": "USD"
},
"debtorAgent": {
"financialInstitutionIdentification": {
"bic": "CHASUS33XXX"
}
},
"creditorAgent": {
"financialInstitutionIdentification": {
"bic": "UNAVAILABLE"
}
},
"creditorAccount": {
"identification": {
"other": {
"identification": "UNAVAILABLE"
}
},
"currency": "USD"
},
"receiver": {
"name": "XYZ INC."
}
}
}
]
}
}