Ошибки
Единый конверт ошибки в API и все коды ошибок с их HTTP-статусами и правильным способом обработки.
Обновлено 13 августа 2026 г.
Любая ошибка на любом эндпоинте использует один конверт:
{
"error": {
"code": "not_found",
"message": "Link not found",
"doc_url": "https://linkprofit.com/docs/api/errors"
}
}
Ветвитесь по error.code, а error.message показывайте людям. Ошибки валидации
добавляют массив details с сообщениями по каждому полю:
{
"error": {
"code": "validation_failed",
"message": "Request failed validation",
"doc_url": "https://linkprofit.com/docs/api/errors",
"details": [
{ "path": "url", "message": "Destination URL is not a valid address" }
]
}
}
Коды ошибок
| Код | HTTP | Значение | Что делать |
|---|---|---|---|
| unauthorized | 401 | Ключ отсутствует, неизвестен, отозван или истёк | Проверьте заголовок; выпустите новый ключ |
| forbidden | 403 | Неподходящий вид ключа для эндпоинта или операция не разрешена | Используйте ключ рабочего пространства / партнёрский, как описано |
| insufficient_scope | 403 | У ключа нет требуемой области действия | Создайте ключ с областью, названной в сообщении |
| plan_restricted | 403 | Тариф не включает эту возможность | Повысьте тариф или уберите функцию из запроса |
| not_found | 404 | Ресурс не существует — или принадлежит другому арендатору | Проверьте идентификатор; чужие ресурсы неотличимы от отсутствующих |
| invalid_request | 400 | Некорректный JSON, плохой курсор, нарушенное бизнес-правило | Исправьте запрос |
| validation_failed | 422 | Тело или строка запроса не прошли проверку по схеме | Исправьте поля, перечисленные в details |
| conflict | 409 | Конфликт состояния: занятый slug, повторный Idempotency-Key с другим телом | Выберите другое значение или новый ключ идемпотентности |
| quota_exceeded | 422 | Квота тарифа исчерпана (ссылки, домены, клиенты) | Повысьте тариф или освободите квоту |
| rate_limited | 429 | Слишком много запросов для этого ключа | Подождите Retry-After секунд; см. лимиты частоты |
| not_configured | 503 | Возможность не настроена в этом окружении | Повторите позже или обратитесь в поддержку |
| internal | 500/502/504 | Непредвиденная ошибка платформы | Повторите с отступом; сообщите нам, если повторяется |
| invalid_click_id | 422 | click_id подделан, изменён или выдан в другом рабочем пространстве | Передавайте значение параметра с идентификатором клика ровно таким, каким оно пришло в адресе назначения |
| attribution_expired | 422 | Клик старше окна атрибуции рабочего пространства | Повторять нечего; при необходимости измените окно в панели |
Правила обработки, которые окупаются
- 404 — это ещё и изоляция. Идентификатор из другого рабочего пространства отвечает
not_found, но никогдаforbidden: API не раскрывает, существует ли чужой идентификатор. - Повторяйте только то, что безопасно. Повторяйте
internalиrate_limitedс отступом. Никогда не повторяйте вслепуюconflictилиvalidation_failed— сам запрос неверен. Чтобы повторы изменяющих запросов были безопасны, используйтеIdempotency-Key. GET /linksникогда не отдаёт 404. Пустые фильтры возвращают пустой список; 404 на коллекции был бы неоднозначен.