面向开发者

代码驱动的高效托管

Zinn Digital® 是一个 API 优先的平台。驱动我们控制面板的同一个引擎 API 就是为您准备的——采用版本控制、规范优先,并且在构建时 100% 文档化,同时在其之上配有生成的 SDK、CLI、Terraform 提供程序、签名 webhook 和 MCP 服务器。无论您使用什么工具工作——终端、流水线、状态文件还是 AI 代理——该平台都能完美响应。

  • 650,000+全球托管网站
  • 1每个工具均由 OpenAPI 规范生成
  • 4客户端 SDK — TypeScript、Python、PHP、Go
  • OAuth 2.1有范围限制且可撤销的AI代理访问权限

一个 API。驱动所有表面。

大多数主机商都是在控制面板做好之后才硬加一个 API,结果一目了然——面板的一半功能根本无法使用。我们采用的是相反的方式。仪表板、管理控制台、CLI、Terraform 提供程序、MCP 服务器以及您自己的集成都在调用同一个引擎 API。如果您能在面板中完成,就能通过代码实现。

优先规范,无需后补说明

OpenAPI 规范是唯一的数据源,未纳入该规范的任何端点都不会发布。正是这一简单规则,使得公共 API 在构建时就能得到完整文档,而不是事后补齐——这里不存在任何未记录的盲区,因为未记录的端点根本无法存在。

自动生成,无需人工维护

交互式参考文档、四个客户端 SDK、绝大部分 CLI 以及 Terraform 提供程序骨架全部都是根据该单一规范生成的。一个来源,多个产物,始终保持同步——您再也无需追赶那些与实现脱节的文档。

采用弃用策略的版本控制

端点位于 /v1 下,并设有公开的弃用策略和更新日志。如有任何变更,您将提前收到书面通知,而无需等到构建失败时才发现。

CI契约测试通过

每次更改时都会运行实现与规范的契约测试以及 OpenAPI 代码检查。代码与契约之间的偏差会导致构建失败——因此,你据以生成客户端的规范正是服务器实际履行的规范。

身份验证、权限范围以及大规模运作时的隐患

两条路径,背后的核心原则完全一致。无论您使用哪种方式,都将适用相同的权限检查和数据库级别的隔离。

API 密钥,按组织

密钥格式为 zdk_<mode>_<prefix>_<secret>。系统仅存储密钥的 SHA-256 哈希值——密钥一经签发便无法再次显示,任何能够访问我们数据库的人也无法查看。密钥带有权限范围,可随时撤销,并且是按组织而非按个人签发的。

实时模式与测试模式,相互隔离

沙盒密钥与生产密钥相互独立,并在沙盒模式下运行:无实际计费,无实际资源调配。您的集成测试可以高频调用 API,而无需花钱或构建服务器。

面向人类的 OIDC

用户会话通过 Keycloak 签发的 JWT 进行身份验证,并根据 realm 的公钥进行验证,最终解析为与 API 密钥相同的 Principal 对象。端点通过诸如 sites.create 或 apikeys.manage 等细粒度权限密钥进行访问控制,该密钥按组织进行检查——在一个组织中的权限不会授予对其他独立且无关的组织访问权限,但它适用于其下级嵌套的组织。

底层行级安全性

每个租户请求都在一个事务中运行,其中 Postgres 组织作用域由主体(principal)设置,因此隔离是由数据库强制执行的,而不是依赖于某人可能会忘记的 ORM 过滤器。查询集过滤器仍然存在,作为纵深防御。

为机器而生,不只是为了演示

要让一个 API 在 README 里看起来很美很容易,但要让它在真实的流量压力下正常运转却很难。这些正是我们煞费苦心去打磨的部分,因为它们往往是导致集成在凌晨三点崩溃的元凶。

有一个值得指出的细节,因为它决定了批量工作的运行方式:针对重复域名的 409 响应会为任何租户回答“此主机名是否托管在此处?”,这是一个枚举预言机,对 Footprint-Free 构成了真正的去匿名化风险。限制站点创建本可以是一种懒惰的修补方式,并且会彻底破坏批量配置产品。相反,只有被拒绝的重复域名尝试才会被计入每个主体的配额中。成功的创建永不计入其中——因此你可以整天进行批量配置,而探测行为几乎会立即失效。

  • 每次失败时都会返回一致的错误结构:包含一个错误代码、一条人类可读的错误信息、可选的字段级详细信息,以及一个您可以向客服提供的 request_id。验证错误将返回 422 状态码并列出出错的字段。
  • POST 请求的幂等键在提交时写入重播记录,而不是内联写入,因此重试绝不会重播缓存的、指向未提交行的 201 响应。失败的请求会立即释放其进行中的锁,因此 422 错误不会锁定您已更正的重试。
  • 基于 UUIDv7 键集的游标分页 —— 在并发写入时保持稳定,在扫描过程中插入行时也不会发生页漂移。
  • 响应中的 RateLimit-Remaining,使生成的客户端能够智能退避而不是盲目猜测。
  • 超出范围的资源会返回 404 而不是 403——返回 403 会确认该资源存在。基于超出您范围的组织进行过滤也会出于同样的原因返回空白页面。
  • 网站创建即注册,而非配置:POST /v1/sites 返回状态码 201 且状态为 pending,且绝不会在构建时阻塞。该事件与数据行在同一事务中写入事务性发件箱(transactional outbox),因此网站存在的充要条件是其配置请求得到保证。

SDK、CLI 和 Terraform 提供程序

针对三种不同的工作方式,三款相同配置的设备。

客户端 SDK

专为 TypeScript、Python、PHP 和 Go 生成,紧跟规范,确保新端点一经推出即在您的语言中可用,无需等待手写封装。

Zinnector®,CLI

快速搭建 WordPress 网站,只需安装 Node 即可在本地运行并部署。Zinnector® 会在您准备部署的目标位置(PHP 版本、磁盘、文件数)上对项目进行预检,在推送之前(而非之后)发出警告。它还可以登录、列出网站、部署、管理域和 DNS、读取邮件服务、进行备份、运行白名单 WP-CLI、跟踪日志并触发批量操作。免费、采用 MIT 许可证,并且基于此相同的公共 API 构建。

Terraform 提供程序

通过基础设施即代码(IaC)方式管理站点、域名、DNS 记录、邮箱和套餐。只需运行 terraform apply 即可配置好托管服务,让您的环境变得可复现、可审查,告别无人记录的繁琐点击操作。

交互式参考

生成的文档可直接在浏览器中阅读和调用,准确描述了服务器实现的端点——因为两者均源自同一规范。

即使您的端点宕机也能正常接收的 Webhook

平台背后是一个持久化的事件主干:每一次状态变更都会将事件写入 Postgres 中的事务性发件箱,与数据库变更保持原子性,随后由转发器将其发布到 NATS JetStream。事件均经过类型化和版本控制——site.deployed、order.paid、invoice.overdue、backup.completed、abuse.flagged、trial.ending 等等。

订阅您关心的内容

将端点注册为 WebhookSubscription 并选择其接收的事件类型。一个流即可同时提供通知、分析、自动化和您的集成——您正在使用与我们完全相同的事件。

使用 HMAC 签名

每个发送的通知都经过 HMAC 签名,因此您在处理之前可以验证它是否确实来自我们。

已进行退避重试并记录日志

投递失败的请求将通过退避策略进行重试,每次尝试都会记录为一个 WebhookDelivery。你可以直接在控制台中查看和重新发送这些投递,而无需通过电子邮件联系客服询问我们发送了什么。

至少一次,因此请根据 id 进行去重

该管道采用的是至少一次(at-least-once)交付设计,而不是假装实现精确一次(exactly-once)。中途崩溃的中继会使其认领租约过期并重新发布其事件。基于信封 ID(envelope id)进行去重,您的消费者在设计上就能保证正确。

将代码放到网站上

API 只是开发者故事的一半,另一半是部署上线。

  • 通过 OAuth 连接 GitHub、GitLab 或 Bitbucket,并将部署密钥保存在凭据存储区中,而不是配置文件中。
  • 推送会触发一个构建和部署流水线,其中包含分支到环境的映射(main 对应 production,staging 对应 staging)以及针对 composer 和 npm 的每个技术栈的构建步骤。
  • 部署出错时回滚到之前的版本。
  • 测试克隆和一键发布到生产环境,确保修改在推送给访客之前已在真实环境中得到验证。
  • 在 CageFS 隔离下为每个站点提供独立禁锢的 SSH、SFTP 和 FTP,确保每个租户只能看到自己的文件。
  • 通过面板终端和 SSH 使用 wp-cli。
  • 通过 code-server 在浏览器中运行 VS Code —— 这是一个配备了扩展程序、集成终端和 git 的完整编辑器,可直接编辑网站文件。
  • 独立站点的 PHP 版本、可编辑的 PHP 设置、独立站点的扩展、环境变量以及真正的定时任务与 WP-cron。

同时,这也是你的 AI 代理可以使用的同一个 API

我们将平台作为托管的MCP服务器公开:这是一个建立在引擎API之上的轻量级协议适配器,它重用了完全相同的动作目录、RBAC和审计跟踪。只需连接一次Claude Code、Cursor、ChatGPT、Claude Desktop或任何支持MCP的客户端,我们添加到API的每一项功能都将自动对其可用。

该智能体拥有三项资源:工具(相同的 API 端点,无并行逻辑漂移)、资源(只读的网站健康状况、配置、近期日志、指标、运行时间和知识库文章,以便其在采取行动前利用真实数据进行诊断)以及提示词(已发布的工单工作流模板,例如“诊断此网站”或“准备迁移”)。

安全性与身份验证如出一辙:采用 OAuth 2.1、绑定至您组织且强制实施行级安全性的 RBAC 权限,每个工具的权限均可界定且可撤销,沙箱与生产环境相互隔离。破坏性操作(如删除、暂停、计费、大额支出)需要明确确认或人工审批策略。速率限制和支出上限可约束由 AI 触发的付费操作,每一次 MCP 调用都会记录审计日志,包含身份、工具、参数和结果。

我们支持该协议,而不是逐个集成每个应用程序,这意味着您的 AI 工具选择可以随之更改,而您的托管集成则无需随之改变。

常见问题

公开 API 和控制面板使用的是同一个吗?

是——它使用的是相同的引擎 API,经过发布和加固。控制面板、管理控制台、CLI、Terraform 提供程序、MCP 服务器和网络钩子都是同一接口的使用者,这就是为什么 API 不会落后于控制面板的原因。

我可以在不花钱或不搭建真实服务器的情况下测试集成吗?

可以。沙盒密钥与生产密钥分开签发且运行于测试模式:无实际计费,也无实际开通。将您的 CI 指向沙盒凭据,即可安全地执行完整的请求与响应周期。

如何防止重试导致创建出两个相同的对象?

请在您的 POST 请求中发送 Idempotency-Key。重放记录是在提交时写入的,而不是内联写入,因此重试绝不会为未实际提交的行重放缓存的成功响应,并且失败的请求会立即释放其锁,从而使您修正后的重试不会被阻塞。Webhook 传递按设计属于“至少一次”送达机制——请在您的端通过信封 ID(envelope id)进行去重。

我可以为所有客户组织授予同一个API密钥的访问权限吗?

今天不行。API 密钥是按组织发放的,因此跨越多个客户组织的集成需要为每个组织持有密钥。权限也会针对用户主体按组织进行检查:在一个组织中拥有 sites.create 权限并不授予在另一个不相关的独立组织中的访问权限,尽管它适用于该组织下级嵌套的组织。这是刻意设计的——它将受损的密钥限制在其自身的组织及下级子组织中,而不是整个平台。

内置的“开发者”角色究竟拥有哪些权限?

开发人员角色涵盖组织读取、API密钥管理、查看和创建站点、重启站点、清除缓存以及查看和回复工单。该角色刻意排除了计费控制权限。请注意,部署和推送上线权限不包含在该角色中——如果团队成员需要这些权限,请分配包含这些权限的角色,切勿认为“开发人员”就是权限最广的技术角色。

如果我的端点宕机一小时,我的 Webhook 会怎么样?

Webhook 发送失败时会自动退避重试,每一次尝试都会被记录为一个可供检查的 WebhookDelivery。在源端,事件与变更本身在同一个数据库事务中写入事务性发件箱(transactional outbox),因此在消费者不可用时也不会丢失任何数据——当消费者离线时它只是会有所延迟,绝不会破坏生产者,而且在恢复后您还可以从仪表板中重新发送这些交付项。

开始构建需要多少费用?

开始无须信用卡的 14 天 Footprint-Free Hosting 试用——无需支付信息,最多可托管 5 个站点。付费 Footprint-Free 套餐从 PBN 5 的 $6/月起。每项方案均享有 30 天退款保证、免费迁移且无厂商锁定。

阅读规范,然后根据规范进行构建

API 优先、生成的 SDK、CLI、Terraform 提供商、签名 Webhook 和 MCP 服务器——尽在我们为全球 650,000 多个站点构建的主机平台上。开始 14 天免绑卡试用,无需提供支付信息。

免费开始