# JPMC-PDP Documentation from https://developer.payments.jpmorgan.com # 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: 1. A counterparty requests a direct debit of a VTA. 2. Wallet receives the [PayOut Collection](/docs/treasury/jp-morgan-wallet/capabilities/payments/outgoing/payout-collection) request and sends you a notification. 3. You approve or deny the request by sending your decision to the Wallet API. 4. 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. **Key information for 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 | - Your Wallet program must have PayOut Collection enabled. - Your Wallet program must define the billing DDA (which can be your Wallet DDA or a different J.P. Morgan DDA) and routing number (for example, the ABA) for Positive Pay. - You must configure a "block rule" for your Wallet program after enabling Positive Pay and defining the billing DDA and routing number. In the block rule, you configure the types of transactions that require approval as well as the default decision to make if no decision is sent by the cut-off time. The block rule becomes effective the next business day after you configure it. - The Transaction_Approval notification type must be enabled in your Wallet program. - PayOut Collection approval decisions are not listed in reports. - PayOut Collection approval decisions are not available in queries. - Even if a PayOut Collection transaction is guaranteed to ultimately fail—for example, if the VTA is closed or has insufficient funds—Wallet still sends you the request to approve or deny it. After you approve the request, Wallet performs validations that determine whether the transaction succeeds or fails. | ## 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](/api/treasury/jp-morgan-wallet/doc-2#/operations/TransactionApprovalDecision). **Endpoints for Positive Pay request** | 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. **Header parameters for Positive Pay endpoint** | Parameter | Required / Optional | Description | | --- | --- | --- | | programId | Required | Your Wallet program ID. | ### Body parameters Include the following parameters in the request body. **Body parameters for Positive Pay endpoint** | 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: - ALLOW: Allow the PayOut Collection transaction to execute. - DENY: Reject the PayOut Collection request. | | 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. **Fields in Positive Pay response** | Field | Description | | --- | --- | | decisionInfoAndStatus.errors | Array of error objects. Present if status is FAILURE. Each error object contains the following fields: - errorCode: The error code. - errorMsg: The error description. | | decisionInfoAndStatus.status | Status of the approval decision. Always one of the following values: - FAILURE: Wallet or the payment rail rejected the decision. In this case, errors will be present. - SUCCESS: The payment rail accepted the decision. | ## 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. **Positive Pay notification fields** | 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. ```json { "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. ```json { "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. ```json { "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. ```json { "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." } } } ] } } ```