Ошибки
Формат ошибки GraphQL
Как и в любом GraphQL API, ошибки запроса приходят в поле errors ответа. Проверяйте его наличие, а не только HTTP-статус.
{
"errors": [
{
"message": "Неверный пароль",
"path": ["login"],
"extensions": {
"code": "wrong_password",
"correlation_id": "..."
}
}
],
"data": null
}
| Поле | Описание |
|---|---|
message | Понятный текст ошибки на языке пользователя. Предназначен для людей — в коде не ориентируйтесь на его формулировку |
extensions.code | Категория ошибки для программной обработки (таблица ниже) |
extensions.correlation_id | Идентификатор для поддержки. Укажите его, когда пишете в поддержку |
extensions.detail | Дополнительные подробности, если они есть |
path | Какое поле запроса вызвало ошибку |
Язык message определяется параметром запроса ?lang=ru|en, заголовком X-Lang или Accept-Language; по умолчанию — русский.
Коды extensions.code
| Код | Что значит | Что делать |
|---|---|---|
unauthorized | Токен не передан, неверен или отозван | Проверьте заголовок Authorization: Bearer ... и что токен не отозван (Аутентификация) |
forbidden | Действие запрещено: чужой пост, токен «только чтение» и т. п. | Используйте токен с правом записи, работайте только со своими данными |
not_found | Объект не найден (пост, аккаунт, пользователь, файл) | Проверьте идентификатор |
validation_error | Неверные входные данные или недопустимое действие | Исправьте запрос по тексту message |
tariff_limit | Тариф истёк или достигнут лимит тарифа | Продлите или смените тариф |
wrong_password | Неверный пароль при login | — |
user_exists | Пользователь уже существует | — |
service_unavailable | Сервис временно недоступен | Повторите запрос позже |
internal_error | Внутренняя ошибка сервера | Повторите запрос; если ошибка повторяется, передайте correlation_id в поддержку |
Список кодов может пополняться: обрабатывайте неизвестные коды как общую ошибку.
Типичные ошибки
Аутентификация
| Ситуация | code | Текст (ru) |
|---|---|---|
| Токен не передан, неверный или отозван | unauthorized | Не авторизованы |
| Мутация с токеном «только чтение» | forbidden | Сессия только для чтения. Это действие недоступно. |
login: пользователь не найден | not_found | Пользователь не найден |
login: неверный пароль | wrong_password | Неверный пароль |
| Пустое или слишком длинное название токена | validation_error | Укажите название API-ключа / Название слишком длинное (максимум 128 символов) |
Неверный или отозванный токен не приводит к HTTP-ошибке: запрос выполняется как неавторизованный и защищённые методы возвращают unauthorized.
Тариф
| Ситуация | code | Текст (ru) |
|---|---|---|
| Создание, обновление, удаление поста при истёкшем тарифе | tariff_limit | Тариф истек |
| Достигнут лимит аккаунтов по тарифу (при подключении в кабинете) | tariff_limit | Превышен лимит аккаунтов |
Посмотреть тариф и лимиты можно в разделе Тарифы.
Посты
| Ситуация | code | Текст (ru) |
|---|---|---|
| Нет ни текста, ни изображений | validation_error | Не заполнены обязательные поля (текст, либо картинки) |
| Не выбран ни один аккаунт | validation_error | Выберите хотя бы один аккаунт для публикации |
| Аккаунт не найден | not_found | Не найден аккаунт соцсети |
Одновременно publishAt и publishDelayMinutes | validation_error | Нельзя указывать одновременно дату публикации и относительную задержку |
publishDelayMinutes вне диапазона 0–525600 | validation_error | Недопустимое значение задержки публикации (минуты) |
Некорректные draftParams / переход состояния черновика | validation_error | Некорректное расписание черновика / Нельзя изменить состояние черновика |
Изображение по imageUrls не скачалось | validation_error | Ошибка загрузки картинки по URL |
Некоторые из fileIds не найдены | not_found | Отсутствуют некоторые указанные файлы |
| Пост не найден | not_found | Пост не найден |
| Чужой пост | forbidden | Нет доступа к посту |
| Обновление опубликованного поста старше суток | validation_error | Нельзя обновлять опубликованный пост старше суток |
| Изменение даты у опубликованного поста | validation_error | Нельзя обновлять дату публикации у опубликованного поста |
| Пост обрабатывается прямо сейчас | validation_error | Пост сейчас обрабатывается, попробуйте позже |
Ошибки публикации в соцсеть
Ошибка, возникшая при отправке поста в конкретную соцсеть, не делает ошибочным сам GraphQL-запрос. Пост получает статус FAIL, а причина записывается в results[].errorMsg соответствующего аккаунта (на языке пользователя). Типичные причины:
| Причина | Что делать |
|---|---|
| Для Instagram нужно хотя бы одно изображение | Добавьте изображение в fields.imageUrls |
| Неподдерживаемый тип медиа, слишком длинный текст | Измените пост под требования соцсети |
| Нет доступа к странице/группе/каналу, токен соцсети истёк | Проверьте в кабинете состояние аккаунта (error и checkedAt в listSocialAccounts) и переподключите его |
| Пост уже был успешно опубликован в этот аккаунт | Ничего не делать |
Инструкции по подключению и устранению проблем конкретной соцсети — в разделе Аккаунты.
HTTP-статусы и лимиты
- GraphQL-ошибки приходят в поле
errors; не полагайтесь на HTTP-статус для определения успеха запроса. 429 Too Many Requests— превышен лимит запросов. Для API-токенов по умолчанию действует 600 запросов в минуту на токен (окно — календарная минута UTC). Подождите до следующей минуты и повторите запрос. Токены, полученные мутациейlogin, этим лимитом не ограничиваются.
Также существует интервал между публикациями постов (Настройки → Посты), но он не вызывает ошибок: время отправки просто сдвигается. Подробнее — в создании поста.
