# MD for: https://www.mercadopago.com.pe/developers/en/docs/checkout-api-orders/payment-integration/websites/pagoefectivo-atm.md \# PagoEfectivo ATM With Mercado Pago's Checkout API, you can also offer payments with \*\*PagoEfectivo ATM\*\* for buyers in Peru. With this payment method, the buyer makes a deferred payment at ATMs and payment points of the PagoEfectivo network. The buyer receives a reference code (CIP) and a verification code to complete the payment at the terminal, within the expiration period defined by the integrator. The purchase is considered complete only after the payment is confirmed. If you already have the \[development environment\](https://www.mercadopago.com.pe/developers/en/docs/checkout-api-orders/development-environment) set up and want to offer PagoEfectivo ATM as a payment method, follow the steps below. > 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 PagoEfectivo ATM, add a form to the frontend that securely captures the payer's data. If you already have a payment form, make sure to include PagoEfectivo ATM among the available options as shown below and continue to the \[Submit payment\](#bookmark\_submit\_payment) step. | Payment method | \`payment\_method\_id\` | |:---:|:---:| | PagoEfectivo ATM | \`pagoefectivo\_atm\` | \`\`\`html First name Last name E-mail Document type Document number Pay \`\`\` ::: :::AccordionComponent{title="Get document types" pill="client-side"} First name, last name, and identification data are optional for PagoEfectivo ATM. If you choose to collect identification data, retrieve the document types dynamically with MercadoPago.js already configured in the \[development environment\](https://www.mercadopago.com.pe/developers/en/docs/checkout-api-orders/development-environment). \`\`\`javascript (async function getIdentificationTypes() { try { const identificationTypes = await mp.getIdentificationTypes(); const identificationTypeElement = document.getElementById("form-checkout\_\_identificationType"); createSelectOptions(identificationTypeElement, identificationTypes); } catch (error) { return console.error("Error getting identificationTypes: ", error); } })(); function createSelectOptions(element, options, labelsAndKeys = { label: "name", value: "id" }) { const { label, value } = labelsAndKeys; element.options.length = 0; const fragment = document.createDocumentFragment(); options.forEach((option) => { const item = document.createElement("option"); item.value = option\[value\]; item.textContent = option\[label\]; fragment.appendChild(item); }); element.appendChild(fragment); } \`\`\` ::: :::AccordionComponent{title="Submit payment" pill="server-side"} Submit the payment by creating an order that contains the associated payment transaction. To do this, send a request with your :toolTipComponent\[test Access Token\]{content="Private key for the application created in Mercado Pago, used in the backend. Access it at Your integrations > Integration data > Tests > Test credentials. The test Access Token starts with the \`APP\_USR\` prefix."} and the parameters listed below to the :TagComponent{tag="POST" text="/v1/orders" href="/developers/en/reference/online-payments/checkout-api/create-order/post" color="green"} endpoint and run 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", "description": "Product purchase MPE", "payer": { "email": "test\_user\_pe@testuser.com", "first\_name": "John", "last\_name": "Doe", "identification": { "type": "DNI", "number": "12345678" } }, "transactions": { "payments": \[ { "amount": "200.00", "expiration\_time": "P1D", "payment\_method": { "id": "pagoefectivo\_atm", "type": "atm" } } \] } }' \`\`\` > NOTE > > Order creation is subject to per-client request limits. If you receive a \`429 Too Many Requests\` error, wait the time indicated in the \`Retry-After\` response header before retrying. See \[Possible errors\](https://www.mercadopago.com.pe/developers/en/docs/checkout-api-orders/payment-management/integration-errors) for more details. | Parameter | Type | Description | Required | |---|---|---|---| | \`Authorization\` | Header | Refers to your private key, the :toolTipComponent\[test Access Token\]{content="Private key for the application created in Mercado Pago, used in the backend. Access it at Your integrations > Integration data > Tests > Test credentials. The test Access Token starts with the \`APP\_USR\` prefix."}. | Required | | \`X-Idempotency-Key\` | Header | Idempotency key. Ensures 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 | | \`total\_amount\` | Body. String | Total transaction amount. | Required | | \`description\` | Body. String | Order description. Displayed on the payment receipt shown to the buyer at the ATM terminal. Minimum 1 and maximum 150 characters. | \*\*Required for \`pagoefectivo\_atm\`\*\* | | \`payer.email\` | Body. String | Buyer's email address. | Required | | \`payer.first\_name\` | Body. String | Buyer's first name. | Optional | | \`payer.last\_name\` | Body. String | Buyer's last name. | Optional | | \`payer.identification.type\` | Body. String | Buyer's document type, retrieved dynamically with \`mp.getIdentificationTypes()\`. | Optional | | \`payer.identification.number\` | Body. String | Buyer's document number. | Optional | | \`transactions.payments.payment\_method.id\` | Body. String | Payment method identifier. For this method, the value must be \`pagoefectivo\_atm\`. | Required | | \`transactions.payments.payment\_method.type\` | Body. String | Payment method type. For this method, the value must be \`atm\`. | Required | | \`transactions.payments.expiration\_time\` | Body. String | Expiration period in ISO 8601 duration format. Although you can set it between 1 and 30 days after the payment is created, we recommend setting it between \`P1D\` and \`P3D\` to avoid conflicts between the expiration and the payment crediting, which can take up to 2 business hours after completion. If the payment is made after the established expiration date, the amount will be refunded to the payer's Mercado Pago account. | Optional | > SUCCESS\_MESSAGE > > To learn in detail about all the parameters sent and returned in this request, please refer to our :TagComponent{tag="API" text="API Reference" href="/developers/en/reference/online-payments/checkout-api/overview" color="accent"}. Additionally, if you receive an error when submitting the payment, you can consult our \[list of errors\](https://www.mercadopago.com.pe/developers/en/docs/checkout-api-orders/payment-management/integration-errors). The creation of the payment occurs asynchronously in the order. While it is being processed, the order is returned with a \`processing\` status and without information. Once processing is complete, and since this is an offline payment method, the order transitions to \`action\_required\` with the detail \`waiting\_payment\`, indicating that the buyer still needs to complete the payment at the ATM terminal, as shown in the following response example. We recommend setting up \[Order topic notifications\](https://www.mercadopago.com.pe/developers/en/docs/checkout-api-orders/notifications) to receive updates on the status change, including the updated order data. Alternatively, you can choose to send a request to the :TagComponent{tag="GET" text="/v1/orders/{id}" href="/developers/en/reference/online-payments/checkout-api/get-order/get" color="accent"} endpoint to retrieve the updated status. \`\`\`json { "id": "ORDPE01EXAMPLEPE1234NCAKKBF68N64S", "type": "online", "processing\_mode": "automatic", "external\_reference": "ext\_ref\_1234", "description": "Product purchase MPE", "total\_amount": "200.00", "total\_paid\_amount": "0.00", "country\_code": "PER", "user\_id": "1234567890", "status": "action\_required", "status\_detail": "waiting\_payment", "capture\_mode": "automatic\_async", "currency": "PEN", "created\_date": "2026-07-29T21:03:42.252Z", "last\_updated\_date": "2026-07-29T21:03:43.985Z", "integration\_data": { "application\_id": "1234567890123456" }, "transactions": { "payments": \[ { "id": "PAYPE01EXAMPLEPE1234BSAR5ZWXX5YZG", "amount": "200.00", "expiration\_time": "P1D", "date\_of\_expiration": "2026-07-30T03:59:59.999+00:00", "reference\_id": "1234567890", "status": "action\_required", "status\_detail": "waiting\_payment", "payment\_method": { "id": "pagoefectivo\_atm", "type": "atm", "ticket\_url": "https://www.mercadopago.com.pe/payments/1234567890/ticket?caller\_id=1234567890&payment\_method\_id=pagoefectivo\_atm&payment\_id=1234567890&payment\_method\_reference\_id=1234567890&hash=00000000-0000-0000-0000-000000000000", "reference": "1234567890", "verification\_code": "1234567890", "financial\_institution": "PagoEfectivo" } } \] } } \`\`\` > WARNING > > If you have created the order in manual mode, remember that payment processing requires an additional step, sending a request to the :TagComponent{tag="POST" text="Process order" href="/developers/en/reference/online-payments/checkout-api/process-order/post" color="green"} endpoint. ::: :::AccordionComponent{title="Display payment instructions to the buyer" pill="client-side"} After creating the order, display to the buyer the information needed to complete the payment at a PagoEfectivo ATM terminal. This data is available in the \`payment\_method\` fields of the response. | Field | Description | |---|---| | \`ticket\_url\` | URL with full payment instructions. Redirect or display this link to the buyer. | | \`verification\_code\` | Verification code the buyer uses at the ATM terminal. | | \`reference\` | CIP reference number for the transaction. | | \`financial\_institution\` | Payment network. Returns \`"PagoEfectivo"\`. | The buyer must use the \`verification\_code\` and \`reference\` at the ATM terminal to complete the payment before the \`date\_of\_expiration\` deadline. Once the buyer completes the payment, the order transitions to \`status: processed\`. If you have set up your \[notifications\](https://www.mercadopago.com.pe/developers/en/docs/checkout-api-orders/notifications), you will be notified of this via webhook. ::: :::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. :::