Search

Search HiAPI models, tools, and resources.

Back to blog
Guide7 min read

Recraft V4.1 Flash for E-Commerce Product Images: $0.01 Batch Catalog Shots

A real parallel batch on recraft-v4.1-flash/text-to-image: listing and scene shots, measured background whiteness, timing, and a batch script.

hiapiRecraftE-commerceText-to-ImageAPI

TL;DR

  • recraft-v4.1-flash/text-to-image costs $0.01 per image on HiAPI, so 1,000 catalog images cost $10.00. The standard recraft-v4.1/text-to-image costs $0.05 and takes the same parameters (price comparison).
  • In our run, 4 product images submitted in parallel finished in 21.5 seconds of wall-clock time, about 19–20 s per task including the download. Total cost: $0.04.
  • Setting background_color to white produced backgrounds that were near-white but not uniformly #FFFFFF. If a marketplace requires pure white, add a cleanup step.

When Flash is the right tier for a catalog

Use Flash when the job is volume: every SKU needs a white-background listing shot plus one or two scene images, and you plan to review them before publishing. At $0.01 per image, three images per SKU across 500 SKUs comes to $15.00. The same 1,500 images on standard V4.1 would cost $75.00.

Flash and standard V4.1 accept the same input fields, so moving a keeper to the higher tier means changing only model. This article does not compare image quality between the two tiers because we didn't run both on matching prompts. Check the outputs yourself before you settle on a tier for final assets.

Verified input schema

We checked the schema against the live API by sending deliberately invalid values:

FieldTypeNotes
promptstringRequired
image_sizeenumsquare_hd, square, portrait_4_3, portrait_16_9, landscape_4_3, landscape_16_9
colorsarray of {r,g,b}Palette guidance. Passing a string returns 400 INVALID_REQUEST: colors: got string, want array
background_color{r,g,b}Backdrop color

Unknown fields are rejected (additional properties ... not allowed), and so is any image_size outside the six presets. Custom pixel sizes aren't supported. The sizes we got back: square_hd 1024×1024, portrait_4_3 896×1216, landscape_4_3 1216×896.

Real outputs from one batch

All four images below came from a single parallel batch. Captions list the size; every image cost $0.01.

White-background listing shots

E-commerce product photo of a matte sage-green ceramic coffee mug with a curved handle, centered, front three-quarter view, pure white seamless background, soft even studio lighting, gentle contact shadow, no props, no text

Sage-green ceramic mug on a white background, generated with Recraft V4.1 Flash

recraft-v4.1-flash/text-to-image, square_hd, 1024×1024, background_color white, $0.01.

E-commerce product photo of a single white leather low-top sneaker with gum rubber sole, side profile facing left, pure white seamless background, soft even studio lighting, subtle shadow under the sole, no props, no text

White leather sneaker side profile on a white background, generated with Recraft V4.1 Flash

recraft-v4.1-flash/text-to-image, square_hd, 1024×1024, background_color white, $0.01.

The mug matches the prompt closely: centered, clean contact shadow, no props. The sneaker shows why review still matters. We asked for a gum rubber sole and got a cream sole, and the shoe sits in the lower half of the frame instead of the center. Neither image would be a usable listing for a real SKU without checking it against the actual product.

Lifestyle scene shots

Lifestyle product photo of an amber glass dropper serum bottle with a plain white label, standing on a travertine stone tray beside a eucalyptus sprig, bathroom shelf, soft morning window light, shallow depth of field, premium skincare catalog look

Amber serum dropper bottle on a travertine tray with eucalyptus, generated with Recraft V4.1 Flash

recraft-v4.1-flash/text-to-image, portrait_4_3, 896×1216, $0.01.

Lifestyle product photo of a charcoal canvas rolltop backpack leaning against a wooden bench in a sunlit train station, warm afternoon light, shallow depth of field, travel catalog look, no people, no logos

Charcoal rolltop backpack on a wooden bench in a sunlit station, generated with Recraft V4.1 Flash

recraft-v4.1-flash/text-to-image, landscape_4_3, 1216×896, $0.01.

Both scenes include every prop and lighting cue from their prompts. The serum label came back blank, as requested. That's useful if you plan to composite your real label on afterwards, and safer than letting the model invent text.

What "white background" actually returned

We sampled pixels from the two listing shots:

ImageCorner / edge samples (RGB)Exactly 255,255,255Near-white (all channels ≥ 250)
Mug255,255,255 · 255,255,253 · 253,254,25248.1% of pixels75.4%
Sneaker254,253,253 · 251,250,249 · 255,255,25558.3% of pixels79.3%

The backgrounds look white, but they aren't flat #FFFFFF. Marketplaces that require pure-white main images need a post-processing step. Either clamp near-white pixels to 255, or cut the product out and place it on a clean canvas. The Recraft background removal walkthrough covers the cutout route on the same API.

Batch script: submit in parallel, poll, download

This is the script we ran, trimmed. Each SKU gets its own Idempotency-Key, so a retry after a network timeout can't create a duplicate paid task. Output URLs are temporary: ours were on temp.hiapi.ai and carried an expireAt exactly 7 days after creation. Download each image as soon as its task succeeds.

import os, time, requests
from concurrent.futures import ThreadPoolExecutor

BASE = "https://api.hiapi.ai/v1/tasks"
HEADERS = {"Authorization": f"Bearer {os.environ['HIAPI_API_KEY']}",
           "Content-Type": "application/json"}
WHITE = {"r": 255, "g": 255, "b": 255}
BATCH_ID = "catalog-2026-11-01"  # change per intentional new batch

JOBS = [
    {"sku": "mug-sage", "image_size": "square_hd", "background_color": WHITE,
     "prompt": "E-commerce product photo of a matte sage-green ceramic coffee mug ..."},
    {"sku": "serum-amber", "image_size": "portrait_4_3",
     "prompt": "Lifestyle product photo of an amber glass dropper serum bottle ..."},
    # one dict per SKU / shot
]

def run(job):
    payload = {"model": "recraft-v4.1-flash/text-to-image",
               "input": {k: v for k, v in job.items() if k != "sku"}}
    r = requests.post(BASE, json=payload, timeout=60,
                      headers={**HEADERS, "Idempotency-Key": f"{BATCH_ID}-{job['sku']}"})
    r.raise_for_status()
    task_id = r.json()["data"]["taskId"]
    while True:
        task = requests.get(f"{BASE}/{task_id}", headers=HEADERS, timeout=30).json()["data"]
        if task["status"] in ("success", "fail", "failed"):
            break
        time.sleep(3)
    if task["status"] != "success":
        return job["sku"], task["status"]
    img = requests.get(task["output"][0]["url"], timeout=60).content
    with open(f"{job['sku']}.webp", "wb") as f:  # output was WebP in our run
        f.write(img)
    return job["sku"], "saved"

with ThreadPoolExecutor(max_workers=4) as pool:
    for sku, status in pool.map(run, JOBS):
        print(sku, status)

Our run returned this for each task (one shown):

{
  "taskId": "tk-hiapi-01M6AMTSX0B7Z531QT740DS54P",
  "model": "recraft-v4.1-flash/text-to-image",
  "status": "success",
  "storage": "temp",
  "output": [{"type": "image", "url": "https://temp.hiapi.ai/.../...-0.webp", "expireAt": 1794111048}]
}

The task's created and completed timestamps were 9 seconds apart. The remaining time on the client side went to polling intervals and downloading a 0.45–1.26 MB WebP file. For full request and polling details, see the Recraft V4.1 API guide and the HiAPI docs.

Catalog budget

Shots per SKU100 SKUs1,000 SKUs
1 (listing only)$1.00$10.00
3 (listing + 2 scenes)$3.00$30.00
3 + 2 regenerations$5.00$50.00

Based on Flash at $0.01 per image, checked against HiAPI pricing on November 1, 2026. Regenerations are billed like any other image, so plan for some.

Prompt pattern that worked for listings

  • Open with the shot type (E-commerce product photo of ...), then material + color + product.
  • Fix the camera angle (front three-quarter view, side profile facing left).
  • Spell out the backdrop and lighting (pure white seamless background, soft even studio lighting), and pass background_color as well.
  • Close with exclusions: no props, no text.
  • Check product-specific details against the real item. The sneaker's sole color shows the model can drift on them.

FAQ

Is Flash good enough for main listing images? For simple products like the mug, the output was clean. But details can drift, as with the sneaker sole, and backgrounds aren't pure #FFFFFF. Review every image and clean up backgrounds if your marketplace requires it.

Can I keep my brand colors consistent across a batch? Yes. Pass the same colors array in every request. It guides the palette but isn't a pixel-exact color lock.

How do I move a keeper to standard V4.1? Resend the same payload with model set to recraft-v4.1/text-to-image, at $0.05 per image.

Does this generate my actual product? No. Text-to-image creates a product that matches your description. To show your real item, use the generated scenes as backgrounds or mockups, or switch to an image-to-image workflow.

Ready to draft a catalog? Open the Recraft V4.1 Flash model page and try one listing prompt, then run the batch script on the rest of your SKUs.

Generate it with HiAPI

Choose a model, enter your prompt, and see the result.

HiAPI Blog

Related articles

HiAPI

Generate it with HiAPI

Start generating