Перейти к содержанию
Sursa для разработчиков

Ключи API и области

Каждый запрос к Sursa API выполняется с ключом API вашей организации. Ключ принадлежит организации, а не человеку: он продолжает работать, когда создавший его сотрудник уходит, а то, что ключ может делать, задаётся в самом ключе.

Что разрешено ключу

Три настройки ключа определяют, что запрос с ним может видеть и менять. Каждая из них только сужает остальные.

НастройкаЧто определяет
Рольadmin, editor, verifier или viewer — те же роли, что у людей. Ключ может делать то же, что пользователь с этой ролью.
ОбластиКакие части API ключ может вызывать, например cards:read или webhooks:manage. См. Области ключа.
Профиль доступаНеобязательно. Ограничивает ключ теми категориями знаний, которые разрешает профиль, как у пользователя с этим профилем.

Ключ можно также ограничить отдельными коллекциями и задать ему срок действия. Запрос за пределами этих ограничений не выполняется: при недостающей области возвращается 403 с кодом api_keys.scope, а объект, который ключ не видит, возвращает 404 — точно так же, как если бы его не было.

Давайте каждой интеграции отдельный ключ с самой узкой ролью и только теми областями, которые ей нужны. Заданию синхронизации, которое только записывает документы, не нужен admin; заданию отчётности не нужны области записи.

Как создать ключ

Администратор организации создаёт ключи в Sursa в разделе Администрирование → API-ключи или через POST /v1/api-keys с ключом или сессией, у которых роль admin:

curl -X POST https://api.sursa.com/v1/api-keys \
  -H "Authorization: Bearer $SURSA_ADMIN_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "CRM sync",
    "role": "editor",
    "expires_at": "2027-06-30T00:00:00Z"
  }'

Ответ содержит значение ключа в key. Оно показывается один раз: Sursa хранит только его хеш и показать ключ снова не может. Ключ выглядит как kb_ и 43 символа после него; первые символы (prefix) видны в списке ключей, чтобы ключи можно было различать.

Без scopes ключ получает области своей роли. Передайте scopes, чтобы сузить их ещё больше. Без expires_at ключ бессрочный.

Как хранить ключи

  • Храните ключи в менеджере секретов или в переменных окружения своего сервиса, но никогда — в исходном коде.
  • Пользуйтесь ключами только со своих серверов. Sursa принимает запросы из браузеров (CORS открыт), но ключ на веб-странице виден каждому, кто её открывает.
  • Никогда не передавайте ключ в URL. Передавайте его только в заголовке Authorization.
  • Если ключ утёк, сразу отзовите его и создайте новый.

Как проверить ключ

GET /v1/me возвращает ключ, его роль, действующие области, профиль доступа, срок действия и лимит частоты запросов. Он работает с любым действующим ключом, какие бы области у того ни были, поэтому используйте его для проверки подключения своей интеграции и при разборе ошибки 403.

Как сменить ключ

Смена ключа заменяет его, не останавливая интеграцию. Быстрее всего перевыпустить ключ: POST /v1/api-keys/{key_id}/roll выпускает новое значение того же ключа с той же ролью, областями, коллекциями и сроком действия. Прежнее значение продолжает работать в течение overlap_hours (по умолчанию 24 часа, не больше 168), так что за это время можно установить новое значение; POST /v1/api-keys/{key_id}/revoke-previous досрочно завершает перекрытие.

Чтобы вместо этого заменить ключ другим:

  1. Создайте новый ключ с той же ролью, областями и профилем доступа.
  2. Установите новый ключ в свою интеграцию.
  3. Следите за старым ключом в разделе Администрирование → API-ключи (или за last_used в GET /v1/api-keys), пока им не перестанут пользоваться.
  4. Отзовите старый ключ.

Задавайте ключам срок действия и меняйте их до его окончания. Sursa предупреждает администраторов организации до того, как срок ключа истечёт; ключ с истёкшим сроком возвращает 401 с кодом api_keys.expired.

Как отозвать ключ

Отзовите ключ в разделе Администрирование → API-ключи или через DELETE /v1/api-keys/{key_id}. Отзыв вступает в силу за секунды на всех серверах API. Запросы с отозванным ключом возвращают 401 с кодом auth.not_authenticated.

Ключи своего источника

У своего источника есть особый вид ключей. Такой ключ начинается с kbsrc_, может только записывать документы в этот один источник и ничего не может читать или искать. Это самый безопасный ключ, который можно передать платформе интеграций вроде Zapier. Создайте его на странице источника в разделе Ключи API или через POST /v1/sources/{source_id}/push-keys.

Если ключи недоступны

Ключи API входят в тариф организации. Если тариф их не включает, создание ключа и любой запрос с ключом возвращают 403 с кодом api_keys.feature_disabled.