Ir para produção

Antes de apontar o sistema para clientes reais.

Servidor

  • NTP ativo. Desvio > 300s derruba todas as chamadas (request_timestamp_skew).
  • IP de saída estável e cadastrado na allowlist. Troca de NAT: cadastre o CIDR novo, espere 18h, só então mude o roteamento.
  • Um processo (ou lock) pedindo token: reutilize até perto de expires_in. Não um token por request.

Chave privada

  • Fora do repositório, de imagem Docker e de logs.
  • Acesso restrito ao serviço que assina.
  • Plano de rotação ensaiado: chave nova → 18h → trocar kid → aposentar a antiga. Veja Chaves e IPs.
  • A última chave utilizável nunca é apagada (409 last_public_key).

Chamadas

  • Host https://client.api.corpx.com em todas as rotas /v1/**
  • POST /v1/security/signature/verify com valid: true no ambiente real, uma vez, antes do primeiro pagamento
  • Idempotency-Key em toda escrita que move dinheiro; a mesma chave não muda o corpo
  • Sem X-Transaction-Pin / X-Acting-Document
  • Sem POST /v1/pix-out legado

Webhooks

  • HTTPS, HMAC, corpo bruto
  • accountId na assinatura
  • 2xx rápido; fila para o trabalho pesado
  • O mesmo eventId tratado uma vez (reentrega existe)
  • Você sabe listar entregas e reenviar (GET/POST .../webhooks/{id}/deliveries)

Operação

  • Titular sabe que travas de horário e bloqueio de saída valem contra a API. Você lê GET .../security/locks e trata cashout_locked / cashout_outside_hours
  • PIX síncrono com teto em mente; volume alto vai para /pix/out/async
  • Extrato avançado não entra em cron
  • Runbook: token expirado, unknown_kid, IP recusado, webhook parado
  • Canal do banco anotado para credencial, IP e travas

Contrato

Paths e schemas: /openapi/ib.yaml, só as operações desta credencial. Coleção Postman: ib.json (baseUrl já aponta para client.api.corpx.com; preencha tenantId, token e, por request, requestSignature).