KaironPay API
Documentação completa da API de pagamentos PIX. Integre cobranças, saques, webhooks e muito mais em minutos.
Cobranças PIX
QR Code dinâmico, confirmação em segundos
Saques PIX
Transferências para qualquer chave PIX
Webhooks
Notificações em tempo real por evento
Saldo
Disponível, pendente e reservado
Extrato
Histórico completo de transações
Multi-Provedor
XPayTech, OramaPay, Woovi e mais
1000. R$ 1,50 = 150.Authorization: Bearer sk_suachave. Veja a seção Autenticação para detalhes.Códigos de Status HTTP
| Código | Significado |
|---|---|
| 200 | Sucesso |
| 201 | Recurso criado com sucesso |
| 400 | Dados inválidos ou campos obrigatórios ausentes |
| 401 | Não autenticado — API Key inválida ou ausente |
| 403 | Sem permissão para este recurso |
| 404 | Recurso não encontrado |
| 409 | Conflito — correlationID já utilizado |
| 422 | Saldo insuficiente ou chave PIX inválida |
| 429 | Rate limit excedido |
| 500 | Erro interno — contate o suporte |
Status de cobranças
| Status | Descrição |
|---|---|
| ACTIVE | Cobrança criada, aguardando pagamento |
| COMPLETED | Pagamento PIX confirmado e processado |
| EXPIRED | Cobrança expirou sem pagamento |
| REFUNDED | Pagamento foi estornado ao pagador |
| CANCELLED | Cobrança cancelada manualmente |
Início Rápido
Do zero à primeira cobrança paga em menos de 10 minutos. Siga os passos abaixo.
Guia passo a passo
-
Obtenha sua API Key
Acesse app.kaironpay.com/dashboard → Configurações → API Key. Copie a chave no formato
sk_*. Guarde-a em uma variável de ambiente — nunca hardcode no código. -
Crie uma cobrança PIX
Faça um
POST /chargescom o valor em centavos. A API retorna umbrCode(copia-e-cola) e um QR Code em base64 pronto para exibir. -
Exiba o QR Code ao usuário
Use o
qrCodeImage(base64 PNG) direto em uma tag<img>, ou obrCodenum input copiável. Opcionalmente redirecione para opaymentLinkUrl. -
Configure um webhook
Cadastre sua URL no painel (Configurações → Webhooks). Quando o pagamento for confirmado, o KaironPay envia
TRANSACTION_COMPLETEDpara a sua URL via POST. -
Receba o webhook e libere o produto
No seu handler, verifique o
X-Webhook-Token, leia o evento e, se forPayInCompleted, libere o produto/serviço ao cliente.
Fluxo completo — criação de cobrança
Código completo mostrando criação de cobrança, polling de status e liberação de produto via webhook. Escolha sua linguagem:
Handler de Webhook — liberar produto
Quando o pagamento é confirmado, o KaironPay envia TRANSACTION_COMPLETED. Valide o token, identifique o pedido pelo correlationID e libere o produto:
Autenticação
Todas as requisições devem incluir sua API Key no header Authorization usando o esquema Bearer.
Como obter sua API Key
- Acesse o Painel KaironPay → app.kaironpay.com/dashboard
- Navegue até Configurações → API Key
- Clique em "Gerar nova chave" (ou copie a existente)
- Copie a chave no formato
sk_* - Salve como variável de ambiente:
KAIRONPAY_API_KEY=sk_suachave
Exemplos de uso
X-RateLimit-Remaining indica quantas requisições restam.Idempotência
Use correlationID para garantir que operações não sejam duplicadas em caso de falhas de rede ou retentativas.
correlationID duas vezes, a API retorna a operação existente (status 200) ao invés de criar uma nova. Isso é seguro para retentativas.Regras do correlationID
| Regra | Detalhe |
|---|---|
| Tamanho mínimo | 26 caracteres |
| Formato | Alfanumérico, hífens e underscores permitidos |
| Escopo | Por tipo de operação (cobranças e saques têm escopos separados) |
| Geração automática | Se omitido, a API gera um correlationID no formato KAIYYYYMMDDHHmmSS + uuid |
| 409 Conflict | Retornado se o mesmo correlationID for usado em operações diferentes (ex: criar dois saques diferentes com mesmo ID) |
Gerando correlationIDs únicos
correlationID estável e derivado do ID do pedido na sua aplicação. Assim, se a requisição falhar e você retentá-la, o servidor reconhece como idempotente e não cria uma cobrança duplicada.Erros & Retry
Como identificar erros, quando retentativas são seguras e como implementar backoff exponencial.
Quando retentativas são seguras
| Código | Retentativa segura? | Estratégia |
|---|---|---|
| 2xx | N/A | Sucesso — não retente |
| 400 | Não | Corrija os dados antes de retentativas |
| 401 | Não | Verifique/renove a API Key |
| 403 | Não | Problema de permissão — contate suporte |
| 404 | Não | Recurso não existe |
| 409 | Verificar | correlationID duplicado — pode buscar o recurso existente |
| 422 | Não | Saldo insuficiente ou chave inválida |
| 429 | Sim | Aguarde o header Retry-After |
| 500 | Sim | Backoff exponencial com jitter |
| Timeout | Sim* | *Use correlationID estável para idempotência |
Implementação de retry com backoff exponencial
Cobranças PIX
Crie, liste, consulte, cancele e estorne cobranças PIX com QR Code dinâmico.
Cria uma cobrança PIX e retorna o QR Code e o código copia-e-cola (brCode). A cobrança fica com status ACTIVE até ser paga ou expirar. Idempotente via correlationID.
Parâmetros do body (JSON)
| Parâmetro | Tipo | Descrição | |
|---|---|---|---|
| value | integer | obrigatório | Valor em centavos. Ex: 1500 = R$ 15,00 |
| comment | string | Descrição da cobrança exibida ao pagador | |
| correlationID | string | ID único na sua aplicação (mín. 26 chars). Gerado automaticamente se omitido. | |
| customer | object | Dados do pagador (ver abaixo) | |
| customer.name | string | Nome completo do pagador | |
| customer.taxID | string | CPF (11 dígitos) ou CNPJ (14 dígitos), apenas números | |
| customer.email | string | Email válido do pagador | |
| customer.phone | string | Telefone com DDD. Ex: +5511999887766 | |
| expiresDate | string | Data de expiração ISO 8601. Ex: 2026-12-31T23:59:59Z |
Campos da resposta
| Campo | Tipo | Descrição |
|---|---|---|
| correlationID | string | ID único da cobrança |
| value | integer | Valor em centavos |
| status | string | ACTIVE | COMPLETED | EXPIRED | REFUNDED | CANCELLED |
| brCode | string | Código PIX copia-e-cola (EMV) |
| qrCodeImage | string | QR Code em base64 PNG — use direto em <img src="..."> |
| paymentLinkUrl | string | Link para página de pagamento hospedada pelo KaironPay |
| expiresAt | string | Data/hora de expiração ISO 8601 |
| createdAt | string | Data/hora de criação ISO 8601 |
| paidAt | string | Data/hora do pagamento (se COMPLETED) |
| feeAmount | integer | Taxa cobrada em centavos (se pago) |
| netAmount | integer | Valor líquido recebido em centavos (se pago) |
| usedProvider | string | Provedor PIX utilizado |
Lista todas as cobranças da conta com filtros e paginação. Resultados ordenados por data de criação decrescente.
Query parameters
| Parâmetro | Tipo | Default | Descrição |
|---|---|---|---|
| skip | integer | 0 | Offset para paginação |
| limit | integer | 100 | Máximo de resultados (max: 500) |
| status | string | ACTIVE | COMPLETED | EXPIRED | REFUNDED | CANCELLED | |
| start_date | string | Data inicial ISO 8601 | |
| end_date | string | Data final ISO 8601 |
Consulta uma cobrança específica pelo correlationID. Retorna todos os campos incluindo brCode, qrCodeImage e dados do pagador.
Cancela uma cobrança ativa. A cobrança deve estar com status ACTIVE.
Estorna total ou parcialmente uma cobrança já paga (COMPLETED). O valor é devolvido ao pagador via PIX.
| Parâmetro | Tipo | Descrição | |
|---|---|---|---|
| value | integer | obrigatório | Valor do reembolso em centavos. Para reembolso total, use o valor original. |
| comment | string | Motivo do reembolso |
ACTIVE (aguardando pgto), COMPLETED (pago), EXPIRED (expirado), REFUNDED (reembolsado), CANCELLED (cancelado).Saldo
Consulte o saldo disponível, pendente e reservado da sua conta.
Retorna o saldo detalhado da conta em centavos.
Campos da resposta
| Campo | Descrição |
|---|---|
| available | Saldo disponível para saque imediato (centavos) |
| pending | Valor de cobranças ainda não liquidadas (centavos) |
| reserved | Valor retido em reserva financeira (centavos) |
| total | Soma de available + pending + reserved (centavos) |
| currency | Sempre BRL |
Transações
Consulte o extrato completo de movimentações da conta — PIX IN, PIX OUT, estornos e ajustes.
Lista todas as movimentações da conta com filtros e paginação. Resultados ordenados por data decrescente.
Query parameters
| Parâmetro | Tipo | Default | Descrição |
|---|---|---|---|
| type | string | PIX_IN | PIX_OUT | REFUND | ADJUSTMENT | |
| skip | integer | 0 | Offset de paginação |
| limit | integer | 100 | Máximo de resultados (max: 500) |
| start_date | string | Data inicial ISO 8601 | |
| end_date | string | Data final ISO 8601 |
Saques e Transferências
Envie PIX para qualquer chave — saques automáticos ou com aprovação manual.
auto (padrão) — processado imediatamente se saldo disponível. manual — fica pendente até aprovação de um admin no painel.Cria um saque PIX. O valor é debitado do saldo disponível imediatamente. Idempotente via correlationID.
Parâmetros do body (JSON)
| Parâmetro | Tipo | Descrição | |
|---|---|---|---|
| value | integer | obrigatório | Valor em centavos. Mínimo: 100 (R$ 1,00) |
| pixKey | string | obrigatório | Chave PIX de destino |
| pixKeyType | string | obrigatório | cpf | cnpj | email | phone | evp |
| description | string | Descrição do saque (aparece no extrato) | |
| correlationID | string | ID único para evitar duplicatas (mín. 26 chars) |
Tipos de chave PIX (pixKeyType)
| pixKeyType | Formato | Exemplo |
|---|---|---|
| cpf | 11 dígitos numéricos | 12345678900 |
| cnpj | 14 dígitos numéricos | 12345678000190 |
| Email válido | joao@email.com | |
| phone | +55 + DDD + número | +5511999887766 |
| evp | Chave aleatória (UUID) | a1b2c3d4-e5f6-7890-abcd-ef1234567890 |
422 saldo insuficiente, 422 chave PIX inválida, 403 saques bloqueados na conta, 409 correlationID duplicado.Lista todos os saques da conta com filtros e paginação.
| Parâmetro | Tipo | Default | Descrição |
|---|---|---|---|
| skip | integer | 0 | Offset para paginação |
| limit | integer | 100 | Máximo de resultados (max: 500) |
| status | string | COMPLETED | PENDING | FAILED | REJECTED | processing | |
| start_date | string | Data inicial ISO 8601 | |
| end_date | string | Data final ISO 8601 |
Consulta o status de um saque específico pelo reference_code.
pending_approval → processing → completed | failed | rejectedReembolsos
Estorne total ou parcialmente cobranças já pagas. O valor é devolvido ao pagador via PIX em instantes.
POST /charges/:id/refund é o método preferido. O endpoint POST /refunds também está disponível para compatibilidade.Cria um reembolso para uma cobrança já paga (COMPLETED). Suporta reembolso total ou parcial.
Parâmetros do body (JSON)
| Parâmetro | Tipo | Descrição | |
|---|---|---|---|
| correlationID | string | obrigatório | correlationID da cobrança original a ser reembolsada |
| value | integer | obrigatório | Valor do reembolso em centavos. Para reembolso total, use o valor original da cobrança. |
| comment | string | Motivo do reembolso |
Regras de reembolso
| Regra | Descrição |
|---|---|
| Status obrigatório | Apenas cobranças com status COMPLETED podem ser reembolsadas |
| Valor máximo | O valor do reembolso não pode exceder o valor original da cobrança |
| Reembolso parcial | Suportado — envie um valor menor que o original |
| Limite por cobrança | Apenas 1 reembolso por cobrança |
| Saldo | O valor é debitado do saldo disponível da sua conta |
| Webhook | Evento TRANSACTION_REFUNDED (PayInRefunded) é enviado após processamento |
Webhooks
Receba notificações em tempo real quando eventos ocorrem na sua conta. O KaironPay envia um POST HTTP para a URL cadastrada.
Como funciona
Cadastre sua URL
Acesse o painel → Configurações → Webhooks → Nova URL. Informe sua URL HTTPS acessível publicamente.
Copie o token
Cada webhook tem um token único gerado automaticamente. Salve como variável de ambiente (
KAIRONPAY_WEBHOOK_TOKEN). Este token é enviado no headerX-Webhook-Tokende cada requisição.Escolha os eventos
Selecione quais eventos deseja receber: cobranças, saques, reembolsos, etc.
Implemente o handler
Valide o token, responda HTTP
2xxem até 5 segundos e processe de forma assíncrona.
Headers enviados pelo KaironPay
| Header | Descrição | Exemplo |
|---|---|---|
| Content-Type | Tipo do conteúdo | application/json |
| X-Webhook-Token | Token único do webhook configurado no painel | wh_tok_abc123xyz... |
| X-KaironPay-Event | Tipo do evento (snake_case) | TRANSACTION_COMPLETED |
| X-KaironPay-Timestamp | Timestamp Unix da entrega | 1749297600 |
Validação do token
Sempre valide o header X-Webhook-Token antes de processar qualquer evento. Use comparação de tempo constante para evitar timing attacks.
Payload — TRANSACTION_COMPLETED (PayInCompleted)
Enviado quando um pagamento PIX é confirmado. Este é o evento mais importante — use-o para liberar o produto/serviço.
Payload — PAYOUT_COMPLETED (PayOutCompleted)
Retentativas e configurações
| Configuração | Valor |
|---|---|
| Timeout por tentativa | 5 segundos |
| Retentativas em falha | Até 3 vezes com backoff exponencial |
| Resposta esperada | HTTP 2xx (200, 201, 204) |
| Reenvio manual | Disponível no painel (Webhooks → Histórico → Reenviar) |
| Limite de URLs | Múltiplas URLs por conta, cada uma com token independente |
data.id ou data.referenceCode como chave de idempotência no seu banco de dados.Todos os Eventos
Referência completa de todos os eventos que podem ser recebidos via webhook, com payloads de exemplo.
Eventos de Cobrança (PIX In)
| Evento (X-KaironPay-Event) | payload.event | Quando é disparado |
|---|---|---|
| TRANSACTION_CREATED | PayInCreated | Cobrança PIX criada com sucesso |
| TRANSACTION_COMPLETED | PayInCompleted | Pagamento PIX confirmado ✅ |
| TRANSACTION_EXPIRED | PayInExpired | Cobrança expirou sem pagamento |
| TRANSACTION_CANCELLED | PayInCancelled | Cobrança cancelada via API ou painel |
| TRANSACTION_REFUNDED | PayInRefunded | Pagamento estornado ao pagador |
| TRANSACTION_CHARGEBACK | PayInChargeback | Contestação/disputa recebida no banco |
Eventos de Saque (PIX Out)
| Evento (X-KaironPay-Event) | payload.event | Quando é disparado |
|---|---|---|
| PAYOUT_CREATED | PayOutCreated | Saque criado, aguardando processamento |
| PAYOUT_APPROVED | PayOutApproved | Saque aprovado pelo admin (modo manual) |
| PAYOUT_COMPLETED | PayOutCompleted | Saque concluído e PIX enviado ✅ |
| PAYOUT_FAILED | PayOutFailed | Saque falhou (chave inválida, saldo insuficiente etc.) |
| PAYOUT_REJECTED | PayOutRejected | Saque rejeitado pelo admin |
Payloads completos por evento
PayInCreated
PayInExpired
PayInRefunded
PayOutFailed
Códigos de Erro
A API usa códigos HTTP padrão. O body de erro sempre contém os campos error e message.
Formato do erro
Tabela de erros
| Status | error | Descrição e ação sugerida |
|---|---|---|
| 400 | invalid_request | Campos obrigatórios ausentes ou com formato inválido. Verifique o body da requisição. |
| 400 | invalid_value | Valor monetário inválido (ex: negativo, não-inteiro). Certifique-se de enviar centavos. |
| 401 | auth_missing | Header Authorization não enviado. Adicione Authorization: Bearer sk_.... |
| 401 | invalid_api_key | API Key inválida, revogada ou inativa. Verifique no painel. |
| 403 | forbidden | Sem permissão para este recurso. Conta pode estar bloqueada. |
| 403 | payouts_blocked | Saques desabilitados na conta. Contate o suporte. |
| 404 | not_found | Recurso não encontrado. Verifique o correlationID ou reference_code. |
| 409 | duplicate_correlation_id | correlationID já utilizado em outra operação. Para idempotência, busque o recurso existente. |
| 422 | insufficient_balance | Saldo disponível insuficiente. Verifique details.available vs details.requested. |
| 422 | invalid_pix_key | Chave PIX não encontrada no DICT do Banco Central. Verifique o formato. |
| 422 | charge_not_paid | Tentativa de reembolso em cobrança não paga. Status deve ser COMPLETED. |
| 422 | refund_exceeds_value | Valor do reembolso maior que o valor original da cobrança. |
| 429 | rate_limit | Limite de requisições excedido. Aguarde o header Retry-After e tente novamente. |
| 500 | internal_error | Erro interno do servidor. Retente após alguns segundos. Se persistir, abra um ticket. |
Tratamento de erros em código
Limites & Boas Práticas
Rate limits, timeouts e recomendações para integração robusta e de alta disponibilidade.
Rate Limits
| Limite | Valor | Header de controle |
|---|---|---|
| Requisições por janela | 10.000 req / 15 min | X-RateLimit-Limit |
| Requisições restantes | Decresce a cada req | X-RateLimit-Remaining |
| Reset da janela | Timestamp Unix | X-RateLimit-Reset |
| Quando excedido | HTTP 429 + Retry-After | Retry-After (segundos) |
Timeouts recomendados
| Operação | Timeout sugerido | Observação |
|---|---|---|
| POST /charges (criar cobrança) | 30s | Criação pode envolver chamadas ao provedor PIX |
| GET /charges (listar) | 10s | Consultas rápidas |
| POST /payouts (criar saque) | 30s | Processamento pode levar alguns segundos |
| GET /balance | 5s | Consulta simples |
| Webhook (seu handler) | 5s | KaironPay aguarda até 5s pela resposta 2xx |
Boas práticas de integração
| Prática | Por quê? |
|---|---|
| Use correlationID estável | Baseie no ID do pedido da sua aplicação para que retentativas sejam idempotentes |
| Nunca exponha a API Key | Mantenha em variáveis de ambiente no servidor. Nunca no código-fonte ou em client-side JS |
| Prefira webhooks a polling | Webhooks são mais eficientes, baratos em rate limit e mais rápidos |
| Processe webhooks async | Responda HTTP 200 imediatamente e processe em background/fila |
| Implemente idempotência | Armazene o ID do evento processado para evitar processar o mesmo evento duas vezes |
| Monitore PAYOUT_FAILED | Configure alertas quando saques falharem para não deixar usuários sem pagamento |
| Use HTTPS na URL do webhook | O KaironPay rejeita URLs HTTP |
| Teste com o reenvio manual | Use Webhooks → Histórico → Reenviar no painel para reproduzir eventos |
| Exponha o /healthz do webhook | Facilita diagnóstico quando o KaironPay não consegue entregar |
| Log tudo | Registre evento, correlationID, timestamp e resposta de cada webhook recebido |
Checklist de produção
| Item | |
|---|---|
| ✓ | KAIRONPAY_API_KEY em variável de ambiente, nunca hardcoded |
| ✓ | KAIRONPAY_WEBHOOK_TOKEN armazenado com segurança |
| ✓ | URL do webhook em HTTPS |
| ✓ | Handler responde em menos de 5 segundos |
| ✓ | Idempotência implementada no handler de webhook |
| ✓ | Retry com backoff exponencial nas chamadas à API |
| ✓ | correlationID baseado no ID do pedido (estável) |
| ✓ | Alertas configurados para PayOutFailed e erros 5xx |
| ✓ | Logs estruturados com correlationID para rastreabilidade |