Authenticated endpoints require three HTTP headers:
x-user-api-key
Публичный ключ вашего API-токена
x-user-api-timestamp
13-значная метка времени Unix в миллисекундах
x-user-api-signature
HMAC-SHA256-подпись в шестнадцатеричном формате в нижнем регистре
Payload подписи
Подпись вычисляется путем объединения следующих значений символами новой строки:
<HTTP_METHOD>
<путь запроса>
<сырая строка запроса (без ?)>
<x-user-api-timestamp>
<sha256 hex от сырого тела запроса>
Правила scope
read
Только запросы GET и HEAD
read_write
Запросы GET, POST, PATCH и DELETE
Коды ошибок
401 UNAUTHORIZED
Недействительные или отсутствующие учетные данные
401 INVALID_SIGNATURE
Проверка подписи HMAC не удалась
401 INVALID_TIMESTAMP
Метка времени запроса вне 5-минутного окна
403 INSUFFICIENT_SCOPE
У токена нет необходимого scope для этой операции
403 IP_NOT_ALLOWED
IP запроса отсутствует в списке разрешенных IP токена
409 USER_ALIAS_REQUIRED
Пользователь должен сначала создать alias по умолчанию
Пример кода (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');