Документация
FRANKLAB API

API-ключ и доступ

Партнёрский API-ключ, заголовки, лимиты и безопасность.

Открыть .md
Открыть в AI

Разобраться с AI-ассистентом

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

Cursor и Claude Code откроются с готовым текстом, если он помещается в ссылку. ChatGPT и Antigravity: вставьте скопированный контекст вручную.

Задать вопрос

Нет личного кабинета?

Зарегистрируйтесь на Apergrex, затем откройте настройки кабинета и выпустите API-ключ.

Партнёрский API-ключ

Аутентификация — партнёрский API-ключ формата fl_live_<64 hex>. Он используется для генерации, биллинга и вебхуков. Исключение: выпуск и отзыв API-ключей требуют сессию кабинета; используйте Настройки → API.

Передавайте ключ одним из двух способов:

bash
# Заголовок X-API-Key (рекомендуется)
curl -H "X-API-Key: $FRANKLAB_KEY" https://apergrex.ru/franklab/api/v1/billing/balance

# Или Authorization: Bearer
curl -H "Authorization: Bearer $FRANKLAB_KEY" https://apergrex.ru/franklab/api/v1/billing/balance

Статусы ответов

КодПричинаЧто делать
401Ключ отсутствует, неизвестен или деактивированПроверьте ключ; новый выпускается в кабинете (Настройки → API)
403Передан legacy service-ключНужен именно партнёрский fl_live_-ключ
429Превышен лимит запросовПовторите позже; по умолчанию 60 запросов/мин на API-ключ

Лимиты

Значения ниже — настройки по умолчанию, а не гарантия доступной пропускной способности. Биллинг и вебхуки используют общий счётчик: 60 запросов/мин на API-ключ; операции через сессию — 60/мин на партнёра. Дополнительно действует ограничитель по IP для каждого метода (по умолчанию 100/мин), с исключениями:

МетодЛимит по IP в минуту
POST /v1/billing/payment/link3
POST /v1/billing/legal-invoices/create3
POST /v1/billing/legal-invoices/{id}/refresh6
POST /v1/billing/legal-invoices/{id}/sbp-link6
GET /v1/billing/legal-invoices/{id}/pdf12
POST /v1/webhooks/endpoints10
POST /v1/webhooks/endpoints/{id}/rotate-secret10
POST /v1/webhooks/endpoints/{id}/test6
POST /v1/webhooks/deliveries/{id}/replay30

Лимиты применяются одновременно. Для 429 учитывайте Retry-After и правила повторов; не переносите лимит биллинга на запуск генерации.

Права ключа (scopes) и срок действия

По умолчанию ключ — полный: он открывает генерацию, биллинг и вебхуки. Ранее выпущенные ключи не меняются — они продолжают работать ровно как раньше, ничего делать не нужно.

При выпуске ключ можно ограничить набором прав. Актуальный список прав и то, какие методы каждое из них открывает, отдаёт сам сервер:

bash
# справочник прав (сессия кабинета)
curl -b "franklab_token=$COOKIE" https://apergrex.ru/franklab/api/auth/api-keys/operations
ПравоЧто открывает
usage:readДневной расход аккаунта; проверка учётных данных в n8n
billing:readБаланс, тариф, операции, история пополнений
pricing:readКаталог цен и оценка стоимости (без списания)
tasks:readСтатусы и результаты своих задач
media:runЗапуск обработки и генерации (возможен расход)
webhooks:readЧтение эндпоинтов и журнала доставок
webhooks:manageСоздание, ротация секрета, тест и повтор доставки

Правила, которые стоит знать заранее:

  • Права можно только сузить. Ограниченному ключу нельзя вернуть полный доступ — выпустите новый.
  • Создание платёжных ссылок недоступно ни одному ограниченному ключу: ни одно право его не открывает. Это делается из сессии кабинета.
  • Ограниченный ключ всегда может прочитать свои права (GET /v1/billing/api-keys), но права соседних ключей в этом ответе скрыты (scopes: null).
  • * не является правом и не принимается ни в запросе, ни в базе.

Срок действия задаётся при выпуске (expiresInDays, от 1 до 365 дней) и по умолчанию отсутствует: ключ без срока не истекает. Истёкший ключ отвечает 401 с кодом API_KEY_EXPIRED и остаётся в списке кабинета — его видно, пока вы не включите «скрыть истёкшие». Продлить истёкший ключ нельзя — выпустите новый; PATCH меняет только права и название и никогда не трогает срок.

Отзыв действует со следующего запроса: ключ перечитывается на каждом обращении, кэша учётных данных нет. При отзыве можно записать причину (DELETE /auth/api-keys/{id}?reason=...) — она видна в списке.

КодКогдаHTTP
API_KEY_EXPIREDСрок действия ключа истёк401
API_KEY_SCOPE_REQUIREDУ ключа нет права на этот метод403
API_KEY_SCOPE_UNKNOWNВ запросе указано неизвестное право (в том числе *)400
API_KEY_SCOPE_EMPTYОграниченный ключ запрошен без единого права400
API_KEY_SCOPE_DOWNGRADE_FORBIDDENПопытка вернуть ограниченному ключу полный доступ400
API_KEY_EXPIRY_OUT_OF_RANGEСрок вне диапазона 1…365 дней400
API_KEY_QUOTA_EXCEEDEDБольше 20 активных ключей на аккаунт400

Изменения в ответах на повтор доставки

POST /v1/webhooks/deliveries/{id}/replay раньше отвечал одним 404 на любую причину отказа. Теперь причины различимы:

КодHTTPПричина
DELIVERY_NOT_FOUND404Доставки с таким id у вас нет
DELIVERY_NOT_REPLAYABLE409Доставка в статусе, из которого повтор невозможен (например, уже в очереди)
DELIVERY_ENDPOINT_DELETED409Эндпоинт этой доставки удалён — повторять некуда
DELIVERY_ENDPOINT_INACTIVE409Эндпоинт этой доставки неактивен

Если ваш код считал любой неуспех повтора «404 — доставки нет», обновите его: три новые причины приходят с 409. Списки доставок при этом получили постраничность — GET /v1/webhooks/deliveries?limit=1..100&cursor=... возвращает {deliveries, nextCursor, shown}.

Безопасность ключа

  • Ключ хранится на сервере только как хэш — «показать снова» невозможно; потерянный ключ отзывают и выпускают новый.
  • Передавайте ключ только по HTTPS, никогда — в URL, логах или клиентском коде.
  • Ключ можно отозвать мгновенно из сессии кабинета: DELETE /v1/billing/api-keys/{id} (или страница Настройки → API). Отзыв ключа не требует самого ключа — и ключ не может создать себе замену.
  • Заведите отдельный ключ на каждую интеграцию — метка помогает отличать их в списке.

Управление ключами

Чтение списка ключей — по API-ключу. Выпуск и отзыв — только в сессии кабинета (cookie партнёра): API-ключ не может выпускать новые ключи, поэтому скомпрометированный ключ отзывается полностью — у него нет «потомков», которые пережили бы отзыв. Это то же доверие, что у страницы Настройки → API.

bash
# список (только префиксы, сырое значение не возвращается) — по API-ключу
curl -H "X-API-Key: $FRANKLAB_KEY" https://apergrex.ru/franklab/api/v1/billing/api-keys

Создать (POST /v1/billing/api-keys) и отозвать (DELETE /v1/billing/api-keys/{id}) ключ можно из кабинета: Настройки → API — или тем же запросом из залогиненной сессии кабинета (cookie franklab_token).

/docs/authentication.md
Не нашли ответ?Связаться с поддержкой