Vue d'ensemble de l'API Fabrique

Fabrique adapte le flux de publication de PageDrop à l'architecture du portfolio 1282. Le principe reste simple : vous envoyez du HTML, vous uploadez un PDF ou un projet ZIP, vous récupérez immédiatement une URL publique, puis vous conservez un jeton de suppression pour pouvoir modifier ou supprimer la publication plus tard.

URL de base : https://lblaster.com/api/v1
Route publique : https://lblaster.com/fabric/:siteId

Authentification

Aucun compte n'est nécessaire pour créer une publication. En revanche, les opérations de mise à jour et de suppression utilisent l'en-tête X-Delete-Token renvoyé lors de la création initiale.

Créer une publication

POST /api/v1/sites

Crée une nouvelle page hébergée. L'endpoint accepte soit du HTML ou du Markdown en JSON, soit un envoi multipart pour des fichiers HTML, PDF ou ZIP.

Corps JSON

ChampTypeRequisDescription
htmlstringrequis*Contenu HTML brut à héberger. Utilisez html ou markdown.
markdownstringrequis*Contenu Markdown rendu automatiquement sous forme de page responsive.
titlestringoptionnelTitre de page utilisé pour le rendu Markdown.
ttlstringoptionnelDurée de vie, par exemple 12h, 7d ou 30d.
slugstringoptionnelSlug personnalisé si votre backend prend en charge des routes lisibles.
ogTitlestringoptionnelTitre Open Graph personnalisé.
ogDescriptionstringoptionnelDescription utilisée pour les aperçus et les embeds.
ogImagestringoptionnelURL de l'image d'aperçu Open Graph.
passwordstringoptionnelProtection par mot de passe pour la route publique.
passwordExpirynumberoptionnelDurée de vie du cookie de mot de passe, en heures.

Envoi multipart

ChampTypeRequisDescription
filefilerequisFichier HTML unique, fichier PDF unique, ou archive ZIP contenant un projet avec index.html à la racine.

Exemple de requête

cURL
curl -X POST "https://lblaster.com/api/v1/sites" \
  -H "Content-Type: application/json" \
  -d '{
    "html": "<h1>Hello World</h1><p>Published with Fabrique</p>",
    "ogTitle": "Fabrique demo",
    "ogDescription": "Published on the lblaster.com/fabric route"
  }'

Envoi de PDF

cURL
curl -X POST "https://lblaster.com/api/v1/sites" \
  -F "file=@document.pdf"

Envoi de ZIP

cURL
curl -X POST "https://lblaster.com/api/v1/sites" \
  -F "file=@project.zip"

Réponse de succès

201 Created
{
  "status": "success",
  "data": {
    "siteId": "a1b2c3d4",
    "url": "https://lblaster.com/fabric/a1b2c3d4",
    "deleteToken": "dlt_...",
    "expiresAt": null,
    "files": ["index.html"],
    "totalSizeBytes": 1234,
    "viewCount": 0,
    "createdAt": "2026-04-23T12:00:00.000Z"
  }
}
Conservez le deleteToken en lieu sûr. C'est la clé qui vous permettra de mettre à jour ou de supprimer la publication plus tard.

Mettre à jour une publication existante

PUT /api/v1/sites/:siteId

Remplace le contenu d'une publication existante sans modifier sa route publique. Le corps de la requête suit le même format que POST /sites.

En-têteRequisDescription
X-Delete-TokenrequisJeton de suppression renvoyé lors de la création.
cURL
curl -X PUT "https://lblaster.com/api/v1/sites/a1b2c3d4" \
  -H "Content-Type: application/json" \
  -H "X-Delete-Token: dlt_..." \
  -d '{"html": "<h1>Updated</h1>"}'

Supprimer une publication

DELETE /api/v1/sites/:siteId

Supprime définitivement une route publiée. Cette opération exige le jeton de suppression reçu au moment de la création.

cURL
curl -X DELETE "https://lblaster.com/api/v1/sites/a1b2c3d4" \
  -H "X-Delete-Token: dlt_..."

Route publique

GET /fabric/:siteId

Il s'agit du format de route publique utilisé par l'interface Fabrique. Une fois la publication créée, les visiteurs accèdent directement au résultat hébergé via /fabric/:siteId, au lieu de la route d'origine au format PageDrop.

Format d'URL courant

URL publique
https://lblaster.com/fabric/a1b2c3d4

Intégration dans une iframe

Si votre backend conserve le comportement d'embed du système d'origine, une route dédiée comme /embed/:siteId peut toujours servir une version compatible iframe.

Opérations avancées

La documentation source mentionne aussi des opérations avancées que vous pouvez conserver dans le même namespace API si vous les implémentez côté serveur.

EndpointDescription
POST /api/v1/sites/batchCréer plusieurs pages dans une seule requête.
POST /api/v1/sites/batch/deleteSupprimer plusieurs pages avec leurs jetons respectifs.
POST /api/v1/sites/:siteId/forkCréer une copie indépendante d'une page existante.
GET /api/v1/sites/:siteId/analyticsLire les statistiques de trafic ou de vues.
GET /api/v1/sites/:siteId/filesInspecter les fichiers stockés ou le contenu d'un ZIP uploadé.
GET /embed/:siteIdServir une vue intégrable.

Exemples côté client

JavaScript

JavaScript
const response = await fetch("https://lblaster.com/api/v1/sites", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    html: "<h1>Hello World</h1><p>Published with Fabrique</p>"
  })
});

const payload = await response.json();
const site = payload.data || payload;
console.log(site.url);
console.log(site.deleteToken);

Python

Python
import requests

response = requests.post(
    "https://lblaster.com/api/v1/sites",
    json={"html": "<h1>Hello World</h1>"}
)

payload = response.json()
site = payload.get("data", payload)
print(site.get("url"))
print(site.get("deleteToken"))

Déployer automatiquement depuis Cursor, Codex ou Claude Code

Oui, c'est possible. En pratique, Fabrique ne détecte pas les changements tout seul : un script local, un watcher, une commande ou un hook doit appeler l'API une fois que le site a été généré.

Limites et notes d'implémentation

  • Les envois HTML sont pensés pour un flux léger en fichier unique, idéal pour publier rapidement.
  • Les uploads PDF et ZIP conviennent mieux à des livrables plus lourds ou à des projets multi-fichiers.
  • Les jetons de suppression doivent être traités comme des identifiants sensibles pour la mise à jour et la suppression.
  • Les URLs publiques suivent la structure /fabric/:siteId adoptée par le portfolio.