Skip to main content

GPT Image 2.6 Flare revises supplied pictures with numbered references and optional masked repainting.

From $0.022/image

Workbench

Send a request

Quickstart

Examples use the selected endpoint’s public parameter definitions. Replace the API key and example media, then send the request from your server.

SDKs & integrations
POSThttps://api.spicyapi.ai/api/v1/jobs/createTask

API authentication

Keep the API key in the server environment variable SPICY_API_KEY. Use Bearer authentication and Content-Type: application/json for JSON requests.

Authorization: Bearer $SPICY_API_KEY
GPT Image 2.6 Flare · Image Editing · Sample output
Sample outputUse this example
# Generate the idempotency key once; reuse it when retrying after a lost response.
export SPICY_IDEMPOTENCY_KEY="${SPICY_IDEMPOTENCY_KEY:-$(uuidgen)}"
curl -X POST https://api.spicyapi.ai/api/v1/jobs/createTask \
  -H "Authorization: Bearer $SPICY_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $SPICY_IDEMPOTENCY_KEY" \
  -d '{
  "model": "openai/gpt-image-2.6-flare/edit",
  "input": {
    "background": "auto",
    "image_urls": [
      "https://example.com/reference.png"
    ],
    "num_outputs": 1,
    "output_format": "png",
    "prompt": "A ceramic teapot on a linen cloth, soft window light, muted palette",
    "quality": "medium",
    "resolution": "1k"
  }
}'

# Copy data.taskId from the response into TASK_ID, then poll the status.
TASK_ID="TASK_ID_FROM_RESPONSE"
curl "https://api.spicyapi.ai/api/v1/jobs/recordInfo?taskId=$TASK_ID" \
  -H "Authorization: Bearer $SPICY_API_KEY"

Generated from this model’s input schema — the same one the API validates every request against.

Input parameters

Place these fields inside the request body’s input object. Names and types match the API. Do not assume a default when none is specified.

image_urlsarray<string>RequiredAffects price

A Flare edit requires 1–16 image URLs and has no default inputs; refer to Image 1, Image 2 and later numbers in the prompt, with a small fee for every input image.

Default
Not specified
Constraints
minItems:1
maxItems:16
promptstringRequired

Write the required Flare edit instructions within 5,000 characters; no text is supplied by default, and very long prompts incur a small per-token fee.

Default
Not specified
Constraints
minLength:1
maxLength:5000
output_qualityintegerOptional

When an edited Flare result is saved as JPEG or WebP, compression runs from 0 to 100; PNG output ignores the setting and the price stays the same.

Default
Not specified
Constraints
minimum:0
maximum:100
output_formatstringOptional

Flare file delivery starts at png; jpeg and webp are also supported, with no charge for switching formats.

Default
"png"
Allowed values
"png""jpeg""webp"
backgroundstringOptional

Choose auto, opaque or transparent for the Flare background; its default is not specified here, transparency needs PNG or WebP, and this selection adds no fee.

Default
"auto"
Allowed values
"auto""transparent""opaque"
num_outputsintegerOptionalAffects price

Set the Flare result count from 1 through 10; the default count is not specified here, and each image has its own charge.

Default
1
Constraints
minimum:1
maximum:10
reasoning_effortstringOptional

Flare offers low, medium and high for reasoning_effort, defaulting to high if omitted. More planning can help dense lettering or complex layouts but extends the wait without changing the charge.

Default
Not specified
Allowed values
"low""medium""high"
qualitystringOptionalAffects price

Flare offers low, medium, high, xhigh and max detail, starting at medium; moving higher adds detail, time and cost.

Default
"medium"
Allowed values
"low""medium""high""xhigh""max"
resolutionstringOptionalAffects price

Select Flare delivery at 1k (~1 MP), 2k (~3.7 MP) or 4k (~8.3 MP); the default is not specified here, and the selected size affects billing.

Default
"1k"
Allowed values
"1k""2k""4k"
aspect_ratiostringOptional

Fifteen shapes are available, from 1:3 portrait strips to 3:1 panoramas. Omit the field and the edit follows the shape of Image 1, but only on the base size tier; any bigger tier needs an explicit ratio. Every ratio costs the same.

Default
Not specified
Allowed values
"1:1""16:9""9:16""4:3""3:4""3:2""2:3""21:9""9:21""2:1""1:2""3:1""1:3""5:4""4:5"
markup_urlstringOptionalAffects price

For a quick visual instruction, pass markup_url: a transparent PNG at Image 1’s size containing circles, sketches or notes. Billing counts it as another input image; omit mask_url when using it.

Default
Not specified
Constraints
format:"uri"
mask_urlstringOptionalAffects price

A Flare mask is an optional PNG matching Image 1, with transparent pixels selecting the area to repaint and no mask surcharge. Use either mask_url or markup_url in a request.

Default
Not specified
Constraints
format:"uri"
contentMediaType:["image/jpeg","image/png","image/webp","image/gif"]

Track the task

HTTP 202 means the task was accepted, not completed. Save the returned taskId and query that task. Do not create another task while waiting for its result.

Accepted response
HTTP/1.1 202 Accepted
Location: /api/v1/jobs/recordInfo?taskId=job_01k3m8x9q2z4v7n5p6r8s0t1w3

{
  "code": 200,
  "msg": "success",
  "request_id": "req_example_create",
  "data": {
    "taskId": "job_01k3m8x9q2z4v7n5p6r8s0t1w3",
    "state": "queued",
    "estimatedCost": "0.750000"
  }
}

The accepted response includes the estimate so your app can show the same amount in task history and billing.

Read the job
curl --get "https://api.spicyapi.ai/api/v1/jobs/recordInfo" \
  --data-urlencode "taskId=$TASK_ID" \
  -H "Authorization: Bearer $SPICY_API_KEY"

Start polling at about 2 seconds and gradually increase the interval. Stop at a terminal state. After a connection failure, query the original taskId. Retry creation only with the original idempotency key and body.

Or let the callback find you
import { verifyWebhook } from "@spicyapi/sdk";

// express.raw keeps the bytes we signed; express.json never matches.
app.post("/hooks/spicy", express.raw({ type: "application/json" }), (req, res) => {
  const { payload } = verifyWebhook({
    rawBody: req.body,
    timestamp: req.header("X-Webhook-Timestamp"),
    signature: req.header("X-Webhook-Signature"),
    payloadVersion: Number(req.header("X-Webhook-Payload-Version")),
    secret: process.env.SPICY_WEBHOOK_SECRET,
  });
  res.status(200).end();
  void handleFinishedTask(payload);
});

Pass callBackUrl when you create the task and the finished record is POSTed to you — no polling loop at all. Every delivery carries X-Webhook-Timestamp, X-Webhook-Signature and X-Webhook-Payload-Version. The signature is a base64 HMAC-SHA256 over taskId.timestamp.sha256(body), so it must be checked against the raw bytes: parsing the JSON and re-serialising it changes them and the check will fail. Failed deliveries are retried, so the same taskId can arrive twice — make the handler idempotent. Answer 2xx first and do the work afterwards; a slow handler is treated as a failed delivery.

Read the result

Consume output only when state is succeeded. On failure, use errorCode, errorMessage and request_id to investigate. Example costs and states do not represent an actual bill.

Completed response example
{
  "code": 200,
  "msg": "success",
  "request_id": "req_example_record",
  "data": {
    "taskId": "job_01k3m8x9q2z4v7n5p6r8s0t1w3",
    "model": "openai/gpt-image-2.6-flare/edit",
    "state": "succeeded",
    "output": {
      "assets": [
        {
          "key": "tasks/2026/08/28/job_01k3m8x9q2z4v7n5p6r8s0t1w3/3f7a1c9e5b2d48f0a6c1e3d5b7f9a1c3.png",
          "mime": "image/png",
          "url": "https://example.r2.cloudflarestorage.com/results/job_01k3m8x9q2z4v7n5p6r8s0t1w3/result.png?X-Amz-Signature=SIGNATURE_FROM_RESPONSE",
          "expiresAt": "2026-08-28T12:20:08.000Z"
        }
      ]
    },
    "cost": "0.750000",
    "settled": true,
    "createdAt": "2026-08-28T12:00:00Z",
    "completedAt": "2026-08-28T12:00:30Z"
  }
}

For each available asset, open or download assets[].url directly without an API Authorization header. The signed URL expires at expiresAt; poll the task again to refresh it while the asset remains within its retention period. A pending or unavailable asset has no URL. Treat signed URLs as private.

SDKs & integrations

Use SpicyAPI in your app, terminal, AI assistant or visual workflow. Choose a setup guide below.

Use it in ComfyUI

Install the SpicyAPI nodes from ComfyUI Manager or with the command below, then search for GPT Image 2.6 Flare · Image Editing on the canvas. The node has the same options as this page and shows its price before it runs.

cd ComfyUI/custom_nodes
git clone https://github.com/spicyapi-ai/comfyui-spicyapi