API da Plataforma
de Pagamento PIX
Comerciantes, contas bancárias, chaves PIX, cobranças, geração de BR Code/QR Code e confirmação de pagamento via webhook. Utiliza um MockPixProvider para desenvolvimento local; um PSP real pode ser conectado depois pela mesma interface PixProvider.
Comerciantes
Cadastro, consulta e gerenciamento de chaves de API para comerciantes (CPF/CNPJ).
Contas Bancárias
Registro e validação de contas (CHECKING, SAVINGS, PAYMENT) junto ao provedor PIX.
Chaves PIX
Cadastro de chaves CPF, CNPJ, EMAIL, PHONE e EVP com integração ao DICT/BCB.
Cobranças PIX
Modos STATIC, DYNAMIC e LEGACY com geração de TXID, BR Code e QR Code PNG.
Pix Automático
Recorrências com 5 jornadas (JOURNEY_1-4 + OPEN_FINANCE) e 5 frequências.
Devoluções
Solicitação idempotente de devoluções e conciliação com o provedor PIX.
🏗️Arquitetura do Sistema
Visão em camadas da plataforma, mostrando os domínios, padrões arquiteturais (Outbox, Idempotência, mTLS) e integrações externas com PSP, BCB/DICT e sistemas de pagadores.
Transactional Outbox
Persistência atômica de dados + eventos; worker assíncrono com retry e backoff exponencial.
Idempotência
Cabeçalho Idempotency-Key em cobranças e devoluções para evitar duplicatas.
mTLS nos Webhooks
Webhooks do PSP autenticados por mutual TLS, garantindo origem confiável das notificações.
Provider Pattern
Interface PixProvider abstrai PSP; MockPixProvider em dev, PSP real em produção.
💡Conceitos-chave
Termos e padrões essenciais para entender a API.
TXID
Identificador único de 25-35 caracteres gerado pela plataforma para cada cobrança PIX. É o identificador usado pelo PSP e no BR Code.
BR Code / EMV
String padronizada (padrão EMV) que contém todos os dados do PIX. Pode ser transformada em QR Code PNG ou copiada como "Pix Copia e Cola".
Idempotency-Key
Cabeçalho HTTP que garante que requisições repetidas com o mesmo payload retornem o mesmo resultado, sem criar duplicatas.
Outbox Pattern
Eventos são persistidos atomicamente com a transação de negócio e processados assincronamente, garantindo entrega eventual consistente.
mTLS (Mutual TLS)
Autenticação bilateral por certificado digital. Usado nos webhooks do PSP para garantir que apenas o provedor autorizado envia notificações.
MockPixProvider
Implementação local do PixProvider para desenvolvimento. Simula PSP real sem movimentação financeira. Disponível apenas em perfis local/dev/test.
Conciliação
Comparação entre expectedAmount e receivedAmount para identificar MATCHED, UNDERPAID, OVERPAID ou UNPAID.
Pix Automático
Mecanismo de recorrência oficial do BCB. Suporta 5 jornadas (JOURNEY_1-4 + OPEN_FINANCE) e políticas de retry (NAO_PERMITE / PERMITE_3R_7D).
🔐Autenticação e Segurança
A plataforma suporta três esquemas de autenticação para diferentes cenários de uso.
Fluxo de Autenticação
X-API-Key
Chave da plataforma configurada em PIX_API_KEY. Usada nas operações administrativas e no cadastro de comerciantes fora dos perfis local/dev/test.
X-Merchant-API-Key
Chave retornada no cadastro ou rotação da chave do comerciante. Use nas operações dos seus recursos e no Pix Automático. Informe somente o valor da chave, sem prefixo Bearer.
Authorization: Bearer <token>
Access token RS256 do emissor configurado. Exige identidade de serviço habilitada, serviço permitido e scope da operação. Devoluções e cobranças recorrentes exigem delegação. Não combine com chaves de API.
⚡Quick Start
Fluxo mínimo para receber seu primeiro pagamento PIX em 4 passos.
Criar comerciante
POST /api/v1/merchants
Headers: X-API-Key: <platform-key>
{
"documentType": "CNPJ",
"documentNumber": "12345678000195",
"legalName": "Loja Exemplo LTDA",
"tradeName": "Loja Exemplo",
"email": "contato@loja.com.br"
}
→ Retorna: merchantCode + apiKey
Registrar conta bancária e chave PIX
POST /api/v1/merchants/{merchantCode}/accounts
Headers: X-Merchant-API-Key: <merchant-key>
{
"bankCode": "001",
"branch": "1234",
"accountNumber": "12345-6",
"accountType": "CHECKING",
"cpf": "12345678901"
}
→ Retorna: accountId
POST /api/v1/accounts/{accountId}/pix-keys
{ "type": "EVP", "value": "random-key" }
→ Retorna: pixKeyId
Criar cobrança PIX
POST /api/v1/pix/charges
Headers:
X-Merchant-API-Key: <merchant-key>
Idempotency-Key: pedido-12345
{
"accountId": "<accountId>",
"pixKeyId": "<pixKeyId>",
"amount": 150.00,
"description": "Pedido 12345",
"expirationSeconds": 3600,
"mode": "DYNAMIC"
}
→ Retorna: chargeId, txid, brCode, expiresAt
Receber pagamento via webhook
A plataforma recebe automaticamente via mTLS:
POST /api/v1/webhooks/pix/provider (mTLS)
{
"pix": [{
"endToEndId": "E...",
"txid": "ABC123DEF456",
"valor": 150.00,
"horario": "2024-01-15T14:30:00Z"
}]
}
→ Pagamento confirmado! Status: PAID ✅
# Em dev/test, simule com:
POST /api/v1/dev/pix/charges/{chargeId}/simulate-payment
🚀Fluxo de Onboarding
Como um comerciante é cadastrado na plataforma, registra sua conta bancária e a valida junto ao PSP.
Sequência de Onboarding
/api/v1/merchants/api/v1/merchants/{merchantCode}/accounts/api/v1/accounts/{accountId}/validate/api/v1/merchants/{merchantCode}🔑Chaves PIX
Cadastro, listagem e desativação de chaves PIX. Suporta CPF, CNPJ, e-mail, telefone e chave aleatória (EVP).
Fluxo de Chaves PIX
/api/v1/accounts/{accountId}/pix-keys/api/v1/accounts/{accountId}/pix-keys/api/v1/pix-keys/{pixKeyId}/api/v1/pix-keys/{pixKeyId}💰Cobranças PIX
Criação de cobranças com geração de TXID, consulta ao provedor para obter código de barras, e persistência. Operação idempotente via cabeçalho Idempotency-Key.
Fluxo de Criação de Cobrança
💡 Idempotência: Ao repetir o mesmo Idempotency-Key com o mesmo payload, a cobrança original é retornada em vez de criar uma duplicata.
/api/v1/pix/charges/api/v1/pix/charges/{chargeId}/api/v1/pix/charges/{chargeId}/qr-code/api/v1/pix/charges/{chargeId}/br-code💳Pagamentos PIX
Fluxo de recebimento de notificações de pagamento do PSP via webhook autenticado por mTLS, processamento e confirmação.
Fluxo de Pagamento via Webhook
🔒 Segurança: O webhook do provedor PIX é autenticado por mTLS (mutual TLS), garantindo que apenas o PSP configurado pode enviar notificações.
/api/v1/webhooks/pix/provider/api/v1/webhooks/pix/mock/api/v1/pix/payments/by-charge/{chargeId}/api/v1/pix/payments/by-charge/{chargeId}/receipts↩️Devoluções PIX
Solicitação idempotente de devoluções de pagamentos e conciliação do estado com o provedor PIX.
Fluxo de Devolução
/api/v1/pix/payments/{paymentId}/refunds/api/v1/pix/payments/{paymentId}/refunds/api/v1/pix/payments/{paymentId}/refunds/{refundId}/api/v1/pix/payments/{paymentId}/refunds/{refundId}/reconcile🔄Pix Automático
Fundação de recorrências, solicitações de autorização, geração de QR Codes compostos e agendamento de cobranças periódicas.
Fluxo do Pix Automático
Frequências Suportadas
Jornadas
/api/v1/pix/automatic/locations/api/v1/pix/automatic/recurrences/api/v1/pix/automatic/recurrences/{idRec}/api/v1/pix/automatic/recurrences/{idRec}/schedule/api/v1/pix/automatic/recurrences/{idRec}/qr-code/api/v1/pix/automatic/recurrences/{idRec}/br-code/api/v1/pix/automatic/recurrences/{idRec}/charges/api/v1/pix/automatic/recurrences/{idRec}/charges/schedule/api/v1/pix/automatic/recurrences/{idRec}/authorization-requests/api/v1/pix/automatic/rec/{accessToken}/api/v1/pix/automatic/charges/{txid}🔔Webhooks
Notificações de pagamento recebidas do PSP (via mTLS) e do provedor mock (para desenvolvimento).
Estrutura do Webhook do Provedor (mTLS)
{
"pix": [
{
"endToEndId": "E12345678901234567890123456789012",
"txid": "ABC123DEF456",
"valor": 150.00,
"horario": "2024-01-15T14:30:00Z",
"pagador": {
"cpf": "12345678901",
"nome": "João Silva"
}
}
]
}
Estrutura do Webhook Mock (Dev)
{
"eventId": "evt-unique-id-123",
"eventType": "PAYMENT_CONFIRMED",
"txid": "ABC123DEF456",
"amount": 150.00,
"status": "PAID",
"paidAt": "2024-01-15T14:30:00Z",
"payerName": "João Silva",
"payerDocument": "12345678901",
"receiptId": "rcp-456"
}
Idempotência: O webhook mock é idempotente por eventId: repetir o mesmo evento nunca cria um pagamento duplicado.
📬Transactional Outbox Pattern
Padrão de outbox transacional para garantir consistência entre persistência de dados e notificações externas.
Fluxo do Transactional Outbox
Reprocessamento Manual
Eventos que falharam após todas as tentativas podem ser reprocessados manualmente:
POST /api/v1/admin/outbox/{eventId}/retry
📋Modelos de Dados
Principais schemas da API com seus campos e tipos.
idrequiredmerchantCodeaccountIdrequiredpixKeyIdrequiredtxidmodeSTATIC|DYNAMIC|LEGACYamountrequireddescriptionstatusACTIVE|PAID|EXPIRED|CANCELLEDbrCodeexpiresAt, createdAtidrequiredchargeIdtxidreceiptIdamountstatusPENDING|PAID|FAILEDpayerNamepayerDocumentpaidAtidRecrequiredlocationIdreceiverCnpj, receiverNamecontractrequireddebtorNamerequiredfrequencySEMANAL..ANUALrecurringAmount, minimumAmountretryPolicyNAO_PERMITE|PERMITE_3R_7DstatusCREATED|APPROVED|REJECTED|EXPIRED|CANCELLEDjourneyAWAITING|JOURNEY_1-4|OPEN_FINANCEchargeIdrequiredtxidexpectedAmountreceivedAmountoutstandingAmountchargeStatusACTIVE|PAID|EXPIRED|CANCELLEDreconciliationStatusUNPAID|UNDERPAID|MATCHED|OVERPAIDreceiptCountchargeStatusConflictmerchantCoderequireddocumentTypeCPF|CNPJdocumentNumberlegalName, tradeNameemailstatusACTIVE|INACTIVEapiKeyidrequiredmerchantCodebankCode3 dígitosbranch, accountNumberaccountTypeCHECKING|SAVINGS|PAYMENTstatusPENDING|ACTIVE|INACTIVE|FAILED📡Todos os Endpoints
Lista completa de endpoints da API organizados por grupo funcional.