Everything you need to add Flixy’s AI to your product. Base URL: https://flixy.studio/v1
REST · JSONBearer keysAsynchronous jobsSigned webhooks18 languages
Introduction
The Flixy API lets your software use the features of Flixy Studio: create complete websites from a description, edit and translate them, write website content, read menus, catalogues and PDFs, and create images and logos. You pay only for successful calls, from a prepaid balance.
Long tasks (creating, editing or translating a website) run as jobs: the API answers immediately and you follow the job or receive a webhook. Content, document reading and images answer directly, usually in a few seconds.
Start in your developer space: a free test key is created as soon as you open it.
Developer console
Keys, balance, top-ups, webhooks and call logs are managed in the developer console at dev.flixy.studio.
A separate developer account. Like other AI platforms, your developer account is distinct from your Flixy Studio account: it has its own sign-up, sign-in and session. Signing out of one never signs you out of the other. You can use the same email address for both.
Linked organization. If you also use Flixy Studio, you can link your organization to your developer account, so the API can work on its websites. See Linked organization.
Account security. Two-step verification, active sessions and data export are available in the console, under Account.
Authentication
Send your key in the Authorization header of every request. Keys start with fx_live_ or fx_test_.
Your key is secret. Call the API only from your server: requests sent from a web browser are refused, so that a key never ends up in a web page or a mobile app.
Each key has rights (scopes). A call without the right scope returns 403 missing_scope.
Parameter
Type
Description
sites:read
scope
Read websites and their HTML.
sites:write
scope
Create, edit and translate websites.
content:write
scope
Write website content.
extract:write
scope
Read images and PDF documents.
images:write
scope
Create images and logos.
account:read
scope
Read the balance and usage.
Test and live keys
Test keys (fx_test_…) are free. They return realistic sample responses without using AI, so you can build and test your whole integration. Website jobs complete after a few seconds with a sample website.
Live keys (fx_live_…) return real results and are charged on your balance.
Every response contains the header Flixy-Mode: test or Flixy-Mode: live.
Requests and responses
Send JSON bodies with Content-Type: application/json (16 MB maximum). Responses are JSON. Dates use ISO 8601 in UTC. Every response has an X-Request-Id header: give it to our support if you need help with a call.
Set Accept-Language to receive error messages in your language (fr, en, es, de, it, pt, nl, ca, el, sv, no, da, fi, is, et, lv, lt, ja; English by default).
Errors
Errors use standard HTTP status codes and always have the same shape:
{
"error": {
"type": "billing_error",
"code": "insufficient_balance",
"message": "Insufficient balance: top up your developer account…",
"request_id": "req_5c1f0a9e2b7d4c11"
}
}
Status
Type
Meaning
400
invalid_request_error
Invalid JSON or header.
401
authentication_error
Missing, invalid or deleted key.
402
billing_error
Insufficient balance, monthly cap or daily key cap reached.
403
permission_error
Missing scope, IP address not allowed, account suspended, or call from a browser.
404
not_found_error
Unknown website, job or endpoint.
409
conflict_error
A job is already running on this website.
422
invalid_request_error
Invalid parameter, or request refused by the usage policy (off_topic, content_policy). Not charged.
429
rate_limit_error
Too many requests or simultaneous jobs. Wait for the Retry-After delay.
5xx
api_error
Temporary problem on our side. Retry with the same idempotency key. Not charged.
Rate limits
60 requests per minute per key (header X-RateLimit-Limit).
3 website jobs at the same time per account. Content, document and image calls are not limited by this.
When a limit is reached, the API answers 429 with a Retry-After header in seconds.
Need more? Write to contact@flixy.studio with your use case.
Idempotency
Network errors happen. Add an Idempotency-Key header (8 to 100 characters, for example your own order ID) to any POST: if you send the same request again within 24 hours, the API returns the first response — with the header Idempotent-Replayed: true — and never runs or charges the work twice.
Jobs
Creating, editing and translating a website take from about 30 seconds to 3 minutes. These endpoints answer 202 Accepted with a job. Follow it every 5 seconds or wait for the job.succeeded / job.failedwebhook.
Known facts: name, slogan, phone, email, address, city, hours. Never invented by the AI.
destination
string
developer (default): the website belongs to your developer account. organization: the website is created directly in your linked Flixy Studio organization.
Returns the website, its status and its pages. Add include=html to receive the complete HTML of every page (images are hosted by Flixy). Scope: sites:read.
Add owner=developer or owner=organization to the list to filter by owner. Websites of a linked organization also return dashboard_url and editor_url, to open them in Flixy Studio.
Edit a website
POST/v1/sites/{id}/edits
Applies a change described in plain language, like in the Flixy editor. Every change creates a new version. Scope: sites:write.
Parameter
Type
Description
instructionrequired
string
The change to make (4 to 3000 characters), e.g. “Add a pricing page with three offers” or “Use a dark green theme”.
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"}'
Translate a website
POST/v1/sites/{id}/translations
Translates every page of the website — navigation, buttons, forms, image descriptions, title and description for search engines — while keeping the design, images, links, prices and contact details. Scope: sites:write.
Parameter
Type
Description
languagerequired
string
Target language: fr, en, es, de, it, pt, nl, ca, el, sv, no, da, fi, is, et, lv, lt, ja.
Write web content
POST/v1/content
Writes content meant to be published on a website or sent by a business to its customers. Answers directly. Scope: content:write.
The html field only contains safe text tags (headings, paragraphs, lists, links), never scripts or styles.
Read a document
POST/v1/extract
Reads a menu, a catalogue, a price list, a business card, a flyer or a brochure and returns structured content ready for a website. Only what is really written is returned. Scope: extract:write.
Parameter
Type
Description
file
string
The file encoded in base64 (JPEG, PNG, WebP, GIF or PDF, 10 MB maximum).
url
string
Or a public https address of the file.
kind
string
auto (default), menu, catalog, business_card, brochure, price_list, flyer.
Scanned PDFs without text cannot be read: send an image of each page instead.
Create an image
POST/v1/images
Creates a photo, an illustration or a logo for a website. The image is hosted by Flixy and carries the standard IPTC marking for AI-generated media inside the file. Scope: images:write.
Parameter
Type
Description
promptrequired
string
Description of the image (4 to 800 characters).
kind
string
photo (default), illustration or logo.
aspect
string
16:9 (default), 1:1, 4:3, 3:4, 9:16.
business
string
Business context, to match the style.
brand
string
Brand name for a logo.
Balance and account
GET/v1/account
Returns your balance, the amount reserved for running jobs, the available amount, your monthly spending and the key in use. Scope: account:read.
/v1/usage returns your calls and amounts per operation over a period. /v1/pricing returns the current typical and minimum prices in your currency.
Each successful call costs the real cost of the AI work it required multiplied by Flixy’s margin, with a minimum per operation. Before a website job starts, an estimated amount is reserved on your balance; the exact price is charged at the end and the rest is released. Failed and refused calls are never charged.
Webhooks
Add an https address of your server in your developer space and choose the events: job.succeeded, job.failed, balance.low, topup.succeeded. Flixy sends a POST with a JSON event; answer with a 2xx status within 10 seconds. Failed deliveries are retried; an address that keeps failing is paused.
The Flixy-Signature header contains a timestamp t and v1, the HMAC-SHA256 of t + "." + raw body with your webhook secret. Reject messages older than 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));
}
import hmac, hashlib, time
def verify_flixy(raw_body: bytes, header: str, secret: str) -> bool:
p = dict(x.split('=', 1) for x in header.split(','))
sig = hmac.new(secret.encode(), f"{p['t']}.".encode() + raw_body, hashlib.sha256).hexdigest()
return abs(time.time() - int(p['t'])) < 300 and hmac.compare_digest(sig, p['v1'])
Keep keys on your server, in environment variables or a secrets manager — never in a web page, a mobile app or a code repository.
Create one key per application and give it only the scopes it needs.
Restrict live keys to your servers’ IP addresses and set a daily cap.
Verify every webhook signature and its timestamp.
Use an idempotency key for every POST.
Delete a key immediately if it may have been exposed, then create a new one.
Review AI-generated content before publishing it, and tell your users when content is AI-generated where the law requires it.
Usage policy
The Flixy API is made for websites and their content. It refuses, without charging, general questions unrelated to websites, code for other software, attempts to change Flixy’s instructions and content that breaks our policy (illegal, hateful, sexual content involving minors, phishing or impersonation pages, spam, fake reviews). Read the full API Terms & Usage Policy.
Linked organization
POST/v1/sites/{id}/transfer
Link your Flixy Studio organization from the console (Organization). The owner of the Flixy Studio account approves the link while signed in to Flixy Studio, and either side can remove it at any time. Once linked:
the API can list, read, edit and translate the organization’s websites (sites:read, sites:write);
you can create a website directly in the organization with "destination": "organization", or move a website created by the API with POST /v1/sites/{id}/transfer (free), to publish it on a domain from Flixy Studio;
all API work is charged to your API balance: the organization’s credits are never used.
Without a linked organization, these calls return 409 organization_not_linked.
Changelog
v1 — November 2026. First version: websites, edits, translations, content, document reading, images, jobs, webhooks, prepaid balance.
Changes that could break your integration are announced at least 90 days in advance by email.
We respect your privacy. Flixy Studio only uses cookies that are strictly necessary (sign-in, security, language). Our audience statistics are anonymous and use no cookie. Cookie Policy