> ## Documentation Index
> Fetch the complete documentation index at: https://docs.meridian.vip/llms.txt
> Use this file to discover all available pages before exploring further.

# Авторизация

> Аутентификация запросов к Meridian API

Все запросы к Meridian API должны содержать заголовки `X-API-Key` и `X-Signature`.

## Получение API ключей

### Для мерчантов (самостоятельно)

1. Войдите в личный кабинет Meridian
2. Перейдите в раздел **API Ключи** в боковом меню
3. Нажмите **Создать ключ**
4. Введите описательное имя (например, "Production Server")
5. **ВАЖНО**: Скопируйте и сохраните Key ID и Secret немедленно
   * Формат: `meridian_<32_символа>` для обоих значений
   * Secret больше **никогда не будет показан**

<Warning>
  После создания ключа Secret отображается только один раз. Сохраните его в безопасном месте!
</Warning>

## X-API-Key

Заголовок `X-API-Key` должен содержать комбинацию из Key ID и Secret в формате `keyId:secret`.

```
X-API-Key: meridian_abc123...:meridian_xyz789...
```

## X-Signature

Заголовок `X-Signature` должен содержать строку, закодированную в формате Base64, которая подписана секретным ключом с использованием алгоритма HMAC-SHA256.

```
X-Signature: <Base64-encoded-signature>
```

### Формирование строки для подписи

Строка для подписи формируется путем конкатенации следующих элементов в следующем порядке:

1. HTTP-метод запроса в верхнем регистре (например, `GET`, `POST`)
2. Полный URL запроса, включая протокол, хост и путь (например, `https://api.meridian.vip/api/v1/resource`)
3. Тело запроса - если оно присутствует, как JSON-строка

**Пример строки для подписи:**

```
POSThttps://api.meridian.vip/api/v1/resource{"key":"value","data":"example"}
```

### Запросы GET

Для типа запроса GET строка для подписи создается путем конкатенации только метода запроса и URL запроса (тело запроса - пустая строка).

**Пример для GET запроса:**

```
GEThttps://api.meridian.vip/api/v1/resource
```

### Формирование подписи

Полученная строка подписывается секретным ключом `secret` с использованием алгоритма HMAC-SHA256, а результат кодируется в Base64 и передается в заголовке `X-Signature`.

## Примеры кода

<CodeGroup>
  ```javascript Node.js theme={null}
  const crypto = require('crypto');

  function calculateSignature(method, url, body, secret) {
    // Формируем строку для подписи
    const stringToSign = method + url + (body || '');

    // Вычисляем HMAC-SHA256
    const hmac = crypto.createHmac('sha256', secret);
    hmac.update(stringToSign);

    return hmac.digest('base64');
  }

  // Пример использования
  const method = 'POST';
  const url = 'https://api.meridian.vip/api/v1/resource';
  const body = JSON.stringify({
    key: 'value',
    data: 'example'
  });

  // Ваш API ключ в формате: luma_keyId:luma_secret
  const apiKey = 'luma_abc123...:luma_xyz789...';
  const [keyId, secret] = apiKey.split(':');
  const signature = calculateSignature(method, url, body, secret);

  // Выполняем запрос
  fetch(url, {
    method,
    headers: {
      'Content-Type': 'application/json',
      'X-API-Key': apiKey,
      'X-Signature': signature
    },
    body
  });
  ```

  ```python Python theme={null}
  import hmac
  import hashlib
  import base64
  import requests
  import json

  def calculate_signature(method, url, body, secret):
      # Формируем строку для подписи
      string_to_sign = method + url + (body or '')

      # Вычисляем HMAC-SHA256
      signature = hmac.new(
          secret.encode('utf-8'),
          string_to_sign.encode('utf-8'),
          hashlib.sha256
      ).digest()

      return base64.b64encode(signature).decode('utf-8')

  # Пример использования
  method = 'POST'
  url = 'https://api.meridian.vip/api/v1/resource'
  body = json.dumps({
      'key': 'value',
      'data': 'example'
  })

  # Ваш API ключ в формате: luma_keyId:luma_secret
  api_key = 'luma_abc123...:luma_xyz789...'
  key_id, secret = api_key.split(':')
  signature = calculate_signature(method, url, body, secret)

  response = requests.post(
      url,
      headers={
          'Content-Type': 'application/json',
          'X-API-Key': api_key,
          'X-Signature': signature
      },
      data=body
  )
  ```

  ```php PHP theme={null}
  <?php

  function calculateSignature($method, $url, $body, $secret) {
      // Формируем строку для подписи
      $stringToSign = $method . $url . ($body ?? '');

      // Вычисляем HMAC-SHA256
      $signature = hash_hmac('sha256', $stringToSign, $secret, true);

      return base64_encode($signature);
  }

  // Пример использования
  $method = 'POST';
  $url = 'https://api.meridian.vip/api/v1/resource';
  $body = json_encode([
      'key' => 'value',
      'data' => 'example'
  ]);

  // Ваш API ключ в формате: luma_keyId:luma_secret
  $apiKey = 'luma_abc123...:luma_xyz789...';
  list($keyId, $secret) = explode(':', $apiKey);
  $signature = calculateSignature($method, $url, $body, $secret);

  $ch = curl_init($url);
  curl_setopt($ch, CURLOPT_POST, true);
  curl_setopt($ch, CURLOPT_POSTFIELDS, $body);
  curl_setopt($ch, CURLOPT_HTTPHEADER, [
      'Content-Type: application/json',
      'X-API-Key: ' . $apiKey,
      'X-Signature: ' . $signature
  ]);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

  $response = curl_exec($ch);
  curl_close($ch);
  ?>
  ```
</CodeGroup>
