Para desenvolvedores

Hospedagem que você gerencia por código

A Zinn Digital® é uma plataforma com foco em API. A mesma API de motor que alimenta o nosso painel é a que você recebe — versionada, focada em especificação e 100% documentada em tempo de compilação, com SDKs gerados, uma CLI, um provedor Terraform, webhooks assinados e um servidor MCP integrado. Seja o que você usar para trabalhar — um terminal, um pipeline, um arquivo de estado ou um agente de IA — a plataforma responde a isso.

  • +650.000sites hospedados no mundo todo
  • 1Especificação OpenAPI a partir da qual cada ferramenta é gerada
  • 4SDKs de cliente — TypeScript, Python, PHP, Go
  • OAuth 2.1acesso a agente de IA com escopo e revogável

Uma API. Cada superfície é impulsionada por ela.

A maioria das empresas de hospedagem adiciona uma API a um painel de controle depois, e isso transparece — metade dos recursos do painel nunca chegam a funcionar. Nós construímos do jeito opuesto. O painel, o console de administração, a CLI, o provedor Terraform, o servidor MCP e suas próprias integrações consomem a mesma API do mecanismo. Se você pode fazer no painel, pode fazer em código.

Primeiro as especificações, não documentado depois

A especificação OpenAPI é a fonte da verdade, e nenhum endpoint é lançado a menos que esteja na especificação. Essa única regra é o que torna a API pública totalmente documentada no momento da compilação, em vez de eventualmente — não há nenhum canto sem documentação, porque um endpoint sem documentação não pode existir.

Gerado, nunca mantido manualmente

A documentação de referência interativa, os quatro SDKs de cliente, boa parte da CLI e a estrutura do provedor Terraform são gerados a partir dessa única especificação. Uma única fonte, vários artefatos, sempre sincronizados — você nunca corre atrás de uma documentação que se distanciou da implementação.

Com controle de versão e política de obsolescência

Os endpoints ficam sob /v1 com uma política de descontinuação publicada e um changelog. Você é avisado antes que algo mude, por escrito, em vez de descobrir por uma falha no build.

Testado por contrato no CI

Testes de contrato de implementação versus especificação e linting de OpenAPI são executados a cada alteração. A divergência entre o código e o contrato falha o build — portanto, a especificação da qual você gera seu cliente é a especificação que o servidor realmente respeita.

Autenticação, escopo e os problemas que surgem em grande escala

Duas formas de entrada, um princípio uniforme por trás delas. Qualquer uma que você use, aplicam-se as mesmas verificações de permissão e o mesmo isolamento em nível de banco de dados.

Chaves de API, por organização

As chaves seguem o formato zdk_<mode>_<prefix>_<secret>. Apenas um hash SHA-256 do segredo é armazenado — não podemos exibir uma chave novamente após a emissão, e ninguém que acesse nosso banco de dados também poderá. As chaves possuem escopos, podem ser revogadas e são emitidas por organização em vez de por pessoa.

Modos de teste e ao vivo, mantidos separados

As chaves de sandbox são separadas das chaves de produção e executadas em modo sandbox: sem cobrança real, sem provisionamento real. Seus testes de integração podem sobrecarregar a API sem gastar dinheiro ou construir servidores.

OIDC para humanos

As sessões de usuário autenticam com JWTs emitidos pelo Keycloak, verificados contra a chave pública do realm, e resolvem para o mesmo objeto Principal que uma chave de API resolve. Os endpoints controlam o acesso com base em chaves de permissão granulares, como sites.create ou apikeys.manage, verificadas por organização — uma permissão em uma organização não concede acesso a outra organização separada e não relacionada, embora se aplique às organizações aninhadas abaixo dela.

Segurança a nível de linha interna

Cada solicitação de locatário é executada em uma transação com o escopo da organização do Postgres definido a partir do principal, portanto, o isolamento é aplicado pelo banco de dados, e não por um filtro de ORM que alguém possa esquecer. O filtro de queryset ainda está presente como defesa em profundidade.

Construído para máquinas, não apenas para demonstrações

Uma API é fácil de fazer parecer boa em um README e difícil de fazer se comportar sob tráfego real. Estas são as partes em que suamos a camisa, porque são as partes que quebram integrações às três da manhã.

Um detalhe que vale a pena destacar, porque molda o comportamento do trabalho em massa: um 409 para domínio duplicado responde "este hostname está hospedado aqui?" para qualquer locatário, o que é um oráculo de enumeração e um risco real de desanonimização contra o Footprint-Free. Limitar a taxa de criação de sites teria sido a solução preguiçosa e teria quebrado completamente o produto de provisionamento em massa. Em vez disso, apenas as tentativas rejeitadas de domínios duplicados são contabilizadas no orçamento, por principal. Criações bem-sucedidas nunca são debitadas disso — para que você possa provisionar em massa o dia todo, e a sondagem morre quase imediatamente.

  • Um envelope de erro consistente em cada falha: um código, uma mensagem legível por humanos, detalhes opcionais no nível de campo e um request_id que você pode citar ao suporte. Erros de validação retornam 422 com os campos incorretos nomeados.
  • Chaves de idempotência em POST, com o registro de replay gravado no commit em vez de embutido — para que uma nova tentativa nunca reproduza um 201 em cache que nomeia uma linha que nunca foi efetivada (commit). Uma solicitação com falha libera seu bloqueio em andamento imediatamente, de modo que um 422 não bloqueie sua tentativa corrigida.
  • Paginação por cursor baseada em chaves sobre UUIDv7 — estável sob gravações concorrentes, sem desvio de página quando linhas são inseridas durante a varredura.
  • RateLimit-Remaining nas respostas, para que um cliente gerado possa recuar de forma inteligente em vez de adivinhar.
  • Recursos fora do escopo retornam 404 em vez de 403 — um 403 confirmaria que o recurso existe. Filtrar por uma organização fora do seu escopo retorna uma página vazia pelo mesmo motivo.
  • A criação de sites é um registro, não um provisionamento: POST /v1/sites retorna 201 com status pending e nunca bloqueia na construção. O evento é gravado na outbox transacional na mesma transação que a linha, portanto, um site existe se, e somente se, o seu provisionamento tiver a solicitação garantida.

SDKs, uma CLI e um provedor Terraform

Três consumidores da mesma especificação, para três maneiras diferentes de trabalhar.

SDKs de cliente

Gerado para TypeScript, Python, PHP e Go, seguindo a especificação para que um novo endpoint chegue ao seu idioma sem precisar esperar por um wrapper escrito à mão.

Zinnector®, a CLI

Estruture um site WordPress, execute-o localmente sem nada instalado além do Node e faça o deploy dele. O Zinnector® faz uma verificação prévia do seu projeto em relação ao slot para o qual você está prestes a fazer o deploy — versão do PHP, disco, contagem de arquivos — e avisa antes de você enviar, em vez de depois. Ele também faz login, lista sites, faz deploys, gerencia domínios e DNS, lê serviços de e-mail, faz backups, executa WP-CLI com lista de permissões, monitora logs em tempo real e dispara operações em massa. Gratuito, com licença MIT e construído sobre esta mesma API pública.

O provedor Terraform

Gerencie sites, domínios, registros DNS, caixas de correio e planos como infraestrutura como código. O terraform apply provisiona a hospedagem, e seus ambientes tornam-se reprodutíveis e revisáveis em vez de uma sequência de cliques que ninguém anotou.

Referência interativa

Documentação gerada que você pode ler e chamar diretamente do navegador, descrevendo exatamente os endpoints que o servidor implementa — pois ambos vêm da mesma especificação.

Webhooks que sobrevivem à queda do seu endpoint

Por trás da plataforma há uma espinha dorsal de eventos durável: cada mudança de estado grava um evento em uma outbox transacional no Postgres, atomicamente com a alteração do banco de dados, e um relay o publica no NATS JetStream. Os eventos são tipados e versionados — site.deployed, order.paid, invoice.overdue, backup.completed, abuse.flagged, trial.ending e o restante.

Assine o que importa para você

Registre um endpoint como WebhookSubscription e escolha os tipos de evento que ele recebe. Um único fluxo alimenta notificações, análises, automações e a sua integração — você está consumindo exatamente os mesmos eventos que nós.

Assinado com HMAC

Cada entrega é assinada com HMAC para que você possa verificar se veio de nós antes de agir com base nela.

Tentativa repetida com atraso exponencial e registrada

As entregas com falha são tentadas novamente com intervalo exponencial e cada tentativa é registrada como um WebhookDelivery. Você pode inspecionar e retransmitir entregas a partir do painel em vez de enviar um e-mail ao suporte perguntando o que enviamos.

No mínimo uma vez, portanto remova duplicatas pelo id

O pipeline foi concebido propositalmente como *at-least-once* em vez de fingir ser *exactly-once*. Um *relay* que falha durante a publicação tem sua concessão de reivindicação expirada e seus eventos republicados. Faça a desduplicação pelo ID do *envelope* e seu consumidor estará correto por construção.

Adicionando código ao site

Uma API é apenas metade da história de um desenvolvedor. A outra metade é a entrega.

  • Conecte o GitHub, GitLab ou Bitbucket via OAuth, com chaves de implantação armazenadas no cofre de credenciais — e não em um arquivo de configuração.
  • O Push aciona um pipeline de compilação e implantação, com mapeamento de branch para ambiente (main para production, staging para staging) e etapas de compilação por stack para composer e npm.
  • Reverta para uma versão anterior quando um deploy der errado.
  • Clonagem para ambiente de homologação e envio direto para produção (push-to-live), garantindo que qualquer alteração seja testada em um ambiente real antes de chegar aos visitantes.
  • SSH, SFTP e FTP isolados por site com CageFS, garantindo que cada cliente veja apenas os seus próprios arquivos.
  • wp-cli a partir do terminal do painel e via SSH.
  • O VS Code no navegador via code-server — um editor completo com extensões, um terminal integrado e git, editando os arquivos do site diretamente.
  • Versão de PHP por site, configurações de PHP editáveis, extensões por site, variáveis de ambiente e cron real além do WP-cron.

E a mesma API que o seu agente de IA pode usar

Expomos a plataforma como um servidor MCP hospedado: um adaptador de protocolo leve sobre a API do engine que reutiliza o catálogo de ações idêntico, RBAC e trilha de auditoria. Conecte o Claude Code, Cursor, ChatGPT, Claude Desktop ou qualquer cliente compatível com MCP uma vez, e cada recurso que adicionarmos à API ficará disponível para ele automaticamente.

O agente recebe três coisas: Ferramentas (os mesmos endpoints de API, sem lógica paralela que possa divergir), Recursos (saúde do site somente leitura, configurações, logs recentes, métricas, tempo de atividade e artigos da KB, para que ele faça o diagnóstico com dados reais antes de agir) e Prompts (modelos de fluxo de trabalho publicados, como "diagnosticar este site" ou "preparar uma migração").

A segurança é a mesma história que a autenticação: OAuth 2.1, tokens vinculados à sua organização e permissões RBAC com segurança em nível de linha aplicada, escopadas e revogáveis por ferramenta, sandbox separado da produção. Ações destrutivas — excluir, suspender, faturamento, gastos elevados — exigem confirmação explícita ou uma política de aprovação humana. Limites de taxa e tetos de gastos vinculam ações pagas acionadas por IA, e cada chamada MCP é registrada em log de auditoria com identidade, ferramenta, argumentos e resultado.

Apoiamos o protocolo em vez de integrar cada aplicativo um de cada vez, o que significa que sua escolha de ferramentas de IA pode mudar sem que sua integração de hospedagem precise mudar com ela.

Perguntas frequentes

A API pública é a mesma que o painel usa?

Sim — é a mesma API do motor, publicada e consolidada. O painel, o console de administração, a CLI, o provedor Terraform, o servidor MCP e os webhooks são todos consumidores de uma única interface, razão pela qual a API não fica atrás do painel.

Posso testar uma integração sem gastar dinheiro ou criar servidores reais?

Sim. As chaves de sandbox são emitidas separadamente das chaves de produção e executam em modo de teste: sem cobrança real e sem provisionamento real. Aponte seu CI para as credenciais de sandbox e execute todo o ciclo de solicitação e resposta com segurança.

Como faço para impedir que uma nova tentativa crie duas cópias de um item?

Envie uma Idempotency-Key em seu POST. O registro de replay é gravado no commit em vez de inline, de modo que uma nova tentativa nunca reproduzirá um sucesso em cache para uma linha que não foi efetivamente confirmada, e uma solicitação que falha libera seu bloqueio imediatamente para que sua nova tentativa corrigida não seja atrasada. A entrega de webhook é no mínimo uma vez por design — faça a desduplicação pelo ID do envelope no seu lado.

Posso dar a uma chave de API acesso a todas as minhas organizações de clientes?

Hoje não. As chaves de API são emitidas por organização, portanto, uma integração que abrange várias organizações de clientes possui uma chave para cada uma. As permissões também são verificadas por organização para principais de usuário: ter sites.create em uma organização não concede acesso em uma organização separada e não relacionada, embora se aplique às organizações aninhadas abaixo dela. Isso é intencional — limita uma chave comprometida à sua própria organização e às suborganizações abaixo dela, e não a toda a plataforma.

O que a função de Desenvolvedor integrada realmente permite?

O papel de desenvolvedor abrange a leitura da organização, o gerenciamento de chaves de API, a visualização e criação de sites, a reinicialização deles, a limpeza do cache e a visualização e resposta a tickets. Ele exclui deliberadamente o controle de faturamento. Observe que as permissões de implantação (deploy) e envio para produção (push-to-live) não fazem parte dele — se um membro da equipe precisar delas, atribua uma função que as possua, em vez de assumir que o Desenvolvedor é a função técnica mais abrangente.

O que acontece com os meus webhooks se o meu endpoint ficar fora do ar por uma hora?

As tentativas de entrega são refeitas com intervalo progressivo (backoff) e cada tentativa é registrada como um WebhookDelivery que você pode inspecionar. Na origem, os eventos são gravados em uma *outbox* transacional na mesma transação de banco de dados da própria alteração, portanto nada é perdido enquanto um consumidor estiver indisponível — um consumidor fora do ar apenas atrasa, ele nunca quebra o produtor, e você pode retransmitir as entregas pelo painel assim que retornar.

Quanto custa começar a desenvolver com ela?

Comece um teste de 14 dias sem cartão do Footprint-Free Hosting — sem dados de pagamento, até 5 sites. Os planos pagos do Footprint-Free começam em $6/mês para o PBN 5. Todos os planos contam com garantia de reembolso de 30 dias, migrações gratuitas e sem fidelização de fornecedor.

Leia a especificação e, em seguida, desenvolva com base nela

API centrada em especificações, SDKs gerados, uma CLI, um provedor Terraform, webhooks assinados e um servidor MCP — na hospedagem que criamos para mais de 650.000 sites em todo o mundo. Comece uma avaliação gratuita de 14 dias sem cartão de crédito, sem dados de pagamento.

Comece grátis