Aller au contenu
Flixy API · v1

Documentation de l’API

Tout ce qu’il vous faut pour ajouter l’IA de Flixy à votre produit. URL de base : https://flixy.studio/v1

REST · JSONClés BearerTravaux asynchronesWebhooks signés18 langues

Introduction

La Flixy API permet à votre logiciel d’utiliser les fonctionnalités de Flixy Studio : créer des sites complets à partir d’une description, les modifier et les traduire, rédiger du contenu de site, lire des menus, des catalogues et des PDF, et créer des images et des logos. Vous ne payez que les appels réussis, à partir d’un solde prépayé.

Les tâches longues (création, modification ou traduction d’un site) s’exécutent sous forme de travaux : l’API répond immédiatement et vous suivez le travail ou recevez un webhook. Le contenu, la lecture de documents et les images répondent directement, généralement en quelques secondes.

Commencez dans votre espace développeur : une clé de test gratuite est créée dès que vous l’ouvrez.

Console développeurs

Les clés, le solde, les recharges, les webhooks et le journal des appels se gèrent dans la console développeurs sur dev.flixy.studio.

  • Un compte développeur distinct. Comme sur d’autres plateformes d’IA, votre compte développeur est distinct de votre compte Flixy Studio : il a sa propre inscription, sa propre connexion et sa propre session. Vous déconnecter de l’un ne vous déconnecte jamais de l’autre. Vous pouvez utiliser la même adresse e-mail pour les deux.
  • Organisation reliée. Si vous utilisez aussi Flixy Studio, vous pouvez relier votre organisation à votre compte développeur, afin que l’API puisse travailler sur ses sites. Voir Organisation reliée.
  • Sécurité du compte. La vérification en deux étapes, les sessions actives et l’export des données sont disponibles dans la console, rubrique Compte.

Authentification

Envoyez votre clé dans l’en-tête Authorization de chaque requête. Les clés commencent par fx_live_ ou fx_test_.

Authorization: Bearer fx_live_8sJ2…
Votre clé est secrète. Appelez l’API uniquement depuis votre serveur : les requêtes envoyées depuis un navigateur web sont refusées, afin qu’une clé ne se retrouve jamais dans une page web ou une application mobile.

Chaque clé possède des droits (scopes). Un appel sans le droit requis renvoie 403 missing_scope.

ParamètreTypeDescription
sites:readscopeLire les sites et leur HTML.
sites:writescopeCréer, modifier et traduire des sites.
content:writescopeRédiger du contenu de site.
extract:writescopeLire des images et des documents PDF.
images:writescopeCréer des images et des logos.
account:readscopeLire le solde et l’utilisation.

Clés de test et clés live

  • Les clés de test (fx_test_…) sont gratuites. Elles renvoient des réponses d’exemple réalistes sans utiliser d’IA, pour que vous puissiez construire et tester toute votre intégration. Les travaux de site se terminent après quelques secondes avec un site d’exemple.
  • Les clés live (fx_live_…) renvoient de vrais résultats et sont facturées sur votre solde.

Chaque réponse contient l’en-tête Flixy-Mode: test ou Flixy-Mode: live.

Requêtes et réponses

Envoyez des corps JSON avec Content-Type: application/json (16 Mo maximum). Les réponses sont en JSON. Les dates sont au format ISO 8601 en UTC. Chaque réponse comporte un en-tête X-Request-Id : communiquez-le à notre support si vous avez besoin d’aide pour un appel.

Définissez Accept-Language pour recevoir les messages d’erreur dans votre langue (fr, en, es, de, it, pt, nl, ca, el, sv, no, da, fi, is, et, lv, lt, ja ; anglais par défaut).

Erreurs

Les erreurs utilisent les codes de statut HTTP standard et ont toujours la même forme :

{
  "error": {
    "type": "billing_error",
    "code": "insufficient_balance",
    "message": "Insufficient balance: top up your developer account…",
    "request_id": "req_5c1f0a9e2b7d4c11"
  }
}
StatutTypeSignification
400invalid_request_errorJSON ou en-tête invalide.
401authentication_errorClé manquante, invalide ou supprimée.
402billing_errorSolde insuffisant, plafond mensuel ou plafond journalier de la clé atteint.
403permission_errorDroit manquant, adresse IP non autorisée, compte suspendu ou appel depuis un navigateur.
404not_found_errorSite, travail ou endpoint inconnu.
409conflict_errorUn travail est déjà en cours sur ce site.
422invalid_request_errorParamètre invalide, ou requête refusée par la politique d’utilisation (off_topic, content_policy). Non facturé.
429rate_limit_errorTrop de requêtes ou de travaux simultanés. Attendez le délai indiqué par Retry-After.
5xxapi_errorProblème temporaire de notre côté. Réessayez avec la même clé d’idempotence. Non facturé.

Limites de débit

  • 60 requêtes par minute par clé (en-tête X-RateLimit-Limit).
  • 3 travaux de site simultanés par compte. Les appels de contenu, de document et d’image ne sont pas concernés par cette limite.
  • Lorsqu’une limite est atteinte, l’API répond 429 avec un en-tête Retry-After en secondes.

Besoin de plus ? Écrivez à contact@flixy.studio en décrivant votre cas d’usage.

Idempotence

Les erreurs réseau arrivent. Ajoutez un en-tête Idempotency-Key (8 à 100 caractères, par exemple votre propre numéro de commande) à tout POST : si vous renvoyez la même requête dans les 24 heures, l’API renvoie la première réponse — avec l’en-tête Idempotent-Replayed: true — et n’exécute ni ne facture jamais le travail deux fois.

Travaux

La création, la modification et la traduction d’un site prennent d’environ 30 secondes à 3 minutes. Ces endpoints répondent 202 Accepted avec un travail. Suivez-le toutes les 5 secondes ou attendez les événements job.succeeded / job.failed du webhook.

GET/v1/jobs/{id}
GET/v1/jobs?limit=20
{
  "id": "job_69023cfbb08a8130d8f6",
  "object": "job",
  "type": "site",
  "status": "succeeded",
  "mode": "live",
  "site_id": "691589621",
  "price": 0.72,
  "currency": "EUR",
  "created_at": "2026-11-11T09:45:01Z",
  "finished_at": "2026-11-11T09:46:35Z",
  "result": { "id": "691589621", "object": "site", "status": "ready", "pages": ["index.html", "menu.html"] }
}

status vaut queued, running, succeeded ou failed. Un travail échoué n’est jamais facturé et son error en explique la raison.

Créer un site

POST/v1/sites

Crée un site web complet à partir d’une description. Droit : sites:write.

ParamètreTypeDescription
promptobligatoirestringDescription de l’entreprise et du site (12 à 4000 caractères). Plus elle est précise, mieux c’est.
languagestringLangue du site : fr, en, es, de, it, pt, nl, ca, el, sv, no, da, fi, is, et, lv, lt, ja.
structurestringonepage ou multipage. Déduit du prompt par défaut.
qualitystringfast, standard (par défaut) ou complete.
featuresstring[]Sections à inclure : contact_form, testimonials, faq, map, whatsapp, shop, booking, gallery, newsletter, blog, pricing.
businessobjectFaits connus : name, slogan, phone, email, address, city, hours. Jamais inventés par l’IA.
destinationstringdeveloper (par défaut) : le site appartient à votre compte développeur. organization : le site est créé directement dans votre organisation Flixy Studio reliée.
curl https://flixy.studio/v1/sites \
  -H "Authorization: Bearer $FLIXY_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: order-1042" \
  -d '{
    "prompt": "Website for an artisan bakery in Lyon: sourdough breads, pastries, online pre-orders",
    "language": "fr",
    "structure": "multipage",
    "features": ["contact_form", "map", "shop"],
    "business": { "name": "Boulangerie du Parc", "city": "Lyon", "phone": "+33 4 00 00 00 00" }
  }'

Récupérer un site

GET/v1/sites/{id}?include=html
GET/v1/sites?limit=20

Renvoie le site, son statut et ses pages. Ajoutez include=html pour recevoir le HTML complet de chaque page (les images sont hébergées par Flixy). Droit : sites:read.

{
  "id": "691589621",
  "object": "site",
  "name": "Boulangerie du Parc",
  "status": "ready",
  "language": "fr",
  "pages": ["index.html", "menu.html", "contact.html"],
  "owner": "developer",
  "html": { "index.html": "<!doctype html>…" }
}

Ajoutez owner=developer ou owner=organization à la liste pour filtrer par propriétaire. Les sites d’une organisation reliée renvoient aussi dashboard_url et editor_url, pour les ouvrir dans Flixy Studio.

Modifier un site

POST/v1/sites/{id}/edits

Applique une modification décrite en langage courant, comme dans l’éditeur Flixy. Chaque modification crée une nouvelle version. Droit : sites:write.

ParamètreTypeDescription
instructionobligatoirestringLa modification à effectuer (4 à 3000 caractères), par ex. « Ajoute une page de tarifs avec trois offres » ou « Utilise un thème vert foncé ».
curl https://flixy.studio/v1/sites/691589621/edits \
  -H "Authorization: Bearer $FLIXY_API_KEY" -H "Content-Type: application/json" \
  -d '{"instruction": "Add an opening hours section: Tuesday to Saturday, 7am to 7pm"}'

Traduire un site

POST/v1/sites/{id}/translations

Traduit chaque page du site — navigation, boutons, formulaires, descriptions d’images, titre et description pour les moteurs de recherche — en conservant le design, les images, les liens, les prix et les coordonnées. Droit : sites:write.

ParamètreTypeDescription
languageobligatoirestringLangue cible : fr, en, es, de, it, pt, nl, ca, el, sv, no, da, fi, is, et, lv, lt, ja.

Rédiger du contenu web

POST/v1/content

Rédige un contenu destiné à être publié sur un site web ou envoyé par une entreprise à ses clients. Répond directement. Droit : content:write.

ParamètreTypeDescription
typeobligatoirestringpage_text, blog_article, product_description, service_description, about_us, seo_meta, faq, review_reply, newsletter, social_post.
topicobligatoirestringSujet du texte (1500 caractères maximum).
languagestringLangue : fr, en, es, de, it, pt, nl, ca, el, sv, no, da, fi, is, et, lv, lt, ja (par défaut en).
factsstringFaits à utiliser : prix, caractéristiques, ingrédients, horaires d’ouverture… (4000 caractères maximum). L’IA n’invente jamais de faits.
businessstringCourte description de l’entreprise.
tonestringPar exemple warm, premium, playful.
lengthstringshort, medium (par défaut) ou long.
keywordsstringMots-clés à intégrer naturellement.
curl https://flixy.studio/v1/content \
  -H "Authorization: Bearer $FLIXY_API_KEY" -H "Content-Type: application/json" \
  -d '{
    "type": "product_description",
    "language": "it",
    "topic": "Pizza Margherita cooked in a wood-fired oven",
    "facts": "San Marzano tomatoes, fior di latte mozzarella, fresh basil, 48-hour dough",
    "length": "short"
  }'

Le champ html ne contient que des balises de texte sûres (titres, paragraphes, listes, liens), jamais de scripts ni de styles.

Lire un document

POST/v1/extract

Lit un menu, un catalogue, une liste de prix, une carte de visite, un flyer ou une brochure et renvoie un contenu structuré prêt pour un site web. Seul ce qui est réellement écrit est renvoyé. Droit : extract:write.

ParamètreTypeDescription
filestringLe fichier encodé en base64 (JPEG, PNG, WebP, GIF ou PDF, 10 Mo maximum).
urlstringOu une adresse https publique du fichier.
kindstringauto (par défaut), menu, catalog, business_card, brochure, price_list, flyer.
{
  "object": "extract",
  "kind": "menu",
  "business": { "name": "Trattoria Sole", "phone": "…", "hours": "…" },
  "language": "es",
  "sections": [
    { "title": "Pizzas", "items": [ { "name": "Margherita", "description": "…", "price": "11.50" } ] }
  ],
  "colors": ["#b5121b"],
  "usage": { "price": 0.03, "currency": "EUR", "mode": "live" }
}
Les PDF numérisés sans texte ne peuvent pas être lus : envoyez plutôt une image de chaque page.

Créer une image

POST/v1/images

Crée une photo, une illustration ou un logo pour un site web. L’image est hébergée par Flixy et porte dans le fichier le marquage IPTC standard des médias générés par l’IA. Droit : images:write.

ParamètreTypeDescription
promptobligatoirestringDescription de l’image (4 à 800 caractères).
kindstringphoto (par défaut), illustration ou logo.
aspectstring16:9 (par défaut), 1:1, 4:3, 3:4, 9:16.
businessstringContexte de l’entreprise, pour adapter le style.
brandstringNom de la marque pour un logo.

Solde et compte

GET/v1/account

Renvoie votre solde, le montant réservé pour les travaux en cours, le montant disponible, vos dépenses du mois et la clé utilisée. Droit : account:read.

{
  "object": "account",
  "balance": 48.92,
  "available": 45.92,
  "reserved": 3.00,
  "currency": "EUR",
  "spent_this_month": 12.40,
  "key": { "name": "Production server", "mode": "live", "scopes": ["sites:write", "sites:read"] },
  "limits": { "requests_per_minute": 60, "concurrent_site_jobs": 3 }
}

Utilisation et tarifs

GET/v1/usage?from=2026-11-01&to=2026-11-30
GET/v1/pricing

/v1/usage renvoie vos appels et montants par opération sur une période. /v1/pricing renvoie les prix habituels et minimums actuels dans votre devise.

Chaque appel réussi coûte le coût réel du travail d’IA qu’il a nécessité multiplié par la marge de Flixy, avec un minimum par opération. Avant le démarrage d’un travail de site, un montant estimé est réservé sur votre solde ; le prix exact est prélevé à la fin et le reste est libéré. Les appels échoués et refusés ne sont jamais facturés.

Webhooks

Ajoutez une adresse https de votre serveur dans votre espace développeur et choisissez les événements : job.succeeded, job.failed, balance.low, topup.succeeded. Flixy envoie un POST avec un événement JSON ; répondez avec un statut 2xx dans les 10 secondes. Les envois échoués sont retentés ; une adresse qui échoue de manière répétée est mise en pause.

POST /your/webhook
Flixy-Signature: t=1762854395,v1=8f0c3b…

{
  "id": "evt_2b0a…",
  "object": "event",
  "type": "job.succeeded",
  "created_at": "2026-11-11T09:46:35Z",
  "data": { "id": "job_6902…", "type": "site", "status": "succeeded", "site_id": "691589621", "price": 0.72 }
}

Vérifier la signature

L’en-tête Flixy-Signature contient un horodatage t et v1, le HMAC-SHA256 de t + "." + raw body avec votre secret de webhook. Rejetez les messages de plus de 5 minutes.

import crypto from 'node:crypto';

export function verifyFlixy(rawBody, header, secret) {
  const p = Object.fromEntries(header.split(',').map((x) => x.split('=')));
  const sig = crypto.createHmac('sha256', secret).update(`${p.t}.${rawBody}`).digest('hex');
  return Math.abs(Date.now() / 1000 - Number(p.t)) < 300
    && crypto.timingSafeEqual(Buffer.from(sig), Buffer.from(p.v1));
}

Facturation

  • Rechargez votre solde à partir de 10 € dans votre espace développeur, par carte. La TVA est ajoutée selon votre pays ; une facture est envoyée pour chaque recharge.
  • Activez la recharge automatique pour recharger un montant choisi lorsque votre solde passe sous un seuil.
  • Fixez un plafond de dépenses mensuel pour le compte et un plafond journalier par clé.
  • Vous recevez un e-mail et un webhook balance.low lorsque votre solde devient faible.

Conditions complètes : Conditions et politique d’utilisation de la Flixy API.

Liste de contrôle de sécurité

  • Conservez les clés sur votre serveur, dans des variables d’environnement ou un gestionnaire de secrets — jamais dans une page web, une application mobile ou un dépôt de code.
  • Créez une clé par application et ne lui donnez que les droits dont elle a besoin.
  • Limitez les clés live aux adresses IP de vos serveurs et fixez un plafond journalier.
  • Vérifiez la signature de chaque webhook et son horodatage.
  • Utilisez une clé d’idempotence pour chaque POST.
  • Supprimez immédiatement une clé si elle a pu être exposée, puis créez-en une nouvelle.
  • Relisez le contenu généré par l’IA avant de le publier, et informez vos utilisateurs qu’un contenu est généré par l’IA lorsque la loi l’exige.

Politique d’utilisation

La Flixy API est conçue pour les sites web et leur contenu. Elle refuse, sans facturer, les questions générales sans rapport avec les sites web, le code destiné à d’autres logiciels, les tentatives de modifier les instructions de Flixy et les contenus contraires à notre politique (contenus illégaux, haineux, à caractère sexuel impliquant des mineurs, pages d’hameçonnage ou d’usurpation d’identité, spam, faux avis). Lisez l’intégralité des Conditions et politique d’utilisation de l’API.

Organisation reliée

POST/v1/sites/{id}/transfer

Reliez votre organisation Flixy Studio depuis la console (Organisation). Le propriétaire du compte Flixy Studio approuve la liaison en étant connecté à Flixy Studio, et chaque partie peut la supprimer à tout moment. Une fois la liaison établie :

  • l’API peut lister, lire, modifier et traduire les sites de l’organisation (sites:read, sites:write) ;
  • vous pouvez créer un site directement dans l’organisation avec "destination": "organization", ou déplacer un site créé par l’API avec POST /v1/sites/{id}/transfer (gratuit), pour le publier sur un domaine depuis Flixy Studio ;
  • tout le travail de l’API est facturé sur votre solde API : les crédits de l’organisation ne sont jamais utilisés.
curl "https://flixy.studio/v1/sites?owner=organization" \
  -H "Authorization: Bearer $FLIXY_API_KEY"

curl -X POST https://flixy.studio/v1/sites/691589621/transfer \
  -H "Authorization: Bearer $FLIXY_API_KEY"

Sans organisation reliée, ces appels renvoient 409 organization_not_linked.

Historique des versions

  • v1 — novembre 2026. Première version : sites, modifications, traductions, contenu, lecture de documents, images, travaux, webhooks, solde prépayé.

Les changements susceptibles de casser votre intégration sont annoncés par e-mail au moins 90 jours à l’avance.