FLUX.1 · FLUX.1 Pro · FLUX 2 Pro

FLUX dev API built for
production workloads

Every FLUX variant behind one REST endpoint. From $0.0047 an image, commercial rights included.

Commercial usage rights on every plan · 100% refund within 24 hours · Cancel anytime

$0.0047per image, open-source models
15parallel generations, top plan
1endpoint for every FLUX variant
Includedcommercial usage rights

Your first FLUX call

One POST request. Pass model_id to pick a FLUX variant — the request and response shape stay identical across all of them.

# FLUX.1 [schnell] — 4-step generation
curl -X POST "$API_BASE/api/v6/images/text2img" \
  -H "Content-Type: application/json" \
  -d '{
    "key": "YOUR_API_KEY",
    "model_id": "flux-schnell",
    "prompt": "an isometric server rack, soft studio lighting, 3d render",
    "negative_prompt": "blurry, low quality, watermark",
    "width": 1024,
    "height": 1024,
    "samples": 1,
    "num_inference_steps": 4,
    "guidance_scale": 3.5,
    "safety_checker": "yes"
  }'
import requests

URL = API_BASE + "/api/v6/images/text2img"

payload = {
    "key": "YOUR_API_KEY",
    "model_id": "flux-schnell",
    "prompt": "an isometric server rack, soft studio lighting, 3d render",
    "width": 1024,
    "height": 1024,
    "samples": 1,
    "num_inference_steps": 4,
    "safety_checker": "yes",
}

res = requests.post(URL, json=payload, timeout=120).json()

# status is "success" when synchronous, "processing" when queued
if res["status"] == "processing":
    print("poll:", res["fetch_result"], "eta:", res["eta"])
else:
    print(res["output"])  # -> ["https://.../generated.png"]
const res = await fetch(`${API_BASE}/api/v6/images/text2img`, {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    key: process.env.FLUX3_API_KEY,
    model_id: "flux-schnell",
    prompt: "an isometric server rack, soft studio lighting, 3d render",
    width: 1024,
    height: 1024,
    samples: 1,
    num_inference_steps: 4,
    safety_checker: "yes",
  }),
});

const data = await res.json();

// queued jobs return a fetch_result URL to poll
if (data.status === "processing") {
  await pollUntilReady(data.fetch_result);
} else {
  console.log(data.output);
}

API_BASE is issued with your API key.

Which FLUX variant to use

All four share the same request schema. Swap model_id to trade speed against fidelity — no code changes beyond the string.

Variantmodel_idSteps Best forLicense
FLUX.1 [schnell]flux-schnell1–4 High-volume, latency-sensitive generation. Thumbnails, previews, drafts. Apache 2.0
FLUX.1 [dev]flux-dev20–50 Default choice. Strong prompt adherence and text rendering at moderate cost. Non-commercial base
FLUX.1 [pro]flux-pro25–50 Client-facing output where fidelity matters more than per-image cost. Commercial
FLUX 2 Proflux-2-pro25–50 Latest generation. Best typography, composition, and photoreal detail. Commercial

Text to image

/v6/images/text2img — prompt in, image URL out. Control resolution, step count, guidance scale, seed, and sampler.

All variants

Image to image

/v6/images/img2img — pass an init_image plus a strength value to steer how far generation drifts from the source.

dev · pro

Inpainting

/v6/images/inpaint — supply a mask and regenerate only the masked region, preserving everything outside it.

dev · pro

What you skip by not self-hosting

FLUX.1 [dev] needs roughly 24 GB of VRAM to run comfortably. Here's what hosting it yourself actually costs you in engineering time.

No GPU capacity planning

An A100 or H100 sitting idle between requests still bills by the hour. Concurrency is a plan setting here, from 5 parallel requests on Basic up to 15 on the unlimited tier.

No cold starts

Loading FLUX weights into VRAM takes tens of seconds on a cold container. Models stay resident, so first-request latency matches steady-state latency.

No weight management

New FLUX releases, quantizations, and LoRA adapters land behind the same model_id field. No image rebuilds, no multi-gigabyte pulls.

Commercial rights sorted

FLUX.1 [dev] carries a non-commercial base license. Generations through the hosted API include commercial usage rights on every plan.

Pricing

Subscription for predictable volume, pay-as-you-go from wallet for burst. Every plan includes a 100% refund policy.

Basic

$21/month
  • 3,250 API calls per billing period
  • 5 concurrent API requests
  • Access to all models
  • Discord and email support
Choose Basic

Open Source Unlimited

$149/month
  • Unlimited open-source generations
  • 15 parallel generations
  • Priority GPU clusters
  • Team members, 24/7 support
Choose Unlimited
Pay as you goRate
Open-source image models (FLUX.1 schnell / dev, SDXL)from $0.0047 per image
FLUX 2 Pro$0.054 per image
Qwen Image 2.0 Pro$0.075 per image

Frequently asked

Can I use generated images commercially?

Yes. Commercial usage rights for generated content are included on all plans. This matters most for FLUX.1 [dev], whose base weights ship under a non-commercial license when self-hosted.

Is the API synchronous or asynchronous?

Both. Fast requests return status: "success" with output URLs inline. When a job is queued, you get status: "processing" plus a fetch_result URL and an eta in seconds to poll against.

How many requests can I run in parallel?

Concurrency is set by plan: 5 on Basic, 10 on Standard, and 15 parallel generations on Open Source Unlimited. Requests beyond your limit queue rather than fail.

Do you support LoRA adapters and ControlNet?

Yes. LoRAs are passed per-request alongside model_id, and ControlNet conditioning is available on the image endpoints. See the API reference for the parameter names.

What happens if I cancel?

Plans are month to month and cancellable at any time, with a 100% refund policy.

Ship FLUX today

Pick a plan, grab your API key, and make your first call in under five minutes.

View pricing & get API key