Перейти к содержимому страницы
Документация
Документация Make Agent Fast

Области и ошибки

Предоставляйте минимальные права и обрабатывайте каждый стабильный код ошибки публичного API.

Кратко

Предоставляйте минимальные права и обрабатывайте каждый стабильный код ошибки публичного API.

Путь запроса APIОграниченный ключ → версионированный ресурс → подписанный ответ
Приложение / SDKКлюч Bearermaf_live_…/api/v1/…РесурсJSON
33 областиСтабильные кодыID запросов

Каждая операция публичного API требует одну явную область. Валидные учётные данные без этой области получают 403 insufficient_scope; они никогда не повышаются молча до более широкого доступа.

Справочник областей#

ОбластьРазрешает
account:readЧитать аутентифицированный аккаунт, тариф, права и сводку кошелька
tickets:readЧитать обращения в поддержку и их сообщения
tickets:writeОбновлять обращения, назначать коллег и добавлять внутренние заметки или ответы клиентам
team:readЧитать участников команды, ожидающие приглашения и разрешённые события аудита
team:writeСоздавать или отзывать приглашения и управлять ролями участников, не являющихся владельцами
integrations:readПросматривать авторизованные установки GitHub App и репозитории
integrations:writeГотовить изменения интеграций и создавать черновые pull request
sites:readПеречислять и получать сайты
sites:writeСоздавать, обновлять, публиковать, отменять публикацию и удалять сайты
agents:readЧитать настройки агентов
agents:writeОбновлять поведение, язык, голос и настройки встраивания агента
knowledge:readПеречислять источники знаний и FAQ
knowledge:writeСоздавать, обновлять и удалять источники знаний и FAQ
conversations:readПеречислять диалоги и получать их сообщения
conversations:writeБрать диалог на себя: отвечать посетителю от имени бизнеса, приостанавливать в нём агента и возвращать диалог агенту
leads:readПеречислять собранные заявки
leads:writeСоздавать, обновлять, квалифицировать и принимать заявки в воронку возможностей
pipeline:readЧитать стадии, аккаунты, возможности, активности, атрибуцию и состояние синхронизации CRM
pipeline:writeНастраивать стадии; создавать или обновлять возможности и аккаунты; импортировать или повторять результаты CRM
analytics:readЧитать события аналитики сайта
connectors:readПеречислять состояние коннекторов без возврата секретов
connectors:writeСоздавать, обновлять, включать, отключать и удалять коннекторы
domains:readУдалено. Сохранено только для совместимости; каждый маршрут /domains возвращает 409, потому что пользовательские домены не предлагаются
domains:writeУдалено. Сохранено только для совместимости; каждый маршрут /domains возвращает 409
broadcasts:readПеречислять рассылки и состояние доставки
broadcasts:writeСоздавать черновики и ставить в очередь отправку рассылки
notifications:readПеречислять уведомления владельца
notifications:writeОтмечать уведомления прочитанными или непрочитанными
monetization:readПеречислять продукты монетизации
monetization:writeСоздавать, обновлять, активировать, деактивировать и удалять продукты
usage:readЧитать учитываемые события использования
webhooks:readПеречислять конечные точки вебхуков и состояние доставки
webhooks:writeСоздавать и удалять конечные точки вебхуков

Используйте области чтения для задач отчётности. Добавляйте область записи только когда интеграция выполняет эту мутацию. Например, экспорту заявок обычно нужны sites:read и leads:read, а не sites:write или agents:write.

Сбои областей#

{
  "error": {
    "code": "insufficient_scope",
    "message": "The API key does not grant the required scope.",
    "details": { "required": ["sites:write"] },
    "request_id": "6c0b2f2e-..."
  }
}

Добавьте недостающую область ключу в Настройки → Разработчику → Изменить или создайте замещающий ключ и обновите серверный секрет. Изменение меняет имя и области ключа на месте; его срок действия и токен остаются прежними. Ключи, выданные через OAuth, изменить нельзя; переподключите приложение, чтобы изменить выданные ему права.

Оболочка ошибок#

Все ошибки API используют одну форму верхнего уровня:

type ApiError = {
  error: {
    code: string;
    message: string;
    details?: unknown;
    request_id: string;
  };
};

Ветвитесь на error.code, а не на английском message. Сообщения могут улучшаться без смены версии. Логируйте error.request_id и заголовок ответа x-request-id с именем операции, статусом и попыткой повтора — но никогда не логируйте заголовок авторизации или секреты запроса.

Справочник статусов и кодов#

HTTPСтабильный кодЗначениеНормальный ответ
400invalid_requestВалидация не прошла или поле не поддерживаетсяИсправьте поля в details; не повторяйте неизменённый ввод
400invalid_jsonТело не является объектом JSON или содержит невалидный JSONСериализуйте один валидный объект JSON
401authentication_requiredЗаголовок Bearer отсутствуетПрикрепите серверные учётные данные
401invalid_api_keyКлюч недействителен, истёк, отозван или его владелец больше не существуетЗамените или ротируйте ключ
403subscription_requiredУ владельца нет активного платного тарифаВосстановите подписку перед повтором
403insufficient_scopeУчётным данным не хватает области операцииСоздайте замещающие учётные данные с минимальными правами
403account_pausedДоступ API приостановлен для аккаунтаВозобновите доступ API или свяжитесь с владельцем аккаунта
404not_foundКонечная точка или принадлежащий ресурс не найденыПроверьте путь и ID, принадлежащий арендатору
409conflictТекущее состояние ресурса предотвращает действиеПрочитайте текущее состояние перед повтором
413payload_too_largeТело JSON превышает лимит запроса 256 КБОтправьте тело меньшего размера; разделите крупное содержимое на несколько запросов
415invalid_requestТело мутации не application/jsonОтправьте Content-Type: application/json
429rate_limit_exceededМинутная корзина тарифа ключа исчерпанаДождитесь Retry-After и примените джиттер
500internal_errorЗапрос не может быть завершёнПовторите безопасную или идемпотентную операцию и сообщите ID запроса
503outcome_unknownМутация могла завершиться, но её результат не удалось записать; details.retryable равно falseНе повторяйте. Прочитайте ресурс, чтобы узнать, произошло ли изменение; тот же ключ идемпотентности продолжает возвращать этот результат

Ресурсы вне аккаунта владельца учётных данных могут возвращать 404 вместо раскрытия, существует ли ID другого арендатора.

Детали валидации#

Валидация полей возвращает пути, которые можно показать рядом с вашими собственными элементами формы:

{
  "error": {
    "code": "invalid_request",
    "message": "Request validation failed.",
    "details": [
      { "path": "content.headline", "message": "String must contain at least 1 character(s)" }
    ],
    "request_id": "6c0b2f2e-..."
  }
}

Тела мутаций должны быть объектами JSON. Массивы, пустые тела, данные формы и JSON, отправленный с текстовым типом контента, отклоняются.

Решения о повторе#

  • Повторяйте 429 после числа секунд в Retry-After.
  • Повторяйте 500 только для безопасных чтений или записей, защищённых тем же Idempotency-Key.
  • Повторяйте идемпотентный 409 в процессе после его заголовка Retry-After: 2.
  • Никогда не повторяйте 503 outcome_unknown вслепую. Сначала проверьте ресурс; используйте новый ключ идемпотентности только после подтверждения, что изменение не произошло.
  • Не повторяйте 400, 401, 403, 404, 413 или конфликт состояния, пока причина не изменится.

См. Лимиты частоты для поведения отката и Справочник API для требуемой области каждой операции.