История изменений
История изменений контракта API (openapi.yaml), начиная с самых свежих. Все изменения ниже аддитивны и обратно совместимы, если не указано иное; существующие коды ошибок не перенумеровывались.
2026-09-26 — Выпуск API-ключей до первого депозита
- Метод
POST /v1/api-keysтеперь работает на аккаунтах в статусеunfunded: вы можете зарегистрироваться, сразу выпустить ключ, получить адрес депозита черезGET /v1/deposit-addressesи пополнять баланс автоматически. Оформление заказов по-прежнему требует положительного баланса (4001 insufficient_funds). - Код ошибки
3016 account_unfundedбольше не возвращается ни одним эндпоинтом. Номер остается зарезервированным.
2026-09-25 — Публичный доступ к ресурсам адресов
- Эндпоинт
GET /v1/resources/{address}больше не требует авторизации. Анонимный вызов тарифицируется по лимитам IP и возвращаетour_active_orders: []; подписанный вызов полностью проверяется и возвращает список активных заказов данного аккаунта. - Разрешение
prices.readтеперь требуется только дляPOST /v1/estimate/transfer.
2026-09-25 — Полное расписание периодов суток в GET /v1/prices
- Модель
PriceTableполучила массивschedule[]:id,label,start_utc_minute,end_utc_minute,factor_bpsи стоимость 1 часа энергииprice_sun_per_unitдля каждого интервала дня, что позволяет клиенту отрисовать полную карту цен за один запрос. - Поле
periodформируется из этой же таблицы. Обновлены идентификаторы периодов:drop,off_peak,ramp_9,ramp_11,ramp_12,peak,peak_late. Перебирайте расписание программно; не зашивайте имена периодов в код.
2026-09-19 — Публичные цены и расчет стоимости
- Запросы
GET /v1/pricesиGET /v1/estimateдоступны без авторизации. Анонимные запросы работают в рамках лимитов на IP; подписанные запросы верифицируются и используют лимиты ключа. - Подписанный запрос
GET /v1/estimateучитывает индивидуальные условия аккаунта (корпоративные клиенты видят свои контрактные цены); анонимный запрос возвращает стандартную розничную цену.
2026-09-19 — Формат ключей, лимиты и сессии кабинета
- Формат API-ключей:
ak_live_+ 24 случайных байта (base64url) для ID иsk_live_+ 256 бит для секрета; префиксыak_test_/sk_test_в тестнете Nile. Префикс явно указывает на окружение, отправка ключа на чужой хост отклоняется с ошибкой1012 key_environment_mismatchдо обращения к базе. Ранее созданные ключи сохраняют действие. - Поле
labelвPOST /v1/api-keysстало опциональным со значением по умолчаниюKey N. Правило дляscopesнеизменно: обязательное поле без дефолтных значений. - Лимит активных ключей:
GET /v1/api-keysвозвращает поляlimitиused; при превышении создание ключа возвращает новую ошибку3017 api_key_limit_reached. - Добавлены поля
ApiKey.last_used_ipиlast_used_at. - Сессии кабинета: методы
POST,GET,DELETE /v1/sessionиPOST /v1/session/refreshс авторизацией по httpOnly-кукам и защитой черезX-CSRF-Token(1013 session_expired,1014 csrf_token_invalid). PATCH /v1/accountпозволяет задать отображаемое имяdisplay_name.
2026-09-11 — Единая стейт-машина и регистрация по подписи кошелька
- Состояния заказов:
created → paid → allocating → delegated → confirmed → active → expired | reclaimed, с терминальными ветками ошибокfailedиrefunded. - Объект
Orderполучил поляpartialиdelivered_amount: частичное исполнение — это атрибут подтвержденного заказа, а не отдельный статус. - Новое событие вебхука
order.refunded. Событиеorder.confirmedсодержит поляpartial,delivered_amountиrefunded_amount_sun. - Прямая отмена одиночных заказов в v1 не поддерживается; код
3002 order_not_cancellableотносится кPOST /v1/batches/{id}/cancel. - Регистрация через проверку владения адресом:
POST /v1/accounts/challenge,POST /v1/accounts/challenge/verify(15-минутный bootstrap-токен),POST /v1/accounts,GET /v1/accounts/deposit-address. - Разрешения (Scopes): единый словарь
area.action(ApiKeyScope). Обязателен при создании ключа. - В раздел Окружения добавлено подробное описание отличий Nile от Mainnet.