Todas las entradas

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ónMétodoPara qué sirve
list_sitesGETLista tus webs con su id
get_siteGETHTML completo de una web (hasta 5 MB)
create_sitePOSTWeb nueva: vacía, con HTML, con archivos o desde una plantilla
update_sitePOSTNuevo HTML de una web, por id o por nombre
publish_filesPOSTWeb con varios archivos: index.html, CSS, JS, imágenes
import_zipPOSTProyecto completo desde un ZIP
list_templatesGETPlantillas de Hostilo
list_versionsGETVersiones guardadas de una web
restore_versionPOSTVuelve a la versión elegida
get_site_statsGETVisitas y visitantes

Cada acción está en https://hostilo.app/api/v1/<acción>. Peticiones y respuestas en JSON.

Clave, límites y plan

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:

1

El escenario envía update_site con el nombre de la web en site_id.

2

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.

3

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

Más del blog