Published: · Updated:
Exact ID: FLUX.2-pro. Check access for your key using GET /v1/models; a published model does not guarantee access for every account.
Prices and billing units
| Direct request setting | API429 price |
|---|---|
| 1 MP, no references | $0.009 / 1 image |
| 2 MP, no references | $0.0135 / 1 image |
| 4 MP, no references | $0.0225 / 1 image |
API429 catalog generated . The table shows direct request components; other general catalog metrics are not added here. Display prices are rounded to six decimal places; calculations use exact catalog rates. The calculator below follows the direct Images request contract. Sources checked: Oct 24, 2026.
BFL: $0.03 for the first output MP and $0.015 for each additional MP, without references. One MP equals 1,048,576 pixels. References follow separate native rules and are not estimated as an API429 price. Pricing sources are listed below. Batch, cache and special modes are kept separate from the base comparison.
Image generation budget
Generation without references only; MP uses the requested area, not the measured output size. These are exact published presets. Arbitrary editing is not estimated. Cache, tools, taxes, fees and repeated calls are excluded. RUB results use only your entered rate; this is not a bank quote.
Specifications and compatibility boundaries
- BFL describes FLUX.2 [pro]: native generation and editing, up to eight API references and output up to 4MP. The public API429 catalog does not establish equal limits.
- Native fixed flux-2-pro and changing flux-2-pro-preview differ. The API429 ID FLUX.2-pro does not establish a binding to fixed weights.
- For generation without references, 1/2/4 billed MP are published. At BFL, one MP equals 1,048,576 pixels, rounded upward. API429 reference pricing is not confirmed.
Specification: Black Forest Labs, checked Oct 24, 2026. These are not verified effective API429 limits. Check native manufacturer parameters and capabilities separately for the client method.
Published capabilities for this exact ID: image_editing image_generation . A missing field is not evidence of a prohibition, but it does not establish compatibility.
Exact ID and the limits of version information
Black Forest Labs introduced FLUX.2 [pro] on November 25, 2025. The manufacturer separately offers fixed flux-2-pro and changing flux-2-pro-preview. API429 publishes the exact ID FLUX.2-pro with its own spelling and case. The name connects the product to the FLUX.2 Pro family but does not establish a binding to an immutable weight snapshot. Do not promise identical results across dates or treat seed as a reproducibility guarantee through this ID. For a working comparison, save the original request, date, settings and accepted file. The manufacturer describes generation and editing, text in images and color direction. These inform a control set rather than measured accuracy. Test a product scene, short caption placement and composition for your format; separately record corrections required after generation.
A megapixel means area rather than side length
BFL’s billing megapixel equals 1,048,576 pixels, the area of a 1024 by 1024 square. Output area is rounded up to the next billing MP. Converting resolution into a rate therefore cannot use one side alone or a rounded marketing name. In the calculator, select a published configuration of one, two or four billable MP without references. It does not construct arbitrary prices for any dimensions: API429 calculations use only exact published rows. The manufacturer amount for these configurations combines the first output MP price with each subsequent MP. Native output up to 4MP does not establish the same effective API429 limit. The initial request uses 1024x1024 as a simple shape from the general client contract; check exact output dimensions and parameters after receiving the response.
Why generation and editing need different estimates
Native BFL billing adds reference area charges to the output image. One reference is rounded up and capped at four MP; with multiple references, each counts as one MP under the manufacturer’s current description. These rules are not a confirmed API429 editing rate. The public API429 catalog has only reference_mp=0 rows for FLUX.2-pro, so the calculator deliberately covers generation without references. Do not add an assumed source-file charge or transfer a neighboring model’s rate. Editing estimates require published units and conditions for that specific call. If you need many variants of one object, first agree separately on the source upload contract, permitted size and calculation. Move the full production batch only after a small verified task.
Do not borrow Pro parameters from neighboring models
Within native BFL, Flex has its own steps and guidance settings, while Max has separate grounding features. A shared FLUX.2 name does not turn them into Pro parameters. The native Pro endpoint describes prompt, references, seed, dimensions and automatic prompt improvement controls; the general API429 client contract does not establish support for all these fields. The initial example uses only verified client fields. BFL returns an asynchronous task in its own API, but that is not the API429 contract: do not transfer its polling URL and statuses. This page shows synchronous images/generations with b64_json. After the response, check that data has the expected result count, then decode bytes and identify PNG, JPEG or WebP by signature. A URL response may also be a data URI. Review warnings and parameter mismatches before saving to a production system. Do not automatically repeat generation after an uncertain timeout: work may have completed, with an additional charge on retry. Define in advance who reviews content, where the original response is saved and how retry decisions are recorded. This separates technically receiving a file from determining that it is ready to use.
Public model observations
There are no fresh observations with confirmed traffic for this model. This does not mean zero latency or prove an absence of errors.
Source: public 24-hour statistics. The mean is neither a median nor a response time guarantee; it is not a quality assessment of the image.
First request: curl, Python, JavaScript
Set API429_API_KEY on the server and check the exact ID using GET https://gateway.api429.com/v1/models using the same Bearer key. Generation incurs a charge; there are no automatic retries. An uncertain timeout does not prove there was no charge.
The examples request one result and b64_json. curl saves JSON to image-response.json; Python and JavaScript decode the file after checking MIME by signature. When choosing url, first distinguish a hosted URL from a data URI. Check warnings, partial results, api429.outputs and api429.parameter_mismatches, if present.
curl
curl --fail-with-body https://gateway.api429.com/v1/images/generations \
-H "Authorization: Bearer $API429_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"FLUX.2-pro","prompt":"A ceramic cup on a wooden table in soft morning light, no lettering.","n":1,"size":"1024x1024","response_format":"b64_json"}' \
--output image-response.jsonPython 3
import base64
import json
import os
import urllib.request
from pathlib import Path
key = os.environ["API429_API_KEY"]
base = "https://gateway.api429.com/v1"
headers = {"Authorization": "Bearer " + key, "Content-Type": "application/json"}
model = "FLUX.2-pro"
with urllib.request.urlopen(urllib.request.Request(base + "/models", headers=headers), timeout=30) as response:
available = {item["id"] for item in json.load(response)["data"]}
if model not in available:
raise ValueError("Model unavailable to this key")
payload = json.loads("{\"model\":\"FLUX.2-pro\",\"prompt\":\"A ceramic cup on a wooden table in soft morning light, no lettering.\",\"n\":1,\"size\":\"1024x1024\",\"response_format\":\"b64_json\"}")
request = urllib.request.Request(base + "/images/generations",
data=json.dumps(payload).encode("utf-8"), headers=headers, method="POST")
with urllib.request.urlopen(request, timeout=180) as response:
result = json.load(response)
if result.get("warnings") or result.get("api429", {}).get("parameter_mismatches"):
print("Inspect output warnings:", result.get("warnings"), result.get("api429"))
items = result.get("data", [])
if len(items) != 1 or not items[0].get("b64_json"):
raise ValueError("Missing image or partial result; inspect before retrying")
raw = base64.b64decode(items[0]["b64_json"], validate=True)
if raw.startswith(b"\x89PNG\r\n\x1a\n"):
extension = "png"
elif raw.startswith(b"\xff\xd8\xff"):
extension = "jpg"
elif raw.startswith(b"RIFF") and raw[8:12] == b"WEBP":
extension = "webp"
else:
raise ValueError("Unknown image MIME; inspect before saving")
Path("image." + extension).write_bytes(raw)
print(result.get("api429", {}).get("outputs"))JavaScript: Node.js 18+
import { writeFile } from "node:fs/promises";
const key = process.env.API429_API_KEY;
if (!key) throw new Error("Set API429_API_KEY");
const base = "https://gateway.api429.com/v1";
const headers = { Authorization: "Bearer " + key, "Content-Type": "application/json" };
const model = "FLUX.2-pro";
const available = await fetch(base + "/models", { headers, signal: AbortSignal.timeout(30000) });
if (!available.ok) throw new Error("Models HTTP " + available.status);
if (!(await available.json()).data.some(item => item.id === model)) throw new Error("Model unavailable to this key");
const payload = {"model":"FLUX.2-pro","prompt":"A ceramic cup on a wooden table in soft morning light, no lettering.","n":1,"size":"1024x1024","response_format":"b64_json"};
const response = await fetch(base + "/images/generations", {
method: "POST", headers, body: JSON.stringify(payload), signal: AbortSignal.timeout(180000)
});
if (!response.ok) throw new Error("Generation HTTP " + response.status);
const result = await response.json();
if (result.warnings || result.api429?.parameter_mismatches) console.warn("Inspect warnings", result.warnings, result.api429);
if (result.data?.length !== 1 || !result.data[0].b64_json) throw new Error("Missing image or partial result; inspect before retrying");
const bytes = Buffer.from(result.data[0].b64_json, "base64");
const hex = bytes.subarray(0, 8).toString("hex");
const extension = hex === "89504e470d0a1a0a" ? "png" : hex.startsWith("ffd8ff") ? "jpg" : bytes.toString("ascii", 0, 4) === "RIFF" && bytes.toString("ascii", 8, 12) === "WEBP" ? "webp" : undefined;
if (!extension) throw new Error("Unknown image MIME; inspect before saving");
await writeFile("image." + extension, bytes);
console.log(result.api429?.outputs);The examples are checked offline against the client contract and public schema. No paid execution or result quality is claimed. A verified complete image jobs contract is not available here: asynchronous fields and polling are omitted.
n8n: HTTP Request and saving the result
- Check access to the exact ID using GET /v1/models.
- Create an HTTP Request with POST to
https://gateway.api429.com/v1/images/generations; store the Bearer key in credentials. - Send the JSON from curl with one result. Do not include the key in a workflow export.
- Parse JSON, check the data count and warnings; decode b64_json and check MIME before saving.
HTTP Request documentation. Compatibility with specialized AI nodes and native SDKs needs separate verification.
Three options for your own comparison
Compare identical tasks and acceptance criteria. These are image models, not a quality ranking; conditional rows apply to their own configurations and do not form an equivalent benchmark.
| Model | Published API429 units |
|---|---|
gemini-3.1-flash-image (Nano Banana 2)gemini-3.1-flash-image | Resolution 1K: $0.0201 / 1 image Resolution 2K: $0.0303 / 1 image Resolution 4K: $0.0453 / 1 image |
GPT Image 2gpt-image-2 | auto · long side >1536 and up to 2048 px: $0.2532 / 1 image auto · long side >2048 px: $0.500892 / 1 image auto · rectangle, side up to 1536 px: $0.0495 / 1 image auto · square, side up to 1536 px: $0.0633 / 1 image high · long side >1536 and up to 2048 px: $0.2532 / 1 image high · long side >2048 px: $0.500892 / 1 image high · rectangle, side up to 1536 px: $0.0495 / 1 image high · square, side up to 1536 px: $0.0633 / 1 image low · long side >1536 and up to 2048 px: $0.0072 / 1 image low · long side >2048 px: $0.014238 / 1 image low · rectangle, side up to 1536 px: $0.0015 / 1 image low · square, side up to 1536 px: $0.0018 / 1 image medium · long side >1536 and up to 2048 px: $0.0636 / 1 image medium · long side >2048 px: $0.125768 / 1 image medium · rectangle, side up to 1536 px: $0.0123 / 1 image medium · square, side up to 1536 px: $0.0159 / 1 image |
gemini-3-pro-image (Nano Banana Pro)gemini-3-pro-image | Resolution 1K: $0.0402 / 1 image Resolution 2K: $0.0402 / 1 image Resolution 4K: $0.072 / 1 image |
Version and release date
Manufacturer release date, Black Forest Labs: . The exact predecessor has not been established in the reviewed sources. This does not automatically replace the ID. The model’s addition date in API429 is unknown.
Frequently asked questions
How should I write the FLUX.2 Pro ID in a request?
Use FLUX.2-pro with the stated case and check access through GET /v1/models. The native spelling flux-2-pro is not automatically an available API429 alias.
What does 1MP mean in the estimate?
The manufacturer uses 1,048,576 pixels and rounds area upward. The API429 calculator selects only explicitly published 1/2/4MP rows without references rather than deriving rates from arbitrary dimensions.
Can I estimate reference-based editing here?
No runtime reference rate is confirmed. Native BFL rules are shown separately and are not substituted into API429 pricing. Exact client conditions for that call are needed before estimating.
Does the ID guarantee fixed weights and identical results?
A public mapping to a fixed or preview BFL endpoint is not established. This page does not promise pinned weights or reproducibility; save settings and accepted results for your own evaluation.
Sources and review
- docs.bfl.ai/flux_2/flux2_overview
- bfl.ai/blog/flux-2
- bfl.ai/pricing
- docs.bfl.ai/flux_2/flux2_image_editing
- gateway.api429.com/api/public/catalog
- gateway.api429.com/api/public/openapi.json
- client.api429.com/documentation
Editorial review: . Pricing · Getting started · Compare the family: FLUX