Publique sites a partir do Make, n8n e Zapier: a API REST do Hostilo
Qualquer ferramenta que envie uma requisição HTTP agora pode criar, atualizar e restaurar sites no Hostilo. A API REST tem as mesmas 10 ações do conector MCP para Claude e ChatGPT, cada ação tem o seu próprio endereço e o arquivo público openapi.json descreve toda a interface. Abaixo, quatro usos concretos e dois cenários prontos para importar, um para n8n e outro para Make.
O que a API faz
| Ação | Método | Para que serve |
|---|---|---|
list_sites | GET | Lista os seus sites com o id |
get_site | GET | HTML completo de um site (até 5 MB) |
create_site | POST | Site novo: vazio, com HTML, com arquivos ou a partir de um modelo |
update_site | POST | Novo HTML de um site, por id ou por nome |
publish_files | POST | Site com vários arquivos: index.html, CSS, JS, imagens |
import_zip | POST | Projeto inteiro a partir de um ZIP |
list_templates | GET | Modelos prontos do Hostilo |
list_versions | GET | Versões salvas de um site |
restore_version | POST | Volta para a versão escolhida |
get_site_stats | GET | Visualizações e visitantes |
Cada ação fica em https://hostilo.app/api/v1/<ação>. Requisições e respostas em JSON.
Chave, limites e plano
- Chave: painel → API e ferramentas → gere uma chave. Ela começa com
hk_e vai no cabeçalhoAuthorization: Bearer hk_.... Dá acesso a todos os seus sites, então trate-a como uma senha: guarde nas credenciais do Make, n8n ou Zapier, nunca dentro do cenário. Gerar uma chave nova desativa a anterior na hora. - Limite: 60 requisições por minuto por chave. O cabeçalho
X-RateLimit-Remainingmostra quantas restam. Acima disso, você recebe o status 429 com um cabeçalhoRetry-Afterem segundos. - Tamanho: até 5 MB de HTML por site. Imagens vão como arquivos separados com
publish_files. - Erros:
{"error": "..."}com status 400, 401, 403 ou 429. As mensagens estão em polonês, então decida pelo código de status. - Plano: a API também funciona no plano Free (até 5 sites, estatísticas de 7 dias). Mesmo assim, uma conta Free precisa de uma visita ao painel de vez em quando, e as chamadas à API não contam. Se a sua automação vai rodar meses sem você, escolha o PRO por 29 USD por ano (sem impostos): sem essa regra, com 20 sites, domínios próprios e estatísticas de até 365 dias. Mais em Free ou PRO.
A primeira requisição
curl -X POST https://hostilo.app/api/v1/create_site \
-H "Authorization: Bearer hk_..." \
-H "Content-Type: application/json" \
-d '{"site_name": "precos-2026", "html": "<!DOCTYPE html><html>...</html>"}'
Resposta:
{"success": true, "message": "Strona utworzona.", "site_id": 124, "url": "https://precos-2026.hostilo.page"}
O nome tem de 3 a 30 caracteres: letras minúsculas, números e hífens. Ele vira o endereço nome.hostilo.page.
Uso 1: uma planilha ou um formulário vira site
Alguém preenche um formulário ou você adiciona uma linha no Google Sheets e, logo depois, nome.hostilo.page mostra uma página pronta. A primeira execução cria o site e as seguintes substituem o conteúdo. Os dois cenários prontos funcionam assim:
O cenário envia update_site com o nome do site em site_id.
Se o site ainda não existe, a API responde com status 400 e a mensagem “Strona nie istnieje…” (o site não existe). Então o cenário chama create_site com o mesmo HTML.
Na linha seguinte o site já existe e tudo termina em update_site. A versão anterior vai para o histórico.
POST https://hostilo.app/api/v1/update_site
{"site_id": "precos-2026", "html": "<!DOCTYPE html><html>...</html>"}
n8n
Baixe n8n-hostilo-publish.json e, no n8n, escolha Import from File (ou cole o conteúdo num workflow vazio). Você recebe cinco nós: Webhook → Build HTML → update_site → condição → create_site. Nos dois nós do Hostilo, crie uma única credencial Header Auth: nome Authorization, valor Bearer hk_.... Clique em Test workflow e envie:
curl -X POST "<Webhook test URL>" \
-H "Content-Type: application/json" \
-d '{"site":"precos-2026","title":"Preços 2026","text":"Corte de cabelo: R$ 60"}'
No lugar do webhook, você pode usar um nó Google Sheets Trigger com as colunas site, title e text. Se os dados tiverem um campo html, o cenário publica sem alterações, então dá para colocar antes um nó com um modelo de IA que escreve a página inteira.
Make
Baixe make-hostilo-publish.json, crie um cenário novo e, no menu de três pontos, escolha Import Blueprint. Módulos: Google Sheets Watch Rows (coluna A: nome do site, B: título, C: texto) → JSON Transform to JSON → HTTP Make an API Key Auth request com update_site → o mesmo módulo com create_site e um filtro “o site ainda não existe”. Depois de importar, escolha a sua planilha e adicione a chave: Credentials → Add, Key Bearer hk_..., API Key placement In the header, nome do parâmetro Authorization. Selecione a mesma chave nos dois módulos HTTP.
Para que serve o Transform to JSON
Um HTML cheio de aspas e quebras de linha, colado direto no corpo da requisição, quebra o JSON. O Transform to JSON transforma isso numa string válida, e a API recebe exatamente o que está na planilha.
Zapier
O Zapier não importa cenários de arquivo, então basta um passo: Webhooks by Zapier → Custom Request, método POST, URL https://hostilo.app/api/v1/update_site, cabeçalhos Authorization: Bearer hk_... e Content-Type: application/json, e o JSON acima em Data. O mais simples é criar o site uma vez no painel e deixar o Zap só atualizar.
Uso 2: cada produto novo ganha a sua página
Um produto novo entra no catálogo e o cenário cria uma página para ele, por exemplo protetor-fps50.hostilo.page, com descrição, preço e botão de pedido. Uma chamada a create_site com o nome tirado do código do produto basta. Se a página precisa de CSS próprio, um script e fotos, use publish_files:
POST https://hostilo.app/api/v1/publish_files
{
"site_id": "protetor-fps50",
"files": [
{"path": "index.html", "content": "<!DOCTYPE html><html>...</html>"},
{"path": "style.css", "content": "body { font-family: sans-serif }"},
{"path": "photo.jpg", "content": "/9j/4AAQ...", "encoding": "base64"}
]
}
O index.html vira a página, os outros arquivos vão para a pasta assets/ e o Hostilo corrige sozinho os links do HTML. Você também pode partir de um design pronto: list_templates devolve os modelos e create_site com o campo template cria o site a partir de um deles. Lembre do limite: 5 sites no Free e 20 no PRO. Para um catálogo grande, funciona melhor uma página única com a lista de produtos, atualizada com update_site.
Uso 3: uma página que se atualiza sozinha
Uma tabela de preços vinda da planilha, uma grade de aulas, horários livres, resultados de um campeonato. Um cenário que roda a cada hora ou toda manhã (no n8n o nó Schedule Trigger, no Make o agendamento do cenário) busca os dados, monta o HTML e envia update_site. O Hostilo guarda as 10 últimas versões, então, se a fonte de dados estragar algo, uma chamada leva você de volta:
GET https://hostilo.app/api/v1/list_versions?site_id=precos-2026
POST https://hostilo.app/api/v1/restore_version
{"site_id": "precos-2026", "version_id": "1760601600"}
Ao restaurar, a versão atual também vai para o histórico, e esse passo pode ser desfeito. Uma vez por semana, o mesmo cenário pode buscar as estatísticas e registrar as visualizações numa planilha ou mandá-las para o Slack:
GET https://hostilo.app/api/v1/get_site_stats?site_id=precos-2026&days=7
O plano Free mostra 7 dias; o PRO, até 365 dias com países, origens e dispositivos.
Uso 4: o seu próprio GPT que publica sites
Crie um GPT no ChatGPT e vá em Configure → Actions → Create new action → Import from URL com https://hostilo.app/openapi.json. Authentication: API Key, Auth Type Bearer, cole a sua chave. Como política de privacidade, https://hostilo.app/privacy. O GPT recebe as 10 ações com descrição e escolhe a certa quando você escreve “publique esta página como cafe-da-praca”.
Duas observações. O GPT Actions aceita respostas de até cerca de 100 KB, então get_site de uma página muito grande pode não caber. E, se você usa ChatGPT, Claude ou Perplexity só para si, o conector MCP é mais simples: você entra com a sua conta do Hostilo em vez de copiar uma chave.
Para agências e quem trabalha com automação
Um cenário pode atender muitos sites de clientes, porque o nome do site é só um campo da planilha ou do CRM. O cliente coloca uma promoção na planilha, a página muda sozinha e você tem histórico de versões e estatísticas para o relatório mensal com uma única API. Os endereços /api.php?action= de integrações antigas continuam funcionando. Referência completa: documentação REST.
Perguntas frequentes
A API REST é cobrada à parte?
Não. Ela funciona no Free e no PRO com o mesmo limite de 60 requisições por minuto. O plano define quantos sites você tem, quantos dias de estatísticas vê e se a conta precisa de visitas periódicas.
Qual a diferença entre a API REST e o conector MCP?
As ações são as mesmas. O conector MCP é para apps de IA (Claude, ChatGPT, Perplexity, Cursor), onde você entra com a sua conta do Hostilo. O REST com uma chave hk_ é para ferramentas de automação, scripts e GPTs próprios.
A chave fica segura dentro de um cenário?
Guarde-a nas credenciais da ferramenta (n8n: Header Auth, Make: Credentials), não nos campos dos nós. Os arquivos prontos não a contêm. Se ela vazar, gere uma nova no painel e a anterior para de funcionar na hora.
O que acontece acima de 60 requisições por minuto?
A API devolve o status 429 com o cabeçalho Retry-After. No n8n, ative Retry On Fail ou Batching no nó HTTP Request; no Make, coloque um módulo Sleep entre as chamadas.
Conecte o seu primeiro cenário
Crie uma conta grátis, gere uma chave em API e ferramentas e importe um arquivo pronto no n8n ou no Make. Sem cartão de crédito.
Criar conta grátis

