A API gpt-image-2 é o novo endpoint de geração de imagens da OpenAI, lançado junto com o ChatGPT Images 2.0 em 21 de abril de 2026. Se você já utiliza as APIs de chat ou embeddings da OpenAI, adicionar a geração de imagens requer apenas um novo formato de requisição, uma chave de API com o escopo correto e cerca de dez minutos.
Este guia trata estritamente da API: autenticação, parâmetros de requisição, exemplos de código em três linguagens, modo de pensamento (thinking mode), geração em lote, tratamento de respostas, códigos de erro, limites de taxa (rate limits) e o fluxo de trabalho de teste que evita que você gaste créditos com prompts defeituosos. Para uma visão geral do produto sobre as novidades do ChatGPT Images 2.0, consulte nossa análise do ChatGPT Images 2.0.
Ao final, você terá chamadas funcionando, uma coleção Apidog reutilizável para iteração e uma imagem clara do custo de cada parâmetro.
Pré-requisitos
Antes da sua primeira requisição, você precisa de quatro coisas:
- Uma conta OpenAI com acesso à API. Contas de desenvolvedor são separadas do ChatGPT Plus; uma assinatura ChatGPT não inclui créditos de API.
- Um nível de uso faturável. O
gpt-image-2está disponível no Nível 1 e acima. Novas contas começam no nível Gratuito e devem adicionar um método de pagamento antes que os endpoints de imagem sejam desbloqueados. - Uma chave de API com o escopo
images:write. Chaves com escopo de projeto são recomendadas em vez de chaves com escopo de usuário para produção. - Uma ferramenta de teste que pré-visualize as respostas de imagem. O curl do terminal funciona para uma primeira requisição; depois disso, use um cliente de API real. Mais sobre isso abaixo.
Defina a chave uma vez no seu shell para que todos os exemplos neste guia sejam executados sem edições:
export OPENAI_API_KEY="sk-proj-..."
Endpoint e autenticação
O gpt-image-2 usa o mesmo endpoint de geração de imagens do modelo anterior:
POST https://api.openai.com/v1/images/generations
A autenticação é um token bearer no cabeçalho Authorization. Cada requisição também carrega um corpo JSON com o ID do modelo, prompt e parâmetros de saída.
curl https://api.openai.com/v1/images/generations \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2",
"prompt": "A sharp product hero image for an API testing platform, dark background",
"size": "1024x1024",
"n": 1,
"quality": "high"
}'
Se a chamada for bem-sucedida, você receberá um objeto JSON com um array data de imagens. Falhas retornam um envelope de erro padrão da OpenAI com um code e uma message legível; a tabela de erros mais adiante neste guia cobre os mais comuns.
Parâmetros de requisição
Cada campo no corpo da requisição altera o que você paga e o que você obtém. Aqui está o mapa completo de parâmetros para gpt-image-2.
| Parâmetro | Tipo | Valores | Notas |
|---|---|---|---|
model |
string | gpt-image-2 |
Obrigatório. |
prompt |
string | Até 32.000 caracteres | Obrigatório. Prompts mais longos consomem mais tokens de entrada. |
size |
string | 1024x1024, 1024x1536, 1536x1024, 2000x1000, 1000x2000, 2000x667, 667x2000 |
Afeta a contagem de tokens de saída. |
quality |
string | standard, high |
high custa cerca de 2×, mas lida melhor com texto fino e elementos de UI. |
n |
integer | 1–10 | Requisições em lote compartilham o estilo entre o conjunto. |
thinking |
string | off, low, medium, high |
Orçamento de raciocínio antes da renderização. |
response_format |
string | url, b64_json |
URLs expiram em uma hora. |
user |
string | Formato livre | Usado para detecção de abuso; passe um ID de usuário hashed. |
background |
string | auto, transparent, opaque |
A saída transparente é enviada como PNG com alfa. |
seed |
integer | Qualquer int32 | Controle flexível; a mesma semente mais o mesmo prompt é próximo, não idêntico. |
Os três parâmetros que mais alteram o custo são size, quality e thinking. Uma imagem de 2000 pixels de largura com qualidade high e thinking: "high" pode custar 4–5× mais do que uma renderização standard de 1024x1024.
Exemplo em Python
O SDK oficial (openai>=1.50.0) adiciona suporte nativo para gpt-image-2:
import base64
from pathlib import Path
from openai import OpenAI
client = OpenAI()
response = client.images.generate(
model="gpt-image-2",
prompt=(
"A minimalist diagram of an OAuth 2.1 authorization code flow with PKCE. "
"Five boxes labeled in English: User, Client, Auth Server, Resource Server, Token. "
"Sharp sans-serif text, off-white background, teal accent arrows."
),
size="1536x1024",
quality="high",
n=2,
thinking="medium",
response_format="b64_json",
)
out_dir = Path("out")
out_dir.mkdir(exist_ok=True)
for i, image in enumerate(response.data):
png_bytes = base64.b64decode(image.b64_json)
(out_dir / f"oauth_{i}.png").write_bytes(png_bytes)
print(f"Generated {len(response.data)} images into {out_dir.resolve()}")
Duas coisas que valem a pena destacar:
response.dataé uma lista mesmo quandon=1. Sempre itere.b64_jsoné mais fácil para scripts locais;urlé melhor quando você encaminha a imagem para um CDN ou upload S3, pois você pula o ciclo de decodificação e recodificação.
Exemplo em Node.js / TypeScript
import fs from "node:fs/promises";
import OpenAI from "openai";
const client = new OpenAI();
const response = await client.images.generate({
model: "gpt-image-2",
prompt:
"Dashboard UI mockup for a REST client, sentence-case labels, latency sparkline in the top-right, cool grey palette.",
size: "1536x1024",
quality: "high",
n: 4,
thinking: "medium",
response_format: "b64_json",
});
await Promise.all(
response.data.map(async (image, i) => {
if (!image.b64_json) return;
await fs.writeFile(`dash_${i}.png`, Buffer.from(image.b64_json, "base64"));
}),
);
console.log(`Saved ${response.data.length} images`);
Use o SDK oficial em vez de fetch puro, a menos que você tenha uma razão para não fazê-lo. O SDK lida com retentativas, cabeçalhos de idempotência e streaming, e rastreia alterações de esquema que quebram a compatibilidade entre as revisões do modelo.
Modo de pensamento (Thinking mode): quando usar
thinking controla a quantidade de processamento que o modelo gasta planejando o layout antes de renderizar. Quatro valores, aproximadamente:
off: sem raciocínio. Mais rápido, mais barato, melhor para prompts criativos livres onde a composição não precisa ser exata.low: planejamento leve. Um bom padrão para fotos de produtos e imagens de herói.medium: planejamento mais pesado. Escolha certa para diagramas, infográficos, slides e qualquer coisa com elementos contados (“quatro painéis”, “três setas”).high: raciocínio máximo. Compensa apenas em layouts multilíngues complexos ou diagramas técnicos estritos; espere latência e custo visivelmente maiores.
Uma regra prática: se o prompt contiver um número, um rótulo ou uma restrição posicional, suba um nível. Se apenas disser “uma cena aconchegante”, desça um nível.
O modo de pensamento (thinking mode) adiciona tokens de raciocínio à fatura, além dos tokens de saída de imagem. A página de preços da OpenAI lista as taxas atuais por token; preveja 1.2–2× o custo base da sua imagem quando medium ou high estiver ativado.
Geração em lote
Definir n > 1 retorna múltiplas imagens em uma única resposta que compartilham composição e estilo. Isso não é o mesmo que chamar o endpoint n vezes em paralelo; isso lhe daria quatro imagens não relacionadas. A saída em lote é coerente, o que corresponde à forma como uma equipe de design itera.
response = client.images.generate(
model="gpt-image-2",
prompt="Four different hero illustrations for an API documentation landing page, shared color palette, shared line weight.",
size="1536x1024",
quality="high",
n=4,
thinking="low",
)
Você paga por imagem, então n=4 custa aproximadamente 4× n=1. O ganho é a consistência, não o rendimento.
Formato de resposta e armazenamento
Dois formatos, dois casos de uso:
b64_json: a imagem está embutida na resposta. Fácil para scripts. Os payloads de resposta ficam grandes rapidamente; um PNG de alta qualidade de 2000 pixels de largura pode ultrapassar 3 MB no tamanho da resposta.url: a imagem fica no CDN da OpenAI por uma hora, e você a baixa por conta própria. Melhor para funções serverless com limites de tamanho de resposta e para pipelines que encaminham a imagem para o seu próprio armazenamento.
Para produção, baixe o URL e envie-o para seu próprio bucket S3, R2 ou Cloudflare Images imediatamente. Não envie URLs da OpenAI para usuários finais; eles expiram.
Tratamento de erros e limites de taxa
O gpt-image-2 retorna formatos de erro padrão da OpenAI. Aqui estão os que você encontrará:
| HTTP | code |
Causa | Solução |
|---|---|---|---|
| 400 | invalid_request_error |
Tamanho incorreto, proporção não suportada, prompt com mais de 32 mil caracteres | Verifique a lista de tamanhos e encurte o prompt. |
| 401 | invalid_api_key |
Chave ausente ou incorreta | Re-exporte OPENAI_API_KEY. |
| 403 | insufficient_quota |
Sem créditos, ou nível Gratuito | Adicione faturamento, verifique o nível. |
| 429 | rate_limit_exceeded |
Muitas requisições por minuto | Faça um "back off" com "jitter"; tente novamente com Retry-After. |
| 429 | image_generation_user_error |
Recusa por política de conteúdo | Reescreva o prompt. |
| 500 | server_error |
Problema transitório da OpenAI | Tente novamente duas vezes com "backoff" exponencial. |
| 503 | overloaded |
Pico de uso em toda a região | Aguarde e tente novamente. |
Os limites de taxa no gpt-image-2 são baseados em níveis. No Nível 1, você começa com cerca de 50 requisições por minuto; níveis mais altos aumentam. Sempre leia os cabeçalhos x-ratelimit-remaining-requests e x-ratelimit-remaining-tokens em cada resposta e reduza a taxa antes de atingir o limite.
Erros retentáveis em produção:
import time
from openai import OpenAI, RateLimitError, APIStatusError
client = OpenAI()
def generate_with_retry(prompt: str, tries: int = 3):
delay = 1.0
for attempt in range(tries):
try:
return client.images.generate(
model="gpt-image-2",
prompt=prompt,
size="1024x1024",
quality="high",
n=1,
)
except RateLimitError:
time.sleep(delay)
delay *= 2
except APIStatusError as e:
if 500 <= e.status_code < 600 and attempt < tries - 1:
time.sleep(delay)
delay *= 2
continue
raise
raise RuntimeError("gpt-image-2 retries exhausted")
Não tente novamente erros 400, 401 ou 429 de política de conteúdo; eles falham por um motivo e a retentativa desperdiça créditos.
Testando a API com Apidog
Iterar em prompts de geração de imagem a partir de um terminal é lento: você não consegue ver o resultado, não consegue diferenciar as mudanças de parâmetro e não consegue versionar os prompts bons. Um cliente de API feito sob medida resolve todos os três.

Apidog trata o endpoint gpt-image-2 como uma requisição de primeira classe. Fluxo de trabalho típico:
- Crie uma nova requisição na sua coleção OpenAI, método
POST, URLhttps://api.openai.com/v1/images/generations. - Adicione
Authorization: Bearer {{OPENAI_API_KEY}}como um cabeçalho; definaOPENAI_API_KEYem uma variável de ambiente para que nunca esteja no código-fonte. - Cole o corpo JSON com seu prompt; o Apidog valida contra a especificação OpenAPI e aponta incompatibilidades de tipo antes de você enviar.
- Pressione Enviar. As respostas de imagem são renderizadas inline; salve as boas, marque as ruins, ramifique a requisição para variantes.
- Salve ambientes para
thinking: off,thinking: mediumethinking: highpara comparar o mesmo prompt em diferentes níveis de raciocínio.
A comparação de requisições do Apidog é a parte mais importante aqui. Você ajusta um parâmetro; você vê a imagem antes e depois lado a lado; você comita o vencedor para uma biblioteca de prompts que toda a sua equipe compartilha. Este é o fluxo de trabalho que o terminal não pode lhe oferecer.
Se você está vindo de um cliente HTTP genérico ou de um workspace do Postman travado, Baixe o Apidog e aponte-o para sua chave OpenAI; a configuração leva menos de cinco minutos. Equipes avaliando alternativas também podem ler nosso guia de teste de API sem Postman e a visão geral da extensão Apidog para VS Code.
Armadilhas comuns
Alguns erros queimam créditos e tempo na primeira semana com o gpt-image-2.
- Usar
quality: "standard"para prompts com muito texto. A qualidade padrão distorce textos pequenos. Mude parahighquando rótulos, ícones ou textos de UI forem importantes. - Excesso de prompting. 32 mil caracteres é o limite, não o objetivo. Depois de algumas centenas de tokens, o modelo começa a ignorar instruções anteriores. Mantenha os prompts com menos de 500 palavras e use
thinkingpara impor restrições complexas. - Esperar reprodutibilidade de
seed. A semente reduz a variância, mas não fixa a saída. Se você precisar da mesma imagem exata, armazene os bytes em cache; não gere novamente. - Enviar URLs da OpenAI. Eles expiram em uma hora. Sempre copie para seu próprio armazenamento antes de servir para downstream.
- Chamar o endpoint em um loop apertado. A geração de imagens é lenta. Paralelize entre workers e respeite os cabeçalhos de limite de taxa; loops apertados sequenciais apenas enfileiram e causam timeout.
Perguntas Frequentes (FAQ)
- Como o
gpt-image-2é diferente dogpt-image-1no nível da API?Mesmo endpoint, mesma autenticação. Novos parâmetros:thinking(off/low/medium/high), valores extras desizede até 2000 px, ende até 10 com estilo compartilhado. As integrações de SDK existentes continuam funcionando após a troca do ID do modelo; você só adiciona os novos parâmetros onde eles ajudam. Para a diferença completa, consulte a visão geral do ChatGPT Images 2.0. - Qual a maneira mais rápida de prototipar uma integração
gpt-image-2?Crie uma requisição no Apidog, salve dois ambientes (padrão vs. pensando) e itere nos prompts sem tocar no código. Exporte a requisição final como curl ou código SDK quando estiver pronto para comitar. - A API suporta edição ou inpainting de imagem?Os endpoints de edição e variação seguem o mesmo padrão da geração anterior sob o novo ID do modelo. Verifique a referência do modelo gpt-image-2 para o esquema mais recente; os parâmetros para máscaras e imagens de entrada estão documentados lá.
- Posso usar o
gpt-image-2para produção comercial?Sim, sob as políticas de uso padrão da OpenAI. Você possui as imagens geradas; a OpenAI retém direitos de usar entradas e saídas para monitoramento de abuso. Personagens de marca registrada e figuras públicas nomeadas ainda ativam as salvaguardas. - E quanto ao custo para uma carga de trabalho de produção?Aproximadamente $0.21 por imagem de alta qualidade 1024×1024 no modo padrão, 10.000 imagens por mês custam cerca de $2.100 sem o thinking mode. Adicione 20–80% para o thinking mode. Compare isso com alternativas auto-hospedadas como nosso guia da API GLM 5V Turbo e a integração Qwen 3.5 Omni se o orçamento for mais importante que a qualidade máxima.
- Existe uma alternativa mais barata com renderização de texto similar?Ainda não com a mesma qualidade para texto multilíngue. Modelos de peso aberto (open-weight models) diminuíram a lacuna na composição, mas ainda ficam para trás em scripts CJK e Índicos.
