Tổng Kho eSIM
Коды ошибок · опубликовано: 91

Коды ошибок

Все ошибки возвращают { ok: false, error: { code, message, field?, meta?, request_id } } с соответствующим HTTP-статусом, никогда с 200. Таблица содержит все коды каналов /v1 и встраивания и синхронизируется с серверными реестрами.

Структура ответа с ошибкой

http
HTTP/1.1 402 Payment Required
Content-Type: application/json
X-Request-Id: 018f2b00-0000-7000-8000-0000000000ff

{
  "ok": false,
  "error": {
    "code": "wallet.insufficient_balance",
    "message": "Số dư ví không đủ để thực hiện giao dịch.",
    "field": null,
    "meta": null,
    "request_id": "018f2b00-0000-7000-8000-0000000000ff"
  }
}
Почему domain.reason вместо числовых кодов 0000

Стандартный HTTP: прокси, мониторинг и REST-клиенты уже обрабатывают HTTP-статусы, поэтому стандартные статусы работают с существующей инфраструктурой.

Понятное имя: wallet.insufficient_balance понятен без поиска по таблице; новые коды не нарушают существующую обработку.

Старая система ожидает числа? Строковый код неизменяем и служит постоянным ключом для ваших внутренних таблиц перевода.

4 правила обработки ошибок

Сначала проверяйте HTTP-статус, затем код
HTTP-статус определяет обработку на уровне транспорта (повтор, оповещение, размыкание цепи); error.code — сообщение пользователю. Статусы стабильнее конкретных кодов.
Неизвестные коды не должны прерывать работу
Новые функции добавляют коды ошибок. Неизвестный код обрабатывайте по HTTP-статусу, записывайте исходный код и request_id, показывайте общее сообщение. Не допускайте необработанных исключений.
Всегда сохраняйте request_id
Каждый ответ содержит X-Request-Id; ответ с ошибкой повторяет его в теле. Этот идентификатор позволяет поддержке найти журнал конкретного запроса.
Учитывайте Retry-After для 429 и 503
Читайте Retry-After вместо фиксированной задержки. При 429 заголовки X-RateLimit-Limit / Remaining / Reset помогают снизить частоту до блокировки.

Таблица соответствия кода и HTTP

Сгруппировано по доменам. Справочник API также указывает возможные ошибки каждого метода — сверяйтесь с ним.

Показано 91 / 91 кодов

Аутентификация, ключи и лимиты partner.*

codeHTTPЗначениеМожно повторить?
partner.invalid_key401Недействительный ключ API.Нет: повтор без изменений снова завершится ошибкой
partner.invalid_signature401Неверная подпись запроса.Нет: повтор без изменений снова завершится ошибкой
partner.timestamp_expired401Время запроса слишком сильно отличается от времени сервера.Нет: повтор без изменений снова завершится ошибкой
partner.nonce_reused401Этот nonce уже использован.Нет: повтор без изменений снова завершится ошибкой
partner.ip_not_allowed403IP-адрес отсутствует в списке разрешённых.Нет: повтор без изменений снова завершится ошибкой
partner.scope_denied403Ключ API не имеет прав на вызов этого эндпоинта.Нет: повтор без изменений снова завершится ошибкой
partner.key_suspended403Ключ API приостановлен.Нет: повтор без изменений снова завершится ошибкой
partner.key_revoked403Ключ API отозван.Нет: повтор без изменений снова завершится ошибкой
partner.endpoint_disabled503Эта группа эндпоинтов временно отключена.Да: повторите без изменений
partner.rate_limited429Превышен лимит запросов. Повторите позже.Да: повторите без изменений
partner.package_not_visible404Этот код тарифа недоступен для покупки с вашим ключом.Нет: повтор без изменений снова завершится ошибкой
partner.daily_quota_exceeded429Дневная квота запросов исчерпана. Повторите завтра.Да: повторите без изменений
partner.wrong_host403Ключ не соответствует серверу. Используйте `https://api-testing.tongkhoesim.com` для `tke_test_` и `https://api.tongkhoesim.com` для `tke_live_`.Нет: повтор без изменений снова завершится ошибкой

Общие ошибки API internal.*

codeHTTPЗначениеМожно повторить?
internal.validation_failed400Переданные данные недействительны.Нет: повтор без изменений снова завершится ошибкой
internal.invalid_filter400Недопустимое условие фильтра.Нет: повтор без изменений снова завершится ошибкой
internal.invalid_sort_field400Недопустимое поле сортировки.Нет: повтор без изменений снова завершится ошибкой
internal.unauthenticated401Войдите снова: сессия отсутствует или истекла.Нет: повтор без изменений снова завершится ошибкой
internal.forbidden403У вас нет прав на это действие.Нет: повтор без изменений снова завершится ошибкой
internal.not_found404Запрошенный ресурс не найден.Нет: повтор без изменений снова завершится ошибкой
internal.route_not_found404Этот путь не существует. Проверьте метод и путь в документации.Нет: повтор без изменений снова завершится ошибкой
internal.method_not_allowed405Этот метод HTTP не поддерживается.Нет: повтор без изменений снова завершится ошибкой
internal.conflict409Конфликт состояния не позволяет выполнить действие.Нет: повтор без изменений снова завершится ошибкой
internal.unsupported_media_type415Этот тип содержимого не поддерживается.Нет: повтор без изменений снова завершится ошибкой
internal.rate_limited429Слишком много запросов. Повторите позже.Да: повторите без изменений
internal.server_error500Произошла системная ошибка. Повторите позже.Да: повторите без изменений
internal.service_unavailable503Сервис временно недоступен. Повторите позже.Да: повторите без изменений
internal.limit_exceeded422Достигнут допустимый лимит. Удалите лишние элементы и повторите.Нет: повтор без изменений снова завершится ошибкой
internal.money_frozen503Финансовые операции приостановлены для проверки учётного журнала. Повторите позже.Да: повторите без изменений

Каталог тарифов catalog.*

codeHTTPЗначениеМожно повторить?
catalog.cursor_mismatch400Курсор не соответствует текущим фильтрам. Начните с первой страницы без параметра cursor.Нет: повтор без изменений снова завершится ошибкой

Расчёты и заказы order.*

codeHTTPЗначениеМожно повторить?
order.quote_not_found404Предложение не найдено.Нет: повтор без изменений снова завершится ошибкой
order.quote_expired409Срок действия предложения истёк. Создайте новое.Нет: повтор без изменений снова завершится ошибкой
order.quote_already_committed409Это предложение уже преобразовано в заказ.Нет: повтор без изменений снова завершится ошибкой
order.package_not_allowed400Тариф не существует или недоступен для покупки.Нет: повтор без изменений снова завершится ошибкой
order.not_deliverable409Заказ ещё не завершён; действие недоступно.Нет: повтор без изменений снова завершится ошибкой
order.quantity_limit_exceeded400Количество eSIM превышает лимит на заказ.Нет: повтор без изменений снова завершится ошибкой
order.fulfillment_config_changed409Настройки выдачи тарифа изменились. Создайте новое предложение.Нет: повтор без изменений снова завершится ошибкой
order.refund_suggestion_pending409Для заказа ожидает одобрения предложение возврата. Сначала обработайте его.Нет: повтор без изменений снова завершится ошибкой

eSIM esim.*

codeHTTPЗначениеМожно повторить?
esim.out_of_stock409Недостаточно запасов этого тарифа.Нет: повтор без изменений снова завершится ошибкой
esim.not_cancellable409Текущее состояние eSIM не позволяет отменить её.Нет: повтор без изменений снова завершится ошибкой
esim.lpa_not_available409У eSIM ещё нет кода LPA (не активирована или не зарегистрирована).Нет: повтор без изменений снова завершится ошибкой
esim.not_eligible409Эта eSIM не подходит для пополнения.Нет: повтор без изменений снова завершится ошибкой
esim.not_activated409eSIM не установлена. Установите и активируйте её перед пополнением.Нет: повтор без изменений снова завершится ошибкой
esim.topup_not_supported409Тариф не поддерживает пополнение.Нет: повтор без изменений снова завершится ошибкой
esim.topup_provider_mismatch409Этот тариф пополнения принадлежит другому поставщику. Выберите тариф для этой eSIM.Нет: повтор без изменений снова завершится ошибкой
esim.refund_not_eligible409Для этой eSIM недоступен запрос возврата.Нет: повтор без изменений снова завершится ошибкой
esim.refund_request_pending409Для eSIM уже ожидает запрос возврата.Нет: повтор без изменений снова завершится ошибкой
esim.suspended409eSIM приостановлена. Возобновите её перед выполнением действия.Нет: повтор без изменений снова завершится ошибкой

Кошелёк wallet.*

codeHTTPЗначениеМожно повторить?
wallet.frozen409Кошелёк заморожен; платежи недоступны.Нет: повтор без изменений снова завершится ошибкой
wallet.velocity_hold409Кошелёк заблокирован для проверки. Обратитесь в поддержку.Нет: повтор без изменений снова завершится ошибкой
wallet.insufficient_balance402Недостаточно средств в кошельке для этой операции.Нет: повтор без изменений снова завершится ошибкой
wallet.deleted409Кошелёк получателя недействителен (удалён).Нет: повтор без изменений снова завершится ошибкой
wallet.velocity_exceeded429Превышен порог операций за короткое время. Кошелёк заблокирован для проверки.Нет: повтор без изменений снова завершится ошибкой

Запросы возврата refund.*

codeHTTPЗначениеМожно повторить?
refund.note_required400Укажите причину отказа в возврате.Нет: повтор без изменений снова завершится ошибкой

Цены продажи pricing.*

codeHTTPЗначениеМожно повторить?
pricing.no_price_for_buyer409Для вас ещё не задана цена этого тарифа.Нет: повтор без изменений снова завершится ошибкой

Поставщик eSIM provider.*

codeHTTPЗначениеМожно повторить?
provider.disabled409Поставщик тарифа отключён; продажа невозможна.Нет: повтор без изменений снова завершится ошибкой
provider.api_group_disabled409Эта группа услуг поставщика отключена.Нет: повтор без изменений снова завершится ошибкой
provider.not_registered500Для поставщика не настроен коннектор.Да: повторите без изменений
provider.unsupported400Поставщик не поддерживает это действие.Нет: повтор без изменений снова завершится ошибкой
provider.timeout504Истекло время ожидания ответа поставщика. Повторите позже.Да: повторите без изменений
provider.auth_failed502Не удалось пройти аутентификацию у поставщика.Да: повторите без изменений
provider.rate_limited429Поставщик ограничивает запросы. Повторите позже.Да: повторите без изменений
provider.malformed_response502Поставщик вернул некорректные данные.Да: повторите без изменений
provider.call_failed502Ошибка вызова поставщика.Да: повторите без изменений
provider.out_of_stock409Тариф отсутствует в запасах поставщика.Нет: повтор без изменений снова завершится ошибкой
provider.msisdn_taken409Этот MSISDN уже назначен другому абоненту у поставщика.Нет: повтор без изменений снова завершится ошибкой
provider.msisdn_exhausted409У поставщика не осталось доступных MSISDN.Нет: повтор без изменений снова завершится ошибкой

Idempotency idempotency.*

codeHTTPЗначениеМожно повторить?
idempotency.conflict409Этот Idempotency-Key уже использован с другим содержимым.Нет: повтор без изменений снова завершится ошибкой

Возможности поставщика capability.*

codeHTTPЗначениеМожно повторить?
capability.not_supported422Тариф не поддерживает запрошенную функцию.Нет: повтор без изменений снова завершится ошибкой

Тестовый режим и симуляция testmode.*

codeHTTPЗначениеМожно повторить?
testmode.live_key_forbidden403Этот эндпоинт требует тестовый ключ (`tke_test_`) на api-testing. Используйте тестовый ключ той же организации.Нет: повтор без изменений снова завершится ошибкой
testmode.not_test_item422Это реальная eSIM; тестовый режим обрабатывает только тестовые eSIM. Для отмены реального заказа запросите возврат.Нет: повтор без изменений снова завершится ошибкой
testmode.invalid_scenario422Недопустимый сценарий. Передайте хотя бы одно поле: `data_used_mb`, `status`, `expire_now`, `throttled`; `status` допускает только released|installed|enabled|disabled.Нет: повтор без изменений снова завершится ошибкой
testmode.no_sellable_package422Нет доступного тарифа с ценой для создания примеров данных. Нужен хотя бы один продаваемый тариф с ценой.Нет: повтор без изменений снова завершится ошибкой

Webhook webhook.*

codeHTTPЗначениеМожно повторить?
webhook.health_check_failed422URL вебхука не прошёл проверку доступности.Нет: повтор без изменений снова завершится ошибкой
webhook.url_not_allowed422URL вебхука не разрешён. Требуется общедоступный адрес с https.Нет: повтор без изменений снова завершится ошибкой
webhook.not_configured404Для ключа API не настроен вебхук.Нет: повтор без изменений снова завершится ошибкой
webhook.delivery_not_found404Доставка вебхука не найдена.Нет: повтор без изменений снова завершится ошибкой
webhook.already_configured409Для ключа API уже есть вебхук (один на ключ). Измените его через `PUT /v1/webhooks/{id}` или удалите через `DELETE /v1/webhooks/{id}` перед созданием нового.Нет: повтор без изменений снова завершится ошибкой
webhook.not_found404Эндпоинт вебхука не принадлежит вызывающему ключу API.Нет: повтор без изменений снова завершится ошибкой

Состояние организации org.*

codeHTTPЗначениеМожно повторить?
org.invoice_profile_incomplete422Профиль организации для выставления счетов неполон (название, налоговый номер, адрес).Нет: повтор без изменений снова завершится ошибкой
org.suspended403Организация приостановлена.Нет: повтор без изменений снова завершится ошибкой
org.closed403Организация закрыта.Нет: повтор без изменений снова завершится ошибкой

Публичное встраивание embed.*

codeHTTPЗначениеМожно повторить?
embed.invalid_token401Недействительный токен встраивания.Нет: повтор без изменений снова завершится ошибкой
embed.token_revoked410Канал встраивания больше не активен.Нет: повтор без изменений снова завершится ошибкой
embed.rate_limited429Слишком частые запросы канала встраивания. Повторите позже.Да: повторите без изменений
embed.package_not_visible404Тариф не найден.Нет: повтор без изменений снова завершится ошибкой

Счета с НДС invoice.*

codeHTTPЗначениеМожно повторить?
invoice.order_not_settled409Заказ ещё не рассчитан: выполняется возврат. Повторите выставление счёта через несколько минут.Да: повторите без изменений
invoice.profile_incomplete422Профиль организации для выставления счетов неполон. Заполните его.Нет: повтор без изменений снова завершится ошибкой
invoice.already_requested409Для этого заказа уже есть счёт.Нет: повтор без изменений снова завершится ошибкой
invoice.nothing_to_invoice409После вычета возвратов сумма к выставлению отсутствует.Нет: повтор без изменений снова завершится ошибкой
invoice.amount_changed409Возврат только что изменил сумму заказа. Проверьте её и повторите выставление счёта.Да: повторите без изменений
invoice.buyer_invalid422Данные компании-получателя неполны или налоговый номер недействителен.Нет: повтор без изменений снова завершится ошибкой