Для разработчиков

Хостинг, которым можно управлять из кода

Zinn Digital® — это API-first платформа. Та же самая engine API, на которой работает наша панель управления, предоставляется и вам — версионированная, spec-first и со 100% документацией на момент сборки, сгенерированными SDK, CLI, провайдером Terraform, подписанными веб-хуками и сервером MCP поверх нее. Чем бы вы ни пользовались для работы — терминалом, конвейером, файлом состояния или ИИ-агентом — платформа подстроится под это.

  • 650 000+сайтов хостится по всему миру
  • 1Спецификация OpenAPI, из которой генерируется каждый инструмент
  • 4клиентские SDK — TypeScript, Python, PHP, Go
  • OAuth 2.1ограниченный по области видимости, отзывный доступ ИИ-агента

Один API. На нем работает всё.

Большинство хостеров прикручивают API к панели управления задним числом, и это заметно: половина функций панели так и остается недоступной. Мы создали систему наоборот. Данель управления, панель администратора, CLI, провайдер Terraform, сервер MCP и ваши собственные интеграции используют один и тот же движок API. Если это можно сделать в панели, это можно сделать и в коде.

Сначала спецификация, потом документация

Спецификация OpenAPI является единственным источником достоверной информации, и никакой эндпоинт не выпускается, если его нет в спецификации. Это единственное правило делает публичный API полностью документированным уже на этапе сборки, а не со временем: в нем нет не документированных уголков, поскольку не документированный эндпоинт существовать не может.

Сгенерировано автоматически, не вручную

Интерактивная справочная документация, четыре клиентских SDK, большая часть CLI и шаблон провайдера Terraform генерируются на основе этой единственной спецификации. Один источник, множество артефактов, всегда в актуальном состоянии — вам больше не придется гоняться за документацией, которая разошлась с реализацией.

Версионирование с политикой устаревания

Эндпоинты находятся в /v1, имеют опубликованную политику устаревания и журнал изменений. Вы получаете письменное уведомление о любых изменениях заранее, а не узнаете о них по упавшей сборке.

Протестировано в CI по контракту

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

Авторизация, распределение областей видимости и подводные камни при масштабировании

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

API-ключи, на организацию

Ключи имеют вид zdk_<mode>_<prefix>_<secret>. В базе данных хранится только хэш SHA-256 секретного ключа — мы не можем показать вам ключ повторно после его создания, и никто другой, кто получит доступ к нашей базе данных, тоже не сможет. Ключи имеют области видимости (скоупы), могут быть отозваны и выдаются для организации, а не для конкретного пользователя.

Рабочий и тестовый режимы разделены

Тестовые ключи изолированы от боевых и работают в песочнице: без реальных списаний и реального выделения ресурсов. Ваши интеграционные тесты могут обращаться к API сколько угодно без затрат денег и развертывания серверов.

OIDC для людей

Пользовательские сеансы аутентифицируются с помощью JWT, выданных Keycloak, которые проверяются по открытому ключу реалма и сопоставляются с тем же объектом Principal, что и ключ API. Конечные точки защищены детальными ключами разрешений, такими как sites.create или apikeys.manage, которые проверяются для каждой организации: разрешение в одной организации не дает доступа к другой, независимой организации, однако оно применяется к организациям, вложенным в нее.

Безопасность на уровне строк

Каждый запрос тенанта выполняется в транзакции, где область видимости организации в Postgres задается на основе принципала, поэтому изоляция обеспечивается на уровне базы данных, а не с помощью фильтра ORM, о котором кто-то мог забыть. Фильтр в наборе запросов все равно присутствует в качестве дополнительного уровня защиты.

Создано для работы, а не только для демонстраций

API легко сделать красивой в файле README и трудно заставить стабильно работать при реальном трагике. Именно над этими частями мы потели, потому что именно они ломают интеграции в три часа ночи.

Стоит упомянуть одну важную деталь, поскольку она определяет логику пакетной обработки: код 409 при дублировании домена отвечает на вопрос «этот хост размещен здесь?» для любого тенатора, что представляет собой оракул перебора и реальный риск деанонимизации для Footprint-Free. Ограничение частоты создания сайтов было бы ленивым решением и полностью сломало бы продукт для массового провижининга. Вместо этого в бюджет закладываются только отклоненные попытки создания дубликатов доменов для каждого принципала. Успешные операции создания никогда не расходуют этот лимит — поэтому вы можете выполнять массовый провижининг целыми днями, а сканирование пресекается практически мгновенно.

  • Единообразная структура ошибки для любого сбоя: код, понятное пользователю сообщение, необязательные подробности для конкретных полей и request_id, который можно назвать при обращении в службу поддержки. Ошибки валидации возвращают код 422 с указанием проблемных полей.
  • Ключи идемпотентности для POST-запросов: запись повтора создается при фиксации транзакции, а не в процессе выполнения. Это гарантирует, что при повторной попытке не будет выдан закэшированный код 201 для строки, которая так и не была зафиксирована. Неудачный запрос сразу освобождает блокировку в полете, поэтому ошибка 422 не заблокирует вашу исправленную повторную попытку.
  • Постраничная навигация на основе курсора по ключам UUIDv7 — стабильна при параллельных записях, без смещения страниц при вставке строк в процессе сканирования.
  • RateLimit-Remaining в ответах, чтобы сгенерированный клиент мог разумно снижать частоту запросов вместо того, чтобы угадывать.
  • Ресурсы вне зоны доступа возвращают 404, а не 403 — статус 403 подтвердил бы существование ресурса. Фильтрация по организации вне вашей зоны ответственности возвращает пустую страницу по той же причине.
  • Создание сайта — это регистрация, а не выделение ресурсов: POST /v1/sites возвращает 201 со статусом pending и никогда не блокируется во время сборки. Событие записывается в транзакционный outbox в рамках той же транзакции, что и строка, поэтому сайт существует тогда и только тогда, когда гарантированно запрошено выделение для него ресурсов.

SDK, интерфейс командной строки и провайдер Terraform

Три потребителя с одинаковыми характеристиками для трех разных стилей работы.

Клиентские SDK

Сгенерировано для TypeScript, Python, PHP и Go в соответствии со спецификацией, поэтому новый эндпоинт появляется в вашем языке без ожидания написанной вручную обертки.

Zinnector®, интерфейс командной строки

Создайте каркас сайта на WordPress, запустите его локально, не имея ничего, кроме Node, и разверните его. Zinnector® проверяет ваш проект перед развертыванием на соответствие целевому слоту — версию PHP, диск, количество файлов — и предупреждает вас до передачи данных, а не после. Он также выполняет вход, выводит список сайтов, развертывает, управляет доменами и DNS, считывает почтовые службы, создает резервные копии, запускает разрешенные WP-CLI, отслеживает журналы в реальном времени и выполняет массовые операции. Бесплатно, с лицензией MIT и создано на базе этого же публичного API.

Провайдер Terraform

Управляйте сайтами, доменами, записями DNS, почтовыми ящиками и тарифами как кодом. Команда terraform apply разворачивает хостинг, и ваши окружения становятся воспроизводимыми и доступными для проверки вместо последовательности кликов, которую никто не задокументировал.

Интерактивная справка

Сгенерированная документация, которую можно читать и вызывать прямо из браузера. Она описывает именно те конечные точки, которые реализует сервер, поскольку и то и другое создается на основе одной и той же спецификации.

Вебхуки, которые не теряются, если ваш эндпоинт недоступен

Платформа работает на базе надежной системы событий: каждое изменение состояния записывает событие в транзакционный outbox в Postgres атомарно с изменением базы данных, а релей публикует его в NATS JetStream. События имеют типы и версии — site.deployed, order.paid, invoice.overdue, backup.completed, abuse.flagged, trial.ending и остальные.

Подписывайтесь на то, что вам интересно

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

Подписано HMAC

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

Повторная попытка с экспоненциальной задержкой выполнена, записано в лог

Неудачные доставки повторяются с задержкой, и каждая попытка записывается как WebhookDelivery. Вы можете просматривать и повторять отправку веб-хуков из панели управления, вместо того чтобы писать в службу поддержки с вопросом о том, что именно мы отправили.

Как минимум один раз, поэтому дедупликация по id

Этот конвейер намеренно обеспечивает доставку «как минимум один раз», а не претендует на «ровно один раз». У ретранслятора, который «умирает» в процессе публикации, истекает срок аренды клейма, и его события публикуются заново. Выполняйте дедупликацию по идентификатору конверта, и ваш потребитель будет корректным по определению.

Добавление кода на сайт

API — это лишь половина истории для разработчика. Вторая половина — это релиз.

  • Подключите GitHub, GitLab или Bitbucket через OAuth, при этом ключи развертывания хранятся в хранилище учетных данных, а не в файле конфигурации.
  • Пуш запускает конвейер сборки и развертывания с привязкой веток к окружениям (main к production, staging к staging) и этапами сборки для каждого стека для composer и npm.
  • Откатитесь к предыдущему релизу, если развертывание пойдет не так.
  • Клонирование на тестовый сервер и публикация в продакшн, чтобы изменения можно было проверить в реальных условиях до того, как они увидят посетители.
  • Изолированные SSH, SFTP и FTP для каждого сайта на базе CageFS, благодаря чему каждый клиент видит только свои собственные файлы.
  • WP-CLI из терминала панели и по SSH.
  • VS Code в браузере с помощью code-server — полноценный редактор с расширениями, встроенным терминалом и git, позволяющий напрямую редактировать файлы сайта.
  • Версия PHP для каждого сайта, изменяемые настройки PHP, расширения для каждого сайта, переменные среды и настоящий cron наряду с WP-cron.

И тот же API может использовать ваш ИИ-агент

Мы предоставляем платформу в качестве размещенного MCP-сервера: тонкого сетевого адаптера поверх API движка, который использует тот же каталог действий, RBAC и журнал аудита. Подключите Claude Code, Cursor, ChatGPT, Claude Desktop или любой другой клиент с поддержкой MCP один раз, и все возможности, которые мы добавляем в API, станут доступны ему автоматически.

Агент получает три вещи: Инструменты (те же конечные точки API, никакой параллельной логики, которая могла бы разойтись), Ресурсы (состояние сайта только для чтения, конфигурация, последние логи, метрики, время безотказной работы и статьи базы знаний, чтобы он выполнял диагностику на основе реальных данных перед принятием мер) и Подсказки (опубликованные шаблоны рабочих процессов, такие как «диагностировать этот сайт» или «подготовиться к миграции»).

Безопасность строится на тех же принципах, что и аутентификация: OAuth 2.1, токены, привязанные к вашей организации, и разрешения RBAC с принудительным применением безопасности на уровне строк, с ограничениями областей видимости и возможностью отзыва для каждого инструмента, песочница отделена от продакшена. Деструктивные действия — удаление, приостановка, выставление счетов, крупные расходы — требуют явного подтверждения или политики одобрения человеком. Лимиты запросов и ограничения расходов контролируют инициированные ИИ платные действия, а каждый вызов MCP заносится в журнал аудита с указанием идентификатора, инструмента, аргументов и результата.

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

Часто задаваемые вопросы

Использует ли публичный API те же эндпоинты, что и панель управления?

Да — это тот же самый API движка, опубликованный и закаленный. Дашборд, консоль администратора, CLI, провайдер Terraform, MCP-сервер и вебхуки используют один и тот же интерфейс, поэтому API не отстает от панели управления.

Можно ли протестировать интеграцию без затрат денег или создания реальных серверов?

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

Как сделать так, чтобы при повторной попытке (retry) не создавался второй экземпляр объекта?

Передайте Idempotency-Key в своем запросе POST. Запись повтора создается при фиксации транзакции, а не в процессе выполнения, поэтому повторная попытка никогда не воспроизведет кэшированный успешный результат для строки, которая фактически не зафиксировалась, а запросы, завершившиеся ошибкой, немедленно освобождают свою блокировку, чтобы исправленный повтор не задерживался. Доставка вебхуков по умолчанию гарантирует доставку хотя бы один раз — дедуплицируйте их на своей стороне по идентификатору конверта.

Могу ли я предоставить одному ключу API доступ ко всем моим клиентским организациям?

Не сегодня. Ключи API выдаются для каждой организации отдельно, поэтому интеграция, охватывающая несколько клиентских организаций, использует ключ для каждой из них. Права доступа также проверяются для каждой организации отдельно для основных пользователей: наличие sites.create в одной организации не дает доступа к другой, независимой организации, хотя это право распространяется на дочерние организации, находящиеся внутри первой. Это сделано намеренно: в случае компрометации ключ ограничивается своей собственной организацией и вложенными в нее дочерними организациями, а не всей платформой.

Что на самом деле позволяет встроенная роль разработчика?

Роль разработчика включает чтение данных организации, управление ключами API, просмотр и создание сайтов, их перезапуск, очистку кэша, а также просмотр тикетов и ответы на них. Она сознательно исключает управление биллингом. Обратите внимание, что права на развертывание и перенос в продакшн не входят в нее: если они нужны участнику команды, назначьте роль, которая их включает, а не предполагайте, что «Разработчик» — это самая широкая техническая роль.

Что происходит с моими веб-хуками, если мой эндпоинт не работает в течение часа?

Повторные попытки отправки выполняются с экспоненциальной задержкой, и каждая попытка записывается в виде объекта WebhookDelivery, который можно просмотреть. На стороне источника события записываются в транзакционный outbox в рамках той же транзакции базы данных, что и само изменение, поэтому ничего не теряется, пока потребитель недоступен: отключенный потребитель отстает от графика, но никогда не ломает производителя, а после восстановления работы вы можете повторить отправку уведомлений из панели управления.

Сколько стоит начать разработку на его основе?

Начните 14-дневный пробный период Footprint-Free Hosting без привязки карты — до 5 сайтов. Платные тарифы Footprint-Free начинаются от $6 в месяц для PBN 5. На каждый план распространяется 30-гарантия возврата денег, бесплатные миграции и отсутствие привязки к поставщику.

Ознакомьтесь со спецификацией и приступайте к разработке на ее основе

API, ориентированный на спецификацию, сгенерированные SDK, интерфейс командной строки, провайдер Terraform, подписанные вебхуки и MCP-сервер — на хостинге, созданном нами для более чем 650 000 сайтов по всему миру. Начните 14-дневную пробную версию без привязки карты и ввода платежных данных.

Начать бесплатно