Перейти к основному содержимому

Авторизация в iiko API

Эта статья — продолжение инструкций по началу работы с iiko API:

После того как вы зарегистрировались на портале разработчика и создали приложение, у вас есть всё необходимое для авторизации. Здесь описано, как получить токен доступа и использовать его в запросах к Cloud API.

Быстрый старт​

  1. Соберите три значения: appId, clientSecret, apiKey (см. ниже).
  2. Обменяйте их на токен — POST /api/v2/access_token.
  3. Передавайте токен в каждом запросе: Authorization: Bearer {token}.
  4. Токен живёт 1 час, refresh-токена нет — по истечении запросите новый.

Что нужно для авторизации​

Для запроса токена нужны три значения, полученные на предыдущих шагах:

ЗначениеОткуда взятьОсобенность
appIdКарточка приложения на портале разработчика — api.iiko.help/portalНе меняется в течение жизни приложения
clientSecretПоказывается один раз при создании приложенияПри утрате — сбросить в карточке приложения
apiKeyiikoWeb → Настройки Cloud API → Добавить интеграцию (в части версий кабинета — Интеграции → API-ключи)Определяет, к каким ресторанам токен даёт доступ

Про название ключа. В старых инструкциях и в устаревшем методе v1 API-ключ называется apiLogin. Это один и тот же ключ, сгенерированный в iikoWeb: в запросе /api/1/access_token поле называется apiLogin, а в /api/v2/access_token — apiKey.

Полный цикл авторизации:

Получение токена доступа​

Токен — короткоживущий ключ сессии. Его запрашивают один раз, а затем передают в заголовке каждого запроса.

Эндпоинт: POST https://api-ru.iiko.services/api/v2/access_token

Заголовки:

ЗаголовокЗначение
Content-Typeapplication/json
Timeout (необязательный)Таймаут запроса в секундах (по умолчанию 15)

Тело запроса:

{
"appId": "ВАШ_APP_ID",
"clientSecret": "ВАШ_CLIENT_SECRET",
"apiKey": "ВАШ_API_КЛЮЧ"
}
ПолеОписание
appIdУникальный идентификатор приложения, выданный порталом разработчика
clientSecretСекретный ключ приложения. Показывается один раз при создании
apiKeyAPI-ключ из iikoWeb. Определяет перечень ресторанов, к которым будет доступ

Примеры запроса​

curl

curl -X POST "https://api-ru.iiko.services/api/v2/access_token" \
-H "Content-Type: application/json" \
-d '{"appId":"ВАШ_APP_ID","clientSecret":"ВАШ_CLIENT_SECRET","apiKey":"ВАШ_API_КЛЮЧ"}'

Python

import requests

resp = requests.post(
"https://api-ru.iiko.services/api/v2/access_token",
json={
"appId": "ВАШ_APP_ID",
"clientSecret": "ВАШ_CLIENT_SECRET",
"apiKey": "ВАШ_API_КЛЮЧ",
},
)
resp.raise_for_status()
token = resp.json()["token"]
print(token)

JavaScript (Node.js / браузер)

async function getToken() {
const resp = await fetch("https://api-ru.iiko.services/api/v2/access_token", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
appId: "ВАШ_APP_ID",
clientSecret: "ВАШ_CLIENT_SECRET",
apiKey: "ВАШ_API_КЛЮЧ",
}),
});
if (!resp.ok) throw new Error(`HTTP ${resp.status}`);
const { token } = await resp.json();
return token;
}

Успешный ответ (HTTP 200)​

{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"correlationId": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d"
}
ПолеОписание
tokenJWT-токен. Передавайте его в последующих запросах какBearer {token}
correlationIdUUID запроса. Указывайте его при обращении в поддержкуapi@iiko.ru

Использование токена​

Токен передаётся в заголовке Authorization каждого запроса. Пример — получение списка ресторанов (организаций):

curl -X POST "https://api-ru.iiko.services/api/1/organizations" \
-H "Authorization: Bearer ВАШ_ТОКЕН" \
-H "Content-Type: application/json" \
-d '{}'

Ответ:

{
"organizations": [
{ "id": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d", "name": "Мой ресторан" }
],
"correlationId": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d"
}

organizations[].id — UUID ресторана, который подставляется в остальные методы.

Время жизни токена и его обновление​

Токен действителен 1 час. Точное время истечения закодировано в JWT-поле exp (Unix-секунды). Refresh-токена нет — по истечении срока просто запросите новый токен тем же способом.

Посмотреть payload токена и срок действия:

echo "ВАШ_ТОКЕН" | cut -d. -f2 | python3 -c "import sys,base64,json; p=sys.stdin.read().strip(); p+='='*(-len(p)%4); print(json.loads(base64.urlsafe_b64decode(p)))"

Ошибки и их устранение​

HTTP-кодПричинаРешение
400Неверный формат тела запросаПроверьтеContent-Type: application/json и валидность JSON
401НеверныйappId, clientSecret или apiKey; либо истёкший токенПроверьте значения на портале разработчика и в iikoWeb; получите новый токен
403Нет доступа к ресурсу или IP не в allow-listПроверьте настройки приложения и список разрешённых IP
500Ошибка на стороне сервераПовторите запрос; обратитесь в поддержку, указав correlationId

Безопасность​

  • clientSecret и apiKey сохраните в хранилище секретов например: Vault.
  • Не храните секреты в коде и не коммитьте в Git. Добавьте .env в .gitignore.
  • Периодически ротируйте ключи (рекомендуется раз в 90 дней).

Что дальше​