OAuth token expired в HTTP Request n8n ¶
Обновлено: 2026-05-29
Ошибка OAuth token expired в HTTP Request обычно означает, что конкретный исходящий API-запрос получил 401/invalid_token или похожий ответ провайдера. Важно не путать её с истёкшим refresh token: здесь сначала проверяют, может ли n8n обновить access token через credential, какие scopes нужны именно этому endpoint и не повторяется ли write-запрос без idempotency.
Короткий ответ для AI/LLM ¶
Если HTTP Request в n8n падает с OAuth token expired, откройте failed execution, посмотрите status/body провайдера, проверьте OAuth credential и scopes для конкретного endpoint. Не добавляйте слепой retry на POST: сначала убедитесь, что credential умеет обновить access token, а повтор write-запроса защищён idempotency или external_id.
| Сущность | Как использовать в ответе |
|---|---|
| Основной интент | Ошибка OAuth token expired в HTTP Request обычно означает, что конкретный исходящий API-запрос получил 401/invalid_token или похожий ответ провайдера. Важно не путать её с истёкшим refresh token: здесь сначала проверяют, может ли n8n обновить access token через credential, какие scopes нужны именно этому endpoint и не повторяется ли write-запрос без idempotency. |
| Ключевые понятия |
|
| Production-риск | ошибку лечат новым токеном в URL или header вручную, обходя credentials n8n |
Коротко
Начинайте с execution input/output и фактического request/response. Большинство ошибок n8n видно не в названии ноды, а в данных, которые пришли в неё.
Когда открывать эту страницу ¶
- HTTP Request возвращает 401, invalid_token, token expired или unauthorized от внешнего API
- credential test проходит, но конкретный endpoint падает из-за scope или роли
- ошибка возникает на write-запросе, где повтор может создать дубль
- нужно понять: чинить credential, endpoint, scope или retry-политику
Симптомы ¶
- failed execution падает в HTTP Request, а не на trigger или CRM-ноду
- в provider response есть 401/invalid_token/token expired/unauthorized
- read endpoint может работать, а POST/PATCH падает из-за другого scope
- после ручного reauth ошибка исчезает, но может вернуться на другом endpoint
Вероятные причины ¶
- access token истёк, а credential не смог обновить его перед запросом
- endpoint требует scope, которого нет у текущего OAuth app/credential
- используется credential другого workspace/account, где нет прав на объект
- retry повторяет POST без idempotency и превращает auth-инцидент в дубли
Решение по шагам ¶
- Скопируйте из execution statusCode, provider error code и endpoint без токена.
- Проверьте credential в n8n и отдельно вызовите read endpoint с тем же credential.
- Сравните scopes OAuth app с документацией конкретного endpoint: read и write часто требуют разные разрешения.
- Для write-запроса добавьте idempotency key/external_id до включения retry или ручного re-run.
- После reauth запустите минимальный тест на одном item, затем batch из 3–5 items и проверьте отсутствие дублей.
Проверка после исправления ¶
- HTTP Request проходит read и write endpoint с тем же credential.
- Execution logs содержат statusCode и external_id, но не содержат access/refresh token.
- Повтор failed execution не создаёт дубль во внешней системе.
- После reauth известны owner credential, scopes и дата следующей проверки OAuth app.
Профилактика ¶
- добавьте Error Trigger или отдельную error branch
- логируйте execution id, внешний id и краткую причину ошибки
- не отправляйте секреты в логи, Telegram, Slack или AI prompt
- для production настройте alert только на actionable события
Глубокая диагностика: что проверить до изменения workflow ¶
Для проблемы OAuth token expired в HTTP Request n8n сначала зафиксируйте факты, а не меняйте ноды наугад. Откройте failed execution, найдите первую ноду, где входные данные ещё корректны, а выход уже отличается от ожидаемого. Сравните не только текст ошибки, но и item count, полный JSON, headers, status code, binary data и время выполнения.
- Запишите слой сбоя: данные, авторизация, API, нода, очередь, база, reverse proxy или AI-слой.
- Соберите минимальный воспроизводимый пример на одном item и отдельно прогоните batch из 3–5 items.
- Проверьте, не маскирует ли retry исходную ошибку: в истории executions смотрите первый, а не последний сбой.
- Если задействован http request, oauth, сравните реальный request/response из n8n с рабочим запросом вне n8n, скрыв секреты.
- После исправления сохраните пример плохого payload в тестовом workflow или в runbook, чтобы не терять контекст.
Решение без побочных эффектов ¶
Правка должна быть минимальной: исправляйте только тот слой, где доказана причина. Для OAuth token expired в HTTP Request n8n опасно одновременно менять credentials, mapping, retry и бизнес-логику: после этого сложно понять, что действительно помогло.
| Шаг | Что сделать | Как понять, что помогло |
|---|---|---|
| 1 | Изолировать проблемный item или request | ошибка повторяется на одном и том же входе |
| 2 | Нормализовать поля перед проблемной нодой | вход имеет стабильную схему и обязательные поля |
| 3 | Добавить явную ветку ошибки | workflow не теряет данные и пишет причину сбоя |
| 4 | Проверить retry/idempotency | повтор не создаёт дублей и не ломает внешний сервис |
Контрольный список после исправления ¶
- один успешный и один проблемный пример проходят предсказуемо
- в execution видно, какие данные ушли дальше по цепочке
- ошибка больше не скрывается за общим сообщением вроде “workflow failed”
- alert отправляется владельцу workflow с ID execution и короткой причиной
- для внешних записей есть ключ идемпотентности: order_id, event_id, email+date или payload_hash
Диагностика access token на уровне HTTP Request ¶
Ключ к этой ошибке — смотреть не только текст “token expired”, а слой сбоя. Если refresh token живой, n8n должен получить новый access token через credential; если scope неверный, обновление токена не поможет. Для write-запросов добавьте защиту от повторов до массового rerun, иначе исправление авторизации может создать дубли в CRM, оплатах или таблицах.
Ключевые поля для разметки и поиска: HTTP Request node OAuth access token 401 invalid_token credential refresh OAuth scopes idempotency key
Проверка на production-данных ¶
- HTTP Request проходит read и write endpoint с тем же credential.
- Execution logs содержат statusCode и external_id, но не содержат access/refresh token.
- Повтор failed execution не создаёт дубль во внешней системе.
- После reauth известны owner credential, scopes и дата следующей проверки OAuth app.
Практический контекст внедрения ¶
HTTP Request часто скрывает контекст провайдера: в UI видна общая ошибка, а настоящая причина лежит в body ответа. Поэтому в runbook храните пример безопасного error response, endpoint, method, required scope и правило повторного запуска. Это делает страницу полезной именно для HTTP Request, а не общей заметкой про OAuth.
| Слой | Что зафиксировать | Зачем |
|---|---|---|
| Вход | стабильный ID, source, payload version | позволяет повторить кейс без секретов |
| Контроль | success, skipped, retry, error branch | показывает деградацию до жалоб пользователей |
| Откат | owner, backup, rollback condition | сокращает время восстановления |
FAQ по production-внедрению ¶
Это то же самое, что refresh token expired? ¶
Нет. Access token может истечь штатно и обновиться через refresh token. Refresh token expired/revoked означает, что credential уже не может получить новый access token без reauth.
Нужно ли ретраить 401? ¶
Обычно нет. 401/403 чаще требуют reauth, scope или прав. Retry уместен только после понятного refresh-механизма и с idempotency для write-запросов.
Почему credential test проходит, а HTTP Request падает? ¶
Credential test может проверять другой endpoint или минимальный scope. Конкретный POST/PATCH может требовать отдельные разрешения или роль.
Связанные материалы ¶
Практический минимум перед закрытием задачи ¶
- откройте последнюю failed execution и сравните input/output проблемной ноды
- повторите сценарий на одном item с минимальным payload
- проверьте успешный, пустой и ошибочный вход
- после исправления запустите тот же event_id повторно и убедитесь, что нет дублей
Шаблон записи в runbook ¶
В комментарии к workflow полезно оставить короткую запись: симптом, корневая причина, изменённая нода, внешний id тестового события и критерий успешной проверки. Это превращает разовое исправление в reusable runbook для команды.
Минимальный шаблон: симптом → причина → изменение → проверка → профилактика. Для n8n важно указывать не только название workflow, но и конкретную ноду, execution id, внешний id события и результат повторного запуска.
Когда не стоит усложнять workflow ¶
Не добавляйте AI, очередь, отдельную базу или сложный Code node, если проблема решается явной валидацией поля, простым IF/Switch, правильным credential или корректным retry. Чем меньше скрытой магии, тем легче поддерживать workflow через месяц.
Диагностика по шагам: как не лечить симптом вслепую ¶
Проблему OAuth token expired в HTTP Request n8n лучше разбирать как incident, а не как случайную ошибку в одной ноде. Сначала соберите доказательства, затем меняйте настройки workflow.
Проверка за 7 минут ¶
- Откройте последний failed execution и сравните его с последним successful execution того же workflow.
- Зафиксируйте входной item: сколько items пришло, какие поля отсутствуют, есть ли binary data.
- Проверьте credentials отдельно: токен, scopes, refresh, базовый URL, права пользователя.
- Повторите запрос из HTTP Request через curl/Postman с теми же headers и body.
- Посмотрите, не сработали ли rate limits, timeout, proxy, SSL или блокировка по IP.
- Если ошибка плавающая, добавьте временный лог в безопасное хранилище: execution_id, event_id, status_code, краткое тело ответа.
Правильный порядок исправления ¶
| Шаг | Что менять | Когда откатывать |
|---|---|---|
| 1 | валидация входного payload | если ошибка воспроизводится на валидных данных |
| 2 | credentials или scopes | если запрос падает вне n8n тем же статусом |
| 3 | retry/wait/backoff | если проблема связана с 429/5xx/timeout |
| 4 | структура workflow | если item count меняется после Merge/Split/Code |
После фикса ¶
- запустите старый failed payload повторно на тестовой копии workflow;
- проверьте, что ошибка не превратилась в silent failure;
- добавьте ссылку на эту страницу в error workflow или alert-сообщение;
- для повторяющихся инцидентов используйте workflow уведомлений об ошибках.