The Flixy API, in 5 minutes
A simple JSON REST API: send a request with your key, get your watermark-free creation back.
Create a key
Studio → Business Suite → API → “Create a key”. It is shown only once: keep it secret, server-side.
Start a creation
POST generate.php with a format and a prompt. The response comes back immediately with an id.
Get the file
Poll status.php every 3 seconds. When status is “done”, download “url”.
Authentication
Base URL : https://flixy.design/api/v1/
Authorization: Bearer flx_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
The “X-Api-Key” header is also accepted. Limit: 60 requests per minute per key. Creations are paid in credits with your Business discount; a failed creation is refunded.
Examples
curl -X POST https://flixy.design/api/v1/generate.php \
-H "Authorization: Bearer $FLIXY_KEY" \
-H "Content-Type: application/json" \
-d '{"format":"reel_video","prompt":"A runner smiles at sunrise"}'const r = await fetch("https://flixy.design/api/v1/generate.php", {
method: "POST",
headers: { Authorization: `Bearer ${process.env.FLIXY_KEY}`, "Content-Type": "application/json" },
body: JSON.stringify({ format: "reel_video", prompt: "A runner smiles at sunrise" }),
});
const job = await r.json();
// Poll job.status_url every 3 s until status is "done", then download job.urlimport os, time, requests
H = {"Authorization": f"Bearer {os.environ['FLIXY_KEY']}"}
job = requests.post("https://flixy.design/api/v1/generate.php", headers=H,
json={"format": "reel_video", "prompt": "A runner smiles at sunrise"}).json()
while True:
s = requests.get(job["status_url"], headers=H).json()
if s["status"] in ("done", "failed"): break
time.sleep(3)
print(s.get("url"))$ch = curl_init("https://flixy.design/api/v1/generate.php");
curl_setopt_array($ch, [
CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ["Authorization: Bearer " . getenv("FLIXY_KEY"), "Content-Type: application/json"],
CURLOPT_POSTFIELDS => json_encode(["format" => "reel_video", "prompt" => "A runner smiles at sunrise"]),
]);
$job = json_decode(curl_exec($ch), true);
Endpoints
/api/v1/generate.phpStart a creation (image, edit or video)
{
"format": "native_square",
"prompt": "A smiling runner at sunrise on a city bridge",
"type": "image",
"params": { "image_size": "2K" },
"enhance": true
}{
"ok": true,
"id": 1842,
"status": "queued",
"type": "image",
"format": "native_square",
"credits_charged": 0.29,
"balance": 412.5,
"status_url": "https://flixy.design/api/v1/status.php?id=1842"
}/api/v1/status.php?id=1842Track a creation; "url" gives the final watermark-free file
{
"ok": true,
"id": 1842,
"type": "image",
"status": "done",
"url": "https://flixy.design/api/v1/file.php?id=1842&exp=…&sig=…",
"width": 2048,
"height": 2048
}/api/v1/copy.phpGenerate ad copy in several variants
{
"kind": "push",
"brief": "Meditation app, 7-day free trial, busy professionals",
"lang": "en",
"variants": 3,
"tone": "warm",
"brand": "Calmly"
}{
"ok": true,
"kind": "push",
"items": [
{ "title": "Breathe. Just 3 minutes.", "message": "Your 7-day free trial is ready.", "image_prompt": "…" }
],
"credits_charged": 0.06,
"balance": 412.44
}/api/v1/svg.phpCreate an animated SVG banner
{
"brief": "Winter sale -40% on sneakers",
"width": 300,
"height": 250,
"colors": "#FF80BF, #1E1A24",
"cta": "Shop now",
"lang": "en"
}{
"ok": true,
"width": 300,
"height": 250,
"svg": "<svg xmlns=…>…</svg>",
"credits_charged": 0.12
}/api/v1/balance.phpCredit balance and account discount
{
"ok": true,
"account": "Acme Inc.",
"balance": 412.44,
"discount_percent": 20,
"credit_usd": 1
}/api/v1/formats.phpList of ad formats and copy types
{ "ok": true, "formats": [ … ], "copy_kinds": [ … ] }generate.php fields
| Field | Description |
|---|---|
prompt * | Description of the creation (3 to 2,000 characters), in any language. |
format | Ad format (see the list below): sets framing, length and ad guidelines. |
type | image · edit · video |
params | aspect_ratio, image_size (1K, 2K, 4K), style, lighting · video : resolution (720p, 1080p), duration (4s–10s) |
image | Base64 photo (PNG, JPEG, WebP, 12 MB max): to edit (edit) or to animate (video). |
continue_from | Id of a finished creation to modify or extend. |
enhance | true: the Flixy assistant improves the prompt before creating. |
Ad formats
| format | Name | Type | Delivery size |
|---|---|---|---|
native_square | Square native ad | image | 1200×1200 |
native_wide | Landscape native ad | image | 1200×628 |
push_icon | Push icon | image | 192×192 |
push_image | Push image | image | 720×480 |
banner_mrec | Medium rectangle 300×250 | image | 300×250 |
banner_leader | Leaderboard 728×90 | image | 728×90 |
banner_sky | Skyscraper 160×600 | image | 160×600 |
social_feed | Facebook / Instagram ad | image | 1080×1350 |
social_story | Sponsored story | image | 1080×1920 |
reel_video | Reel / TikTok ad | video | 1080×1920 · 8s |
ctv_video | CTV spot | video | 1920×1080 · 10s |
social_square | LinkedIn / B2B ad | image | 1200×1200 |
pin_vertical | Pinterest pin | image | 1000×1500 |
instream_video | YouTube pre-roll / in-stream | video | 1920×1080 · 6s |
dooh_portrait | Bus shelter / street furniture screen | image | 1080×1920 |
dooh_landscape | Digital billboard | image | 1920×1080 |
billboard_4x3 | 4×3 m billboard poster | image | 4×3 m |
dooh_video | DOOH video (stations, malls) | video | 1080×1920 · 8s |
film_wide | Film scene 16:9 | video | 1920×1080 · 8s |
film_vertical | Vertical film scene 9:16 | video | 1080×1920 · 8s |
packshot | Square product photo | image | 2048×2048 |
packshot_portrait | Portrait product photo | image | 1600×2000 |
poster_portrait | Portrait poster | image | A3 / A4 |
poster_landscape | Landscape poster | image | A3 / A4 |
advertorial | Advertorial hero image | image | 1600×900 |
Copy types (“kind” field of copy.php) : native push facebook tiktok banner ctv advertorial titles email
Errors
{ "ok": false, "error": { "code": "insufficient_credits", "message": "Not enough credits for this creation." } }
401 missing_key · invalid_key | Missing, invalid or deleted key. |
402 insufficient_credits | Not enough balance: top up your credits. |
403 not_business | The account has no Business access. |
422 refused | Request against the usage rules. |
429 rate_limited | More than 60 requests in one minute. |
A technical question? Business support answers 24/7 : business@flixy.design.
Your next post starts here
Create the image, edit or video for your next post for free, in the right format for every network.