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');