Основные понятия

Ошибки

Gemlead отвечает HTTP-статусом и JSON-ошибкой, у которой type и code никогда не меняются, так что ваш код может на них опираться.

Объект ошибки

У всех ошибок одинаковая структура. message написан для людей и может меняться, а type и code предназначены для вашего кода. Каждый ответ, с ошибкой или без, также содержит заголовок Request-Id.

Атрибуты

  • typestring
    Категория ошибки, одна на каждый HTTP-статус.
  • codestring
    Что именно пошло не так. Коды приведены ниже.
  • messagestring
    Понятное человеку описание ошибки.
  • paramstring или null
    Параметр, вызвавший ошибку, если он есть.
  • request_idstring
    ID запроса, тот же, что в его заголовке Request-Id. Сообщите его нам, если нужна помощь.
  • doc_urlstring
    Ссылка на описание кода на этой странице.
Ответ400
{
  "error": {
    "type": "invalid_request_error",
    "code": "parameter_invalid",
    "message": "score_min must be an integer from 0 to 100.",
    "param": "score_min",
    "request_id": "req_7Hq2LmX9pT4vK1sN",
    "doc_url": "https://gemlead.ai/docs/errors#parameter_invalid"
  }
}

Коды HTTP-статусов

СтатусТипЗначение
400invalid_request_errorВ запросе отсутствует, не распознан или неверен параметр. Запрос с методом, который путь не поддерживает, тоже получает этот тип, со статусом 405.
401authentication_errorКлюча нет, ключ неверный или отозван.
403permission_errorКлюч действителен, но не может выполнить это действие, например ключ read пытается записать данные или аккаунт на тарифе Free или Starter.
404not_found_errorВ аккаунте ключа нет такого объекта или нет такого маршрута.
409idempotency_errorIdempotency-Key использован повторно для другого запроса, или его первый запрос ещё выполняется.
429rate_limit_errorСлишком много запросов. Подождите Retry-After секунд.
500api_errorЧто-то пошло не так на нашей стороне, либо 501, если эндпоинт ещё недоступен. Повторите позже с тем же Idempotency-Key.

Коды ошибок

КодСтатусЗначение
api_key_missing401В запросе нет заголовка Authorization или X-Api-Key.
api_key_invalid401Такого ключа нет. Проверьте, что скопировали его целиком, включая gl_live_.
api_key_revoked401Ключ отозван в приложении. Создайте новый.
token_expired401Истёк срок действия OAuth-токена доступа ИИ-ассистента. Ассистент обновит его сам.
insufficient_scope403У ключа только право read, а запрос меняет данные. Используйте ключ с правом write.
plan_required403Владелец аккаунта на тарифе Free или Starter. API работает на тарифах Business и Enterprise, включая пробный период, и тот же ключ снова заработает, как только аккаунт перейдёт на один из них.
forbidden403Пользователю ключа это действие в этом аккаунте X недоступно. Например, участник без роли админа меняет команду или делится персоной.
parameter_missing400Отсутствует обязательный параметр. Название параметра указано в param.
parameter_invalid400API не принимает значение параметра, например оценку выше 100 или дату не в формате ISO 8601. Название параметра указано в param.
parameter_unknown400В строке запроса или в теле есть параметр, который этот эндпоинт не принимает. Название параметра указано в param.
body_invalid400Тело не является корректным JSON или JSON-объектом.
cursor_invalid400Этот cursor не был выдан API или создан для других фильтров.
idempotency_key_invalid400Idempotency-Key длиннее 255 символов.
method_not_allowed405Этот путь не поддерживает данный метод. Допустимые методы перечислены в заголовке Allow.
url_invalid400URL вебхука не на HTTPS, содержит учётные данные, не резолвится или указывает на частный адрес.
webhook_endpoint_limit_reached400У аккаунта уже 10 эндпоинтов вебхуков. Сначала удалите один.
resource_already_exists400Такой объект уже существует, например у персоны уже есть источник с этим методом или такой же поиск по ключевым словам.
limit_reached400Достигнут лимит, например 100 персон на аккаунт, 500 поисков по ключевым словам на персону или 50 колонок доски.
seed_source_refused400Стартовый источник новой персоны отклонён, например аккаунт инвестора, акселератора или СМИ. Такие источники не приводят покупателей.
x_profile_not_found400В X нет доступного профиля с таким именем пользователя.
lead_without_x_id400У лида ещё нет ID аккаунта X, поэтому подписаться на него нельзя.
lead_not_convertible400Лид не относится ни к одной персоне, поэтому не может стать источником.
campaign_archived400Кампания в архиве. Скопируйте её, чтобы запустить снова.
campaign_not_started400Кампания ещё черновик, поэтому приостанавливать нечего.
campaign_flow_empty400В сценарии кампании ещё нет ни одного шага. Добавьте шаг, прежде чем запускать её.
column_protected400Эта колонка входит в саму доску, например «Входящие» или колонка персоны, и её нельзя удалить.
shared_account_has_campaigns400У аккаунта X, который вы убираете из общей персоны, ещё есть кампании по этой персоне. Удалите их и попробуйте снова.
owner_cannot_leave400Владелец аккаунта X не может выйти из своей команды. Вместо этого удалите участников.
translation_off400Перевод диалога выключен. Включите его или переводите по одному сообщению.
recipient_not_messageable400X отклонил DM. Лид закрыл DM или заблокировал аккаунт.
media_kind_unsupported400Этот диалог не принимает такой тип файла. Для голосового сообщения нужен диалог в X Chat.
x_session_expired409Сессия аккаунта X истекла. Переподключите его в приложении и повторите попытку.
assistant_busy409Julien AI ещё отвечает на сообщение в этом чате или на 3 сообщения этого аккаунта X. Дождитесь ответа и отправьте снова.
conversation_unavailable409В диалоге пока нет пользователя X, которому можно написать.
resource_missing404В аккаунте ключа нет объекта с этим ID. На ID из другого аккаунта ответ такой же.
route_not_found404По этому пути нет эндпоинта.
idempotency_key_reused409Этот Idempotency-Key уже использовался за последние 24 часа для другого метода, пути или тела.
idempotency_key_in_use409Первый запрос с этим Idempotency-Key ещё выполняется. Повторите через секунду.
rate_limit_exceeded429Больше 120 запросов в минуту с этим ключом. Подождите Retry-After секунд.
export_rate_limit_exceeded429Больше 10 экспортов в час на этом аккаунте.
dm_paused429X временно ограничивает DM аккаунта. Retry-After показывает, когда они снова станут доступны.
dm_rate_limited429Больше 10 DM в минуту с этого аккаунта.
dm_daily_limit429С этого аккаунта уже отправлено 300 DM за сегодняшние сутки по UTC или исчерпана его суточная квота в X.
assistant_rate_limited429Больше 6 сообщений Julien AI в минуту с этого аккаунта X или 150 в час для его владельца, включая чат в приложении.
assistant_daily_limit429С этого аккаунта X уже отправлено 100 сообщений Julien AI за сегодняшние сутки по UTC.
passcode_rate_limited429Больше 5 попыток ввода кода X Chat в час на этом аккаунте. X учитывает каждую попытку.
internal_error500Непредвиденная ошибка на нашей стороне. request_id поможет нам её найти.
request_timeout500Запрос выполнялся слишком долго. Повторите его, а если он меняет данные, то с тем же Idempotency-Key.
not_implemented501Этот эндпоинт пока недоступен.
upstream_unavailable502X или сервис Gemlead не ответил. Ничего не изменилось, повторите через минуту.

Обработка ошибок

  • 400, 401, 403 и 404 в неизменном виде никогда не пройдут. Исправьте запрос, прежде чем отправлять его снова.
  • 409 с idempotency_key_in_use пройдёт через секунду. Повторите запрос с тем же Idempotency-Key.
  • 429 пройдёт через Retry-After секунд. См. раздел Лимиты запросов.
  • 500 можно повторить после короткой паузы. Для запросов, которые меняют данные, передавайте тот же Idempotency-Key, чтобы ничего не выполнилось дважды.
  • Записывайте в лог request_id каждой ошибки, по нему мы найдём запрос за секунды.