
If you sell anything online, you already know the maths: a product detail page wants a packshot, a lifestyle shot, and ideally an angle set — per SKU, per colourway. A studio day solves that for ten products. An image API solves it for a thousand.
flux-1.1-pro (Black Forest Labs' FLUX.1.1 [pro]) is the photorealism workhorse on hiapi: it renders convincing materials — brushed metal, glass, fabric, soft-focus bokeh — at a flat $0.05 per image. This guide is a working e-commerce recipe: every image below was generated with the exact prompt printed above it, through the same /v1/tasks calls you'll copy-paste, and we document the real parameter surface — including the parameters that look like they should exist but return a 400 if you send them.

On hiapi, flux-1.1-pro runs on the async task endpoint. You create a task, poll it, then download the result:
# 1. Create the task
curl -X POST https://api.hiapi.ai/v1/tasks \
-H "Authorization: Bearer $HIAPI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "flux-1.1-pro",
"input": {
"prompt": "Studio packshot of an unbranded stainless steel wristwatch...",
"aspect_ratio": "1:1",
"output_format": "jpg",
"seed": 6607
}
}'
# => {"code":200,"data":{"taskId":"tk-hiapi-01KWK3JG..."},"message":"success"}
# 2. Poll until status is "success" (typically 10–40s for flux-1.1-pro)
curl https://api.hiapi.ai/v1/tasks/tk-hiapi-01KWK3JG... \
-H "Authorization: Bearer $HIAPI_API_KEY"
# 3. Download output[0].url — it carries an expireAt timestamp,
# so save the file to your own storage immediately.
Two operational notes before the fun part:
processing longer than you expect, don't re-submit blindly; here's a diagnosis guide for hung or timed-out tasks.If you've used FLUX models on other platforms, muscle memory says to tune steps and guidance. On hiapi's task schema for flux-1.1-pro, those fields don't exist — the API validates input strictly and rejects unknown properties:
{
"code": 400,
"error_code": "INVALID_REQUEST",
"message": "invalid input: <root>: additional properties 'steps', 'guidance' not allowed"
}
That's not a bug; FLUX 1.1 [pro] is served as a managed endpoint with sampling internals fixed by the provider. Here is what you can send, verified against the live schema:
| Field | Type | Accepted values / range |
|---|---|---|
prompt | string | required |
aspect_ratio | string | 1:1, 16:9, 9:16, 3:2, 2:3, 4:3, 3:4, 4:5, 5:4, custom |
width, height | integer | 256–1440 px (use instead of, or with custom, aspect ratio) |
seed | integer | any int — fixes composition for reproducibility |
output_format | string | jpg, png, webp |
prompt_upsampling | boolean | let the backend rewrite/expand your prompt |
safety_tolerance | integer | 0–6 |
Practical defaults for product work: output_format: "jpg", explicit aspect_ratio per placement (1:1 for marketplace grids, 4:5 for feed/lifestyle, 3:2 or 1440×960 for banners), a fixed seed per SKU family, and prompt_upsampling off — for e-commerce you want the model to follow your wording literally, not embellish it.
The bread-and-butter shot: one product, seamless background, soft key light. Say the background colour explicitly, ask for the reflection, and — important with any photorealistic model — say "unbranded, no logo, no text". Watch dials and labels are exactly where FLUX will otherwise invent trademark-shaped squiggles you'd have to retouch out.
Studio packshot of an unbranded stainless steel wristwatch with a plain deep green dial and brushed metal bracelet, the dial completely clean with simple baton hour markers and no logo, no brand name, no text or numerals anywhere, standing upright on a seamless light grey background, centered composition, soft diffused key light from the upper left, subtle reflection beneath the watch, photorealistic e-commerce product photography

Sent with aspect_ratio: "1:1", seed: 6607. The brushed-metal texture and the soft floor reflection are what you're paying the pro-tier $0.05 for — budget models flatten exactly these details.
Marketplace grids want packshots; product pages and social convert on context. Stage the product in a scene, keep the label blank, and let a shallow depth of field do the "premium" signalling. 4:5 matches feed crops.
A lit soy candle in a clear glass jar with a plain blank kraft-paper label, on a rustic oak nightstand next to a stack of two linen-bound books, warm evening window light, softly blurred bedroom background, cozy lifestyle product photography for an online store, photorealistic

Sent with aspect_ratio: "4:5", seed: 7301. Note the blank label survived — that's your compositing surface for real brand art later.
Here's the trick that saves the most money on catalog work. seed fixes the noise initialisation, so if you keep the seed and the prompt structure identical and change only the colour word, you get the same composition in a new colourway — no reshoots, no img2img pipeline.
Both images below use seed: 5150, aspect_ratio: "1:1", and prompts that differ by exactly two words (navy blue → coral pink):
A single insulated stainless steel water bottle in matte navy blue, standing on a round travertine stone slab against a soft warm beige studio background, centered, soft diffused lighting, minimalist e-commerce product photo, photorealistic


Same bottle silhouette, same slab, same framing, different SKU. This is fixed-seed prompting doing the job of a variant photography day.
Below is the pattern we actually run: submit, poll, download, retry. One thing our production runs surfaced that you should plan for: flux-1.1-pro tasks occasionally fail with a generic {"code": "TASK_FAILED"} — it's transient, and the same input usually succeeds on resubmission. Budget up to 3 attempts per image (you're only billed for images that render).
import json, time, requests
API = "https://api.hiapi.ai/v1/tasks"
HEADERS = {"Authorization": "Bearer YOUR_HIAPI_KEY",
"Content-Type": "application/json"}
CATALOG = [
{"sku": "bottle-navy", "colour": "matte navy blue"},
{"sku": "bottle-coral", "colour": "matte coral pink"},
{"sku": "bottle-sage", "colour": "matte sage green"},
]
TEMPLATE = ("A single insulated stainless steel water bottle in {colour}, "
"standing on a round travertine stone slab against a soft warm "
"beige studio background, centered, soft diffused lighting, "
"minimalist e-commerce product photo, photorealistic")
def render(prompt, seed, retries=3):
for attempt in range(retries):
task = requests.post(API, headers=HEADERS, json={
"model": "flux-1.1-pro",
"input": {"prompt": prompt, "aspect_ratio": "1:1",
"output_format": "jpg", "seed": seed},
}).json()
task_id = task["data"]["taskId"]
while True:
state = requests.get(f"{API}/{task_id}", headers=HEADERS).json()["data"]
if state["status"] == "success":
return requests.get(state["output"][0]["url"]).content
if state["status"] == "fail": # transient TASK_FAILED happens;
break # resubmit with the same input
time.sleep(5)
raise RuntimeError(f"gave up after {retries} attempts")
for item in CATALOG:
img = render(TEMPLATE.format(colour=item["colour"]), seed=5150)
with open(f"{item['sku']}.jpg", "wb") as f:
f.write(img) # re-host immediately; task URLs expire
print(item["sku"], "done")
If you're pushing hundreds of SKUs, pace your submissions — image API rate limits explained covers the throttling behaviour and sensible concurrency.
Verified against the hiapi pricing page:
| Model | Price per image | Pick it for |
|---|---|---|
flux-schnell/text-to-image | $0.005 | Drafts, layout comps, high-volume thumbnails |
flux-1.1-pro | $0.05 flat | Photorealistic packshots and lifestyle shots, any resolution up to 1440px |
flux-2/text-to-image | $0.0375–$0.125 (by MP) | Maximum prompt adherence, crisp in-image text |
The flat price is the quiet advantage: a 1440×960 hero banner costs the same $0.05 as a 512×512 thumbnail, whereas flux-2 bills by megapixel. If your workload is "photoreal product shots, mixed sizes", flux-1.1-pro is the cost-predictable default; if you need exact object counts or legible printed text inside the image, step up to flux-2 — we ran the same e-commerce recipe on it here.
A five-image PDP set (hero, packshot, lifestyle, two colourways) lands at $0.25 per product. A 200-SKU catalog refresh: $50, an afternoon, one script.
flux-1.1-pro on hiapi gives you photorealistic product imagery with a two-call async workflow, a strict but simple parameter surface (aspect ratio, size, seed, format — no steps/guidance to fiddle), fixed-seed colourway variants, and flat $0.05 pricing that makes catalog budgets trivially predictable. Grab your API key, start from the flux-1.1-pro model page, and render your first packshot with the curl call above — you'll have a PDP-ready image before your coffee cools.