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

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

Изменения публичного API, сначала новые. Версия API указана в пути; несовместимые изменения, если они понадобятся, выйдут как /api/v2 — в ответах v1 могут появляться новые поля и коды, но существующие не исчезнут и не изменятся.

  1. С API-ключами

    Ещё не выпущено

    Влито, но не выпущено: эти изменения выйдут, когда вместе с аккаунтами ecdsa.com появятся API-ключи. Вызовы без ключа останутся в точности такими, как сейчас.

    • Изменено

      Ключ в правильном формате, но неизвестный, отозванный или с истёкшим сроком действия отклоняется с ответом 401 unauthorized и challenge в заголовке WWW-Authenticate, а не обслуживается анонимно.

      Коды:unauthorized

      Заголовки:WWW-Authenticate

    • Добавлено

      403 forbidden_scope: ключ действителен, но у него нет области доступа, которая нужна операции; эта область названа в сообщении. Вызов отклоняется до того, как расходуется какой-либо лимит запросов или квота.

      Коды:forbidden_scope

    • Добавлено

      429 quota_exceeded: исчерпана дневная или месячная квота аккаунта, которому принадлежит ключ. Retry-After указывает время до обновления квоты; SDK никогда не повторяют такой запрос.

      Коды:quota_exceeded

    • Добавлено

      Каждый ответ на вызов с ключом содержит сведения о той квоте, которая закончится первой; браузеры тоже могут читать эти заголовки.

      Заголовки:X-Quota-LimitX-Quota-RemainingX-Quota-Reset

    • Добавлено

      503 service_unavailable: проверить ключи сейчас невозможно. Вызов с ключом никогда не обслуживается анонимно — повторите его чуть позже.

      Коды:service_unavailable

    • Изменено

      Для вызовов с ключом лимит считается по ключу, а не по IP: 120 в минуту на бесплатном тарифе, 600 — на тарифе Pro. Тестовые ключи всегда работают на бесплатном тарифе.

      Коды:rate_limited

    • Изменено

      Поле auth в индексе API сообщает, что ключи необязательны, что даёт ключ и каким операциям он нужен, а не «no API keys», как раньше.

      Операции:GET /v1

    • Добавлено

      Вебхуки: /api/v1/webhooks возвращает список (GET) и создаёт (POST) эндпоинты аккаунта ключа, /api/v1/webhooks/delete удаляет эндпоинт, а /api/v1/webhooks/test отправляет тестовое событие. Для этих операций нужен ключ с областью доступа webhooks; они доступны только через REST — не как инструменты MCP и не в SDK.

      Операции:GET /v1/webhooksPOST /v1/webhooksPOST /v1/webhooks/deletePOST /v1/webhooks/test

    • Добавлено

      Доставки подписываются ECDSA P-256: заголовок ECDSA-Signature содержит метку времени, идентификатор ключа и подпись, а открытые ключи опубликованы в виде JWKS по адресу /.well-known/ecdsa-webhook-keys.json; во время ротации ключей одновременно действуют два идентификатора ключа. Каждый SDK проверяет доставку функцией verifyWebhook().

    • Добавлено

      Новые коды для вебхуков: webhook_url_refused (400), webhook_limit_reached (403), webhook_not_found (404) и webhooks_unavailable (503).

      Коды:webhook_url_refusedwebhook_limit_reachedwebhook_not_foundwebhooks_unavailable

  2. v1.1.0

    Дата выпуска: 22 октября 2026 г.

    Ядро API перестроено на декларативных операциях, а сканирования домена теперь расходуют общий лимит на каждый проверяемый хост. Для существующих клиентов изменения только добавляют новое: любой запрос v1.0 получает тот же статус и то же тело плюс новые поля. Большинство этих изменений работает с 20 октября 2026 года; начиная с этого релиза индекс API сообщает версию 1.1.0.

    • Добавлено

      Настоящие сканирования домена расходуют лимиты, общие для всех клиентов: один хост — не чаще 6 раз за 10 минут, все сканирования вместе — не чаще 300 раз в минуту. На сканирование сверх лимита приходит ответ 429 rate_limited с заголовком Retry-After; ответы из часового кеша лимиты не расходуют.

      Коды:rate_limited

      Операции:GET /v1/health/{domain}

    • Добавлено

      В теле ошибки появились поля requestId (укажите его, когда сообщаете о проблеме) и docs — ссылка на описание кодов ошибок. Поля code и message не изменились.

      Поля:error.requestIderror.docs

    • Добавлено

      Каждый ответ содержит заголовок X-Request-Id. Чтобы сопоставлять запросы, передайте собственное значение (от 1 до 128 символов: буквы, цифры, точки, подчёркивания, двоеточия или дефисы) — API вернёт его обратно.

      Заголовки:X-Request-Id

    • Изменено

      На неизвестные пути API отвечает 404 not_found, а на неверные методы — 405 method_not_allowed с заголовком Allow; это JSON-объекты ошибок с CORS, а не HTML-страницы.

      Коды:not_foundmethod_not_allowed

      Заголовки:Allow

    • Исправлено

      На JSON с глубиной вложенности больше 64 (с учётом JSON внутри строковых полей) API отвечает 400 invalid_json с JSON-объектом ошибки. Раньше такой запрос завершался ошибкой 500 не в формате JSON.

      Коды:invalid_json

    • Добавлено

      В ответах проверки состояния домена появилось поле certificate: дата окончания срока действия конечного сертификата, сколько дней осталось, алгоритм и кривая ключа.

      Поля:certificate

      Операции:GET /v1/health/{domain}

    • Добавлено

      Заголовок Authorization или X-API-Key в неверном формате больше не игнорируется: запрос отклоняется с ответом 401 unauthorized, и клиент, который собирался пройти аутентификацию, узнаёт об опечатке. Запросы с ключами в правильном формате до запуска API-ключей по-прежнему обслуживаются анонимно.

      Коды:unauthorized

    • Добавлено

      Операция, которая не укладывается в лимит времени в 10 секунд, возвращает 504 timeout.

      Коды:timeout

    • Изменено

      Браузеры могут отправлять заголовки Authorization, X-API-Key, X-Request-Id и Idempotency-Key в запросах с другого источника (cross-origin) и читать заголовок X-Request-Id.

    • Изменено

      Документ OpenAPI генерируется из собственных схем API: для каждой операции указаны коды ошибок по статусам, примеры и области доступа, которые нужны API-ключу.

      Операции:GET /v1/openapi.json

  3. v1.0.0

    Дата выпуска: 20 августа 2026 г.

    Бесплатный API для подписей становится общедоступным.