---
metadata:
  - name: generator
    content: Diplodoc Platform v5.52.0
alternate:
  - https://yandex.kz/routing/doc/en/delivery/quickstart/api-signature.md
  - https://yandex.kz/routing/doc/kk/delivery/quickstart/api-signature.md
  - https://yandex.kz/routing/doc/ru/delivery/quickstart/api-signature.md
  - href: ru/delivery/quickstart/api-signature.md
    type: text/markdown
    title: Markdown version
  - href: ../llms.txt
    type: text/markdown
    title: llms.txt
title: "Яндекс Маршрутизация — подписание запросов по\_API"
---
> **Documentation Index:** Fetch the complete configuration index at https://yandex.kz/routing/doc/ru/llms.txt


# Подписание запросов по API

Общие требования к запросам:

- Выполняются по протоколу HTTPS.
- Должны содержать параметр `apikey`. Подробнее см. [Ключ API](https://yandex.kz/routing/doc/ru/vrp/authorization.md#api-key).
- Должны быть [подписаны](#calculation-algorithm) — подпись добавляется в заголовок `X-YaCourier-Signature`.
- В заголовках `headers` должен быть передан `user_agent`, использованный при формировании подписи.


## Алгоритм вычисления подписи {#calculation-algorithm}

Для вычисления подписи длиной до 64 символов используется секрет (нужно получить через клиентского менеджера или службу поддержки) и алгоритм SHA-256. Длина секрета — до 32 символов. 

После вычисления подпись переводится в HEX-представление.

{% note warning %}

Секрет не является подписью, а используется для ее вычисления.

{% endnote %}

В формировании подписи участвуют:

- User agent;
- метод запроса — POST, GET;
- Request-URI — начинается с `/`, хост не указывается;
- тело сообщения.

{% note warning %}

Request-URI должен включать обязательные query-параметры запроса. Например, для метода `sensor-values` [Получение показаний датчиков](https://yandex.kz/routing/doc/ru/extras/temperature-sensors-api.md) обязателен параметр `apikey`. Без него сервер вернет ошибку.

{% endnote %}

Общее описание алгоритма:

```
items_to_sign = { user_agent, method, " ", uri, body }
signature = HMAC(<secret>)

for item in items_to_sign:
    signature = HMAC(signature, item)

headers['X-YaCourier-Signature'] = hex_encode(signature)
```

Пример для секрета `cb6628c7407fd3c570bebbd7c36731f1` (случайно сгенерированный):

{% list tabs %}

- python2

    ```
    import hashlib
    import hmac

    KEY = "cb6628c7407fd3c570bebbd7c36731f1"
    USER_AGENT = "TestUserAgent"
    URI = "/test/uri"
    BODY = "TestBody"

    def gen_signature(key, parts):
        HMAC = hmac.new(key.decode('hex'), None, digestmod=hashlib.sha256)
        for part in parts:
            HMAC.update(part)
        return HMAC.hexdigest()

    print gen_signature(KEY, [USER_AGENT, "POST", " ", URI, BODY])
    ``` 

- python3

    ```
    import hashlib
    import hmac

    KEY = "cb6628c7407fd3c570bebbd7c36731f1"
    USER_AGENT = "TestUserAgent"
    URI = "/test/uri"
    BODY = "TestBody"

    def gen_signature(key, parts):
        HMAC = hmac.new(bytes.fromhex(key), None, digestmod=hashlib.sha256)
        for part in parts:
            HMAC.update(part.encode('utf-8'))
        return HMAC.hexdigest()

    print(gen_signature(KEY, [USER_AGENT, "POST", " ", URI, BODY]))
    ```

- php

    ```
    $KEY = 'cb6628c7407fd3c570bebbd7c36731f1';
    $USER_AGENT = 'TestUserAgent';
    $URI = '/test/uri';
    $BODY = 'TestBody';

    function genSignature($secret, array $parts): string {
	    $ctx = hash_init('sha256', HASH_HMAC, hex2bin($secret));
	    foreach ($parts as $part) {
		    hash_update($ctx, $part);
	    }
	    return hash_final($ctx);
    }

    echo genSignature($KEY, array($USER_AGENT, 'POST', ' ', $URI, $BODY));
    ```

{% endlist %}

Результат:

`47abf7284eab22da90f591ff981bc0c4630a8e3a38c9e1cf8d881eb952c22333`

<!-- source: ru/delivery/_includes/feedback.md -->
<a href="../feedback">
  <span class="button">Написать в службу поддержки</span>
</a>



[//]: # (Вариант без html\: \[Написать в службу поддержки\]\(../../../feedback.md\))

<!-- source: ru/_includes/neuroexpert.md -->



<!-- endsource: ru/_includes/neuroexpert.md -->
<!-- endsource: ru/delivery/_includes/feedback.md -->
