Skip to content

Autenticação

A API Xfin usa autenticação por API Key via header HTTP. Toda requisição a endpoints protegidos deve incluir o header X-Api-Key com a chave do parceiro.

Como funciona

Cada parceiro recebe uma API Key exclusiva no momento do onboarding. A chave:

  • É emitida por parceiro — cada integração possui credencial própria.
  • É comparada de forma timing-safe no servidor (usando ConstantTimeCompare), o que elimina ataques de timing por canal lateral.
  • É hashed com SHA-256 antes de ser persistida — nunca armazenada em texto plano. O valor raw é retornado apenas uma vez, no momento da criação.

Fazendo uma requisição autenticada

Inclua o header X-Api-Key em toda requisição a endpoints protegidos:

Terminal window
curl -s -X POST "https://xfin-payouts-ys3int7llq-rj.a.run.app/v1/payouts" \
-H "Content-Type: application/json" \
-H "X-Api-Key: sua-api-key-aqui" \
-d '{
"amount_brl": 100.00,
"receiver_wallet": "0xEnderecoCarteira",
"pix_key": "pagador@email.com",
"pix_key_type": "EMAIL"
}'

Endpoints protegidos

MétodoEndpointHeader obrigatório
POST/v1/payoutsX-Api-Key
GET/v1/payouts/{id}X-Api-Key
GET/v1/payoutsX-Api-Key

Os endpoints /health, /metrics e /webhooks/4pay são públicos e não requerem autenticação.

Isolamento por parceiro

A API Key identifica o parceiro em todas as operações:

  • Payouts criados ficam escopados ao parceiro — a GET /v1/payouts/{id} retorna 404 se o payout existir, mas pertencer a outro parceiro.
  • A listagem GET /v1/payouts retorna apenas os payouts do parceiro autenticado.
  • A idempotência (header Idempotency-Key) também é escopada por parceiro — a mesma chave usada por dois parceiros distintos não gera conflito.

Erros de autenticação

Requisições sem header ou com chave inválida recebem 401 Unauthorized:

{ "error": "unauthorized" }
SituaçãoStatus
Header X-Api-Key ausente401
Chave inválida ou revogada401
Chave válida, mas payout de outro parceiro404

Boas práticas de segurança

  • Variáveis de ambiente: injete a chave via variável de ambiente (XFIN_API_KEY) e nunca a escreva no código-fonte.
  • Secrets manager: em produção, use um serviço de gestão de segredos (AWS Secrets Manager, Google Secret Manager, HashiCorp Vault).
  • Rotação: se suspeitar de comprometimento, entre em contato com o suporte para revogar e emitir uma nova chave.
  • Rate limiting: a API aplica limite de 100 requisições por minuto por chave. Requisições além desse limite recebem 429 Too Many Requests com o header Retry-After indicando quando tentar novamente.