As credenciais do parceiro (id do parceiro, API key ou segredo HMAC, segredo do webhook) são provisionadas pela nossa equipe no onboarding. Solicite-as em pag.finance/businesses.
API key (Bearer) - recomendado
Envie a chave diretamente no cabeçalhoAuthorization em toda requisição. Sem string canônica, sem assinatura, sem nonce, sem timestamp.
1
Gerar uma chave
Crie uma chave no dashboard (painel API e Integrações) ou via
POST /api/v1/partners/me/api-keys. O valor completo sk_live_... é exibido uma única vez; guarde-o, pois não é recuperável (apenas o hash é mantido).2
Enviar em toda requisição
Anexe a chave exatamente como recebida no cabeçalho
Authorization.3
Rotacionar ou revogar
Liste as chaves com
GET /api/v1/partners/me/api-keys e revogue uma com POST /api/v1/partners/me/api-keys/:keyId/revoke (efeito imediato). Cada parceiro pode ter várias chaves, por exemplo uma por ambiente ou serviço.HMAC-SHA256 - legado e avançado
Use HMAC se você já tem uma integração HMAC ou precisa de anti-replay baseado em nonce. O cabeçalho carrega o id do parceiro, um timestamp, um nonce e a assinatura.1
Derivar a chave de assinatura
signingKey = SHA256(rawSecret + ":" + partnerId). O segredo bruto nunca trafega e nunca é armazenado: mantemos apenas SHA256(secret:partnerId). O segredo é texto puro, não base64.2
Fazer o hash do corpo
bodyHash = SHA256_hex( JSON.stringify(JSON.parse(rawBody)) ). O corpo é normalizado antes do hash. Para um GET ou um corpo vazio, faça o hash do corpo vazio normalizado.3
Assinar a string canônica
signature = HMAC_SHA256_hex(signingKey, canonical) (64 caracteres hex).4
Montar o cabeçalho
HMAC-SHA256 partnerId=...,timestamp=...,nonce=...,signature=...Janela de timestamp: 300 segundos (5 minutos); fora dela,
401. Nonce anti-replay: deduplicado no Redis por 600 segundos (10 minutos); reuso nessa janela retorna 401. Use um nonce único por requisição.JWT do usuário final
As operações de pagamento (cash-out, cash-in, recibos) rodam como um usuário final, não como o parceiro. Seu backend troca opubkey ou o uid do usuário por um JWT.
Emitir um token
POST /api/v1/auth/token, autenticado pelo parceiro (API key ou HMAC).
string
obrigatório
Credenciais do parceiro:
Bearer sk_live_... ou o cabeçalho HMAC.string
O endereço blockchain do usuário. Informe
pubkey ou uid (ao menos um, mínimo 3 caracteres).string
O id interno do usuário, como alternativa ao
pubkey.string
padrão:"padrão da configuração"
Override opcional de TTL, por exemplo
1h ou 7d. Limitado a 30d.string
O JWT assinado (HS256). Envie-o como
Authorization: Bearer <token> nas rotas protegidas.string
O TTL efetivo aplicado ao token.
string
Sempre
Bearer.object
{ pubkey, kycStatus, partnerId } do usuário resolvido.O token carrega apenas identidade (
pubkey, uid, partnerId, iss). A emissão recusa um usuário BLOCKED com 403. O gate de KYC por operação (kycStatus === APPROVED) é aplicado nas rotas protegidas, não na emissão. Um token gerado por outra instância é rejeitado com 401 (o emissor é validado em toda chamada).Uso do token
Inclua o JWT do usuário final no cabeçalhoAuthorization de toda chamada autenticada de usuário: