Yape
Com o Checkout API do Mercado Pago, é possível oferecer pagamentos com Yape. Nesse meio de pagamento, o comprador gera um código OTP (One-time password) diretamente no aplicativo Yape, e o integrador o converte em um token seguro para concluir a transação, sem redirecionamento externo e sem necessidade de cartão físico.
Diferentemente dos meios de pagamento diferidos, o Yape é processado de forma síncrona quando a order é criada em modo automático, ou seja, a resposta à criação da order já traz o resultado final do pagamento, confirmando a transação em tempo real.
Se você já tem o ambiente de desenvolvimento configurado e deseja oferecer Yape como meio de pagamento, siga os passos abaixo.
processing_mode. Para mais informações, acesse a seção Modelo de integração. No caso de pagamentos com Yape, a escolha do modo de processamento da order refletirá diretamente em como proceder caso seja necessário cancelar o pagamento.
Para receber pagamentos, adicione no frontend um formulário que capture o número de celular e o OTP que o comprador gera no aplicativo Yape.
Se você já tem um desenvolvimento que inclui um formulário de pagamento próprio, certifique-se de incluir Yape entre as opções de pagamento que deseja oferecer, conforme indicado abaixo, e continue para a etapa de Criar token Yape.
Caso ainda não tenha um formulário de pagamento, adicione o modelo abaixo ao seu projeto e inclua o identificador do Yape como opção a ser oferecida.
| Meio de pagamento | payment_method_id |
| Yape | yape |
html<form id="form-checkout" action="/process_payment" method="post"> <div> <label for="payerPhone">Número de celular</label> <input id="form-checkout__payerPhone" name="payerPhone" type="text" /> </div> <div> <label for="payerOTP">OTP</label> <input id="form-checkout__payerOTP" name="payerOTP" type="text" /> </div> <div> <button type="submit">Pagar com Yape</button> </div> </form>
O token Yape é criado a partir do número do celular e do código OTP (One-Time Password) informados na requisição, aumentando a segurança durante o fluxo de pagamento. Uma vez que o token é utilizado em determinada compra, ele é descartado, sendo necessária a criação de um novo para futuras compras.
Você pode criá-lo com o MercadoPago.js ou por uma chamada direta à API.
Com o MercadoPago.js já adicionado e inicializado conforme a seção Configurar ambiente de desenvolvimento, capture os dados do formulário e crie o token com o método mp.yape.
javascriptconst form = document.getElementById("form-checkout"); form.addEventListener("submit", async (event) => { event.preventDefault(); const otp = document.getElementById("form-checkout__payerOTP").value; const phoneNumber = document.getElementById("form-checkout__payerPhone").value; const yape = mp.yape({ otp, phoneNumber }); const yapeToken = await yape.create(); // Envie yapeToken.id ao seu servidor para criar a order. });
Nesse fluxo, o requestId é gerado automaticamente pelo MercadoPago.js.
O envio do pagamento deve ser realizado mediante a criação de uma order que contenha 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 ao endpoint /v1/ordersPOST.
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": "100.00", "payer": { "email": "test_user_pe@testuser.com", "entity_type": "individual", "identification": { "type": "DNI", "number": "12345678" }, "phone": { "area_code": "51", "number": "987654321" } }, "transactions": { "payments": [ { "amount": "100.00", "payment_method": { "id": "yape", "type": "debit_card", "token": "{{YOUR_YAPE_TOKEN}}" } } ] } }'
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.Veja na tabela abaixo as descrições dos parâmetros que são obrigatórios na requisição e daqueles que, embora sejam opcionais, possuem alguma particularidade importante de ser destacada.
| 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 e que é utilizada no backend. Você pode acessá-la através de 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. Essa chave garante que cada solicitação seja processada apenas uma vez, evitando duplicidades. 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. Os valores possíveis são: - automatic: para criar e processar a order em modo automático. - manual: para criar a order e processá-la posteriormente. Para mais informações, acesse a seção Modelo de integração. | Obrigatório |
total_amount | Body. String | Valor total da transação. Deve ser maior que 0. O limite máximo por transação pode ser de S/ 500, S/ 900 ou S/ 2.000, conforme o limite configurado no aplicativo Yape. | Obrigatório |
payer.email | Body. String | E-mail do comprador. | Obrigatório |
payer.identification.type | Body. String | Tipo de documento do comprador. Para o Peru: DNI, entre outros. | Opcional |
payer.identification.number | Body. String | Número de identificação do comprador. | Opcional |
payer.phone.area_code | Body. String | Código de área do telefone do comprador. Para o Peru, utilize 51. | Obrigatório |
payer.phone.number | Body. String | Número de telefone do comprador associado ao Yape. | Obrigatório |
transactions.payments.payment_method.id | Body. String | Identificador do meio de pagamento. O valor deverá ser yape. | Obrigatório |
transactions.payments.payment_method.type | Body. String | Tipo do meio de pagamento. O valor deverá ser debit_card. | Obrigatório |
transactions.payments.payment_method.token | Body. String | Token Yape gerado na etapa anterior e de uso único. Gere um novo token a cada tentativa de pagamento. | Obrigatório |
Ao criar a order com sucesso, você receberá uma resposta com status: processed e status_detail: accredited, indicando que o pagamento foi aprovado.
json{ "id": "ORDPE01EXAMPLEPE1234NCAKKBF68N64S", "type": "online", "processing_mode": "automatic", "external_reference": "ext_ref_1234", "total_amount": "100.00", "total_paid_amount": "100.00", "country_code": "PER", "user_id": "1234567890", "status": "processed", "status_detail": "accredited", "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", "reference_id": "1234567890", "amount": "100.00", "paid_amount": "100.00", "status": "processed", "status_detail": "accredited", "payment_method": { "id": "yape", "type": "debit_card" } } ] } }
Como o Yape é processado de forma síncrona quando a order é criada em modo automático, não há redirecionamento do comprador. Entre os parâmetros devolvidos, destacam-se os indicados na tabela a seguir.
| Parâmetro | Tipo | Descrição |
transactions.payments.status | String | Retorna o status da transação. Neste caso, devolverá processed para indicar que o pagamento foi processado, ou failed caso tenha sido recusado. |
transactions.payments.status_detail | String | Detalhe do status da transação. Neste caso, o valor obtido é accredited, indicando que o pagamento foi aprovado. |
transactions.payments.paid_amount | String | Valor efetivamente pago na transação. |
O modo escolhido na criação da order (automático ou manual) determina como o pagamento com Yape é processado e, consequentemente, como seu cancelamento deve ser realizado. Veja a seguir o procedimento correspondente a cada situação:
- Modo automático: a order é criada em modo automático e o pagamento com Yape é processado de forma síncrona (
status=processed). Com isso, a resposta à criação da order já trará o resultado final do pagamento, não sendo possível cancelá-lo quando aprovado (status_detail=accredited). Nesse caso, será necessário realizar um processo de reembolso através de uma solicitação ao endpoint de /v1/orders/{order_id}/refundPOST. - Modo manual: a order é criada em modo manual e o processamento do pagamento requer uma etapa adicional (
status=action_required) no endpoint de Processar orderPOST. Nesse caso, antes de processar o pagamento será possível cancelá-lo através de uma solicitação ao endpoint de /v1/orders/{order_id}/cancelPOST.
Para obter mais informações, consulte a seção Reembolsos e cancelamentos.