Authenticated endpoints require three HTTP headers:
x-user-api-key
La clave pública de tu token API
x-user-api-timestamp
Marca de tiempo Unix de 13 dígitos en milisegundos
x-user-api-signature
Firma HMAC-SHA256 hexadecimal en minúsculas
Payload de firma
La firma se calcula concatenando los siguientes valores con saltos de línea:
<METODO_HTTP>
<ruta de la solicitud>
<cadena query sin procesar (sin ?)>
<x-user-api-timestamp>
<sha256 hex del cuerpo bruto de la solicitud>
Reglas de alcance
read
Solo solicitudes GET y HEAD
read_write
Solicitudes GET, POST, PATCH y DELETE
Códigos de error
401 UNAUTHORIZED
Credenciales inválidas o ausentes
401 INVALID_SIGNATURE
La verificación de la firma HMAC falló
401 INVALID_TIMESTAMP
La marca de tiempo de la solicitud está fuera de la ventana de 5 minutos
403 INSUFFICIENT_SCOPE
El token no tiene el scope requerido para esta operación
403 IP_NOT_ALLOWED
La IP de la solicitud no está en la lista de IPs permitidas del token
409 USER_ALIAS_REQUIRED
El usuario debe crear primero un alias predeterminado
Ejemplo 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');