Authenticated endpoints require three HTTP headers:
x-user-api-key
A chave pública do seu token de API
x-user-api-timestamp
Timestamp Unix de 13 dígitos em milissegundos
x-user-api-signature
Assinatura HMAC-SHA256 hexadecimal em minúsculas
Payload de assinatura
A assinatura é calculada concatenando os seguintes valores com quebras de linha:
<HTTP_METHOD>
<caminho da requisição>
<query string bruta (sem ?)>
<x-user-api-timestamp>
<sha256 hex do corpo bruto da requisição>
Regras de escopo
read
Apenas requisições GET e HEAD
read_write
Requisições GET, POST, PATCH e DELETE
Códigos de erro
401 UNAUTHORIZED
Credenciais inválidas ou ausentes
401 INVALID_SIGNATURE
A verificação da assinatura HMAC falhou
401 INVALID_TIMESTAMP
O timestamp da requisição está fora da janela de 5 minutos
403 INSUFFICIENT_SCOPE
O token não possui o escopo necessário para esta operação
403 IP_NOT_ALLOWED
O IP da requisição não está na lista de IPs permitidos do token
409 USER_ALIAS_REQUIRED
O usuário precisa criar primeiro um alias padrão
Exemplo de código (JavaScript)
const crypto = require('crypto');
function signRequest(method, path, queryString, body, timestamp, secret) {
const payload = [
method.toUpperCase(),
path,
queryString || '',
timestamp,
crypto.createHash('sha256').update(body || '').digest('hex')
].join('\n');
return crypto.createHmac('sha256', secret)
.update(payload)
.digest('hex');
}
const timestamp = Date.now().toString();
const signature = signRequest('GET', '/v1/me', '', '', timestamp, 'your-secret');