# Подпись запросов

Вам нужно указать свой **secret\_key**, применить шифрование `SHA256` к вашей полезной нагрузке и преобразовать результат в формат `HEX`.

## Использование одноразового номера

Вы должны передавать параметр `nonce` в теле каждого запроса к этому API. `nonce` может быть числом или строкой, каждый запрос должен сопровождаться уникальным значением. В противном случае запрос не будет выполнен.

Мы будем использовать Unix TimeStamp в качестве значения `nonce` для отправки запросов в этом документе.

## Пример создания подписи запроса `NodeJS`

Допустим, мы хотим получить курс `ETH/USDT` (метод `/price-rate`)

**1. Формируем тело запроса**

```javascript
const payload = { from: 'ETH', to: 'USDT' };
```

**2. Добавьте `nonce` параметр к телу запроса, чтобы избежать дублирования запросов.**

Используя временную метку unix в качестве параметра «nonce», мы удовлетворим требованиям использования числа и его увеличения для каждого нового запроса.

```javascript
payload.nonce = Date.now(); // 1643881172430
```

**3. Приводим тело запроса к формату строки.**

```javascript
const stringPayload = JSON.stringify(payload); // {"из":"ETH","в":"USDT","nonce":1643881172430}
```

**4. Создаем подпись:**

Пример с модулем `crypto-js`:

```javascript
const CryptoJS = require("crypto-js");
const sign = CryptoJS.HmacSHA256(stringPayload, __PRIVATE_KEY__).toString(CryptoJS.enc.Hex)
```

Пример с модулем `crypto`:

```javascript
const crypto = require('crypto');
const sign = crypto.createHmac('SHA256', __PRIVATE_KEY__).update(stringPayload).digest('hex');
```

**5. Отправляем запрос с обязательными заголовками:**

```javascript
const axios = require('axios'); // библиотека для HTTP-запросов
const response = await axios.post(__BASE_URL__ + '/price-rate', stringPayload,
{
     headers:
         {
             'x-api-public-key': __PUBLIC_KEY__,
             'x-api-signature': sign
         }
});
```

**6. Ответ:**

```javascript
console.log(response); // {"success":true,"response":"2751.51000000"}
```
