Publier des sites depuis Make, n8n et Zapier : l’API REST de Hostilo
Tout outil capable d’envoyer une requête HTTP peut désormais créer, mettre à jour et restaurer des sites sur Hostilo. L’API REST a les mêmes 10 actions que le connecteur MCP pour Claude et ChatGPT, chaque action a sa propre adresse, et le fichier public openapi.json décrit toute l’interface. Voici quatre usages concrets et deux scénarios à importer tels quels, pour n8n et pour Make.
Ce que fait l’API
| Action | Méthode | À quoi elle sert |
|---|---|---|
list_sites | GET | Liste de tes sites avec leur id |
get_site | GET | HTML complet d’un site (jusqu’à 5 Mo) |
create_site | POST | Nouveau site : vide, avec HTML, avec fichiers ou depuis un modèle |
update_site | POST | Nouveau HTML, site par id ou par nom |
publish_files | POST | Site en plusieurs fichiers : index.html, CSS, JS, images |
import_zip | POST | Projet complet depuis un ZIP |
list_templates | GET | Modèles Hostilo prêts à l’emploi |
list_versions | GET | Versions enregistrées d’un site |
restore_version | POST | Retour à la version choisie |
get_site_stats | GET | Pages vues et visiteurs |
Chaque action se trouve à https://hostilo.app/api/v1/<action>. Requêtes et réponses en JSON.
Clé, limites et offre
- Clé : tableau de bord → API et outils → générer une clé. Elle commence par
hk_et se place dans l’en-têteAuthorization: Bearer hk_.... Elle ouvre tous tes sites, garde-la comme un mot de passe : dans les identifiants de Make, n8n ou Zapier, jamais dans le scénario lui-même. Une nouvelle clé désactive aussitôt l’ancienne. - Limite : 60 requêtes par minute et par clé. L’en-tête
X-RateLimit-Remainingindique ce qu’il reste. Au-delà, tu reçois le statut 429 avec un en-têteRetry-Afteren secondes. - Taille : jusqu’à 5 Mo de HTML par site. Les images partent en fichiers séparés avec
publish_files. - Erreurs :
{"error": "..."}avec le statut 400, 401, 403 ou 429. Les messages sont en polonais, appuie-toi donc sur le code de statut. - Offre : l’API fonctionne aussi avec l’offre Free (jusqu’à 5 sites, statistiques sur 7 jours). Un compte Free doit tout de même être consulté de temps en temps dans le tableau de bord, et les appels API ne comptent pas. Si ton automatisation doit tourner des mois sans toi, prends PRO à 29 USD par an HT : sans cette règle, avec 20 sites, des domaines personnalisés et des statistiques jusqu’à 365 jours. Détails dans Free ou PRO.
La première requête
curl -X POST https://hostilo.app/api/v1/create_site \
-H "Authorization: Bearer hk_..." \
-H "Content-Type: application/json" \
-d '{"site_name": "tarifs-2026", "html": "<!DOCTYPE html><html>...</html>"}'
Réponse :
{"success": true, "message": "Strona utworzona.", "site_id": 124, "url": "https://tarifs-2026.hostilo.page"}
Le nom compte de 3 à 30 caractères : minuscules, chiffres et tirets. Il donne l’adresse nom.hostilo.page.
Usage 1 : une feuille ou un formulaire devient un site
Quelqu’un remplit un formulaire ou tu ajoutes une ligne dans Google Sheets, et peu après nom.hostilo.page affiche une page terminée. La première exécution crée le site, les suivantes remplacent son contenu. Les deux scénarios prêts fonctionnent ainsi :
Le scénario envoie update_site avec le nom du site dans site_id.
Si le site n’existe pas encore, l’API répond avec le statut 400 et le message « Strona nie istnieje… » (le site n’existe pas). Le scénario appelle alors create_site avec le même HTML.
À la ligne suivante, le site existe déjà et tout s’arrête à update_site. La version précédente rejoint l’historique.
POST https://hostilo.app/api/v1/update_site
{"site_id": "tarifs-2026", "html": "<!DOCTYPE html><html>...</html>"}
n8n
Télécharge n8n-hostilo-publish.json et choisis Import from File dans n8n (ou colle le contenu dans un workflow vide). Tu obtiens cinq nœuds : Webhook → Build HTML → update_site → condition → create_site. Dans les deux nœuds Hostilo, crée un seul identifiant Header Auth : nom Authorization, valeur Bearer hk_.... Clique sur Test workflow et envoie :
curl -X POST "<Webhook test URL>" \
-H "Content-Type: application/json" \
-d '{"site":"tarifs-2026","title":"Tarifs 2026","text":"Coupe : 25 EUR"}'
À la place du webhook, tu peux utiliser un nœud Google Sheets Trigger avec les colonnes site, title et text. Si les données contiennent un champ html, le scénario le publie tel quel : tu peux donc placer avant un nœud de modèle d’IA qui écrit la page entière.
Make
Télécharge make-hostilo-publish.json, crée un nouveau scénario et choisis Import Blueprint dans le menu à trois points. Modules : Google Sheets Watch Rows (colonne A : nom du site, B : titre, C : texte) → JSON Transform to JSON → HTTP Make an API Key Auth request avec update_site → le même module avec create_site et un filtre « le site n’existe pas encore ». Après l’import, choisis ta feuille et ajoute la clé : Credentials → Add, Key Bearer hk_..., API Key placement In the header, nom du paramètre Authorization. Sélectionne la même clé dans les deux modules HTTP.
Pourquoi Transform to JSON
Un HTML plein de guillemets et de retours à la ligne, collé directement dans le corps de la requête, casse le JSON. Transform to JSON en fait une chaîne valide, et l’API reçoit exactement le contenu de la feuille.
Zapier
Zapier n’importe pas de scénarios depuis un fichier, une étape suffit : Webhooks by Zapier → Custom Request, méthode POST, URL https://hostilo.app/api/v1/update_site, en-têtes Authorization: Bearer hk_... et Content-Type: application/json, et le JSON ci-dessus dans Data. Le plus simple : créer le site une fois dans le tableau de bord et laisser le Zap le mettre à jour.
Usage 2 : chaque nouveau produit a sa page
Un nouveau produit arrive dans le catalogue et le scénario lui crée une page, par exemple creme-spf50.hostilo.page, avec description, prix et bouton de commande. Un appel à create_site avec un nom tiré de la référence suffit. Si la page a besoin de sa propre feuille de style, d’un script et de photos, utilise publish_files :
POST https://hostilo.app/api/v1/publish_files
{
"site_id": "creme-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 devient la page, les autres fichiers vont dans le dossier assets/, et Hostilo corrige lui-même les liens du HTML. Tu peux aussi partir d’un design : list_templates renvoie les modèles et create_site avec le champ template crée le site à partir de l’un d’eux. Pense à la limite : 5 sites en Free, 20 en PRO. Pour un grand catalogue, une seule page avec la liste des produits, rafraîchie par update_site, convient mieux.
Usage 3 : une page qui se met à jour seule
Une grille tarifaire tirée d’une feuille, un planning de cours, des créneaux libres, les résultats d’un championnat. Un scénario lancé toutes les heures ou chaque matin (le nœud Schedule Trigger dans n8n, la planification du scénario dans Make) récupère les données, construit le HTML et envoie update_site. Hostilo garde les 10 dernières versions : si la source de données casse quelque chose, un appel suffit pour revenir en arrière :
GET https://hostilo.app/api/v1/list_versions?site_id=tarifs-2026
POST https://hostilo.app/api/v1/restore_version
{"site_id": "tarifs-2026", "version_id": "1760601600"}
Lors d’une restauration, la version actuelle rejoint aussi l’historique, ce retour en arrière peut donc lui-même être annulé. Une fois par semaine, le même scénario peut récupérer les statistiques et noter les pages vues dans une feuille ou les envoyer sur Slack :
GET https://hostilo.app/api/v1/get_site_stats?site_id=tarifs-2026&days=7
L’offre Free affiche 7 jours ; PRO jusqu’à 365 jours, avec pays, sources et appareils.
Usage 4 : ton propre GPT qui publie des sites
Crée un GPT dans ChatGPT, puis Configure → Actions → Create new action → Import from URL avec https://hostilo.app/openapi.json. Authentication : API Key, Auth Type Bearer, colle ta clé. Comme politique de confidentialité, https://hostilo.app/privacy. Le GPT reçoit les 10 actions avec leur description et choisit la bonne quand tu écris « publie cette page sous le nom cafe-de-la-place ».
Deux remarques. GPT Actions accepte des réponses d’environ 100 Ko au maximum, get_site d’une très grande page peut donc ne pas passer. Et si tu utilises ChatGPT, Claude ou Perplexity juste pour toi, le connecteur MCP est plus simple : tu te connectes avec ton compte Hostilo au lieu de copier une clé.
Pour les agences et les spécialistes de l’automatisation
Un scénario peut gérer de nombreux sites clients, car le nom du site n’est qu’un champ de la feuille ou du CRM. Le client ajoute une promotion dans la feuille, la page change toute seule, et tu disposes de l’historique des versions et des statistiques pour le rapport mensuel avec une seule API. Les adresses /api.php?action= des anciennes intégrations fonctionnent toujours. Référence complète : documentation REST.
Questions fréquentes
L’API REST est-elle payante ?
Non. Elle fonctionne en Free et en PRO avec la même limite de 60 requêtes par minute. L’offre détermine le nombre de sites, la profondeur des statistiques et la nécessité de visiter régulièrement le compte.
Quelle différence entre l’API REST et le connecteur MCP ?
Les actions sont les mêmes. Le connecteur MCP sert aux applications d’IA (Claude, ChatGPT, Perplexity, Cursor), où tu te connectes avec ton compte Hostilo. REST avec une clé hk_ sert aux outils d’automatisation, aux scripts et aux GPT personnalisés.
La clé est-elle en sécurité dans un scénario ?
Garde-la dans les identifiants de l’outil (n8n : Header Auth, Make : Credentials), pas dans les champs des nœuds. Les fichiers prêts ne la contiennent pas. En cas de fuite, génère-en une nouvelle dans le tableau de bord : l’ancienne cesse aussitôt de fonctionner.
Que se passe-t-il au-delà de 60 requêtes par minute ?
L’API renvoie le statut 429 avec un en-tête Retry-After. Dans n8n, active Retry On Fail ou Batching dans le nœud HTTP Request ; dans Make, ajoute un module Sleep entre les appels.
Connecte ton premier scénario
Crée un compte gratuit, génère une clé dans API et outils et importe un fichier prêt dans n8n ou Make. Sans carte bancaire.
Créer un compte gratuit

