openai/gpt-image-2.5-flare/editDa 1 credito per immagine· Modifica immagine

La modifica immagini GPT Image 2.5 Flare di OpenAI accetta da 1 a 16 immagini di partenza e una descrizione della modifica. Una maschera facoltativa limita il ritocco a un’area, sfondi trasparenti possibili; output da 1K a 4K in PNG, JPEG o WebP.

Lo chiami con il nome di modello openai/gpt-image-2.5-flare/edit su POST /jobs/createTask, da 1 credito per immagine (0,01 USD). I nuovi account ricevono 30 crediti gratuiti per provarlo prima nel Playground.

  • Crea immagine
  • Modifica immagine
  • Fino a 4K
  • Fino a 16 immagini di riferimento
  • 15 formati
  • Fino a 10 per generazione
Nome del modelloopenai/gpt-image-2.5-flare/edit
EndpointPOST https://api.popnow.ai/api/v1/jobs/createTask
# 1. Create the task. Keep the Idempotency-Key if you retry after a network error.
export IDEMPOTENCY_KEY="$(uuidgen)"
curl -X POST https://api.popnow.ai/api/v1/jobs/createTask \
  -H "Authorization: Bearer $POPNOW_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $IDEMPOTENCY_KEY" \
  -d '{
  "model": "openai/gpt-image-2.5-flare/edit",
  "input": {
    "prompt": "A ceramic teapot on a linen cloth, soft window light, muted palette",
    "image_urls": [
      "https://media.popnow.ai/influencer/examples/marco.webp"
    ],
    "aspect_ratio": "1:1",
    "resolution": "1k",
    "quality": "high",
    "num_outputs": 1,
    "input_fidelity": "low"
  }
}'

# 2. Copy data.taskId from the response, then poll until state is succeeded, failed, canceled or expired.
TASK_ID="TASK_ID_FROM_RESPONSE"
curl "https://api.popnow.ai/api/v1/jobs/recordInfo?taskId=$TASK_ID" \
  -H "Authorization: Bearer $POPNOW_API_KEY"

L’input è costruito dallo schema qui sotto, quindi supera la verifica così com’è. Sostituisci prompt e link con i tuoi.

Prezzo

OpzioneCrediti per immagine≈ USD
aspect_ratio 1:3quality lowresolution 1K0,270,0027 USD
aspect_ratio 3:1quality lowresolution 1K0,270,0027 USD
aspect_ratio 21:9quality lowresolution 1K0,370,0037 USD
aspect_ratio 9:21quality lowresolution 1K0,370,0037 USD
aspect_ratio 1:2quality lowresolution 1K0,410,0041 USD
aspect_ratio 2:1quality lowresolution 1K0,410,0041 USD
aspect_ratio 1:3quality lowresolution 2K0,430,0043 USD
aspect_ratio 3:1quality lowresolution 2K0,430,0043 USD
aspect_ratio 16:9quality lowresolution 1K0,460,0046 USD
aspect_ratio 9:16quality lowresolution 1K0,460,0046 USD
aspect_ratio 2:3quality lowresolution 1K0,540,0054 USD
aspect_ratio 3:2quality lowresolution 1K0,540,0054 USD

1 credito = 0,01 $ · Tutte le opzioni e i prezzi: GET /models/openai/gpt-image-2.5-flare/edit

Ogni attività è arrotondata per eccesso ai crediti interi, quindi un'esecuzione al livello più basso costa 1 credito per immagine (0,01 USD).

Limiti

Risoluzioni
1K · 2K · 4K
Proporzioni
1:1 · 1:2 · 1:3 · 2:1 · 2:3 · 3:1 +9
Risultati per chiamata
1–10
Immagini di riferimento
16
Lunghezza del prompt (caratteri)
5,000
Caricamento massimo
10 MB

Parametri

Questi campi vengono dallo stesso schema con cui verifichiamo ogni richiesta. I campi non elencati vengono rifiutati.

  • promptstringObbligatorio

    Say what to change and what must stay the same.

    Intervallo
    1 – 5000 chars
  • image_urlsarray<string>ObbligatorioCambia il prezzo

    Foto da modificare o combinare. Spiega nel prompt cosa aggiunge ciascuna.

    Intervallo
    1 – 16 items · image/jpeg, image/png, image/webp, image/gif · ≤ 10 MB
  • mask_urlstringFacoltativo

    Dipingi l'area da cambiare.

    Intervallo
    image/jpeg, image/png, image/webp, image/gif · ≤ 10 MB
  • aspect_ratiostringFacoltativoCambia il prezzo

    La forma dell'inquadratura: larga, quadrata o verticale.

    Predefinito
    "1:1"
    Valori ammessi
    "1:1""1:2""1:3""2:1""2:3""3:1""3:2""3:4""4:3""4:5""5:4""9:16""9:21""16:9""21:9"
  • resolutionstringFacoltativoCambia il prezzo

    Dimensione dell'output. Più grande è più nitido e costa di più.

    Predefinito
    "1k"
    Valori ammessi
    "1k""2k""4k"
  • qualitystringFacoltativoCambia il prezzo

    Più tempo e prezzo per dettagli più fini.

    Predefinito
    "high"
    Valori ammessi
    "low""medium""high""xhigh""max"
  • num_outputsintegerFacoltativoCambia il prezzo

    Quanti risultati creare in una volta.

    Predefinito
    1
    Intervallo
    1 – 10
  • input_fidelitystringFacoltativo

    How closely to keep the look of the source images.

    Predefinito
    "low"
    Valori ammessi
    "low""high"
  • backgroundstringFacoltativo

    Mantieni, rimuovi o sostituisci lo sfondo.

    Predefinito
    "auto"
    Valori ammessi
    "auto""transparent""opaque"
  • output_formatstringFacoltativo

    Tipo di file del risultato.

    Predefinito
    "png"
    Valori ammessi
    "png""jpeg""webp"
  • output_qualityintegerFacoltativo

    Compression quality for JPEG and WebP, from 0 to 100.

    Intervallo
    0 – 100
JSON Schema grezzo
{
  "additionalProperties": false,
  "properties": {
    "aspect_ratio": {
      "default": "1:1",
      "description": "Output aspect ratio.",
      "enum": [
        "1:1",
        "1:2",
        "1:3",
        "2:1",
        "2:3",
        "3:1",
        "3:2",
        "3:4",
        "4:3",
        "4:5",
        "5:4",
        "9:16",
        "9:21",
        "16:9",
        "21:9"
      ],
      "type": "string"
    },
    "background": {
      "default": "auto",
      "description": "Background treatment of the result.",
      "enum": [
        "auto",
        "transparent",
        "opaque"
      ],
      "type": "string"
    },
    "image_urls": {
      "description": "One to 16 source images, in the order your prompt refers to them.",
      "items": {
        "contentMediaType": [
          "image/jpeg",
          "image/png",
          "image/webp",
          "image/gif"
        ],
        "format": "uri",
        "minLength": 1,
        "type": "string"
      },
      "maxItems": 16,
      "minItems": 1,
      "type": "array"
    },
    "input_fidelity": {
      "default": "low",
      "description": "How closely to keep the look of the source images.",
      "enum": [
        "low",
        "high"
      ],
      "type": "string"
    },
    "mask_url": {
      "contentMediaType": [
        "image/jpeg",
        "image/png",
        "image/webp",
        "image/gif"
      ],
      "description": "Optional PNG mask: transparent pixels mark the area to repaint in the first source image.",
      "format": "uri",
      "type": "string"
    },
    "num_outputs": {
      "default": 1,
      "description": "How many images to return, each billed separately.",
      "maximum": 10,
      "minimum": 1,
      "type": "integer"
    },
    "output_format": {
      "default": "png",
      "description": "File format of the returned images.",
      "enum": [
        "png",
        "jpeg",
        "webp"
      ],
      "type": "string"
    },
    "output_quality": {
      "description": "Compression quality for JPEG and WebP, from 0 to 100.",
      "maximum": 100,
      "minimum": 0,
      "type": "integer"
    },
    "prompt": {
      "description": "Say what to change and what must stay the same.",
      "maxLength": 5000,
      "minLength": 1,
      "type": "string"
    },
    "quality": {
      "default": "high",
      "description": "Rendering quality. Higher tiers add detail, time and cost.",
      "enum": [
        "low",
        "medium",
        "high",
        "xhigh",
        "max"
      ],
      "type": "string"
    },
    "resolution": {
      "default": "1k",
      "description": "Output size tier.",
      "enum": [
        "1k",
        "2k",
        "4k"
      ],
      "type": "string"
    }
  },
  "required": [
    "prompt",
    "image_urls"
  ],
  "type": "object"
}

Un risultato reale di GPT Image 2.5 Flare

Red dress blue hour
PromptChange her white sundress to a red one-shoulder satin dress and turn the sunset into blue hour with the first lights of the village coming on. Keep her face, hair, pose and the terrace exactly as they are.
La stessa richiesta tramite API
{
  "model": "openai/gpt-image-2.5-flare/edit",
  "input": {
    "prompt": "Change her white sundress to a red one-shoulder satin dress and turn the sunset into blue hour with the first lights of the village coming on. Keep her face, hair, pose and the terrace exactly as they are.",
    "image_urls": [
      "https://media.popnow.ai/influencer/examples/marco.webp"
    ],
    "aspect_ratio": "4:5",
    "resolution": "1k",
    "quality": "high",
    "num_outputs": 1,
    "input_fidelity": "low",
    "output_format": "png"
  }
}

Questo risultato parte da un file caricato: metti il tuo link al posto di quello d’esempio.

Risposte, polling e callback

Tutti i modelli funzionano allo stesso modo: crei un task, poi lo interroghi o aspetti la callback.

Prima il prezzo

cURL
curl -X POST https://api.popnow.ai/api/v1/jobs/quote \
  -H "Authorization: Bearer $POPNOW_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "model": "openai/gpt-image-2.5-flare/edit",
  "input": {
    "prompt": "A ceramic teapot on a linen cloth, soft window light, muted palette",
    "image_urls": [
      "https://media.popnow.ai/influencer/examples/marco.webp"
    ],
    "aspect_ratio": "1:1",
    "resolution": "1k",
    "quality": "high",
    "num_outputs": 1,
    "input_fidelity": "low"
  }
}'

Stesso corpo di createTask. Restituisce l’addebito previsto e quello massimo possibile, senza eseguire nulla.

Accettata

HTTP
HTTP/1.1 202 Accepted

{
  "code": 200,
  "msg": "success",
  "data": {
    "taskId": "task_01k3m8x9q2z4v7n5p6r8s0t1w3",
    "state": "queued"
  },
  "request_id": "req_example_create"
}

HTTP 202 significa che il task è stato accettato e i crediti sono riservati, non ancora addebitati. L’addebito finale non supera mai la riserva.

Controlla lo stato

cURL
curl "https://api.popnow.ai/api/v1/jobs/recordInfo?taskId=$TASK_ID" \
  -H "Authorization: Bearer $POPNOW_API_KEY"

Controlla ogni pochi secondi allungando via via l’intervallo e fermati quando state è succeeded, failed, canceled o expired.

Task completato

JSON
{
  "code": 200,
  "msg": "success",
  "data": {
    "taskId": "task_01k3m8x9q2z4v7n5p6r8s0t1w3",
    "model": "openai/gpt-image-2.5-flare/edit",
    "state": "succeeded",
    "output": {
      "assets": [
        {
          "url": "https://cdn.popnow.ai/tasks/task_01k3m8x9q2z4v7n5p6r8s0t1w3/output.png?signature=FROM_RESPONSE",
          "expiresAt": "2026-10-17T12:20:00Z",
          "mime": "image/png",
          "width": 1024,
          "height": 1024
        }
      ]
    },
    "settled": true
  },
  "request_id": "req_example_record"
}

Scarica dall’url prima di expiresAt. Ti serve un link nuovo più tardi? Chiedilo con POST /common/download-url.

Verifica una callback

Node.js
import { createHash, createHmac, timingSafeEqual } from "node:crypto";
import express from "express";

const app = express();
// express.raw keeps the exact bytes that were signed; express.json would not match.
app.post("/hooks/popnow", express.raw({ type: "application/json" }), (req, res) => {
  const timestamp = req.header("X-Webhook-Timestamp");
  const signature = req.header("X-Webhook-Signature") ?? "";
  const body = JSON.parse(req.body.toString("utf8"));
  const taskId = body.data?.taskId ?? body.task_id;
  const digest = createHash("sha256").update(req.body).digest("hex");
  const expected = createHmac("sha256", process.env.POPNOW_WEBHOOK_SECRET)
    .update(`${taskId}.${timestamp}.${digest}`)
    .digest("base64");
  const ok = expected.length === signature.length && timingSafeEqual(Buffer.from(expected), Buffer.from(signature));
  // Check the signature first, then reject anything older than five minutes.
  if (!ok || Math.abs(Date.now() / 1000 - Number(timestamp)) > 300) return res.status(401).end();
  res.status(200).end(); // answer fast, then fetch the task and store its files
});

Con callBackUrl impostata ti inviamo il task completato. Verifica la firma sul corpo grezzo prima di fidarti.

Invia un file locale

cURL
curl -X POST https://api.popnow.ai/api/v1/common/upload-url \
  -H "Authorization: Bearer $POPNOW_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"contentType": "image/png", "bytes": 482113}'

# PUT the file bytes to data.uploadUrl with every header in data.headers, then commit it:
curl -X POST https://api.popnow.ai/api/v1/files/$FILE_ID/commit \
  -H "Authorization: Bearer $POPNOW_API_KEY"
# The commit returns a popnow://f/... reference. Put it in any image, video or
# audio field of the task input instead of a public https URL.

I link https pubblici funzionano così come sono. I file locali passano prima da upload-url e commit.