PagoEfectivo ATM
Con Checkout API de Mercado Pago, también puedes ofrecer pagos con PagoEfectivo ATM para compradores en Perú. Con este medio de pago, el comprador realiza un pago diferido en cajeros automáticos (ATM) y puntos de pago de la red PagoEfectivo. El comprador recibe un código de referencia (CIP) y un código de verificación para completar el pago en el terminal, dentro del plazo de vencimiento definido por el integrador. La compra se considera completada solo tras la confirmación del pago.
Si ya tienes el entorno de desarrollo configurado y quieres ofrecer PagoEfectivo ATM como medio de pago, sigue los pasos a continuación.
processing_mode. Para más información, accede a la sección Modelo de integración.Para recibir pagos con PagoEfectivo ATM, es necesario agregar al frontend un formulario que capture los datos del pagador de forma segura.
Si ya tienes un formulario de pago, asegúrate de incluir PagoEfectivo ATM entre las opciones disponibles como se indica a continuación y continúa con el paso Enviar pago.
| Medio de pago | payment_method_id |
| PagoEfectivo ATM | pagoefectivo_atm |
html<form id="form-checkout" action="/process_payment" method="post"> <div> <label for="payerFirstName">Nombre</label> <input id="form-checkout__payerFirstName" name="payerFirstName" type="text"> </div> <div> <label for="payerLastName">Apellido</label> <input id="form-checkout__payerLastName" name="payerLastName" type="text"> </div> <div> <label for="email">E-mail</label> <input id="form-checkout__email" name="email" type="text"> </div> <div> <label for="identificationType">Tipo de documento</label> <select id="form-checkout__identificationType" name="identificationType"></select> </div> <div> <label for="identificationNumber">Número del documento</label> <input id="form-checkout__identificationNumber" name="identificationNumber" type="text"> </div> <div> <input type="hidden" name="transactionAmount" id="transactionAmount" value="200"> <button type="submit">Pagar</button> </div> </form>
Los datos de nombre, apellido e identificación son opcionales para PagoEfectivo ATM. Si optas por recopilar la identificación, obtén los tipos de documento dinámicamente con MercadoPago.js ya configurado en el entorno de desarrollo.
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); }
El envío del pago se realiza creando una order que contenga la transacción de pago asociada.
Para eso, envía una solicitud con tu Access Token de pruebaClave privada de la aplicación creada en Mercado Pago, utilizada en el backend. Accede a ella en Tus integraciones > Datos de integración > Pruebas > Credenciales de prueba. El Access Token de prueba comienza con el prefijo `APP_USR`. y los parámetros indicados a continuación al endpoint /v1/ordersPOST y ejecuta la solicitud.
processing_mode=manual) puede tener un plazo de validez definido en el campo expiration_time. Si el campo no se envía, el plazo predeterminado será de P1D (un día). Cuando el plazo vence sin que la order haya alcanzado un estado final, se cierra automáticamente, se cancelan los pagos pendientes asociados y el integrador es notificado.curlcurl --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": "Compra de producto MPE", "payer": { "email": "test_payer@example.com", "first_name": "Juan", "last_name": "Pérez", "identification": { "type": "DNI", "number": "12345678" } }, "config": { "location": { "state_id": "PE-LIM" } }, "transactions": { "payments": [ { "amount": "200.00", "expiration_time": "P1D", "payment_method": { "id": "pagoefectivo_atm", "type": "atm" } } ] } }'
429 Too Many Requests, espera el tiempo indicado en el header Retry-After de la respuesta antes de intentar nuevamente. Consulta Posibles errores para más detalles.| Parámetro | Tipo | Descripción | Obligatoriedad |
Authorization | Header | Hace referencia a tu clave privada, el Access Token de pruebaClave privada de la aplicación creada en Mercado Pago, utilizada en el backend. Accede a ella en Tus integraciones > Datos de integración > Pruebas > Credenciales de prueba. El Access Token de prueba comienza con el prefijo `APP_USR`.. | Obligatorio |
X-Idempotency-Key | Header | Clave de idempotencia. Garantiza que cada solicitud sea procesada solo una vez. Usa un valor exclusivo en el header de la solicitud, como un UUID V4 o una string aleatoria. | Obligatorio |
processing_mode | Body. String | Modo de procesamiento de la order: automatic para crear y procesar automáticamente, o manual para procesar en una etapa separada. Para más información, accede a Modelo de integración. | Obligatorio |
expiration_time | Body. String | Cuando una order se crea en modo manual (processing_mode=manual), este parámetro permite definir su tiempo de expiración utilizando el formato de duración ISO 8601. El período comienza en created_date y el límite máximo es de 2920 horas. Si no se envía, el valor predeterminado será de P1D (un día). Este parámetro no debe enviarse al crear una order en modo automático (processing_mode=automatic). | Opcional |
config.location | Body. Object | Información sobre la ubicación del pagador. | Opcional |
config.location.state_id | Body. String | Código del estado, provincia o región administrativa del pagador, formado por el código de dos letras del país, seguido de un guion y el código de la localidad. Consulta los valores aceptados.Amazonas (PE-AMA); Ancash (PE-ANC); Apurimac (PE-APU); Arequipa (PE-ARE); Ayacucho (PE-AYA); Cajamarca (PE-CAJ); Callao (PE-CAL); Cusco (PE-CUS); Huancavelica (PE-HUV); Huanuco (PE-HUC); Ica (PE-ICA); Junin (PE-JUN); La Libertad (PE-LAL); Lambayeque (PE-LAM); Lima Provincias (PE-LIM); Loreto (PE-LOR); Madre De Dios (PE-MDD); Moquegua (PE-MOQ); Pasco (PE-PAS); Piura (PE-PIU); Puno (PE-PUN); San Martin (PE-SAM); Tacna (PE-TAC); Tumbes (PE-TUM); Ucayali (PE-UCA). | Opcional |
total_amount | Body. String | Monto total de la transacción. | Obligatorio |
description | Body. String | Descripción del pedido. Aparece en el comprobante de pago que se muestra al comprador en el terminal ATM. Mínimo 1 y máximo 150 caracteres. | Obligatorio para pagoefectivo_atm |
payer.email | Body. String | E-mail del comprador. | Obligatorio |
payer.first_name | Body. String | Nombre del comprador. | Opcional |
payer.last_name | Body. String | Apellido del comprador. | Opcional |
payer.identification.type | Body. String | Tipo de documento del comprador, obtenido dinámicamente con mp.getIdentificationTypes(). | Opcional |
payer.identification.number | Body. String | Número de documento del comprador. | Opcional |
transactions.payments.payment_method.id | Body. String | Identificador del medio de pago. En este caso, el valor debe ser pagoefectivo_atm. | Obligatorio |
transactions.payments.payment_method.type | Body. String | Tipo del medio de pago. En este caso, el valor debe ser atm. | Obligatorio |
transactions.payments.expiration_time | Body. String | Plazo de vencimiento en formato de duración ISO 8601. Si bien puedes configurarlo entre 1 y 30 días luego de la creación del pago, recomendamos definir entre P1D y P3D para evitar conflictos entre el vencimiento y la acreditación del pago, que puede demorar hasta 2 horas hábiles desde su realización. En caso de que el pago se efectúe luego de la fecha de vencimiento establecida, el valor será devuelto a la cuenta de Mercado Pago del pagador. | Opcional |
La creación del pago ocurre de forma asíncrona en la order. Mientras se procesa, la order se devuelve con el estado processing y sin información.
Una vez finalizado el procesamiento, y al tratarse de un medio de pago offline, la order pasa al estado action_required con el detalle waiting_payment, indicando que el comprador aún debe completar el pago en el terminal ATM, tal como se muestra en el siguiente ejemplo de respuesta. Te recomendamos configurar las notificaciones del tópico Order para recibir actualizaciones sobre el cambio de estado, incluyendo los datos actualizados de la order. Alternativamente, puedes optar por enviar una solicitud al endpoint /v1/orders/{id}GET para consultar el estado actualizado.
json{ "id": "ORDPE01EXAMPLEPE1234NCAKKBF68N64S", "type": "online", "processing_mode": "automatic", "external_reference": "ext_ref_1234", "description": "Compra de producto 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" } } ] } }
| Parámetro | Tipo | Descripción |
transactions.payments.status | String | Devuelve el estado de la transacción. En este caso, devolverá action_required para indicar la necesidad de una acción para completar el procesamiento, es decir, hasta que se realice el pago. |
transactions.payments.status_detail | String | Detalle del estado de la transacción. En este caso, el valor obtenido es en espera (waiting_payment) de que el comprador finalice el pago. |
transactions.payments.payment_method.ticket_url | String | URL con las instrucciones de pago a la que deberás redirigir al comprador. |
transactions.payments.payment_method.reference | String | Código de referencia del pago. |
transactions.payments.payment_method.verification_code | String | Código de verificación del pago. |
expiration_time | String | Período de expiración (en formato ISO 8601) devuelto para una order creada en modo manual (processing_mode=manual), contado desde created_date. Cuando se omite en la solicitud, el valor predeterminado devuelto será P1D (un día). Este parámetro no se devolverá para una order creada en modo automático (processing_mode=automatic). |
Tras crear la order, muestra al comprador la información necesaria para completar el pago en un terminal ATM de la red PagoEfectivo. Estos datos están disponibles en los campos payment_method de la respuesta.
| Campo | Descripción |
ticket_url | URL con las instrucciones completas de pago. Redirige o muestra este enlace al comprador. |
verification_code | Código de verificación que el comprador usa en el terminal ATM. |
reference | Número de referencia CIP de la transacción. |
financial_institution | Red de pago. Retorna "PagoEfectivo". |
El comprador debe utilizar el verification_code y el reference en el terminal ATM para completar el pago dentro del plazo de vencimiento definido en date_of_expiration.
Una vez que el comprador realice el pago, la order pasa a status: processed. Si configuraste tus notificaciones, esto te será notificado vía webhook.
Si lo deseas, puedes cancelar un pago creado, siempre y cuando se encuentre pendiente o en proceso; es decir, con status=action_required.
Adicionalmente, recomendamos cancelar los pagos que no fueron realizados dentro de la fecha de vencimiento establecida, para evitar problemas de facturación y conciliación.
Para obtener más información, consulta la sección Reembolsos y cancelaciones.