
API do GPT Image 2: Guia Completo (Python, Node.js, Curl)
Guia completo de integração com a API do GPT Image 2. Autenticação, parâmetros, exemplos em Python/Node.js, edição de imagens, geração em lote, tratamento de erros e dicas de custo.
Se você quer integrar a geração de imagens com IA do GPT Image 2 ao seu próprio produto, pipeline de automação ou workflow de geração em lote, a API é o único caminho. Este guia cobre tudo o que você precisa — autenticação, parâmetros, exemplos de código em Python e Node.js, edição de imagens, tratamento de erros e otimização de custos.
No final, você terá uma integração do GPT Image 2 funcionando que aguenta tráfego real de produção.
Pré-requisitos
Antes de começar:
- Uma conta de desenvolvedor OpenAI (platform.openai.com)
- Uma conta de cobrança com saldo (geração de imagem é paga; contas novas podem receber créditos de teste)
- Uma chave de API — gere em platform.openai.com/api-keys
- Python 3.8+ ou Node.js 18+ dependendo de qual SDK você quer usar
Acesso estável à API para times de produção
Se seu time está em uma região onde o acesso direto à OpenAI é instável, ou você precisa de um único relay que lida com failover, agregação de cobrança e garantias de SLA, você também pode obter uma chave de API gerenciada do GPT Image 2 mandando email para support@gpt-image2.art. O relay suporta o mesmo nome de modelo gpt-image-2, os mesmos parâmetros descritos abaixo e o mesmo formato de resposta — então seu código não precisa mudar.
Passo 1: Instale o SDK
Python
pip install openai pillowpillow é opcional, só necessário se você planeja fazer pós-processamento na imagem retornada.
Node.js
npm install openai
# or
pnpm add openaiPasso 2: Configure sua chave de API
Nunca hard-code sua chave de API. Use uma variável de ambiente.
Crie um arquivo .env:
OPENAI_API_KEY=sk-proj-your-key-hereEm seguida carregue-o no seu código (Python usa python-dotenv, Node.js carrega .env nativamente ou com dotenv).
Passo 3: Gere sua primeira imagem
Python — exemplo mínimo funcional
import os
from openai import OpenAI
import base64
client = OpenAI(api_key=os.environ["OPENAI_API_KEY"])
result = client.images.generate(
model="gpt-image-2",
prompt="A white stainless steel water bottle on a beige linen tablecloth, premium product photography, 1:1 aspect ratio.",
size="1024x1024",
quality="medium",
n=1,
)
# Image is returned as base64
image_b64 = result.data[0].b64_json
with open("output.png", "wb") as f:
f.write(base64.b64decode(image_b64))
print("Saved to output.png")Node.js — exemplo mínimo funcional
import OpenAI from 'openai';
import fs from 'fs';
const client = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });
const result = await client.images.generate({
model: 'gpt-image-2',
prompt:
'A white stainless steel water bottle on a beige linen tablecloth, premium product photography, 1:1 aspect ratio.',
size: '1024x1024',
quality: 'medium',
n: 1,
});
const imageB64 = result.data[0].b64_json;
fs.writeFileSync('output.png', Buffer.from(imageB64, 'base64'));
console.log('Saved to output.png');Curl — para shell scripts e testes rápidos
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 white stainless steel water bottle on a beige linen tablecloth.",
"size": "1024x1024",
"quality": "medium",
"n": 1
}'Todos os parâmetros explicados
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
model | string | sim | Sempre gpt-image-2 |
prompt | string | sim | A descrição da imagem; até 32.000 caracteres |
size | string | não | Proporção (1:1, 16:9, 9:16, etc.) ou pixels explícitos (1024x1024, 1536x1024, 1024x1536) |
resolution | string | não | 1K (~1 MP) / 2K (~4 MP) / 4K (~8 MP) — usado por alguns relays para controle explícito de resolução |
quality | string | não | low, medium, high — afeta a contagem de tokens da saída e o custo |
n | integer | não | Número de imagens por requisição, 1-10 |
image_urls | array | não | 1-16 imagens de referência para edição de imagens / image-to-image (cada ≤50MB, JPEG / PNG / WEBP) |
output_format | string | não | png (padrão), jpeg, webp |
output_compression | integer | não | 0-100, apenas para jpeg/webp |
background | string | não | transparent para PNG com canal alpha |
moderation | string | não | auto (padrão) ou low para filtragem mais rápida mas mais rígida |
callback_url | string | não | Endpoint HTTPS para receber callbacks de conclusão (usado por relays assíncronos) |
user | string | não | ID de usuário estável para monitoramento de abuso da OpenAI |
Edição de imagens — o recurso matador
A edição direcionada do GPT Image 2 é sua maior vantagem de API sobre modelos de difusão. Você sobe uma imagem existente e um prompt descrevendo o que mudar.
Python
result = client.images.edit(
model="gpt-image-2",
image=open("original.png", "rb"),
prompt="Change the bottle's color from white to navy blue. Keep everything else identical.",
size="1024x1024",
quality="medium",
)
with open("edited.png", "wb") as f:
f.write(base64.b64decode(result.data[0].b64_json))Node.js
import { toFile } from 'openai';
const result = await client.images.edit({
model: 'gpt-image-2',
image: await toFile(fs.createReadStream('original.png'), 'original.png'),
prompt:
"Change the bottle's color from white to navy blue. Keep everything else identical.",
size: '1024x1024',
quality: 'medium',
});A frase "Keep everything else identical" no prompt é crítica — sem ela, o modelo pode regenerar regiões não relacionadas.
Geração em lote com concorrência segura para rate limits
Não dispare ingenuamente Promise.all() com 100 requisições — você vai bater rate limits. Use concorrência limitada.
Python — usando asyncio com semáforo
import asyncio
from openai import AsyncOpenAI
client = AsyncOpenAI(api_key=os.environ["OPENAI_API_KEY"])
async def generate_one(prompt: str, semaphore: asyncio.Semaphore):
async with semaphore:
result = await client.images.generate(
model="gpt-image-2",
prompt=prompt,
size="1024x1024",
quality="medium",
)
return result.data[0].b64_json
async def batch_generate(prompts: list[str], concurrency: int = 5):
semaphore = asyncio.Semaphore(concurrency)
tasks = [generate_one(p, semaphore) for p in prompts]
return await asyncio.gather(*tasks)
results = asyncio.run(batch_generate(["prompt 1", "prompt 2", ...]))Node.js — usando p-limit
import pLimit from 'p-limit';
const limit = pLimit(5); // 5 concurrent requests
const tasks = prompts.map((prompt) =>
limit(async () => {
const result = await client.images.generate({
model: 'gpt-image-2',
prompt,
size: '1024x1024',
quality: 'medium',
});
return result.data[0].b64_json;
})
);
const results = await Promise.all(tasks);Tratamento de erros para produção
A API pode falhar de várias formas distintas. Trate cada uma:
from openai import OpenAI, APIError, RateLimitError, APIConnectionError, BadRequestError
client = OpenAI(api_key=os.environ["OPENAI_API_KEY"])
def safe_generate(prompt: str, max_retries: int = 3):
for attempt in range(max_retries):
try:
result = client.images.generate(
model="gpt-image-2",
prompt=prompt,
size="1024x1024",
quality="medium",
)
return result.data[0].b64_json
except RateLimitError:
# 429 — wait and retry
wait = (2 ** attempt) * 5
print(f"Rate limited; waiting {wait}s")
time.sleep(wait)
except BadRequestError as e:
# 400 — usually a content policy violation, don't retry
print(f"Bad request: {e}")
return None
except APIConnectionError:
# network blip — retry
time.sleep(2 ** attempt)
except APIError as e:
# 500-level — retry with backoff
time.sleep(2 ** attempt)
return NoneOtimização de custo — táticas concretas
1. Escolha o tier de qualidade certo
| Tier | Custo por imagem (1024×1024) | Quando usar |
|---|---|---|
low | ~$0.011 | Rascunhos, testes A/B, iteração de prompt |
medium | ~$0.042 | Maioria dos casos de uso em produção |
high | ~$0.167 | Imagens hero finais, assets de resolução para impressão |
A maioria dos times paga demais por usar high como padrão. Use medium para ~95% do trabalho.
2. Itere com images.edit, não com images.generate
Uma edição direcionada custa o mesmo que uma geração, mas chega no resultado certo em 1 tentativa em vez de 5. Para refinamento multi-rodada, isso é 5× de economia.
3. Faça cache determinístico quando prompts se repetem
Se você gera o mesmo prompt repetidamente (por exemplo, previews de produto para usuários), faça cache por hash(prompt + size + quality) e sirva da sua CDN.
4. Use low para exploração de prompt e depois faça upgrade
Um workflow comum:
# Step 1: try 5 prompt variants at low quality ($0.05 total)
candidates = [generate(p, quality="low") for p in variants]
# Step 2: pick the best, regenerate at high quality
best_prompt = pick_winner(candidates)
final = generate(best_prompt, quality="high") # $0.167Custo total: ~$0.22 em vez de ~$0.84 se você tivesse rodado todas as 5 variantes em high.
5. Defina limites duros de gasto no painel da OpenAI
Não confie que seu código nunca terá bug — defina um teto de uso em platform.openai.com/account/billing/limits.
Status de geração via streaming (opcional)
Para lotes longos, você pode querer mostrar progresso. O endpoint de geração de imagem não é streamed, mas você pode envolver seu lote em reporting assíncrono de progresso:
let completed = 0;
const tasks = prompts.map((prompt) =>
limit(async () => {
const result = await client.images.generate({ /* ... */ });
completed++;
onProgress({ completed, total: prompts.length });
return result.data[0].b64_json;
})
);Erros comuns de integração
| Erro | O que acontece | Solução |
|---|---|---|
| Hard-coding da chave de API | Chave vaza pelo Git | Sempre use variáveis de ambiente |
Salvar em result.data[0].url | Campo nem sempre presente (depende do response_format) | Use b64_json e decodifique localmente |
| Enviar imagens enormes para edição | Lento + caro | Redimensione para 1024×1024 antes do upload |
| Ignorar erros 400 | Queima retentativas em falhas inconsertáveis | Distinga 4xx (não tente de novo) de 5xx (tente de novo) |
| Sem tratamento de rate limit | Picos disparam cascata de 429 | Use concorrência limitada por semáforo |
| Logar prompts completos em texto plano | Violação de privacidade se vier do usuário | Faça hash ou redact antes de logar |
Checklist pronto para produção
Antes de publicar uma integração com o GPT Image 2:
- Chave de API em variável de ambiente, nunca em código ou logs
- Tier de qualidade apropriado ao caso de uso (padrão
medium) - Concorrência limitada (
p-limit/Semaphore) para jobs em lote - Tratamento de erros distingue 4xx vs 5xx
- Teto de gasto definido no painel da OpenAI
- Input de usuário sanitizado contra violações de política
- Saída armazenada no seu próprio storage (sem depender de URLs da OpenAI)
- Camada de cache para prompts repetidos
- Monitoramento de custo por imagem e taxa de erro
Geração assíncrona com polling de tarefa (para setups de alta concorrência)
Para cargas de trabalho de produção de alto volume, alguns relays do GPT Image 2 oferecem um modelo assíncrono de tarefa: você submete a requisição, recebe um ID de tarefa imediatamente, e ou faz polling pela conclusão ou recebe um callback. Isso evita timeouts HTTP em lotes grandes.
Fluxo assíncrono típico:
# 1. Submit request → get task_id
response = client.images.generate(
model="gpt-image-2",
prompt="...",
size="1024x1024",
quality="high",
callback_url="https://your-app.com/api/image-callback", # optional
)
task_id = response.id
# 2. Poll task status every few seconds
while True:
status = client.images.retrieve(task_id)
if status.status == "completed":
image_url = status.data[0].url
break
elif status.status == "failed":
raise Exception(status.error)
time.sleep(3)O modo assíncrono é ideal para:
- Lojas de e-commerce gerando centenas de variantes de produto durante a noite
- Times de marketing rodando testes A/B de prompts
- Apps onde usuários pedem imagens e checam depois (notificações)
FAQ da API do GPT Image 2
P: Qual é o nome do modelo da API do GPT Image 2?
gpt-image-2. Use essa string exata em todas as requisições.
P: A API do GPT Image 2 suporta image-to-image / edição de imagem?
Sim. Use images.edit com o parâmetro image, ou passe image_urls (array de 1-16 imagens de referência) para relays que suportem. Imagens de referência são essenciais para consistência de personagem, design de IP e fotografia de produto.
P: A API do GPT Image 2 é gratuita? Não, é paga por token. Contas novas da OpenAI podem receber créditos de teste. Alguns relays de terceiros oferecem créditos de trial.
P: Quanto custa a API do GPT Image 2 por imagem? Aproximadamente $0.011 / $0.042 / $0.167 por imagem 1024×1024 nos tiers baixo / médio / alto respectivamente. Tamanhos maiores e imagens de referência custam mais.
P: Qual o tamanho máximo do prompt? Até 32.000 caracteres. Na prática, prompts acima de ~1.500 caracteres têm retornos decrescentes.
P: Como gero PNGs de fundo transparente com a API?
Defina background: "transparent" e output_format: "png".
P: Quais resoluções o GPT Image 2 suporta?
Presets comuns: 1024x1024, 1536x1024, 1024x1536. Alguns relays expõem níveis de resolução 1K / 2K / 4K para controle explícito.
P: Qual é o rate limit?
Depende do seu tier na OpenAI. O tier gratuito tem os limites mais rigorosos; o tier de uso escala com o tempo. Use concorrência limitada (p-limit / Semaphore) para ficar sob o limite.
P: Como trato erros da API do GPT Image 2? Distinga 4xx (não tente de novo — geralmente violações de política de conteúdo) de 5xx (tente de novo com backoff exponencial). Veja a seção de tratamento de erros acima.
P: Posso cancelar uma requisição em voo da API do GPT Image 2?
Para requisições síncronas, apenas fechando a conexão. Relays com modo assíncrono expõem um endpoint cancel que funciona enquanto a tarefa ainda está na fila.
P: A API suporta streaming? A geração de imagem em si não é streamed (você recebe a imagem completa no final). Para UI de progresso, envolva seu lote em um reporter de progresso customizado (veja "Status de geração via streaming" acima).
Quer um app de exemplo funcionando?
Para uma implementação de referência completa — Next.js + GPT Image 2 + Stripe + storage de imagens — explore gpt-image2.art e a página explore mostrando saídas reais.
Precisa de uma chave de API gerenciada com SLA?
Se você prefere pular o setup de conta, cobrança, problemas de região e ajuste de rate limit, pode comprar uma chave de API gerenciada do GPT Image 2 mandando email para support@gpt-image2.art. Oferecemos:
- Um endpoint de API estável com failover embutido
- Cobrança agregada na sua moeda local (sem precisar de transferência em dólares)
- Modo de tarefa assíncrona + suporte a callback prontos
- Preço de volume para times gerando mais de 10K imagens/mês
- Mesmo nome de modelo
gpt-image-2e mesma especificação de parâmetros da API oficial — compatível drop-in
Leitura adicional
images.edit, não com images.generate3. Faça cache determinístico quando prompts se repetem4. Use low para exploração de prompt e depois faça upgrade5. Defina limites duros de gasto no painel da OpenAIStatus de geração via streaming (opcional)Erros comuns de integraçãoChecklist pronto para produçãoGeração assíncrona com polling de tarefa (para setups de alta concorrência)FAQ da API do GPT Image 2Quer um app de exemplo funcionando?Precisa de uma chave de API gerenciada com SLA?Leitura adicionalMais Publicações

GPT Image 2 para E-commerce Cross-Border: Hero Images em 8 Idiomas
Use o GPT Image 2 no e-commerce internacional: gere uma hero image e adapte para 8 idiomas com texto correto. Ideal para Amazon, Shopee e TikTok Shop.

Biblioteca de Estilos do GPT Image 2: 12 Prompts de Arte Prontos para Copiar e Colar
Uma biblioteca curada de estilos do GPT Image 2 cobrindo 12 estilos artísticos populares — Studio Ghibli, cyberpunk, Wes Anderson e mais. Cada um com um prompt pronto.

GPT Image 2 vs Nano Banana 2 vs Midjourney v7 (2026)
GPT Image 2 vs Nano Banana 2 vs Midjourney v7 — qual modelo de geração de imagem por IA vence para texto, pôsteres, fotos e arte conceitual? Um guia prático de decisão para 2026.
Generate your first image with GPT Image 2 — right now
Reliable non-Latin text rendering, directed editing, and 50+ ready-to-use prompts. No downloads — just open in your browser.