PagoEfectivo ATM
Com o Checkout API do Mercado Pago, também é possível oferecer pagamentos com PagoEfectivo ATM para compradores no Peru. Com esse meio de pagamento, o comprador realiza um pagamento diferido em caixas eletrônicos (ATM) e pontos de pagamento da rede PagoEfectivo. O comprador recebe um código de referência (CIP) e um código de verificação para concluir o pagamento no terminal, dentro do prazo de vencimento definido pelo integrador. A compra é considerada concluída somente após a confirmação do pagamento.
Se você já tem o ambiente de desenvolvimento configurado e deseja oferecer PagoEfectivo ATM como meio de pagamento, siga os passos abaixo.
processing_mode. Para mais informações, acesse a seção Modelo de integração.Para receber pagamentos com PagoEfectivo ATM, é necessário adicionar ao frontend um formulário que capture os dados do pagador de forma segura.
Se você já tem um formulário de pagamento, certifique-se de incluir PagoEfectivo ATM entre as opções disponíveis conforme indicado abaixo e continue para a etapa de Enviar pagamento.
| Meio de pagamento | payment_method_id |
| PagoEfectivo ATM | pagoefectivo_atm |
html<form id="form-checkout" action="/process_payment" method="post"> <div> <label for="payerFirstName">Nome</label> <input id="form-checkout__payerFirstName" name="payerFirstName" type="text"> </div> <div> <label for="payerLastName">Sobrenome</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 do 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>
Os dados de nome, sobrenome e identificação são opcionais para PagoEfectivo ATM. Caso opte por coletar a identificação, obtenha os tipos de documento dinamicamente com o MercadoPago.js já configurado no ambiente de desenvolvimento.
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); }
O envio do pagamento é realizado criando uma order com a transação de pagamento associada.
Para isso, envie uma requisição com o seu Access Token de testeChave privada da aplicação criada no Mercado Pago, utilizada no backend. Acesse-a em Suas integrações > Dados da integração > Testes > Credenciais de teste. O Access Token de teste começa com o prefixo `APP_USR`. e os parâmetros indicados abaixo para o endpoint /v1/ordersPOST e execute a requisição.
processing_mode=manual) pode ter um prazo de validade definido no campo expiration_time. Se o campo não for enviado, o prazo padrão será de P1D (um dia). Quando o prazo vence sem que a order tenha chegado a um status final, ela é encerrada automaticamente, os pagamentos pendentes associados são cancelados e o integrador é 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 produto MPE", "payer": { "email": "test_payer@example.com", "first_name": "João", "last_name": "Silva", "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, aguarde o tempo indicado no header Retry-After da resposta antes de tentar novamente. Consulte Possíveis erros para mais detalhes.| Parâmetro | Tipo | Descrição | Obrigatoriedade |
Authorization | Header | Faz referência à sua chave privada, o Access Token de testeChave privada da aplicação criada no Mercado Pago, utilizada no backend. Acesse-a em Suas integrações > Dados da integração > Testes > Credenciais de teste. O Access Token de teste começa com o prefixo `APP_USR`.. | Obrigatório |
X-Idempotency-Key | Header | Chave de idempotência. Garante que cada solicitação seja processada apenas uma vez. Use um valor exclusivo no header da requisição, como um UUID V4 ou uma string aleatória. | Obrigatório |
processing_mode | Body. String | Modo de processamento da order: automatic para criar e processar automaticamente, ou manual para processar em etapa separada. Para mais informações, acesse Modelo de integração. | Obrigatório |
expiration_time | Body. String | Quando uma order é criada em modo manual (processing_mode=manual), este parâmetro permite definir seu tempo de expiração utilizando o formato de duração ISO 8601. O período começa em created_date e o limite máximo é de 2920 horas. Se não enviado, o valor padrão será de P1D (um dia). Este parâmetro não deve ser enviado na criação de uma order em modo automático (processing_mode=automatic). | Opcional |
config.location | Body. Object | Informações sobre a localização do pagador. | Opcional |
config.location.state_id | Body. String | Código do estado, província ou região administrativa do pagador, formado pelo código de duas letras do país, seguido por um hífen e pelo código da localidade. Consulte os valores aceitos.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 | Valor total da transação. | Obrigatório |
description | Body. String | Descrição do pedido. Aparece no comprovante de pagamento exibido ao comprador no terminal ATM. Mínimo 1 e máximo 150 caracteres. | Obrigatório para pagoefectivo_atm |
payer.email | Body. String | E-mail do comprador. | Obrigatório |
payer.first_name | Body. String | Nome do comprador. | Opcional |
payer.last_name | Body. String | Sobrenome do comprador. | Opcional |
payer.identification.type | Body. String | Tipo de documento do comprador, obtido dinamicamente com mp.getIdentificationTypes(). | Opcional |
payer.identification.number | Body. String | Número do documento do comprador. | Opcional |
transactions.payments.payment_method.id | Body. String | Identificador do meio de pagamento. Neste caso, o valor deve ser pagoefectivo_atm. | Obrigatório |
transactions.payments.payment_method.type | Body. String | Tipo do meio de pagamento. Neste caso, o valor deve ser atm. | Obrigatório |
transactions.payments.expiration_time | Body. String | Prazo de vencimento em formato de duração ISO 8601. Embora seja possível configurá-lo entre 1 e 30 dias após a criação do pagamento, recomendamos definir entre P1D e P3D para evitar conflitos entre o vencimento e a acreditação do pagamento, que pode demorar até 2 horas úteis a partir de sua realização. Caso o pagamento seja realizado após a data de vencimento estabelecida, o valor será devolvido à conta do Mercado Pago do pagador. | Opcional |
A criação do pagamento ocorre de forma assíncrona na order. Enquanto está sendo processada, a order é devolvida com o status de processing e sem informações.
Após a conclusão do processamento, e por se tratar de um meio de pagamento offline, a order passa para o status action_required com o detalhe waiting_payment, indicando que o comprador ainda precisa concluir o pagamento no terminal ATM, como mostrado no exemplo de resposta a seguir. Recomendamos configurar as notificações do tópico Order para receber atualizações sobre a mudança de status, incluindo os dados atualizados da order. Alternativamente, você pode optar por enviar uma requisição ao endpoint /v1/orders/{id}GET para consultar o status atualizado.
json{ "id": "ORDPE01EXAMPLEPE1234NCAKKBF68N64S", "type": "online", "processing_mode": "automatic", "external_reference": "ext_ref_1234", "description": "Compra de produto 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 | Descrição |
transactions.payments.status | String | Retorna o status da transação. Neste caso, retornará action_required para indicar a necessidade de uma ação para concluir o processamento, ou seja, até que se realize o pagamento. |
transactions.payments.status_detail | String | Detalhe do status da transação. Neste caso, o valor obtido é aguardando (waiting_payment) que o comprador finalize o pagamento. |
transactions.payments.payment_method.ticket_url | String | URL com as instruções de pagamento para a qual você deverá redirecionar o comprador. |
transactions.payments.payment_method.reference | String | Código de referência do pagamento. |
transactions.payments.payment_method.verification_code | String | Código de verificação do pagamento. |
expiration_time | String | Período de expiração (em formato ISO 8601) retornado para uma order criada em modo manual (processing_mode=manual), contado a partir de created_date. Quando omitido na requisição, o padrão retornado será P1D (um dia). Este parâmetro não será retornado para uma order criada em modo automático (processing_mode=automatic). |
Após criar a order, exiba ao comprador as informações necessárias para concluir o pagamento em um terminal ATM da rede PagoEfectivo. Esses dados estão disponíveis nos campos payment_method da resposta.
| Campo | Descrição |
ticket_url | URL com as instruções completas de pagamento. Redirecione ou exiba esse link ao comprador. |
verification_code | Código de verificação que o comprador usa no terminal ATM. |
reference | Número de referência CIP da transação. |
financial_institution | Rede de pagamento. Retorna "PagoEfectivo". |
O comprador deve utilizar o verification_code e o reference no terminal ATM para concluir o pagamento dentro do prazo de vencimento definido em date_of_expiration.
Depois que o comprador realizar o pagamento, a order passa para status: processed. Se você configurou suas notificações, isso será notificado via webhook.
Caso deseje, você pode cancelar um pagamento criado, desde que esteja pendente ou em processamento. Ou seja, com status=action_required.
Além disso, recomendamos cancelar os pagamentos que não foram realizados dentro da data de vencimento estabelecida, para evitar problemas de cobrança e conciliação.
Para obter mais informações, consulte a seção Reembolsos e cancelamentos.