# MD for: https://www.mercadopago.com.pe/developers/es/docs/checkout-api-orders/payment-integration/websites/paycash.md \# PayCash With Mercado Pago's Checkout API, you can also offer payments with \*\*PayCash\*\*. With this payment method, the buyer receives a voucher with a reference code and pays in cash at one of the authorized stores of the PayCash network, within the voucher's expiration period. The purchase is considered complete only after the payment is confirmed. If you have already \[set up your environment\](https://www.mercadopago.com.pe/developers/en/docs/checkout-api-orders/development-environment) and want to offer payments with PayCash, follow the steps below. Currently, it is not possible to test PayCash payments in Peru. > NOTE > > Remember: before setting up the payment methods, choose the way you will process your transactions. The processing mode, whether \*\*manual or automatic\*\*, will be defined at the time of order creation, using the \`processing\_mode\` parameter. For more information, visit the section \[Integration Model\](https://www.mercadopago.com.pe/developers/en/docs/checkout-api-orders/integration-model). :::AccordionComponent{title="Add payment form" pill="client-side"} To receive payments with PayCash, you need to add a form to the \*frontend\* that securely captures the payer's data. If you already have a development that includes your own payment form, make sure to include \*\*PayCash\*\* among the available options, as shown below, and continue to the \[Submit payment\](#bookmark\_submit\_payment) step. | Payment method | \`payment\_method.id\` | |:---:|:---:| | PayCash | \`paycash\` | \`\`\`html First name Last name E-mail Pay \`\`\` ::: :::AccordionComponent{title="Submit payment" pill="server-side"} The payment is submitted by creating an order that contains the associated payment transaction. To do so, send a request with your :toolTipComponent\[\_Access Token\_\]{content="Private key used in the \_backend\_ to authenticate requests to Mercado Pago APIs. It must never be shared or exposed in the \_frontend\_."} and the parameters listed below to the endpoint :TagComponent{tag="POST" text="/v1/orders" href="/developers/en/reference/online-payments/checkout-api/create-order/post" color="green"} and execute the request. \`\`\`curl curl --location --request POST 'https://api.mercadopago.com/v1/orders' \\ --header 'Content-Type: application/json' \\ --header 'Authorization: Bearer {{YOUR\_ACCESS\_TOKEN}}' \\ --header 'X-Idempotency-Key: {{SOME\_UNIQUE\_VALUE}}' \\ --data-raw '{ "type": "online", "external\_reference": "ext\_ref\_1234", "processing\_mode": "automatic", "total\_amount": "200.00", "payer": { "email": "test\_payer@example.com", "first\_name": "Juan", "last\_name": "Pérez" }, "transactions": { "payments": \[ { "amount": "200.00", "expiration\_time": "P1D", "payment\_method": { "id": "paycash", "type": "ticket" } } \] } }' \`\`\` > NOTE > > Order creation is subject to per-client request limits. If you receive a \`429 Too Many Requests\` error, wait for the time indicated in the \`Retry-After\` \*header\* of the response before trying again. See \[Possible errors\](https://www.mercadopago.com.pe/developers/en/docs/checkout-api-orders/payment-management/integration-errors) for more details. | Parameter | Type | Description | Requirement | |---|---|---|---| | \`Authorization\` | \*Header\* | Refers to your private key, the :toolTipComponent\[\_Access Token\_\]{content="Private key used in the \_backend\_ to authenticate requests to Mercado Pago APIs. It must never be shared or exposed in the \_frontend\_."}. | Required | | \`X-Idempotency-Key\` | \*Header\* | Idempotency key. Ensures that each request is processed only once. Use a unique value in the request \*header\*, such as a UUID V4 or a random \*string\*. | Required | | \`processing\_mode\` | \*Body. String\* | Order processing mode: \`automatic\` to create and process automatically, or \`manual\` to process in a separate step. For more information, see \[Integration model\](https://www.mercadopago.com.pe/developers/en/docs/checkout-api-orders/integration-model). | Required | | \`expiration\_time\` | \*Body. String\* | Only in \[manual mode\](https://www.mercadopago.com.pe/developers/en/docs/checkout-api-orders/integration-model#bookmark\_processing\_modes\_for\_orders) (\`processing\_mode=manual\`): validity period of the order, in ISO 8601 duration format, counted from \`created\_date\`. The maximum limit is 2920 hours and, if not sent, the default value is \`P1D\` (one day). When the period expires before the order reaches a final status, the order is automatically closed and the associated pending payments are canceled. \*\*Do not send this parameter when creating an order in \[automatic mode\](https://www.mercadopago.com.pe/developers/en/docs/checkout-api-orders/integration-model#bookmark\_processing\_modes\_for\_orders) (\`processing\_mode=automatic\`).\*\* | Optional | | \`total\_amount\` | \*Body. String\* | Total amount of the transaction. | Required | | \`payer.email\` | \*Body. String\* | Buyer's e-mail. | Required | | \`payer.first\_name\` | \*Body. String\* | Buyer's first name. | Optional | | \`payer.last\_name\` | \*Body. String\* | Buyer's last name. | Optional | | \`transactions.payments.payment\_method.id\` | \*Body. String\* | Payment method identifier. In this case, the value must be \`paycash\`. | Required | | \`transactions.payments.payment\_method.type\` | \*Body. String\* | Payment method type. In this case, the value must be \`ticket\`. | Required | | \`transactions.payments.expiration\_time\` | \*Body. String\* | Expiration period of the PayCash voucher, in ISO 8601 duration format (for example, \`P1D\` for one day). If you do not send this field, the payment processor's default period applies. In automatic mode, the processor validates the period provided. In manual mode, the API returns a 400 error if the period exceeds 2920 hours or is not in a valid ISO 8601 format. Also, set the order's \`expiration\_time\` equal to or greater than the voucher's to prevent the order from expiring and canceling the payment while the voucher is still valid. | Optional | > SUCCESS\_MESSAGE > > For more details on all the parameters sent and returned in this request, see our :TagComponent{tag="API" text="API Reference" href="/developers/en/reference/online-payments/checkout-api/overview" color="accent"}. Also, if you receive an error when submitting the payment, you can check our \[list of errors\](https://www.mercadopago.com.pe/developers/en/docs/checkout-api-orders/payment-management/integration-errors). Once processing is complete, and since this is an offline payment method, the order moves to the \`action\_required\` status with the \`waiting\_payment\` detail, indicating that the buyer still needs to pay at an authorized store, as shown in the following response example. We recommend setting up \[notifications for the Order topic\](https://www.mercadopago.com.pe/developers/en/docs/checkout-api-orders/notifications) to receive updates on the status change, including the updated order data. Another option is to send a request to the endpoint :TagComponent{tag="GET" text="/v1/orders/{id}" href="/developers/en/reference/online-payments/checkout-api/get-order/get" color="accent"} to check the updated status. \`\`\`json { "id": "ORDPE01EXAMPLEPE1234NCAKKBF68N64S", "type": "online", "processing\_mode": "automatic", "external\_reference": "ext\_ref\_1234", "total\_amount": "200.00", "total\_paid\_amount": "0.00", "country\_code": "PER", "user\_id": "1245621468", "status": "action\_required", "status\_detail": "waiting\_payment", "capture\_mode": "automatic\_async", "currency": "PEN", "created\_date": "2026-10-15T18:02:11.104Z", "last\_updated\_date": "2026-10-15T18:02:12.873Z", "integration\_data": { "application\_id": "1234567890123456" }, "transactions": { "payments": \[ { "id": "PAYPE01EXAMPLEPE1234BSAR5ZWXX5YZG", "amount": "200.00", "expiration\_time": "P1D", "date\_of\_expiration": "2026-10-16T18:02:11.104+00:00", "reference\_id": "1ioxvbg0wls", "status": "action\_required", "status\_detail": "waiting\_payment", "payment\_method": { "id": "paycash", "type": "ticket", "ticket\_url": "https://www.mercadopago.com.pe/payments/5551234567/ticket?caller\_id=1245621468&hash=00000000-0000-0000-0000-000000000000", "barcode\_content": "3335008800000000006004835002100020000242462010", "reference": "6005407530", "verification\_code": "9876543210" } } \] } } \`\`\` | Parameter | Type | Description | |---|---|---| | \`transactions.payments.status\` | \*String\* | Transaction status. In this case, it returns \`action\_required\` to indicate that an action is needed to complete the processing, that is, until the payment is made. | | \`transactions.payments.status\_detail\` | \*String\* | Transaction status detail. In this case, the value obtained indicates that it is waiting (\`waiting\_payment\`) for the buyer to complete the payment. | | \`transactions.payments.date\_of\_expiration\` | \*String\* | Voucher expiration date, calculated from the \`expiration\_time\` sent or from the processor's default period. | | \`transactions.payments.payment\_method\` | \*Object\* | PayCash voucher data that you must present to the buyer. For more information, see the \[Display payment instructions to the buyer\](#bookmark\_display\_payment\_instructions\_to\_the\_buyer) step. | > WARNING > > If you created the order in manual mode, remember that processing the payment requires an additional step: the request to the endpoint :TagComponent{tag="POST" text="Process order" href="/developers/en/reference/online-payments/checkout-api/process-order/post" color="green"}. ::: :::AccordionComponent{title="Display payment instructions to the buyer" pill="client-side"} After creating the order, show the buyer the information needed to complete the payment at a store of the PayCash network. This data is available in the \`transactions.payments.payment\_method\` object of the response. | Field | Description | |---|---| | \`ticket\_url\` | URL with the complete payment instructions. Redirect the buyer to this link or display it. | | \`reference\` | Reference code that the buyer must present at the store to make the payment. | | \`barcode\_content\` | Voucher barcode content that the store can scan as an alternative to the reference code. | | \`verification\_code\` | Voucher verification code. | The buyer must complete the payment before the date indicated in \`date\_of\_expiration\`. To check the stores available for PayCash payments in Peru, visit the \[official website\](https://paycashglobal.com/puntosperu/). Once the buyer makes the payment, the order moves to the \`processed\` status with the \`accredited\` detail. If you set up your \[notifications\](https://www.mercadopago.com.pe/developers/en/docs/checkout-api-orders/notifications), you will receive a notification via \*webhook\*. If the expiration period ends without the payment being made, cancel the payment as described in the \[Cancel payment\](#bookmark\_cancel\_payment) step. ::: :::AccordionComponent{title="Cancel payment" pill="server-side"} If you wish, you can cancel a payment created, as long as it is pending or in process; that is, with \`status=action\_required\`. Additionally, we recommend canceling payments that were not made by the established due date to avoid billing and reconciliation issues. > RED\_MESSAGE > > If 30 days pass after the established due date for a payment and it has not been made, Mercado Pago will consider it expired. In these cases, it is not possible to perform a manual cancellation, and the payment status will change to canceled or expired. For more information, please consult the \[Refunds and cancellations\](https://www.mercadopago.com.pe/developers/en/docs/checkout-api-orders/payment-management/refunds-cancellations) section. ::: :::AccordionComponent{title="Refund payment" pill="server-side"} Once accredited, a PayCash payment can be fully or partially refunded through a request to the endpoint :TagComponent{tag="POST" text="/v1/orders/{id}/refund" href="/developers/en/reference/online-payments/checkout-api/refund-order/post" color="green"}. After a partial refund, the order remains in the \`processed\` status with the \`partially\_refunded\` detail. When the total amount is refunded, the order moves to the \`refunded\` status with the \`refunded\` detail. For more information, see the \[Refunds and cancellations\](https://www.mercadopago.com.pe/developers/en/docs/checkout-api-orders/payment-management/refunds-cancellations) section. :::