# JPMC-PDP Documentation from https://developer.payments.jpmorgan.com # Change or cancel a payment request In this tutorial, you will learn how to use the Request to Pay via QR Code API to update or cancel a payment request. By the end of this tutorial, you will know how to: - Update a payment request Note updates to existing QR or payment request feature is not available in various markets. Currently only supported in Brazil. - Cancel a payment request - Interpret the responses ## Before you begin To use the Request to Pay API, you will need: - A [registered and fully onboarded](/docs/quick-start) Developer Account on the J.P. Morgan Payments Developer Portal. - An active project that provides you with the credentials used to make a request. ## Update a Payment Request If you need to modify an existing payment request, applicable for select markets, you can use the `PUT` Payment Request endpoint. You can update the payment request details using a client provided Payment Request ID or J.P. Morgan generated Payment Request ID. ### Send a request Send a `PUT` request to the `/payments-requests/{id}` endpoint, specifying the Payment Request ID in the path parameter. Here's an example: ```curl curl --request PUT \ --url https://api-mock.payments.jpmorgan.com/receivables/request-to-pay/v1/payment-requests/05df6aaa4fea44128795a1d42b5e3e45 \ --header 'Accept: application/json' \ --header 'Content-Type: application/json' \ --header 'If-Match: ' \ --data '{ "country": "AU", "request": { "debtor": { "name": "string", "address": { "type": "ADDR", "addressLines": [ "string" ], "city": "string", "state": "string", "postalCode": "string", "country": "AU" }, "email": { "address": "string", "type": "PRIMARY" }, "taxInformation": { "taxpayerCategory": "INDIVIDUAL", "taxId": "string" } }, "creditor": { "account": { "schemeName": { "proprietary": "CPF" }, "alternateAccountIdentifier": "string" }, "name": "string", "shortName": "string", "address": { "type": "ADDR", "addressLines": [ "string" ], "city": "string", "state": "string", "postalCode": "string", "country": "AU" }, "taxInformation": { "taxpayerCategory": "INDIVIDUAL", "taxId": "string" } }, "expirationType": "IMMEDIATE", "paymentDueDate": "2019-08-24", "duration": 0, "gracePeriod": 0, "currency": "AUD", "paymentAmount": "10.50", "isAmountAdjustable": false, "interestType": "NOT_APPLICABLE", "interestParameters": { "days": "CALENDAR_DAYS", "amount": "10.50", "percentage": "10.50" }, "discountType": "NOT_APPLICABLE", "discountParameters": { "days": "CALENDAR_DAYS", "cutOffDetails": [ { "cutOffDate": "2019-08-24", "percentage": "10.50", "amount": "10.50" } ], "percentage": "10.50", "amount": "10.50" }, "penaltyType": "NOT_APPLICABLE", "penaltyParameters": { "amount": "10.50", "percentage": "10.50" }, "reductionType": "NOT_APPLICABLE", "reductionParameters": { "amount": "10.50", "percentage": "10.50" }, "reference": "string", "additionalInformation": [ { "valueType": "Obs", "text": "This bill can be paid after the due date" } ] }, "requestMethodType": "NONE", "requestMethod": { "qrCodeType": "STATIC", "paymentLinkId": "string", "contentType": "IMAGE", "correctionLevel": "MEDIUM", "imageWidth": 400 } }' ``` ```json { "country": "AU", "request": { "debtor": { "name": "string", "address": { "type": "ADDR", "addressLines": [ "string" ], "city": "string", "state": "string", "postalCode": "string", "country": "AU" }, "email": { "address": "string", "type": "PRIMARY" }, "taxInformation": { "taxpayerCategory": "INDIVIDUAL", "taxId": "string" } }, "creditor": { "account": { "schemeName": { "proprietary": "CPF" }, "alternateAccountIdentifier": "string" }, "name": "string", "shortName": "string", "address": { "type": "ADDR", "addressLines": [ "string" ], "city": "string", "state": "string", "postalCode": "string", "country": "AU" }, "taxInformation": { "taxpayerCategory": "INDIVIDUAL", "taxId": "string" } }, "expirationType": "IMMEDIATE", "paymentDueDate": "2019-08-24", "duration": 0, "gracePeriod": 0, "currency": "AUD", "paymentAmount": "10.50", "isAmountAdjustable": false, "interestType": "NOT_APPLICABLE", "interestParameters": { "days": "CALENDAR_DAYS", "amount": "10.50", "percentage": "10.50" }, "discountType": "NOT_APPLICABLE", "discountParameters": { "days": "CALENDAR_DAYS", "cutOffDetails": [ { "cutOffDate": "2019-08-24", "percentage": "10.50", "amount": "10.50" } ], "percentage": "10.50", "amount": "10.50" }, "penaltyType": "NOT_APPLICABLE", "penaltyParameters": { "amount": "10.50", "percentage": "10.50" }, "reductionType": "NOT_APPLICABLE", "reductionParameters": { "amount": "10.50", "percentage": "10.50" }, "reference": "string", "additionalInformation": [ { "valueType": "Obs", "text": "This bill can be paid after the due date" } ] }, "requestMethodType": "NONE", "requestMethod": { "qrCodeType": "STATIC", "paymentLinkId": "string", "contentType": "IMAGE", "correctionLevel": "MEDIUM", "imageWidth": 400 } } ``` ### Confirm the response A successful response will return a payload with the updated payment request confirmation and QR code details. Here's an example: ```json { "id": "stringstringstringstringstringst", "revisionNumber": 0, "country": "AU", "request": { "debtor": { "name": "string", "address": { "type": "ADDR", "addressLines": [ "string" ], "city": "string", "state": "string", "postalCode": "string", "country": "AU" }, "email": { "address": "string", "type": "PRIMARY" }, "taxInformation": { "taxpayerCategory": "INDIVIDUAL", "taxId": "string" } }, "creditor": { "account": { "schemeName": { "proprietary": "CPF" }, "alternateAccountIdentifier": "string" }, "name": "string", "shortName": "string", "address": { "type": "ADDR", "addressLines": [ "string" ], "city": "string", "state": "string", "postalCode": "string", "country": "AU" }, "taxInformation": { "taxpayerCategory": "INDIVIDUAL", "taxId": "string" } }, "expirationType": "IMMEDIATE", "paymentDueDate": "2019-08-24", "duration": 0, "gracePeriod": 0, "currency": "AUD", "paymentAmount": "10.50", "isAmountAdjustable": false, "interestType": "NOT_APPLICABLE", "interestParameters": { "days": "CALENDAR_DAYS", "amount": "10.50", "percentage": "10.50" }, "discountType": "NOT_APPLICABLE", "discountParameters": { "days": "CALENDAR_DAYS", "cutOffDetails": [ { "cutOffDate": "2019-08-24", "percentage": "10.50", "amount": "10.50" } ], "percentage": "10.50", "amount": "10.50" }, "penaltyType": "NOT_APPLICABLE", "penaltyParameters": { "amount": "10.50", "percentage": "10.50" }, "reductionType": "NOT_APPLICABLE", "reductionParameters": { "amount": "10.50", "percentage": "10.50" }, "reference": "string", "additionalInformation": [ { "valueType": "Obs", "text": "This bill can be paid after the due date" } ] }, "requestMethodType": "NONE", "requestMethod": { "image": "string", "mimeType": "image/png", "imageWidth": 0, "paymentLink": { "id": "253f67f3-b640-44cb-aabd-2cc348b52678", "expirationType": "IMMEDIATE", "country": "AU", "url": "http://example.com", "createdAt": "2019-08-24T14:15:22Z", "paymentRequestId": "stringstringstringstringstringst" }, "text": "string", "qrCodeType": "STATIC" }, "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z", "expiresAt": "2019-08-24T14:15:22Z", "status": "ACTIVE", "settlementSummary": { "payment": { "endToEndId": "string", "currency": "AU", "amount": "10.50", "interest": "10.50", "penalty": "10.50", "discount": "10.50", "reduction": "10.50" }, "returns": [ { "id": "string", "referenceId": "string", "currency": "AU", "amount": "10.50", "type": "USER_REQUEST" } ] } } ``` ## Cancel a Payment Request If you no longer need to keep a payment request active, cancel the request using the Payment Request endpoint. ### Send a request Send a `POST `request to the `/payments-requests/{id}/cancel` endpoint and specify the Payment Request ID in the path parameter. Here's an example: ```curl curl --request POST \ --url https://api-mock.payments.jpmorgan.com/receivables/request-to-pay/v1/payment-requests/1062ad7dee5c4611962733d4ce5cf9c9/cancel \ --header 'Accept: application/json' \ --header 'Content-Type: application/json' \ --data '{ "reason": "testing qr code deletion", "metaData": [ { "valueType": "example", "text": "sampleText" } ] }' ``` ```json { "reason": "testing qr code deletion", "metaData": [ { "valueType": "example", "text": "sampleText" } ] } ``` ### Confirm the response A successful response will return a payload with a confirmation message. Here's an example: ```json { "message": "Payment request cancelled successfully" } ``` ## Bulk Requests Bulk requests allow you to update multiple payment requests asynchronously using the `/payment-requests/bulk/{id}` endpoint. For more information see the [Request to Pay via QR Code API](/api/treasury/receivables/request-to-pay) specification. > Bulk requests are supported in select markets (currently Brazil only). > ## Related Learn how to [create a payment request.](/docs/treasury/receivables/capabilities/request-to-pay-via-qr-code/how-to/create-payment-request)