Перейти к содержимому

Журнал изменений

Эта страница фиксирует изменения в API и в этой документации. Записи начинаются с 2026-09-19: всё, что изменилось до появления этой страницы, не перечисляется задним числом, поэтому считайте отсутствие записи «не зафиксировано», а не «не менялось».

ТипЗначение
APIСервис изменился — эндпоинт, поле, лимит.
КонтрактОпубликованный документ OpenAPI изменился.
ДокументацияДокументация изменилась. API не менялся.
ИсправлениеДокументация описывала API неверно.

Записи Исправление выделены отдельно намеренно. Они описывают изменение того, что вы читаете, а не того, что делает API, — поэтому в вашей интеграции ничего не ломается, но всё, что вы построили по старому описанию, может быть неверным.

Документация · Добавлено

  • Страница Коды стран с поиском, перечисляющая все официально присвоенные коды ISO 3166-1 alpha-2, со ссылками с эндпоинтов, принимающих поле country.

2026-09-19 — Документация перестроена, контракт опубликован

Заголовок раздела «2026-09-19 — Документация перестроена, контракт опубликован»

Документация · Добавлено

  • Раздел Справочник: OpenAPI, Версионирование и устаревание, Статус и поддержка, Безопасность и Глоссарий.
  • Документ OpenAPI 3.1 теперь публикуется по адресу https://docs.zelnum.com/openapi.yaml — побайтово идентичное зеркало копии платформы, импортируемое в Postman, Insomnia и генераторы клиентов.
  • Примеры клиентов на Python, Node.js, PHP и Go для обоих режимов проверки, рядом с существующими примерами cURL. Навигация обещала примеры SDK, тогда как существовал только cURL.
  • Таблицы полей ответа для эндпоинтов проверки realtime, пакетной отправки, статуса задачи и результата.
  • Две новые проверки сборки: теперь сборка падает из-за неровной таблицы в любой локали, а также сверяет каждый упомянутый в документации эндпоинт с поставляемым документом OpenAPI в обоих направлениях — и задокументированный эндпоинт, которого нет в контракте, и путь контракта, который никто не документирует, одинаково являются сбоями.

Контракт · Добавлено

  • Сам документ OpenAPI: 10 путей, 9 схем и deprecated: true у прежнего POST /v1/realtime/detect.

Документация · Исправления

  • Пакетное поле country было задокументировано как обязательное для каждой отправки. Оно обязательно для телефонных продуктов и должно быть опущено для email-продуктов. В таком виде девять пакетных email-продуктов было невозможно отправить — каждый запрос не прошёл бы валидацию.
  • Правило пакетного объёма было неверным. Там говорилось «от 1,000 до 2,000,000 номеров на запрос». Настоящее правило — собственный минимум выбранного продукта — 500, 1,000 или 2,000 — вплоть до максимума платформы 2,000,000. Прежняя цифра исключала одиннадцать продуктов с минимумом 500.
  • Каталог ошибок перечислял четыре кода, которые API никогда не возвращает. Прежняя страница документации платформы называет not_found, result_not_ready, result_expired и validation_failed; реализация не выдаёт ни один из них, и эти ответы вообще не содержат поля code. Теперь таблица перечисляет 22 кода, которые API действительно возвращает, а вторая таблица документирует условия без кода — с предупреждением для тех, кто перенёс эти четыре ветви.
  • В примерах ответов отсутствовали поля, которые API фактически возвращает. series, charged_amount и refunded_amount в ответах realtime; idempotent_replay и recovery_pending в пакетных отправках; и десять счётчиков прогресса задачи, включая submitted, prefiltered, deduped, stage, last_progress_at и failure_message.
  • Лимиты запросов называли не тот эндпоинт. В строке realtime было указано POST /v1/realtime/check/phone; лимит применяется к POST /v1/realtime/check/{series}, включая email.
  • Заголовки ответа были описаны неверно. Страница лимитов подразумевала, что полный набор заголовков присутствует в каждом ответе. Это не так: бакет realtime сообщает только X-RateLimit-Remaining при успехе и никогда X-RateLimit-Limit, а X-RateLimit-Reset появляется только при общем или detection 429. Теперь страница указывает, какой заголовок где появляется.
  • Модель ключей была описана неверно. Страница безопасности утверждала, что аккаунт держит один ключ за раз. Аккаунт может держать несколько активных ключей, и консоль создаёт, перегенерирует и удаляет их по отдельности — поэтому возможна поэтапная смена без простоя, а перегенерация на месте — вариант без перекрытия. GET /v1/api-key сообщает о самом новом активном ключе, а не об инвентаризации, и его last_used записывается не чаще раза в пять минут.
  • ID и slug были описаны неверно. Глоссарий утверждал, что перепутанные ID или slug отклоняются как product_mode_not_supported. На эндпоинтах realtime product_ids валидируется как массив целых чисел, поэтому slug отклоняется раньше как 400 invalid_realtime_request; 422 product_mode_not_supported — это ответ пакетного эндпоинта на продукт realtime.
  • Страница формата ответа противоречила странице баланса в вопросе валюты. Одна говорила «валюта биллинга аккаунта», другая — USD. Теперь обе говорят USD, как и контракт, и эндпоинт баланса.
  • Единица цены была указана без источника. Пакетные проверки описывались как «цена за 10,000 проверок». Каталог не публикует цены, поэтому утверждение убрали, а не оставили.
  • Два исправления дошли только до написанных вручную страниц. Утверждение о валюте и формулировка «за 10,000 проверок» были исправлены на английской странице и странице упрощённого китайского, но таблица строк, из которой генерируются остальные семь локалей, всё ещё содержала их, поэтому семь локалей продолжали публиковать оба. Их исправили и в таблице.
  • /examples/ была разной страницей в каждой локали. Английская страница была коротким навигационным узлом, а остальные восемь отображали пакетное руководство из пяти шагов. Теперь английская совпадает с руководством, поэтому все девять локалей несут одинаковое содержимое.

Документация · Исправления ошибок

  • Таблицы параметров молча теряли столбец описания во всех семи генерируемых локалях. Общий помощник выдавал заголовок из трёх столбцов для строк из четырёх ячеек, а GFM отбрасывает каждую ячейку за пределами ширины заголовка — поэтому, например, в испанской версии значение «Required» отображалось под заголовком «Description», а само описание исчезало, на трёх страницах в семи локалях. Теперь помощник принимает явную форму столбцов и падает на неровной строке, а проверка на этапе dist независимо перепроверяет каждую отрендеренную таблицу в каждой локали.
  • Генерируемые локали отображали заголовки столбцов таблицы продуктов, её примечание и строку синхронизации по-английски, а обратные кавычки примечания доходили до браузера как литеральные символы. Теперь текст компонентов берётся из переведённой таблицы строк, а отсутствующий перевод роняет сборку вместо отката.

Фида пока нет. Пока его нет, надёжный сигнал — контракт:

Окно терминала
npm run openapi:check

в задании по расписанию — он завершается с ненулевым кодом, как только опубликованный документ отличается от скопированной вами версии. Два URL см. в OpenAPI.