Introduction
GPT Image 2 Text to image is OpenAI's gpt-image-2 model, released in April 2026, generating images from a written prompt. It follows long, specific briefs, sets quoted headlines and labels into the picture as legible type, and renders at three quality tiers and three size tiers in fifteen aspect ratios. Up to ten images come back per request, with every setting priced below OpenAI's list price.
Choose a mode by starting material
| What you have | Mode |
|---|---|
| a written brief | GPT Image 2 Text to image |
| an image to change | GPT Image 2 Edit |
Key features & highlights
Economy route and Official fallback
This is OpenAI's gpt-image-2, which OpenAI describes as its state-of-the-art image generation model. A single medium-quality 1k image in most shapes starts on a lower-priced economy route, where the model may reword the prompt slightly or add small details. With Official fallback on, the default, anything that route refuses or cannot finish runs again on the official route, and every other setting runs there from the start.
Text you can read
Headlines, cover lines, signs and labels written in quotes come back as real type. In our poster and magazine-cover tests every quoted line rendered with the right spelling at medium quality.
A price for every shape and tier
OpenAI charges by output tokens, which grow with quality, size tier and how square the frame is. Each combination has its own per-image price below OpenAI's rate, shown before you submit; medium 1k images on the economy route start lower still.
Request parameters
| Parameter | Required | Description |
|---|---|---|
prompt | Yes | Up to 5,000 characters. Put every word that must appear in the image in double quotes and say where it goes; the rest is read as description. at least 1 characters · at most 5000 characters |
aspect_ratio | No | Fifteen shapes from 1:3 to 3:1, 1:1 by default. The shape changes the price: a wide or tall frame costs less than a square at the same tier. |
resolution | No | 1k (default), 2k or 4k. A square frame is 1024, 2048 or 2880 pixels across; a larger tier costs more per image. |
quality | No | low, medium (default) or high. |
num_outputs | No | 1 to 10 images from one request, 1 by default. Every image is billed separately. |
output_format | No | png (default), jpeg or webp. Does not change the price. |
output_quality | No | Compression quality for jpeg and webp, 0 to 100: higher keeps more detail and makes larger files. Not used for png, and it does not change the price. |
official_fallback | No | On by default. Default: |
Pricing
Billed per image. The price depends on quality, size tier and aspect ratio and is shown before you submit; a wide or tall frame costs less than a square at the same tier. A request for a single medium-quality 1k PNG in any shape except 21:9, 9:21, 3:1 and 1:3 starts on the economy route at the economy price. With Official fallback on, the default, a request that route refuses or cannot complete runs again on the official route at the official price, so the quote shows both the starting price and the most the request can cost. Refused requests are not charged. On the official route, long prompts add a small charge for input tokens beyond the first 100, once per request; Chinese, Japanese and Korean text counts about one token per character.
| Specification | Price |
|---|---|
| $0.001816 / image |
| $0.001816 / image |
| $0.00244 / image |
| $0.00244 / image |
| $0.002752 / image |
| $0.002752 / image |
| $0.002872 / image |
| $0.002872 / image |
| $0.00304 / image |
| $0.00304 / image |
| $0.003568 / image |
| $0.003568 / image |
| $0.003736 / image |
| $0.003736 / image |
| $0.003856 / image |
| $0.003856 / image |
| $0.004192 / image |
| $0.004192 / image |
| $0.004456 / image |
| $0.004456 / image |
| $0.005104 / image |
| $0.005152 / image |
| $0.005152 / image |
| $0.005704 / image |
| $0.005704 / image |
| $0.006016 / image |
| $0.006016 / image |
| $0.006712 / image |
| $0.006712 / image |
| $0.007312 / image |
| $0.007312 / image |
| $0.0076 / image |
| $0.0076 / image |
| $0.008128 / image |
| $0.008128 / image |
| $0.009304 / image |
| $0.009304 / image |
| $0.009928 / image |
| $0.011176 / image |
| $0.011176 / image |
| $0.01192 / image |
| $0.01192 / image |
| $0.01324 / image |
| $0.01324 / image |
| $0.016216 / image |
| $0.01396 / image |
| $0.01396 / image |
| $0.018592 / image |
| $0.018592 / image |
| $0.020368 / image (With Official fallback: up to $0.021472) |
| $0.020368 / image (With Official fallback: up to $0.021472) |
| $0.020998 / image (With Official fallback: up to $0.023992) |
| $0.020998 / image (With Official fallback: up to $0.023992) |
| $0.022 / image (With Official fallback: up to $0.028) |
| $0.022 / image (With Official fallback: up to $0.028) |
| $0.022864 / image (With Official fallback: up to $0.031456) |
| $0.022864 / image (With Official fallback: up to $0.031456) |
| $0.023626 / image (With Official fallback: up to $0.034504) |
| $0.023626 / image (With Official fallback: up to $0.034504) |
| $0.024112 / image |
| $0.024112 / image |
| $0.025636 / image (With Official fallback: up to $0.042544) |
| $0.032272 / image |
| $0.032272 / image |
| $0.03688 / image |
| $0.03688 / image |
| $0.043072 / image |
| $0.043072 / image |
| $0.048064 / image |
| $0.048064 / image |
| $0.050776 / image |
| $0.050776 / image |
| $0.055432 / image |
| $0.055432 / image |
| $0.062416 / image |
| $0.062416 / image |
| $0.0652 / image |
| $0.0652 / image |
| $0.067984 / image |
| $0.067984 / image |
| $0.080464 / image |
| $0.080464 / image |
| $0.086032 / image |
| $0.094288 / image |
| $0.094288 / image |
| $0.103984 / image |
| $0.103984 / image |
| $0.11296 / image |
| $0.11296 / image |
| $0.14272 / image |
| $0.054616 / image |
| $0.054616 / image |
| $0.07144 / image |
| $0.07144 / image |
| $0.082936 / image |
| $0.082936 / image |
| $0.095248 / image |
| $0.095248 / image |
| $0.096472 / image |
| $0.096472 / image |
| $0.110728 / image |
| $0.110728 / image |
| $0.124624 / image |
| $0.124624 / image |
| $0.127864 / image |
| $0.127864 / image |
| $0.135064 / image |
| $0.135064 / image |
| $0.142816 / image |
| $0.142816 / image |
| $0.168976 / image |
| $0.171016 / image |
| $0.171016 / image |
| $0.19456 / image |
| $0.19456 / image |
| $0.197104 / image |
| $0.197104 / image |
| $0.220456 / image |
| $0.220456 / image |
| $0.248464 / image |
| $0.248464 / image |
| $0.259552 / image |
| $0.259552 / image |
| $0.274216 / image |
| $0.274216 / image |
| $0.320608 / image |
| $0.320608 / image |
| $0.342928 / image |
| $0.37588 / image |
| $0.37588 / image |
| $0.414736 / image |
| $0.414736 / image |
| $0.456544 / image |
| $0.456544 / image |
| $0.569656 / image |
Use cases
Posters, covers and ads
Layouts where the words matter as much as the picture: film posters, magazine covers, sale banners and packaging mock-ups, produced in one call instead of a picture plus a separate typesetting pass.
Variations for review
Up to ten images from one brief in a single request, so a team can pick a direction before anyone pays for the high tier.
Prompt guide & pro tips
Quote and place every line
Write each piece of text in double quotes and say where it goes: across the top, bottom left, on the sign. Unquoted words are read as description, not as type to set.
Describe the photograph, not keywords
Full sentences about subject, wardrobe, setting, light and lens work better than tag lists. Name the medium as well: film still, studio product shot, magazine cover.
Draft at low, finish higher
Low costs a small fraction of medium at the same size and already shows composition and type placement. Keep the prompt unchanged and move up a tier for the final.
Match the size tier to the use
Use 1k for screens and social posts, 2k for large displays and 4k only for print or heavy cropping. Each step up raises the price per image.
API quick start
# 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/text-to-image",
"input": {
"prompt": "A ceramic teapot on a linen cloth, soft window light, muted palette",
"quality": "medium",
"resolution": "1k",
"num_outputs": 1,
"aspect_ratio": "1:1",
"output_format": "png"
}
}'
# 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"
See the API reference for authentication, the complete schema, polling, and error handling.





