Spring til indhold
Flixy API · v1

API-dokumentation

Alt, hvad du har brug for til at tilføje Flixys AI til dit produkt. Basis-URL: https://flixy.studio/v1

REST · JSONBearer-nøglerAsynkrone jobsSignerede webhooks18 sprog

Introduktion

Med Flixy API kan din software bruge funktionerne i Flixy Studio: oprette komplette websites ud fra en beskrivelse, redigere og oversætte dem, skrive websiteindhold, læse menukort, kataloger og PDF’er samt oprette billeder og logoer. Du betaler kun for vellykkede kald, fra en forudbetalt saldo.

Lange opgaver (oprettelse, redigering eller oversættelse af et website) kører som jobs: API’et svarer straks, og du følger jobbet eller modtager et webhook. Indhold, læsning af dokumenter og billeder svarer direkte, normalt på få sekunder.

Start i dit udviklerområde: en gratis testnøgle oprettes, så snart du åbner det.

Udviklerkonsol

Nøgler, saldo, optankninger, webhooks og kaldslogs administreres i udviklerkonsollen på dev.flixy.studio.

  • En separat udviklerkonto. Ligesom på andre AI-platforme er din udviklerkonto adskilt fra din Flixy Studio-konto: den har egen tilmelding, login og session. Når du logger ud af den ene, bliver du aldrig logget ud af den anden. Du kan bruge den samme e-mailadresse til begge.
  • Tilknyttet organisation. Hvis du også bruger Flixy Studio, kan du tilknytte din organisation til din udviklerkonto, så API’et kan arbejde med dens websites. Se Tilknyttet organisation.
  • Kontosikkerhed. Totrinsbekræftelse, aktive sessioner og dataeksport findes i konsollen under Konto.

Godkendelse

Send din nøgle i headeren Authorization i hver forespørgsel. Nøgler begynder med fx_live_ eller fx_test_.

Authorization: Bearer fx_live_8sJ2…
Din nøgle er hemmelig. Kald kun API’et fra din server: forespørgsler sendt fra en webbrowser afvises, så en nøgle aldrig ender på en webside eller i en mobilapp.

Hver nøgle har rettigheder (scopes). Et kald uden den rette rettighed returnerer 403 missing_scope.

ParameterTypeBeskrivelse
sites:readscopeLæs websites og deres HTML.
sites:writescopeOpret, rediger og oversæt websites.
content:writescopeSkriv websiteindhold.
extract:writescopeLæs billeder og PDF-dokumenter.
images:writescopeOpret billeder og logoer.
account:readscopeLæs saldo og forbrug.

Test- og live-nøgler

  • Testnøgler (fx_test_…) er gratis. De returnerer realistiske eksempelsvar uden brug af AI, så du kan bygge og teste hele din integration. Website-jobs afsluttes efter få sekunder med et eksempelwebsite.
  • Live-nøgler (fx_live_…) returnerer rigtige resultater og trækkes fra din saldo.

Hvert svar indeholder headeren Flixy-Mode: test eller Flixy-Mode: live.

Forespørgsler og svar

Send JSON-bodies med Content-Type: application/json (højst 16 MB). Svar er JSON. Datoer bruger ISO 8601 i UTC. Hvert svar har en X-Request-Id-header: giv den til vores support, hvis du har brug for hjælp med et kald.

Angiv Accept-Language for at modtage fejlmeddelelser på dit sprog (fr, en, es, de, it, pt, nl, ca, el, sv, no, da, fi, is, et, lv, lt, ja; engelsk som standard).

Fejl

Fejl bruger standard-HTTP-statuskoder og har altid samme form:

{
  "error": {
    "type": "billing_error",
    "code": "insufficient_balance",
    "message": "Insufficient balance: top up your developer account…",
    "request_id": "req_5c1f0a9e2b7d4c11"
  }
}
StatusTypeBetydning
400invalid_request_errorUgyldig JSON eller header.
401authentication_errorManglende, ugyldig eller slettet nøgle.
402billing_errorUtilstrækkelig saldo, månedligt loft eller nøglens daglige loft nået.
403permission_errorManglende rettighed, IP-adresse ikke tilladt, konto suspenderet eller kald fra en browser.
404not_found_errorUkendt website, job eller endpoint.
409conflict_errorDer kører allerede et job på dette website.
422invalid_request_errorUgyldig parameter, eller forespørgsel afvist af brugspolitikken (off_topic, content_policy). Opkræves ikke.
429rate_limit_errorFor mange forespørgsler eller samtidige jobs. Vent den tid, der er angivet i Retry-After.
5xxapi_errorMidlertidigt problem hos os. Prøv igen med den samme idempotensnøgle. Opkræves ikke.

Hastighedsgrænser

  • 60 forespørgsler pr. minut pr. nøgle (headeren X-RateLimit-Limit).
  • 3 website-jobs ad gangen pr. konto. Kald til indhold, dokumenter og billeder er ikke omfattet af denne grænse.
  • Når en grænse er nået, svarer API’et 429 med en Retry-After-header i sekunder.

Brug for mere? Skriv til contact@flixy.studio med din brugssituation.

Idempotens

Netværksfejl sker. Tilføj en Idempotency-Key-header (8 til 100 tegn, for eksempel dit eget ordre-ID) til enhver POST: Hvis du sender den samme forespørgsel igen inden for 24 timer, returnerer API’et det første svar — med headeren Idempotent-Replayed: true — og udfører eller opkræver aldrig arbejdet to gange.

Jobs

Oprettelse, redigering og oversættelse af et website tager fra ca. 30 sekunder til 3 minutter. Disse endpoints svarer 202 Accepted med et job. Følg det hvert 5. sekund, eller vent på hændelsen job.succeeded / job.failed via 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 er queued, running, succeeded eller failed. Et mislykket job opkræves aldrig, og dets error forklarer hvorfor.

Opret et website

POST/v1/sites

Opretter et komplet website ud fra en beskrivelse. Rettighed: sites:write.

ParameterTypeBeskrivelse
promptpåkrævetstringBeskrivelse af virksomheden og websitet (12 til 4000 tegn). Jo mere præcis, jo bedre.
languagestringWebsitets sprog: fr, en, es, de, it, pt, nl, ca, el, sv, no, da, fi, is, et, lv, lt, ja.
structurestringonepage eller multipage. Registreres som standard ud fra prompten.
qualitystringfast, standard (standard) eller complete.
featuresstring[]Sektioner, der skal med: contact_form, testimonials, faq, map, whatsapp, shop, booking, gallery, newsletter, blog, pricing.
businessobjectKendte fakta: name, slogan, phone, email, address, city, hours. Opfindes aldrig af AI’en.
destinationstringdeveloper (standard): websitet tilhører din udviklerkonto. organization: websitet oprettes direkte i din tilknyttede Flixy Studio-organisation.
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" }
  }'

Hent et website

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

Returnerer websitet, dets status og dets sider. Tilføj include=html for at modtage den komplette HTML for hver side (billeder hostes af Flixy). Rettighed: 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>…" }
}

Tilføj owner=developer eller owner=organization til listen for at filtrere efter ejer. Websites i en tilknyttet organisation returnerer også dashboard_url og editor_url, så du kan åbne dem i Flixy Studio.

Rediger et website

POST/v1/sites/{id}/edits

Udfører en ændring beskrevet i almindeligt sprog, som i Flixy-editoren. Hver ændring opretter en ny version. Rettighed: sites:write.

ParameterTypeBeskrivelse
instructionpåkrævetstringÆndringen, der skal foretages (4 til 3000 tegn), f.eks. »Tilføj en prisside med tre tilbud« eller »Brug et mørkegrønt tema«.
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"}'

Oversæt et website

POST/v1/sites/{id}/translations

Oversætter hver side af websitet — navigation, knapper, formularer, billedbeskrivelser, titel og beskrivelse til søgemaskiner — og bevarer design, billeder, links, priser og kontaktoplysninger. Rettighed: sites:write.

ParameterTypeBeskrivelse
languagepåkrævetstringMålsprog: fr, en, es, de, it, pt, nl, ca, el, sv, no, da, fi, is, et, lv, lt, ja.

Skriv webindhold

POST/v1/content

Skriver indhold, der skal udgives på et website eller sendes af en virksomhed til dens kunder. Svarer direkte. Rettighed: content:write.

ParameterTypeBeskrivelse
typepåkrævetstringpage_text, blog_article, product_description, service_description, about_us, seo_meta, faq, review_reply, newsletter, social_post.
topicpåkrævetstringTekstens emne (højst 1500 tegn).
languagestringSprog: fr, en, es, de, it, pt, nl, ca, el, sv, no, da, fi, is, et, lv, lt, ja (standard en).
factsstringFakta, der skal bruges: priser, egenskaber, ingredienser, åbningstider… (højst 4000 tegn). AI’en opfinder aldrig fakta.
businessstringKort beskrivelse af virksomheden.
tonestringFor eksempel warm, premium, playful.
lengthstringshort, medium (standard) eller long.
keywordsstringSøgeord, der skal indgå naturligt.
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"
  }'

Feltet html indeholder kun sikre teksttags (overskrifter, afsnit, lister, links), aldrig scripts eller styles.

Læs et dokument

POST/v1/extract

Læser et menukort, et katalog, en prisliste, et visitkort, en flyer eller en brochure og returnerer struktureret indhold klar til et website. Kun det, der faktisk står skrevet, returneres. Rettighed: extract:write.

ParameterTypeBeskrivelse
filestringFilen kodet i base64 (JPEG, PNG, WebP, GIF eller PDF, højst 10 MB).
urlstringEller en offentlig https-adresse til filen.
kindstringauto (standard), 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" }
}
Scannede PDF’er uden tekst kan ikke læses: send i stedet et billede af hver side.

Opret et billede

POST/v1/images

Opretter et foto, en illustration eller et logo til et website. Billedet hostes af Flixy og bærer i filen den standardiserede IPTC-mærkning for AI-genererede medier. Rettighed: images:write.

ParameterTypeBeskrivelse
promptpåkrævetstringBeskrivelse af billedet (4 til 800 tegn).
kindstringphoto (standard), illustration eller logo.
aspectstring16:9 (standard), 1:1, 4:3, 3:4, 9:16.
businessstringVirksomhedens kontekst, så stilen passer.
brandstringBrandnavn til et logo.

Saldo og konto

GET/v1/account

Returnerer din saldo, beløbet reserveret til igangværende jobs, det disponible beløb, dit månedlige forbrug og den nøgle, der bruges. Rettighed: 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 }
}

Forbrug og priser

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

/v1/usage returnerer dine kald og beløb pr. handling over en periode. /v1/pricing returnerer de aktuelle typiske priser og minimumspriser i din valuta.

Hvert vellykket kald koster de faktiske omkostninger ved det AI-arbejde, det krævede, ganget med Flixys margin, med et minimum pr. handling. Før et website-job starter, reserveres et anslået beløb på din saldo; den nøjagtige pris trækkes til sidst, og resten frigives. Mislykkede og afviste kald opkræves aldrig.

Webhooks

Tilføj en https-adresse på din server i dit udviklerområde, og vælg hændelserne: job.succeeded, job.failed, balance.low, topup.succeeded. Flixy sender en POST med en JSON-hændelse; svar med en 2xx-status inden for 10 sekunder. Mislykkede leveringer forsøges igen; en adresse, der bliver ved med at fejle, sættes på 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 }
}

Bekræft signaturen

Headeren Flixy-Signature indeholder et tidsstempel t og v1, HMAC-SHA256 af t + "." + raw body med din webhook-hemmelighed. Afvis meddelelser, der er ældre end 5 minutter.

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));
}

Fakturering

  • Optank din saldo fra 10 € i dit udviklerområde med kort. Moms tillægges efter dit land; der sendes en faktura for hver optankning.
  • Slå automatisk optankning til for at optanke et valgt beløb, når din saldo falder under en grænse.
  • Sæt et månedligt forbrugsloft for kontoen og et dagligt loft pr. nøgle.
  • Du modtager en e-mail og et balance.low-webhook, når din saldo er ved at være lav.

Fulde vilkår: Vilkår og brugspolitik for Flixy API.

Sikkerhedstjekliste

  • Opbevar nøgler på din server, i miljøvariabler eller en secrets manager — aldrig på en webside, i en mobilapp eller i et kodelager.
  • Opret én nøgle pr. applikation, og giv den kun de rettigheder, den har brug for.
  • Begræns live-nøgler til dine serveres IP-adresser, og sæt et dagligt loft.
  • Bekræft hvert webhooks signatur og tidsstempel.
  • Brug en idempotensnøgle til hver POST.
  • Slet en nøgle med det samme, hvis den kan være blevet afsløret, og opret derefter en ny.
  • Gennemgå AI-genereret indhold, før du udgiver det, og informér dine brugere, når indhold er AI-genereret, hvor loven kræver det.

Brugspolitik

Flixy API er lavet til websites og deres indhold. Det afviser, uden betaling, generelle spørgsmål uden relation til websites, kode til anden software, forsøg på at ændre Flixys instruktioner og indhold, der bryder vores politik (ulovligt, hadefuldt, seksuelt indhold med mindreårige, phishing- eller identitetsefterligningssider, spam, falske anmeldelser). Læs de fulde API-vilkår og brugspolitik.

Tilknyttet organisation

POST/v1/sites/{id}/transfer

Tilknyt din Flixy Studio-organisation fra konsollen (Organisation). Ejeren af Flixy Studio-kontoen godkender tilknytningen, mens vedkommende er logget ind i Flixy Studio, og begge parter kan fjerne den når som helst. Når den er tilknyttet:

  • API’et kan liste, læse, redigere og oversætte organisationens websites (sites:read, sites:write);
  • du kan oprette et website direkte i organisationen med "destination": "organization" eller flytte et website oprettet af API’et med POST /v1/sites/{id}/transfer (gratis) for at udgive det på et domæne fra Flixy Studio;
  • alt API-arbejde trækkes fra din API-saldo: organisationens kreditter bruges aldrig.
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"

Uden en tilknyttet organisation returnerer disse kald 409 organization_not_linked.

Ændringslog

  • v1 — november 2026. Første version: websites, ændringer, oversættelser, indhold, læsning af dokumenter, billeder, jobs, webhooks, forudbetalt saldo.

Ændringer, der kan ødelægge din integration, varsles mindst 90 dage i forvejen pr. e-mail.