Media generation
fal API for AI agents: what an image, a clip and a voice-over cost per output
How an agent runs fal's hosted image, video and speech models, what the queue returns, and the per-megapixel and per-second arithmetic behind each call.
When an agent needs a picture, a short clip or a voice-over, fal is one API in front of hundreds of
generation models. Each model is an endpoint ID such as fal-ai/flux/schnell: you send JSON, you get
back URLs to the files, and you pay per output rather than per month. The catch is that "per output"
means something different for every model. By the end of this guide you will know why 100 FLUX
schnell images cost $0.30 while 100 Nano Banana images cost $3.98, and why one default-settings Kling
clip costs as much as 233 schnell images.
Why this matters for agents
A person generating images clicks, looks, and clicks again. An agent generates in loops, and three things about fal change the cost of those loops.
First, the unit of billing is not the request. Image models bill per image or per megapixel, video
models per second of output, speech per 1,000 characters, and a few models fall back to GPU seconds
(Model API pricing). An agent that picks a bigger
image_size or flips generate_audio has changed the price without changing the number of calls.
Second, concurrency is tight at the start. Every new account begins with a limit of 2 concurrent
requests, and self-serve limits scale up to 40 based on paid invoices from the last four weeks
(rate limits). Over the limit you get a 429 with
X-Fal-needs-retry: 1. The queue requeues submit and subscribe calls with no maximum retry
count, so a 50-image batch at concurrency 2 does not fail, it just takes 25 rounds.
Third, failures are cheap but not free of consequence. fal does not charge for HTTP 500 and above or for time in the queue (pricing). But a request that succeeds with an image your safety checker flagged is still a successful output, and so is a video from a prompt you typed wrong. Validate the prompt before the call, not after.
Before spending, an agent should check the model page's unit price, the endpoint's default values (they are often the expensive ones), and whether the job needs the queue.
What fal returns
Every model has its own schema, but the shapes repeat. FLUX.1 [schnell] returns:
| Field | What it is |
|---|---|
images[] |
Each with url, width, height and content_type |
seed |
The seed used, so you can reproduce the result |
has_nsfw_concepts[] |
One boolean per image from the safety checker (enable_safety_checker defaults to true) |
prompt |
The prompt that was run |
timings.inference |
Seconds spent on inference |
Video models such as Kling Video v2.6 Pro
return a single video object with url, content_type, file_name and file_size. Speech
models such as MiniMax Speech 2.8 [HD] return
audio.url and nothing else: no duration, no character count. If you need either, measure the
file yourself.
Three surprises. The URLs point at hosted files on fal.media, so download anything you intend to
keep. Nano Banana returns a description field that is
empty in fal's own example. And when a job runs through the queue, the response you poll for has a
status of IN_QUEUE (with queue_position), IN_PROGRESS or COMPLETED; a failed request still
reaches COMPLETED and carries error and error_type, so check for error before reading
images (Queue API).
The economics
fal prices "per output, per model" and draws from prepaid credits (fal pricing). List prices as of October 2026, from each model's page:
Source: fal pricing · Per-megapixel models at exactly 1 MP; Nano Banana and Ideogram bill per image. Model pages in References.
View data
| Item | Value |
|---|---|
| FLUX.1 [schnell] | $0.3 |
| FLUX.1 [dev] | $2.50 |
| Ideogram V3 Turbo | $3 |
| Nano Banana | $3.98 |
| FLUX1.1 [pro] | $4 |
| Ideogram V3 Quality | $9 |
The megapixel multiplier. FLUX.1 [schnell] costs "$0.003 per megapixel" and "images are billed by rounding up to the nearest megapixel". FLUX.1 [dev] is $0.025 per megapixel and FLUX1.1 [pro] is $0.04, with the same rounding. So:
- Default
image_sizeoflandscape_4_3is 1024 × 768 = 0.79 MP, which rounds up to 1 MP: $0.003 per schnell image, $0.30 per 100. - A 1536 × 1536 image is 2.36 MP, which rounds up to 3 MP: $0.009 per schnell image, three times the price for 2.25 times the pixels.
num_images: 4(the maximum on schnell) is four outputs, four charges.
Per-image models. Nano Banana is a flat "$0.0398"
per image. Ideogram V3 depends on rendering_speed:
"$0.03 with TURBO, $0.06 with BALANCED, and $0.09 with QUALITY". Same prompt, 3x price.
The per-second multiplier. Video is where cost compounds, because two parameters multiply:
Source: Kling Video v2.6 Pro text to video · Hailuo 02 Pro from its own model page; see References.
View data
| Item | Value |
|---|---|
| Kling 2.6 Pro, 5 s, no audio | $0.35 |
| Hailuo 02 Pro, 6 s | $0.48 |
| Kling 2.6 Pro, 5 s, audio on | $0.7 |
Kling 2.6 Pro charges "$0.07
(audio off) or $0.14 (audio on)" for every second. In the endpoint's schema, duration defaults to
"5" and generate_audio defaults to true, so a call with just a prompt costs 5 × $0.14 =
$0.70, exactly fal's own example. Set duration: "10" and it is $1.40. Turn audio off and the same
10 seconds cost $0.70. Hailuo 02 Pro
is "$0.08/sec", and its shortest clip is 6 seconds, so "a single 6 second video will cost
$0.48/video".
Speech. MiniMax Speech 2.8 [HD] is "$0.1 per 1000 character". A 60-second voice-over is roughly 900 characters, so about $0.09; a 20,000-word article (about 120,000 characters) is $12.
Putting it together for a product-listing agent that makes 1 hero image, 3 variations and one 5-second clip per product: 4 schnell images at 1 MP = $0.012, plus one Kling clip with audio off = $0.35, so $0.36 per product and $36 per 100 products. Leave audio on and it is $71.
How to call it from your agent
AMXP is in private preview. Once it opens, the agent searches for the job, reads the model's schema and unit price, then runs it with fal's own parameter names:
const [tool] = await amxp.discover({ query: "fast text to image", provider: "fal" })
const spec = await amxp.inspect(tool.id) // schema, defaults and price per megapixel
const run = await amxp.execute(tool.id, {
prompt: "A ceramic coffee mug on a walnut desk, soft morning light",
image_size: "landscape_4_3", // 1024 x 768, rounds up to 1 megapixel
num_images: 1,
num_inference_steps: 4,
output_format: "jpeg",
enable_safety_checker: true,
})
// run.output.images[0].url, run.output.has_nsfw_concepts[0]The direct call with fal's client. subscribe submits to the queue and polls until the result is
ready, which is the right default for anything that takes more than a few seconds:
import { fal } from "@fal-ai/client"
const result = await fal.subscribe("fal-ai/kling-video/v2.6/pro/text-to-video", {
input: { prompt: "Slow pan across a walnut desk", duration: "5", generate_audio: false },
})
// result.data.video.urlRaw HTTP authenticates with Authorization: Key $FAL_KEY and submits to
https://queue.fal.run/<endpoint>, which returns request_id, status_url, response_url and
cancel_url (Queue API).
What most people get wrong
Polling status in a tight loop. The queue has a /status/stream endpoint that sends
server-sent events until the request completes, and a webhook_url option that POSTs the result
to you (Queue API). Use one of those for
video. If you must poll, back off: fal's own 429 guidance is exponential, 1 s, 2 s, 4 s, 8 s
(rate limits).
Trusting the defaults on video. Kling 2.6 Pro defaults to audio on. That one boolean doubles
every clip. Set generate_audio explicitly, and set duration explicitly too.
Sizing images by aspect ratio, not megapixels. Because fal rounds up to the whole megapixel, a 1.1 MP image costs the same as a 2 MP one. Either stay at or under 1 MP, or use the full 2 MP you are paying for.
Treating COMPLETED as success. A failed queue request also reports COMPLETED, with error
and error_type in the body. Read error first.
Retrying on your side when fal already retries. Failed requests are requeued "up to 10 times"
and concurrency 429s are requeued without limit. Adding your own retry loop multiplies work and,
for non-idempotent webhooks, duplicates results. Use request_id as the idempotency key, and send
X-Fal-No-Retry: 1 if you want to own retries yourself.
When to use something else
- Your own fal account if fal is most of your media spend. Concurrency rises with paid invoices, so a $500-a-month account gets far more parallelism than a per-call marketplace user, and you can deploy your own models on fal's serverless GPUs.
- Replicate, Runware or WaveSpeedAI when the model you want is hosted there and not on fal, or when the same model is cheaper there for your resolution.
- Kling or MiniMax directly when you only use one video family and want the vendor's newest options first.
- ElevenLabs when voice is the main job and you need voice cloning and per-character pricing tuned for long scripts.
- Topaz Labs to upscale an image or clip you already have, instead of regenerating at a higher megapixel count.
- Stability AI or Recraft when you want the model vendor's own endpoint and billing.
Common questions
How does fal charge for images?
Per output. FLUX models bill per megapixel, rounded up to the nearest whole megapixel, so a
1024 × 768 image is billed as 1 MP. Nano Banana and Ideogram bill a flat price per image. The unit
and price are on each model's page, and GET https://api.fal.ai/v1/models/pricing?endpoint_id=...
returns them as JSON (Model API pricing).
Do failed fal requests cost money?
HTTP 500 and above are never billed, and queue waiting time is free. A request that returns a result you do not like is billed like any other.
Can my agent call fal through AMXP today?
Not yet. AMXP is in private preview, and its API, CLI and MCP server are not public. The flow above shows how it works through AMXP once it opens.
References
- fal pricing, falfal.ai/pricing
- Model API pricing, falfal.ai/docs/model-apis/pricing
- Queue API, falfal.ai/docs/model-apis/model-endpoints/queue
- Rate limits and concurrency, falfal.ai/docs/model-apis/rate-limits
- FLUX.1 [schnell] API, falfal.ai/models/fal-ai/flux/schnell
- FLUX.1 [dev] API, falfal.ai/models/fal-ai/flux/dev
- FLUX1.1 [pro] API, falfal.ai/models/fal-ai/flux-pro/v1.1
- Nano Banana API, falfal.ai/models/fal-ai/nano-banana
- Ideogram V3 API, falfal.ai/models/fal-ai/ideogram/v3
- Kling Video v2.6 Pro text to video, falfal.ai/models/fal-ai/kling-video/v2.6/pro/text-to-video
- MiniMax Hailuo 02 Pro text to video, falfal.ai/models/fal-ai/minimax/hailuo-02/pro/text-to-video
- MiniMax Speech 2.8 [HD] API, falfal.ai/models/fal-ai/minimax/speech-2.8-hd
Cite as: AMXP, “fal API for AI agents: what an image, a clip and a voice-over cost per output,” AMXP, November 2, 2026. https://amxp.ai/blog/fal-api-for-ai-agents · Markdown version