Pular para o conteúdo principal

O text-to-image GPT Image 2 da OpenAI, capaz de escrever texto legível na imagem. Escolha qualidade low, medium ou high, um nível de tamanho 1K, 2K ou 4K e uma de 15 proporções, e receba de 1 a 10 imagens em PNG, JPEG ou WebP.

A partir de $0.0018/imagem20% abaixo do preço oficial

Playground

Enviar uma requisição

Início rápido

Os exemplos usam as definições públicas de parâmetros do endpoint selecionado. Troque a chave de API e as mídias de exemplo e envie a requisição a partir do seu servidor.

SDKs e integrações
POSThttps://api.spicyapi.ai/api/v1/jobs/createTask

Autenticação da API

Guarde a chave de API na variável de ambiente do servidor SPICY_API_KEY. Use autenticação Bearer e Content-Type: application/json nas requisições JSON.

Authorization: Bearer $SPICY_API_KEY
GPT Image 2 · Text to Image · Resultado de exemplo
Resultado de exemploUsar este exemplo
# 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"

Gerado a partir do schema de entrada deste modelo — o mesmo que a API usa para validar cada requisição.

Parâmetros de entrada

Coloque estes campos no objeto input do corpo da requisição. Nomes e tipos são os mesmos da API. Quando nenhum valor padrão estiver indicado, não presuma que exista um.

promptstringObrigatório

Até 5.000 caracteres. Coloque entre aspas duplas cada palavra que deve aparecer na imagem e diga onde ela fica; o resto é lido como descrição. Os primeiros 100 tokens de entrada do prompt estão incluídos no preço da imagem; prompts mais longos acrescentam uma pequena taxa por token extra, mostrada no orçamento. Texto em chinês, japonês ou coreano conta cerca de um token por caractere; os demais, cerca de um token a cada quatro caracteres.

Valor padrão
Não especificado
Restrições
minLength:1
maxLength:5000
official_fallbackbooleanOpcional

Ligado por padrão. Uma solicitação de uma única imagem PNG em qualidade medium e tamanho 1k, em qualquer proporção exceto 21:9, 9:21, 3:1 e 1:3 passa primeiro pela rota econômica. Se essa rota não conseguir concluí-la, por exemplo porque recusa o prompt, a solicitação é executada de novo na rota oficial e cobrada pelo preço oficial em vez do econômico. As demais solicitações passam pela rota oficial desde o início. Desligue-o para pagar só o preço econômico: solicitações que a rota econômica não atende são recusadas, e as que ela aceita ainda podem ser recusadas ou falhar.

Valor padrão
true
output_qualityintegerOpcional

Qualidade de compressão para jpeg e webp, de 0 a 100: valores mais altos preservam mais detalhe e geram arquivos maiores. Não é usada com png e não altera o preço.

Valor padrão
Não especificado
Restrições
minimum:0
maximum:100
output_formatstringOpcional

png (padrão), jpeg ou webp. Não altera o preço.

Valor padrão
"png"
Valores permitidos
"png""jpeg""webp"
num_outputsintegerOpcionalAfeta o preço

De 1 a 10 imagens por solicitação, 1 por padrão. Cada imagem é cobrada separadamente.

Valor padrão
1
Restrições
minimum:1
maximum:10
qualitystringOpcionalAfeta o preço

low, medium (padrão) ou high. A OpenAI cobra por tokens de saída, então no mesmo tamanho cada nível custa de quatro a nove vezes o anterior: low para rascunhos, medium para a maioria das versões finais, high quando texto miúdo e pele precisam aguentar o close.

Valor padrão
"medium"
Valores permitidos
"low""medium""high"
resolutionstringOpcionalAfeta o preço

1k (padrão), 2k ou 4k. Uma imagem quadrada tem 1024, 2048 ou 2880 pixels de lado; um nível maior custa mais por imagem. Na rota econômica, uma imagem 1k pode sair um pouco maior.

Valor padrão
"1k"
Valores permitidos
"1k""2k""4k"
aspect_ratiostringOpcionalAfeta o preço

Quinze proporções de 1:3 a 3:1, 1:1 por padrão. A proporção muda o preço: uma imagem larga ou alta custa menos que um quadrado no mesmo nível.

Valor padrão
"1:1"
Valores permitidos
"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"

Acompanhar tarefa

HTTP 202 quer dizer que a tarefa foi aceita, não que terminou. Guarde o taskId devolvido e consulte essa tarefa. Não crie outra enquanto espera o resultado.

Requisição aceita
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"
  }
}

A resposta de aceitação já traz a estimativa, para que o seu aplicativo mostre o mesmo valor no histórico de tarefas e na cobrança.

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

Comece consultando a cada 2 segundos, mais ou menos, e vá espaçando. Pare em um estado final. Se a conexão cair, consulte o taskId original. Só recrie a tarefa com a chave de idempotência e o corpo originais.

Ou receba o resultado por callback
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);
});

Passe callBackUrl ao criar a tarefa e o registro concluído chega até você via POST — sem nenhum laço de polling. Toda entrega traz X-Webhook-Timestamp, X-Webhook-Signature e X-Webhook-Payload-Version. A assinatura é um HMAC-SHA256 em base64 sobre taskId.timestamp.sha256(body), então confira contra os bytes brutos: se você analisar o JSON e serializar de novo, os bytes mudam e a verificação falha. Entregas com erro são repetidas, ou seja, o mesmo taskId pode chegar duas vezes — deixe seu handler idempotente. Responda 2xx primeiro e faça o trabalho depois; um handler lento conta como entrega falha.

Ler resultado

Só consuma output quando state for succeeded. Em caso de falha, use errorCode, errorMessage e request_id para investigar. Os custos e estados de exemplo não representam uma cobrança real.

Exemplo de resposta concluída
{
  "code": 200,
  "msg": "success",
  "request_id": "req_example_record",
  "data": {
    "taskId": "job_01k3m8x9q2z4v7n5p6r8s0t1w3",
    "model": "openai/gpt-image-2/text-to-image",
    "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"
  }
}

Para cada arquivo disponível, abra ou baixe assets[].url direto, sem o cabeçalho Authorization da API. O link assinado expira em expiresAt: consulte a tarefa de novo para renovar enquanto o arquivo estiver dentro do prazo de retenção. Arquivo pendente ou indisponível não tem URL. Trate os links assinados como dado privado.

SDKs e integrações

Use a SpicyAPI no seu app, terminal, assistente de IA ou fluxo visual. Escolha um guia de configuração.

Use no ComfyUI

Instale os nós da SpicyAPI pelo ComfyUI Manager ou com o comando abaixo e procure por GPT Image 2 · Text to Image no canvas. O nó tem as mesmas opções desta página e mostra o preço antes da execução.

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