Pular para o conteúdo
LeonaPayLeonaPayDevelopers
Primeiros passosReferenciais da APIIntegraçõesv2
Colômbia · COP

PSE

PSE em COP, com contrato público LeonaPay e confirmação assíncrona.

Limites e disponibilidade

Consulte GET /api/v2/payment-methods antes de exibir o método. Use minAmount, maxAmount, settlement e available retornados para a empresa; os limites comerciais não são fixos na documentação.
MétodoPSE
MoedaCOP
MercadoColômbia
Tipo de instruçãoPSE

Campos obrigatórios

Valide estes campos no seu backend antes de chamar a API. Não envie credenciais LeonaPay ao navegador.
payer.nameNome completo
payer.emailE-mail válido
payer.phoneTelefone com DDI
payer.taxIdDocumento
payer.documentTypeCC, NIT, CE ou TI
bankCodeCódigo do banco escolhido

Criar pagamento PSE

Envie POST /api/v2/payments com uma chave idempotency-key UUID exclusiva.
curl --request POST \
+  --url https://api.leonapay.com.br/api/v2/payments \
+  --header 'Accept: application/json' \
+  --header 'Content-Type: application/json' \
+  --header 'x-api-key: {your_api_key}' \
+  --header 'idempotency-key: {unique_uuid_per_payment}' \
  --data '{"method":"PSE","currency":"COP","amount":125900,"reference":"pedido-pse-123","bankCode":"1007","payer":{"name":"Ana Gómez","email":"ana@exemplo.com","phone":"+573001234567","taxId":"1020304050","documentType":"CC"}}'

Resposta inicial completa

Persista data.id, status, method, currency e todas as instruções retornadas.
{"success":true,"onpayCode":"ONP201","data":{"id":"pay_01J...","status":"PENDING","method":"PSE","currency":"COP","amount":125900}}

Tempo das instruções

A criação retorna PENDING. A URL de checkout chega de forma assíncrona: ao receber payment.updated, consulte a mesma transação e redirecione o pagador para nextAction.redirectUrl.

Estados e webhook

A resposta inicial não comprova liquidação. Valide a assinatura HMAC sobre o corpo bruto, responda 2xx rapidamente e processe cada event.id uma única vez.
StatusAção
PENDINGAguardar instrução ou confirmação
ACTION_REQUIREDEntregar a ação ao pagador
PAIDLiberar o pedido uma única vez
FAILEDEncerrar a tentativa
EXPIREDNão reutilizar a instrução
REFUNDEDRegistrar devolução/reversão
{"id":"evt_01J...","event":"payment.paid","occurredAt":"2026-09-22T18:32:10Z","data":{"id":"pay_01J...","reference":"pedido-123","status":"PAID","method":"PSE","currency":"COP","amount":125.90}}

Conciliação

O retorno do navegador não confirma o pagamento. Libere o pedido somente após payment.paid ou consulta autenticada em PAID.

Erros e retentativas

Corrija respostas ONP400 antes de uma nova tentativa. Em ONP429, ONP502 ou ONP503, use backoff com jitter e repita a mesma requisição com a mesma idempotência. Consulte o pagamento antes de criar outro.
CódigoAção
ONP400_*Corrigir o campo indicado
ONP409_IDEMPOTENCY_CONFLICTNão reutilizar UUID com conteúdo diferente
ONP422_PSE_REJECTEDRevisar os dados e iniciar nova tentativa
ONP503_PSE_TEMPORARILY_UNAVAILABLERetentar com a mesma idempotência

Como simular o resultado no Sandbox

Crie o pagamento usando a chave e a Base URL do Sandbox. PIX, boleto, SPEI, MB WAY, transferências bancárias, PSE, Nequi e Bre-B permanecem aguardando até você enviar o resultado desejado ao endpoint de simulação. Use o ID retornado na criação do pagamento.
Troque PAID por FAILED ou EXPIRED para testar os outros cenários. A simulação aceita somente pagamentos da mesma empresa e do ambiente Sandbox.
StatusResultado simulado
PAIDPagamento confirmado e webhook payment.paid emitido
FAILEDPagamento recusado e webhook payment.failed emitido
EXPIREDCobrança expirada e webhook payment.expired emitido
curl --request POST \
  --url https://sandbox.api.leonapay.com.br/api/v2/simulations/payments/{paymentId} \
  --header 'x-api-key: {sandbox_api_key}' \
  --header 'Content-Type: application/json' \
  --data '{"status":"PAID"}'
LeonaPay Developers · API v2