Publica webs desde Make, n8n y Zapier: la API REST de Hostilo
Cualquier herramienta capaz de enviar una petición HTTP puede ya crear, actualizar y restaurar webs en Hostilo. La API REST tiene las mismas 10 acciones que el conector MCP para Claude y ChatGPT, cada acción tiene su propia dirección y el archivo público openapi.json describe toda la interfaz. Abajo tienes cuatro usos concretos y dos escenarios listos para importar, uno para n8n y otro para Make.
Qué hace la API
| Acción | Método | Para qué sirve |
|---|---|---|
list_sites | GET | Lista tus webs con su id |
get_site | GET | HTML completo de una web (hasta 5 MB) |
create_site | POST | Web nueva: vacía, con HTML, con archivos o desde una plantilla |
update_site | POST | Nuevo HTML de una web, por id o por nombre |
publish_files | POST | Web con varios archivos: index.html, CSS, JS, imágenes |
import_zip | POST | Proyecto completo desde un ZIP |
list_templates | GET | Plantillas de Hostilo |
list_versions | GET | Versiones guardadas de una web |
restore_version | POST | Vuelve a la versión elegida |
get_site_stats | GET | Visitas y visitantes |
Cada acción está en https://hostilo.app/api/v1/<acción>. Peticiones y respuestas en JSON.
Clave, límites y plan
- Clave: panel → API y herramientas → genera una clave. Empieza por
hk_y va en la cabeceraAuthorization: Bearer hk_.... Da acceso a todas tus webs, así que trátala como una contraseña: guárdala en las credenciales de Make, n8n o Zapier, nunca dentro del escenario. Al generar una clave nueva, la anterior deja de funcionar al momento. - Límite: 60 peticiones por minuto por clave. La cabecera
X-RateLimit-Remainingindica cuántas quedan. Si te pasas, recibes el estado 429 con una cabeceraRetry-Afteren segundos. - Tamaño: hasta 5 MB de HTML por web. Las imágenes van como archivos aparte con
publish_files. - Errores:
{"error": "..."}con estado 400, 401, 403 o 429. Los mensajes están en polaco, así que decide según el código de estado. - Plan: la API funciona también en el plan Free (hasta 5 webs, estadísticas de 7 días). Aun así, una cuenta Free necesita una visita al panel de vez en cuando, y las llamadas a la API no cuentan como tal. Si tu automatización debe funcionar meses sin ti, elige PRO por 29 USD al año (sin impuestos): sin esa regla, con 20 webs, dominios propios y estadísticas de hasta 365 días. Más en Free o PRO.
La primera petición
curl -X POST https://hostilo.app/api/v1/create_site \
-H "Authorization: Bearer hk_..." \
-H "Content-Type: application/json" \
-d '{"site_name": "precios-2026", "html": "<!DOCTYPE html><html>...</html>"}'
Respuesta:
{"success": true, "message": "Strona utworzona.", "site_id": 124, "url": "https://precios-2026.hostilo.page"}
El nombre tiene de 3 a 30 caracteres: minúsculas, cifras y guiones. Con él se forma la dirección nombre.hostilo.page.
Uso 1: una hoja o un formulario se convierte en web
Alguien rellena un formulario o añades una fila en Google Sheets y, al momento, nombre.hostilo.page muestra una página terminada. La primera ejecución crea la web y las siguientes sustituyen su contenido. Así funcionan los dos escenarios listos:
El escenario envía update_site con el nombre de la web en site_id.
Si la web aún no existe, la API responde con estado 400 y el mensaje «Strona nie istnieje…» (la web no existe). Entonces el escenario llama a create_site con el mismo HTML.
Con la siguiente fila la web ya existe y todo termina en update_site. La versión anterior pasa al historial.
POST https://hostilo.app/api/v1/update_site
{"site_id": "precios-2026", "html": "<!DOCTYPE html><html>...</html>"}
n8n
Descarga n8n-hostilo-publish.json y en n8n elige Import from File (o pega el contenido en un workflow vacío). Obtienes cinco nodos: Webhook → Build HTML → update_site → condición → create_site. En los dos nodos de Hostilo crea una única credencial Header Auth: nombre Authorization, valor Bearer hk_.... Pulsa Test workflow y envía:
curl -X POST "<Webhook test URL>" \
-H "Content-Type: application/json" \
-d '{"site":"precios-2026","title":"Precios 2026","text":"Corte de pelo: 20 EUR"}'
En lugar del webhook puedes usar un nodo Google Sheets Trigger con las columnas site, title y text. Si los datos traen un campo html, el escenario lo publica tal cual, así que puedes poner antes un nodo con un modelo de IA que escriba la página entera.
Make
Descarga make-hostilo-publish.json, crea un escenario nuevo y en el menú de tres puntos elige Import Blueprint. Módulos: Google Sheets Watch Rows (columna A: nombre de la web, B: título, C: texto) → JSON Transform to JSON → HTTP Make an API Key Auth request con update_site → el mismo módulo con create_site y un filtro «la web aún no existe». Tras importar, elige tu hoja y añade la clave: Credentials → Add, Key Bearer hk_..., API Key placement In the header, nombre del parámetro Authorization. Selecciona la misma clave en los dos módulos HTTP.
Para qué sirve Transform to JSON
Un HTML lleno de comillas y saltos de línea, pegado tal cual en el cuerpo de la petición, rompe el JSON. Transform to JSON lo convierte en una cadena válida y la API recibe exactamente lo que hay en la hoja.
Zapier
Zapier no importa escenarios desde un archivo, así que basta un paso: Webhooks by Zapier → Custom Request, método POST, URL https://hostilo.app/api/v1/update_site, cabeceras Authorization: Bearer hk_... y Content-Type: application/json, y el JSON de arriba en Data. Lo más sencillo es crear la web una vez en el panel y dejar que el Zap solo la actualice.
Uso 2: cada producto nuevo tiene su propia página
Entra un producto nuevo en el catálogo y el escenario crea su página, por ejemplo crema-spf50.hostilo.page, con descripción, precio y botón de pedido. Basta con create_site y un nombre sacado del código del producto. Si la página necesita su propia hoja de estilos, un script y fotos, usa publish_files:
POST https://hostilo.app/api/v1/publish_files
{
"site_id": "crema-spf50",
"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"}
]
}
index.html se convierte en la página, el resto va a la carpeta assets/ y Hostilo corrige solo los enlaces del HTML. También puedes partir de un diseño hecho: list_templates devuelve las plantillas y create_site con el campo template crea la web a partir de una. Ten en cuenta el límite: 5 webs en Free y 20 en PRO. Con un catálogo grande funciona mejor una sola página con la lista de productos, actualizada con update_site.
Uso 3: una página que se actualiza sola
Una lista de precios desde una hoja, un horario de clases, citas libres, resultados de una liga. Un escenario que se ejecuta cada hora o cada mañana (en n8n el nodo Schedule Trigger, en Make la programación del escenario) obtiene los datos, monta el HTML y envía update_site. Hostilo guarda las 10 últimas versiones, así que si la fuente de datos estropea algo, vuelves atrás con una llamada:
GET https://hostilo.app/api/v1/list_versions?site_id=precios-2026
POST https://hostilo.app/api/v1/restore_version
{"site_id": "precios-2026", "version_id": "1760601600"}
Al restaurar, la versión actual también pasa al historial, de modo que puedes deshacer ese paso. Una vez por semana el mismo escenario puede pedir las estadísticas y anotar las visitas en una hoja o enviarlas a Slack:
GET https://hostilo.app/api/v1/get_site_stats?site_id=precios-2026&days=7
El plan Free muestra 7 días; PRO, hasta 365 días con países, fuentes y dispositivos.
Uso 4: tu propio GPT que publica webs
Crea un GPT en ChatGPT y ve a Configure → Actions → Create new action → Import from URL con https://hostilo.app/openapi.json. Authentication: API Key, Auth Type Bearer, pega tu clave. Como política de privacidad, https://hostilo.app/privacy. El GPT recibe las 10 acciones con su descripción y elige la correcta cuando escribes «publica esta página como cafe-de-la-plaza».
Dos avisos. GPT Actions acepta respuestas de hasta unos 100 KB, así que get_site de una página muy grande puede no caber. Y si usas ChatGPT, Claude o Perplexity solo para ti, el conector MCP es más sencillo: entras con tu cuenta de Hostilo en lugar de copiar una clave.
Para agencias y especialistas en automatización
Un escenario puede atender muchas webs de clientes, porque el nombre de la web es solo un campo de la hoja o del CRM. El cliente añade una promoción en la hoja, la página cambia sola y tú tienes historial de versiones y estadísticas para el informe mensual desde una sola API. Las direcciones /api.php?action= de integraciones anteriores siguen funcionando. Referencia completa: documentación REST.
Preguntas frecuentes
¿La API REST tiene coste aparte?
No. Funciona en Free y en PRO con el mismo límite de 60 peticiones por minuto. El plan decide cuántas webs tienes, cuántos días de estadísticas ves y si la cuenta necesita visitas periódicas.
¿En qué se diferencia la API REST del conector MCP?
Las acciones son las mismas. El conector MCP es para apps de IA (Claude, ChatGPT, Perplexity, Cursor), donde entras con tu cuenta de Hostilo. REST con una clave hk_ es para herramientas de automatización, scripts y GPT propios.
¿Es segura la clave dentro de un escenario?
Guárdala en las credenciales de la herramienta (n8n: Header Auth, Make: Credentials), no en los campos de los nodos. Los archivos listos no la incluyen. Si se filtra, genera una nueva en el panel y la anterior deja de funcionar al instante.
¿Qué pasa si supero 60 peticiones por minuto?
La API devuelve el estado 429 con la cabecera Retry-After. En n8n activa Retry On Fail o Batching en el nodo HTTP Request; en Make añade un módulo Sleep entre llamadas.
Conecta tu primer escenario
Crea una cuenta gratis, genera una clave en API y herramientas e importa un archivo listo en n8n o Make. Sin tarjeta de crédito.
Crear cuenta gratis

