Skip to main content

Criar pagamento — cartão

POST /api/v1/payments/card — requer X-Client-ID + X-API-Key. Nenhum dado sensível de cartão fica salvo, somente os 4 últimos dígitos e as datas de expiração para controle do cliente. Todos os dados sensíveis de clientes, como CPF, são criptografados com o algoritmo AES-256-CBC com chave de 32 bytes, que não fica exposta em nenhum lugar, apenas nos cofres da AWS.
Para reutilizar um cartão tokenizado, substitua os campos do cartão pelo token:
Para forçar um gateway específico, inclua gateway_first_try; ele será a prioridade 1 e, caso falhe, seguirá a regra definida na página de Orquestração:
Em ambiente sandbox é possível enviar a chave simulate_payment_fail para simular e testar a retentativa de pagamentos:

Códigos de resposta

O backend usa coroutines para processar o pagamento em paralelo à requisição. Se o gateway não responder dentro do time_to_wait_sync (padrão 5s), o status 202 é retornado imediatamente e o resultado final chega via webhook assim que o pagamento for finalizado.

Resposta (201 ou 202)


Pré-autorização, captura e cancelamento

Por padrão a cobrança é autorizada e capturada na mesma requisição. Enviando capture: false no corpo do pagamento com cartão, a PlugToPay apenas reserva o valor no cartão do cliente: a transação volta com status authorized e o dinheiro só sai quando você capturar. É o fluxo usado quando a cobrança final só se confirma depois — reserva de hospedagem, pedido que ainda vai ser separado no estoque, aluguel com caução.
A pré-autorização depende do gateway que processar a transação. Hoje é suportada por Pagar.me, PagBank, Stripe e e-Rede. Nos demais, capture: false é ignorado e a cobrança sai capturada.

Capturar

POST /api/v1/payments/{id}/capture — confirma a cobrança de uma transação authorized.
O corpo é opcional. Omitir captura o valor total; informar amount faz uma captura parcial.
Resposta 200:

Cancelar a pré-autorização

POST /api/v1/payments/{id}/cancel — libera o valor reservado. Não tem corpo.
Resposta 200:

Regras

Um 200 não garante que deu certo. Se o gateway recusar a captura ou o cancelamento, a resposta ainda é 200 — o que muda é o status do corpo, que vem como failed em vez de approved/cancelled. O 422 cobre só os casos da tabela acima. Sempre confira o status da resposta antes de considerar a operação concluída. O mesmo vale para o estorno.
Capturar e cancelar são operações finais e opostas: depois de capturar, use o estorno para devolver o valor; depois de cancelar, a transação não pode mais ser capturada.
Ainda não é possível assinar um webhook para as transições authorized e cancelled — a lista de eventos aceitos no cadastro de webhooks não inclui esses dois. Até que isso mude, acompanhe o resultado da captura e do cancelamento pela própria resposta da requisição ou consultando GET /payments/{id}.
Ambas as rotas também existem sob /api/v1/user/payments/{id}/capture e /cancel para uso do painel, autenticadas com Authorization: Bearer <jwt>.

Estornar pagamento

POST /api/v1/payments/{id}/refund — devolve ao cliente o valor de uma transação já aprovada (capturada). Para desfazer uma pré-autorização que ainda não foi capturada, use o cancelamento acima.
O corpo é opcional. Omitir estorna o valor total; informar amount faz um estorno parcial.
Resposta 200:
Também disponível em /api/v1/user/payments/{id}/refund para o painel.

Criar pagamento — PIX

POST /api/v1/payments/pix — requer X-Client-ID + X-API-Key. O campo payment_method é injetado automaticamente pelo backend.

Resposta PIX

O objeto pix contém tudo que é necessário para renderizar o QR ao cliente:
Recomendamos aguardar o webhook de approved em vez de fazer polling. Se o usuário fechar a tela, armazene o transaction_id e consulte o status sob demanda via GET /api/v1/user/payments/{id}.

Listar pagamentos

Disponível em dois contextos com autenticação diferente: Ambas retornam o mesmo shape paginado e aceitam os mesmos filtros: Resposta:

Buscar pagamento por ID

Disponível em dois contextos com autenticação diferente:
Retorna um único PaymentResource com o mesmo shape da listagem, incluindo o objeto webhook com as tentativas de entrega associadas à transação.