Что говорит код ошибки API

Конверт ошибки, откуда берётся её код, и каждый код, которым отвечает API, — что он значит и что с ним делать.

4 мин чтения

Когда API отклоняет запрос или не может его выполнить, в его ответе есть код — устойчивое имя того, что произошло. Эта страница перечисляет коды, которыми отвечает API, и говорит, что значит каждый и что с ним делать. Ветвитесь по коду, а не по сообщению.

Конверт ошибки

Ошибка, о которой API сообщает сам, приходит в одном конверте. Статья Обзор описывает его поля и те немногие ответы, которые приходят без него.

402 Payment Required
{
  "error": {
    "code": "budget_exceeded",
    "message": "Budget 74438200973595137 (monthly) exceeded",
    "request_id": "7c2e9a41-3b8d-4f6a-9e15-c04d2b7a8f63"
  }
}

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

503 Service Unavailable
{
  "error": {
    "code": "pool_exhausted",
    "message": "No provider connection could serve the request after 3 attempt(s)",
    "details": { "last_error_code": "provider_rate_limit" },
    "request_id": "0d3c1b9e-5a47-4f0e-9a36-2f6c8d1e7b42"
  }
}

Рядом с каждым кодом таблицы ниже печатают HTTP-статус, которым API на него отвечает, — два для кода с двумя значениями, — и прочерк для кода, которым никогда не отвечают на запрос.

SDK сохраняют код

Оба SDK выбрасывают ошибку на ответ-ошибку, и ошибка сохраняет код API: code в Node.js, errorCode в PHP. Первая таблица ниже называет тип, который каждый SDK выбрасывает для её кодов. У кодов двух других таблиц собственного типа нет, и правило под каждой из этих таблиц говорит, какой тип выбрасывает SDK. Статья Обработка ошибок показывает, как их ловить.

Коды, для которых у SDK есть тип

Для этих кодов каждый SDK выбрасывает собственный тип. Большинство из них приходит от операций, которые вызывает SDK: запроса к флоу и его вызовов модели, кредитов клиента.

КодHTTP-статусТип ошибки в SDKЧто это значитЧто делать
invalid_api_key401AuthenticationException PHPAuthenticationError Node.jsВ запросе нет API-ключа или есть ключ, которого Slen не знает, — скопированный с ошибкой, отозванный или заменённый ротацией.Проверьте значение заголовка Authorization. Отозванный ключ больше не работает — выпустите новый в консоли.
insufficient_scope403AuthenticationException PHPAuthenticationError Node.jsКлюч действителен, но у него нет разрешения, которого требует операция, — или его не включает роль человека, вошедшего в консоль. Сообщение ошибки называет это разрешение и в обоих случаях говорит об API-ключе.Используйте ключ с этим разрешением или выпустите такой ключ. Давайте ключу только те разрешения, которые нужны его сервису. Человеку, вошедшему в консоль, нужна роль, которая включает это разрешение; её даёт владелец или администратор организации.
not_authenticated401AuthenticationException PHPAuthenticationError Node.jsНикто не вошёл. В запросе нет ни API-ключа, ни сессии человека, вошедшего в консоль, или сессия закончилась.Отправьте API-ключ в заголовке Authorization или снова войдите в консоль.
not_a_member403AuthenticationException PHPAuthenticationError Node.jsЧеловек, вошедший в консоль, не участник организации, о которой запрос, или ещё не состоит ни в одной организации.Примите приглашение в организацию или переключитесь на организацию, участником которой вы являетесь.
account_suspended403AuthenticationException PHPAuthenticationError Node.jsУчётная запись человека, который входит, приостановлена, и вход отклонён.Учётная запись не может войти, пока её не восстановят. Напишите в поддержку, чтобы узнать причину.
policy_denied403PolicyDeniedException PHPPolicyDeniedError Node.jsПолитика отклонила запрос до того, как были зарезервированы какие-либо деньги. Сообщение ошибки называет политику.Прочитайте в сообщении, какая политика отклонила запрос. Измените запрос — модель, операцию, стоимость — или измените политику в консоли.
model_not_allowed403PolicyDeniedException PHPPolicyDeniedError Node.jsУзел модели во флоу называет модель, которой нет в каталоге, или модель, которая выключена. Выполнение заканчивается как failed с этим кодом.Выберите в узле модели модель из списка моделей — в нём активные модели, у которых есть действующая цена, — и опубликуйте новую версию.
budget_exceeded402BudgetExceededException PHPBudgetExceededError Node.jsВызов вывел бы бюджет за его лимит. То, что бюджет уже держит и потратил в текущем окне, вместе с холдом, который просит этот вызов, больше лимита.Дождитесь следующего окна бюджета — его resets_at говорит когда; бюджет типа total заново не начинается. Или поднимите лимит бюджета.
operation_limit_exceeded402OperationLimitExceededException PHPOperationLimitExceededError Node.jsБюджет на операцию ограничивает, сколько может зарезервировать один вызов операции, а холд, который просит этот вызов, выше этого ограничения.Просите меньше — меньше выходных токенов, модель дешевле — или поднимите ограничение. Тот же запрос будет отклонён снова, пока одно из них не изменится.
concurrency_limit_exceeded402ConcurrencyLimitException PHPConcurrencyLimitError Node.jsБюджет типа concurrency — в консоли «Одновременные резервы» — разрешает держать открытыми заданное число холдов одновременно, и все они заняты вызовами, которые выполняются.Отправьте запрос снова, когда закончится один из выполняющихся вызовов, или поднимите лимит бюджета. Запрос к флоу отправляйте снова с новым ключом, потому что его отклонённое выполнение сохраняет ключ, который у него был. Это не лимит запросов ключа.
insufficient_credits402InsufficientCreditsException PHPInsufficientCreditsError Node.jsСчёт клиента не может покрыть цену вызова в кредитах, или у клиента нет счёта этого типа кредитов. Списание или корректировка отклоняются так же, когда оставили бы баланс ниже того, что держит счёт.Пополните кредиты клиента. Счёт, в настройках которого разрешён отрицательный баланс, не отклоняет.
customer_blocked403CustomerBlockedException PHPCustomerBlockedError Node.jsКлиент, для которого сделан запуск, заблокирован. Новый запуск этого клиента отклоняется до того, как что-либо создано. Запуск, который уже идёт, отклоняется на следующем холде кредитов, и выполнение завершается с этим кодом.Разблокируйте клиента, чтобы его запуски снова проходили. Пока клиент заблокирован, его кредиты можно пополнять, списывать и корректировать, а выписку — читать.
customer_not_found404CustomerNotFoundException PHPCustomerNotFoundError Node.jsПроект не знает клиента, которого называет запрос, — клиента не добавляли, не пополняли и не настраивали, или его удалили. Так отклоняется вызов операции с ценой для такого клиента, а также чтение, блокировка, списание и удаление. Корректировка счёта, которого нет, отклоняется так же.Сначала добавьте клиента или пополните его — пополнение создаёт клиента и счёт.
overrun_stopped402OverrunStoppedException PHPOverrunStoppedError Node.jsОценка вызова модели во флоу, сделанная заново после того, как взят холд, и до вызова провайдера, превысила холд больше, чем позволяет допуск превышения узла, а политика перерасхода узла модели — остановить. Холд возвращён, провайдер не вызывался. Тот же код завершает выполнение, когда человек отклонил согласование, которое запросил перерасход, или никто не ответил вовремя. У нового узла модели политики перерасхода нет, а политика, которая у узла есть, практически не срабатывает, потому что обе оценки считаются по одному и тому же запросу с разницей в мгновение.Отправьте запрос снова с новым ключом — вызов будет оценён заново и возьмёт собственный холд. Чтобы таких отказов не было, выключите политику перерасхода узла модели и опубликуйте новую версию.
overrun_approval_required402OverrunApprovalRequiredException PHPOverrunApprovalRequiredError Node.jsОценка вызова модели во флоу, сделанная заново после того, как взят холд, и до вызова провайдера, превысила холд больше, чем позволяет допуск превышения узла, а политика перерасхода узла модели просит человека одобрить разницу. Выполнение ждёт этого решения, поэтому на запрос отвечает ждущее выполнение, а не этот код. У нового узла модели политики перерасхода нет, а политика, которая у узла есть, практически не срабатывает, потому что обе оценки считаются по одному и тому же запросу с разницей в мгновение.Примите решение по согласованию в консоли. Согласование, которое отклонили или по которому никто не решил вовремя, завершает выполнение с кодом overrun_stopped.
idempotency_conflict409IdempotencyConflictException PHPIdempotencyConflictError Node.jsКлюч Idempotency-Key уже использовал другой запрос — тот же ключ с другим телом или ключ другого пополнения, списания или корректировки проекта.Отправьте новый запрос с новым ключом. На повтор первого запроса с его ключом отвечают как прежде.
idempotency_in_progress409IdempotencyConflictException PHPIdempotencyConflictError Node.jsВызов модели во флоу встретил холд, который всё ещё стоит под его собственным ключом, и был отклонён, чтобы провайдер не был вызван дважды. Выполнение заканчивается как failed с этим кодом. Обычный запуск с этим не встречается.Прочитайте выполнение и его трассировку. Отправляйте запрос снова с новым ключом, только если ответ всё ещё нужен, — за первый вызов могли заплатить.
cost_calculation_failed422InvalidRequestException PHPInvalidRequestError Node.jsМодель активна, но у неё нет действующей цены, поэтому Slen не может посчитать, сколько будет стоить вызов, и вызов отклоняется.Назовите модель из списка моделей — в нём активные модели, у которых есть действующая цена.
provider_not_configured422ProviderException PHPProviderError Node.jsНи одно подключение проекта не может обслужить провайдера запрошенной модели, поэтому вызов некуда отправить. Во флоу тот же код приходит, когда пул, через который узел модели направляет вызов, удалён или выключен.Добавьте подключение к этому провайдеру в консоли или включите то, которое есть. Включите пул снова или выберите в узле модели другой пул и опубликуйте новую версию. Затем отправьте запрос с новым ключом.
provider_rate_limit429ProviderException PHPProviderError Node.jsПровайдер ответил, что его лимит запросов исчерпан. Пул, который переключает подключения при лимите запросов, сначала пробует другое; этот код приходит, когда ничего другого не пробовали.Отправьте вызов снова позже с новым ключом. Добавьте подключение в пул или разрешите пулу переключать подключения при лимите запросов.
provider_error502ProviderException PHPProviderError Node.jsПровайдер отклонил вызов или ответил тем, чем Slen не может воспользоваться, и вызов не завершился.Проверьте, чего запрос просит у модели, — параметр, которого модель не принимает, провайдер отклоняет. Отправьте вызов снова с новым ключом, когда запрос будет верным.
provider_timeout504ProviderException PHPProviderError Node.jsДо провайдера не удалось достучаться — имя не разрешилось или соединение не установилось, — поэтому вызов не ушёл. Вопреки названию, это не значит, что модель отвечала медленно.Отправьте вызов снова позже с новым ключом. Провайдер, до которого достучались и который не ответил вовремя, — это operation_uncertain, а не этот код.
provider_unavailable502ProviderException PHPProviderError Node.jsПровайдер ответил сбоем на своей стороне. Slen ставит это подключение на паузу, а пул, который переключает подключения, пробует другое.Отправьте вызов снова позже с новым ключом. Пул с несколькими подключениями переживает сбой одного из них.
pool_exhausted503ProviderException PHPProviderError Node.jsНи одно подключение пула не смогло обслужить вызов за то число попыток, которое разрешает пул. last_error_code в деталях ошибки называет последний сбой, а заголовок Retry-After говорит, сколько ждать, когда это известно.Подождите столько, сколько говорит Retry-After, и отправьте вызов снова с новым ключом. Если пул исчерпывается часто, добавьте в него подключения.
operation_uncertain504OperationUncertainException PHPOperationUncertainError Node.jsПровайдер был вызван, а его ответ не вернулся, поэтому неизвестно, был ли вызов сделан и оплачен. Так же заканчивается вызов модели во флоу, который шёл в фоне, если провайдер его принял, а спросить провайдера о нём больше не удалось. Холд не возвращается — он держится, пока не истечёт. Выполнение, которое так закончилось, получает статус uncertain.Не отправляйте вызов снова с новым ключом — это может быть второй оплаченный вызов. Прочитайте операцию или выполнение, чтобы узнать, что произошло. Событие вебхука operation.uncertain тоже сообщает о таком вызове.
ledger_unavailable503ServiceUnavailableException PHPServiceUnavailableError Node.jsРеестр трат был недоступен, когда вызов попросил свой холд. Вызов не авторизован — для него ничего не зарезервировано, и его провайдер не вызывался.Отправьте запрос снова позже — запрос к флоу с новым ключом, потому что его неудавшееся выполнение сохраняет ключ, который у него был. GET /v1/degraded-status говорит, что API пропускает, пока реестр недоступен.
flow_runtime_error—FlowRuntimeException PHPFlowRuntimeError Node.jsКод, который среда выполнения держит для флоу, сломавшегося во время выполнения по причине, для которой у неё нет более узкого кода. Сейчас этим кодом не отвечает ни один запрос и им не заканчивается ни одно выполнение — у сбоя выполнения есть более узкий код или нет никакого.Сейчас обрабатывать нечего. Если ответ всё же принесёт этот код, прочитайте трассировку выполнения, чтобы увидеть, где оно остановилось. Вызовы моделей до этого места оплачены, и повтор с новым ключом оплатит их снова.
step_limit_exceeded500FlowRuntimeException PHPFlowRuntimeError Node.jsВыполнение не дошло до конечного узла за то число шагов, которое разрешено одному выполнению. Флоу больше, чем среда выполнения проходит за один запрос.Сократите флоу или разделите работу между двумя операциями. Затем отправьте запрос с новым ключом — на повтор с тем же ключом отвечает неудавшееся выполнение.
unrouted_port500FlowRuntimeException PHPFlowRuntimeError Node.jsУзел вышел через порт, к которому ничего не подключено, и выполнению некуда было идти. Сообщение ошибки называет узел и порт.Подключите этот порт в конструкторе флоу и опубликуйте новую версию. Затем отправьте запрос с новым ключом — на повтор с тем же ключом отвечает неудавшееся выполнение.
execution_timeout504TimeoutException PHPTimeoutError Node.jsВыполнение флоу исчерпало время, которое ему отведено. Вызов модели, который ответил до этого, оплачен.Прочитайте трассировку выполнения, чтобы увидеть, куда ушло время. Прежде чем повторять запрос, учтите, что повтор с новым ключом снова оплатит то, что уже оплачено.
http_request_failed502FlowRuntimeException PHPFlowRuntimeError Node.jsВызов, который флоу делает к другому HTTP API, не удался или получил в ответ ошибку, а к порту ошибки узла, который его сделал, ничего не подключено. Это не провайдер модели. Этот узел заморожен, если сервис не настроен иначе, — уже опубликованная с ним версия выполняется, а новая версия содержать его не может.Проверьте API, которое вызывает флоу, затем отправьте запрос с новым ключом — на повтор с тем же ключом отвечает неудавшееся выполнение. Порт ошибки замороженного узла нельзя подключить в новой версии — чтобы изменить, что флоу делает при такой ошибке, опубликуйте версию без этого узла.
rate_limit_exceeded429RateLimitException PHPRateLimitError Node.jsAPI-ключ или человек, вошедший в консоль, отправил за минуту больше запросов, чем позволяет лимит. У нескольких операций свой, меньший лимит — например, у проверки подключения провайдера. Заголовок Retry-After ответа говорит, сколько секунд ждать. Чтение статуса выполнения тоже считается.Подождите столько, сколько говорит Retry-After, и отправьте запрос снова. Для отклонённого запроса ничего не зарезервировано и не потрачено.
service_unavailable503ServiceUnavailableException PHPServiceUnavailableError Node.jsSlen не смог достучаться до своей базы данных и ответил, ничего не сделав. Тот же код отвечает на изменение бюджета, которое слишком долго ждало вызовов, выполняющихся на этом бюджете; ничего не изменено.Отправьте запрос снова позже. Отклонённое изменение бюджета говорит в Retry-After, когда.
background_hold_expired—TimeoutException PHPTimeoutError Node.jsЭто не ответ API — им заканчивается выполнение, запущенное в асинхронном режиме. Вызов модели во флоу выполнялся у провайдера в фоне, и его холд был закрыт другим списанием, пока вызов ждал, поэтому вызов закончился, не спросив у провайдера ответ. Ничего не возвращено, и провайдер всё ещё может выставить счёт за принятый вызов. Вопреки названию, холд, который просто истёк, так вызов не заканчивает.Отправляйте запрос снова с новым ключом, только если ответ всё ещё нужен. Провайдер может выставить счёт и за первый вызов, поэтому за ответ, возможно, придётся заплатить дважды.
execution_conflict500FlowRuntimeException PHPFlowRuntimeError Node.jsВыполнение не удалось открыть — его запись столкнулась с другой, и не по ключу идемпотентности. Флоу не выполнялся.Отправьте запрос снова. Если это повторится, напишите в поддержку и укажите id запроса.
unknown_node500FlowRuntimeException PHPFlowRuntimeError Node.jsОпубликованная версия флоу ведёт к узлу, которого среда выполнения не может найти, поэтому выполнение остановилось.Опубликуйте флоу заново из конструктора флоу, затем отправьте запрос с новым ключом — на повтор с тем же ключом отвечает неудавшееся выполнение. Если с новым ключом ошибка повторится, напишите в поддержку и укажите id запроса.
node_type_not_supported500FlowRuntimeException PHPFlowRuntimeError Node.jsВ опубликованной версии флоу есть узел типа, который среда выполнения не умеет выполнять.Замените узел в конструкторе флоу и опубликуйте новую версию. Затем отправьте запрос с новым ключом — на повтор с тем же ключом отвечает неудавшееся выполнение.

Коды без собственного типа

Для этих кодов у SDK нет собственного типа. Он выбрасывает тип по статусу ответа — по правилу под таблицей.

КодHTTP-статусЧто это значитЧто делать
project_access_restricted403Вызывающий видит только часть проектов организации и попытался изменить то, что принадлежит всей организации, или прочитать журнал аудита. API-ключу доступен только проект, которому он принадлежит.С API-ключом создавайте нужное в проекте ключа — подключение провайдера, у которого scope равен project. Человек просит внести изменение участника, которому доступны все проекты.
customer_has_history409Клиента нельзя удалить, потому что с ним уже что-то происходило — на счёте есть кредиты или резерв, или в выписке есть запись. Журнал кредитов только дополняется, и его записи объясняют баланс.Заблокируйте клиента вместо удаления.
reservation_not_found404Это не ответ ни одной операции API. Slen держит этот код для холда, который не может найти, пока закрывает вызов модели.Обрабатывать нечего. Если ответ всё же его принесёт, напишите в поддержку и приведите id запроса.
reservation_expired409Это не ответ ни одной операции API. Slen держит этот код для продления истёкшего холда; истёкший холд всё ещё принимает списание своего вызова.Обрабатывать нечего. Если ответ всё же его принесёт, напишите в поддержку и приведите id запроса.
invalid_request409, 422Запрос нельзя выполнить в таком виде, и сообщение ошибки говорит почему — политика без параметра, который нужен её действию, или с условием, которое её действие никогда не встречает; выбранные проекты для участника, чья роль открывает все проекты; заголовок Idempotency-Key длиннее 190 символов. SDK сами выбрасывают ошибку с этим кодом для вызова, который отклоняют до отправки.Прочитайте сообщение и измените запрос.
idempotency_key_required400Операция требует заголовок Idempotency-Key, а в запросе его нет или он пустой.Отправьте собственный ключ, который называет единицу работы, и отправляйте тот же ключ, когда повторяете эту работу.
invalid_flow_input422Во входе нет того, что нужно узлу флоу, — флоу, который вызывает модель, требует непустой messages во входе. Выполнение закрывается как failed, и ключ остаётся за ним.Исправьте вход и отправьте его с новым ключом. На повтор с тем же ключом отвечает неудавшееся выполнение.
execution_parked—Это не ответ API. Внутри среды выполнения он отмечает выполнение, которое остановилось, чтобы ждать, а на запрос отвечает само выполнение — ждущее или в очереди.Обрабатывать как ошибку нечего. Дождитесь выполнения так же, как любого другого, которое ждёт.
flow_not_found404На код операции не отвечает ни один флоу — к нему не привязан флоу, у флоу нет опубликованной версии или флоу в архиве. Ничего не создаётся, поэтому ключ идемпотентности остаётся свободным. Тот же код отвечает на id флоу, который вызывающему недоступен.Привяжите код операции к флоу и опубликуйте флоу. Повтор с тем же ключом выполнится, когда флоу сможет ответить.
operation_not_found404Ни у одной операции — записи одного вызова модели с его попытками у провайдеров — нет такого id в проекте ключа.Проверьте id. Операция другого проекта отвечает так же.
invalid_credentials401, 502Два случая. Вход в консоль, при котором почта и пароль не совпадают ни с одной учётной записью. Вызов модели, при котором провайдер отклонил ключ подключения, обслуживавшего вызов, — тогда Slen отмечает учётные данные этого подключения как недействительные.Войдите с правильным паролем. Для подключения укажите в нём действующий ключ провайдера в консоли.
csrf_token_mismatch419Запрос сессии консоли пришёл без своего CSRF-токена или с устаревшим. Запрос с API-ключом этот код никогда не получает.Перезагрузите страницу консоли и повторите действие.
not_found404Регистрация и вход в консоль ответили так, будто такого адреса нет. Они открыты только для браузера, в котором открыли выданную ссылку доступа.Откройте свою ссылку доступа в этом браузере, затем снова зарегистрируйтесь или войдите.
flow_execution_not_found404Выполнения с таким id нет в проектах, доступных вызывающему, — его не было вовсе, или оно принадлежит другому проекту.Проверьте id. Это execution_id ответа, который начал выполнение.

Для кода без собственного типа SDK выбирает тип ошибки по HTTP-статусу ответа:

  • 401, 403 AuthenticationException PHP, AuthenticationErrorNode.js
  • 402 SpendRefusedException PHP, SpendRefusedErrorNode.js
  • 429 RateLimitException PHP, RateLimitErrorNode.js
  • 500 и выше ProviderException PHP, ProviderErrorNode.js
  • любой другой статус InvalidRequestException PHP, InvalidRequestErrorNode.js

Коды консоли и настроек

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

КодHTTP-статусЧто это значитЧто делать
session_required403Это может сделать только человек, вошедший в консоль, — создать организацию, изменить или удалить участника, отправить, повторно отправить или отозвать приглашение, подключить или изменить канал или маршрут уведомлений, прочитать и изменить свои уведомления. API-ключ этого не может.Сделайте это в консоли, войдя как участник, чья роль это разрешает.
member_forbidden403Роль вошедшего человека не разрешает такое изменение этого участника, или изменение касается его собственного участия. Роль владельца даёт и забирает только владелец, а изменяет или удаляет участника только владелец или администратор.Попросите владельца внести изменение. Чтобы самому расстаться с организацией, выйдите из неё.
channel_forbidden403Консоль попросила обновления в реальном времени по проекту, который вызывающему читать нельзя, — по другому проекту, чем тот, которому принадлежит ключ, или по проекту, недоступному человеку.Переключитесь на доступный вам проект и откройте страницу снова.
budget_not_found404Бюджета с таким id нет в проектах, доступных вызывающему, — его не было вовсе, или он принадлежит другому проекту.Проверьте id. Получите список бюджетов, чтобы найти нужный; архивный бюджет попадает в список, если include_archived равен 1.
invalid_date_range422Окно списка реестра, холдов или операций — не такое, какое список читает. Оба конца приходят вместе или не приходят вовсе, конец не может быть раньше начала, окно — не больше семи дней, и каждый конец — момент, который список может разобрать.Отправьте from и to вместе, конец после начала, не дальше семи дней друг от друга, — или не отправляйте ни одного и читайте последние семь дней. Чтобы прочитать более долгий период, сдвигайте окно.
flow_invalid422В графе флоу есть ошибки, поэтому он не может стать версией, которая выполняется. Их нашла публикация в черновике, или откат нашёл, что версия, к которой он вернулся бы, называет модель или пул, которых больше нет. Подробности ошибки перечисляют каждую проблему с её кодом и узлом, к которому она относится.Исправьте каждую ошибку списка в конструкторе флоу и опубликуйте снова. Предупреждения публикацию не останавливают. Для отката выберите другую версию или опубликуйте черновик, который больше не называет исчезнувшее.
flow_draft_not_found404У флоу нет черновика для публикации — его опубликовали и с тех пор не меняли. Так же отвечает проверка флоу, у которого нет ни черновика, ни опубликованной версии.Измените флоу, чтобы начать новый черновик, затем опубликуйте его. Чтобы версия, которая выполняется сейчас, выполнялась и дальше, публиковать ничего не нужно.
flow_slug_taken409В том же проекте в тот же момент создавался другой флоу и занял то же короткое имя. Флоу не создан.Создайте флоу снова. Имя, которое в проекте уже есть, получает число в конце своего короткого имени.
approval_not_found404Запроса на согласование с таким id нет в проектах, доступных вызывающему, — его не было вовсе, или он принадлежит другому проекту.Проверьте id. Получите список запросов на согласование проекта, чтобы найти нужный.
alert_not_found404Оповещения с таким id нет в проектах, доступных вызывающему, — его не было вовсе, или оно принадлежит другому проекту.Проверьте id. Прочитайте ленту оповещений, чтобы найти нужное.
alert_rule_not_found404Правила оповещения с таким id нет в проектах, доступных вызывающему, — его не было вовсе, его удалили, или оно принадлежит другому проекту.Проверьте id. Правила перечислены на вкладке правил страницы оповещений.
alert_rule_unknown_setting422Настройки правила оповещения называют настройку, которой у его типа нет. Сообщение называет настройки, которые тип принимает.Отправляйте только настройки, которые сообщение называет для этого типа.
api_key_not_found404API-ключа с таким id нет в проектах, доступных вызывающему, — его не было вовсе, или он принадлежит другому проекту. Для отозванного ключа ротация невозможна, и запрос отвечает так же.Проверьте id на странице ключей консоли. Чтобы заменить отозванный ключ, выпустите новый.
invite_not_found404По этой ссылке или этому id приглашения нет. Ссылка могла быть набрана с ошибкой, или приглашение принадлежит другой организации.Откройте ссылку точно в том виде, в каком она пришла в письме, или попросите новое приглашение.
invite_not_pending410Приглашение существует, но больше не открыто — его приняли, отклонили или отозвали, или его срок истёк.Попросите владельца или администратора организации пригласить вас снова.
invite_email_mismatch403Приглашение отправлено на другой адрес электронной почты, чем у вошедшей учётной записи.Войдите в учётную запись того адреса, на который отправлено приглашение, или попросите приглашение на свой адрес.
email_not_verified403Учётная запись ещё не подтвердила свой адрес электронной почты, поэтому не может принять приглашение или подключить Telegram для уведомлений.Откройте ссылку подтверждения, отправленную на этот адрес, затем откройте приглашение или подключите Telegram снова.
invite_forbidden403Вошедший человек не может управлять этим приглашением. Приглашает только владелец или администратор, а приглашение на роль владельца отправляет, повторно отправляет и отзывает только владелец. API-ключ приглашениями не управляет.Попросите владельца — или администратора, если роль ниже владельца, — отправить или изменить приглашение.
member_not_found404Участника с таким id в организации нет — он мог выйти или быть удалён.Прочитайте список участников снова и используйте id, который он даёт.
last_owner409Изменение оставило бы организацию без владельца. У организации остаётся хотя бы один.Сначала сделайте владельцем другого участника, затем измените роль этого, удалите его или выйдите.
organization_not_found404Организации нет, или вошедший человек не её участник. Так же отвечает запрос, который называет другую организацию, чем у ключа.Проверьте id и переключитесь на организацию, участником которой вы являетесь.
organization_limit_reached409Человек уже владеет столькими организациями, сколькими может владеть один человек, — двадцатью, если сервис не настроен иначе.Сделайте другого участника владельцем организации, которая вам больше не нужна, и выйдите из неё, затем создайте новую.
project_not_found404Проекта с таким id в организации нет, или он недоступен вызывающему.Проверьте id. Получите список проектов организации, чтобы найти доступный вам.
project_required422В организации ещё нет проекта, а запросу он нужен для работы.Создайте проект в организации, затем повторите действие.
policy_not_found404Политики с таким id нет в проектах, доступных вызывающему, — её не было вовсе, её удалили, или она принадлежит другому проекту.Проверьте id. Прочитайте список политик, чтобы найти нужную.
provider_connection_not_found404Подключения провайдера с таким id нет в проектах, доступных вызывающему, — его не было вовсе, или оно принадлежит другому проекту. Пул отказывается принять такое подключение с тем же кодом.Проверьте id. Получите список подключений, а для пула выберите подключение своего проекта или всей организации.
provider_pool_not_found404Пула провайдеров с таким id нет в проектах, доступных вызывающему, — его не было вовсе, или он принадлежит другому проекту.Проверьте id. Получите список пулов, чтобы найти нужный.
webhook_endpoint_not_found404Вебхука с таким id в организации нет, или он принадлежит проекту, недоступному вызывающему.Проверьте id на странице вебхуков консоли.
webhook_url_not_allowed422Slen не будет доставлять на этот адрес. Вебхуку нужен адрес https на порту 443, с именем хоста, а не IP-адресом, без логина и пароля, и его хост не может вести в частную сеть.Укажите публичный адрес https своего сервиса. Хост, имя которого ещё не разрешается, принимается, потому что каждая доставка разрешает его заново.
email_already_registered409Учётная запись с этим адресом электронной почты уже есть, поэтому новая не создана.Войдите с этим адресом или сбросьте его пароль, если забыли его.
invalid_token422Ссылка для подтверждения адреса электронной почты или для нового пароля неверна, уже использована или её срок истёк.Попросите новую ссылку и откройте её в том виде, в каком она пришла в письме.
too_many_attempts429За короткое время не удалось слишком много попыток войти или задать новый пароль — для этой учётной записи или с этого сетевого адреса, поэтому попытки на время отклоняются.Подождите время, которое называет заголовок Retry-After, затем попробуйте снова с правильным паролем — или задайте новый.
oauth_failed422Вход через Google не удалось завершить. Попытка заняла слишком много времени или не прошла проверку, или Google не подтвердил адрес, который связал бы с уже существующей учётной записью.Начните вход через Google заново. Если Google не подтвердил адрес, войдите с паролем учётной записи.
flow_version_not_found404У флоу нет версии с таким номером.Получите список версий флоу и используйте номер, который он даёт.
flow_version_not_published409Названная версия — черновик. Снова выполняться может только версия, которую опубликовали.Назовите опубликованную версию или опубликуйте черновик.
no_previous_version409Откат без номера версии ведёт к опубликованной версии сразу под той, которая выполняется, а такой нет — флоу на своей первой версии, или ни одна его версия не выполняется.Назовите версию, к которой перейти, или опубликуйте новую.
draft_conflict409Черновик уже не тот, для которого сделан запрос. Кто-то сохранил его в промежутке или опубликовал и начал новый — или во время публикации пришло сохранение либо другая публикация, пока она готовилась. Ничего не записано и ничего не опубликовано.Прочитайте черновик снова, примените к нему своё изменение и отправьте запрос снова с номерами, которые у него теперь.
operation_already_bound409На этот код операции уже отвечает другой флоу проекта. Флоу отвечает на один код, а код ведёт к одному флоу; этот флоу сохраняет код, который у него был.Сначала уберите код у другого флоу или выберите другой код.
approval_expired409Запрос на согласование больше нельзя решить. Его срок истёк, и теперь он закрыт так, будто никто не решил, — или его выполнение закончилось и больше не ждёт.Решения больше ничто не ждёт. Откройте выполнение, чтобы увидеть, чем оно закончилось, и отправьте запрос к флоу снова с новым ключом, если работа всё ещё нужна.
approval_already_decided409Запрос на согласование больше не ожидает — кто-то решил его первым, или его срок истёк.Прочитайте запрос снова, чтобы увидеть решение и кто его принял.
connection_in_use409Подключение провайдера — последнее включённое подключение пула, поэтому его удаление оставило бы пулу нечего вызывать.Добавьте в пул другое подключение или включите одно из его подключений, затем удалите это. Или сначала удалите пул.
pool_in_use409Флоу всё ещё вызывает модели через этот пул — его называет версия флоу, которая выполняется, или незаконченное выполнение идёт на версии, которая его называет. Пул не удалён.Опубликуйте версии этих флоу, которые называют другой пул, дайте выполнениям закончиться, затем удалите пул.
pool_connection_exists409Подключение уже входит в этот пул.Вместо этого измените условия участия подключения — его приоритет, вес, множитель стоимости или то, включено ли оно.
pool_connection_not_found404Подключение не входит в этот пул.Прочитайте пул, чтобы увидеть его подключения, или сначала добавьте подключение.
connection_incompatible422Подключение не может войти в этот пул. Оно другого провайдера, чем пул, а пул не принимает подключения других провайдеров, — или подключение удалено.Выберите подключение провайдера пула или разрешите пулу принимать подключения других провайдеров.
unsupported_pool_strategy422Вызов модели прошёл через пул, стратегию которого Slen не выполняет. API такую стратегию никогда не принимает; пул получил её иным путём.Задайте пулу стратегию priority, least_utilized или weighted, затем отправьте запрос снова с новым ключом — вызов, который встретил этот код, закончился.
already_a_member409Человек с этим адресом электронной почты уже участник организации, поэтому приглашение не отправлено.Измените роль участника, если имелось в виду это.
invite_already_pending409Приглашение на этот адрес электронной почты в организации уже открыто.Отправьте открытое приглашение повторно или отзовите его и пригласите снова.
invite_limit_reached429За короткое время ушло слишком много писем с приглашениями — организация отправляет не больше 50 в сутки, один человек не больше 20 в час, новые приглашения и повторные вместе, если сервис не настроен иначе, — поэтому это на время отклонено.Подождите время, которое называет заголовок Retry-After, затем пригласите или отправьте повторно ещё раз. Уже отправленные приглашения тем временем остаются открытыми.
user_session_not_found404Активной сессии с таким id у вошедшего человека нет. Она могла закончиться, или из неё уже вышли.Прочитайте список своих сессий снова. С сессией, которой больше нет, ничего делать не нужно.
notification_channel_not_found404Канала уведомлений с таким id в организации нет, или он принадлежит проекту, который вызывающему недоступен. Личный канал другого человека тоже не находится.Проверьте id в списке каналов команды или в списке своих каналов.
notification_route_not_found404Маршрута уведомлений с таким id в организации нет, или он принадлежит проекту, который вызывающему недоступен. Маршрут также удаляется, когда его последний получатель покидает организацию, и через некоторое время после удаления правила оповещения, к которому он привязан.Прочитайте список маршрутов снова.
notification_subscription_not_found404Подписки с таким id у вошедшего человека в этой организации нет. Подписка принадлежит только своему участнику, и подписка другого участника не находится.Прочитайте список своих подписок снова.
notification_channel_url_not_allowed422Slen не будет отправлять уведомления на этот адрес. Адрес канала должен быть вебхуком того сервиса, к которому относится канал, — адресом Slack на hooks.slack.com в /services/, адресом вебхука Discord или адресом рабочего процесса Teams в Azure Logic Apps или Power Automate, с /workflows/ в пути. Адрес выведенного из работы соединителя Office 365 отклоняется, как и адрес, который не https на порту 443, содержит логин или пароль, называет IP-адрес или ведёт в частную сеть. Группа в Telegram адреса не принимает вовсе. Подробности ошибки называют случай.Скопируйте адрес из сервиса заново и вставьте его целиком. Для Microsoft Teams создайте рабочий процесс канала, а не соединитель.
notification_channel_kind_unavailable422Эта установка Slen не предлагает Telegram, потому что для неё не настроен бот Telegram.Используйте вместо него Slack, Microsoft Teams, Discord или почту либо попросите того, кто отвечает за установку, настроить бота.
notification_channel_state_invalid409Канал не в том состоянии, которое нужно для этого действия. Чат подтверждается, только пока он ждёт подтверждения, и только тем, кто получил его ссылку. Тест уходит только в активный канал. Канал, который ждёт свою ссылку, включается подтверждением чата, а не изменением статуса. У аккаунта один чат Telegram, поэтому второй не подключается, пока первый включён или на паузе.Прочитайте канал снова и действуйте по его состоянию. Подтвердите чат как тот, кто получил ссылку, возобновите канал на паузе перед тестом или отключите свой Telegram, прежде чем подключать другой.
notification_limit_reached409У организации уже столько каналов или маршрутов уведомлений, сколько ей можно, или у участника столько подписок в ней — 20 каналов и 50 маршрутов у организации и 20 подписок у участника, если сервис не настроен иначе.Удалите канал, маршрут или подписку, которые больше не нужны, и попробуйте снова.
notification_event_not_allowed422Маршрут или подписка называет событие, о котором людям сообщать нельзя, или получателя, чья роль не читает это событие в консоли. Наблюдатель не видит согласований, поэтому ни маршрут, ни подписка не приносит наблюдателю согласование.Называйте среди событий только оповещения и согласования и не включайте наблюдателя в маршрут, который несёт согласования.
notification_unsubscribe_invalid404Ссылка для отписки от писем-уведомлений сделана не Slen. Её обрезали или изменили по дороге.Откройте ссылку из письма снова, целиком, или отключите письма среди своих уведомлений в консоли.

Для кода без собственного типа SDK выбирает тип ошибки по HTTP-статусу ответа:

  • 401, 403 AuthenticationException PHP, AuthenticationErrorNode.js
  • 402 SpendRefusedException PHP, SpendRefusedErrorNode.js
  • 429 RateLimitException PHP, RateLimitErrorNode.js
  • 500 и выше ProviderException PHP, ProviderErrorNode.js
  • любой другой статус InvalidRequestException PHP, InvalidRequestErrorNode.js

Код, с которым заканчивается выполнение

Выполнение, которое не завершилось, хранит код в error_code, а error_message говорит то же предложением. Чтение статуса, ожидание и повтор запроса с его ключом читают оба поля. Большинство этих кодов — коды этой страницы: код ошибки, которой ответили на запрос. Два вида — нет.

Узел Отклонить запрос завершает выполнение с кодом и сообщением, заданными в нём. Узел, в котором не задано ни того ни другого, завершает его так:

JSON
{
  "status": "rejected",
  "error_code": "rejected_by_flow",
  "error_message": "The request was rejected by the flow"
}

Среда выполнения закрывает выполнение, которое больше не может провести, с собственным кодом: его обработчик остановился, оно ждало дольше, чем выполнению можно ждать, его состояние не удалось сохранить или прочитать. Что произошло, говорит error_message. Выполнение, которое ждало слишком долго, заканчивается так:

JSON
{
  "status": "failed",
  "error_code": "parked_expired",
  "error_message": "The execution waited longer than a parked execution may and was closed"
}

У выполнения, которое закрыла ошибка без кода в API, нет ни того ни другого: error_code и error_message равны null.

Что читать дальше

Собрано из openapi b070e1f, sdk contract 5cc7055, php ae4a53b, node 84bc62d