API de geração de imagens
A API de imagens é compatível com o protocolo OpenAI Images. A lista abaixo contém oito modelos selecionados e verificados. Todos fazem text-to-image por generations; use /edits somente nos modelos explicitamente marcados.
Há dois endpoints disponíveis:
/v1/images/generations- gera imagens; alguns modelos também aceitam referências neste endpoint/v1/images/edits- edita imagens para os modelos explicitamente marcados abaixo, compatível com o uso nativo deeditsda OpenAI
| Modelo | Endpoint(s) compatível(is) | Limitação conservadora | Resolução |
|---|---|---|---|
gpt-image-2 | /generations, /edits | Edição com referência é compatível; resolution não seleciona tier | Use size para proporção ou dimensões em pixels |
gemini-3.1-flash-image-preview | /generations, /edits | Até 4 imagens de referência válidas | 1K / 2K / 4K |
gemini-2.5-flash-image | /generations, /edits | Até 4 imagens de referência válidas | Somente 1K |
gemini-3-pro-image-preview | /generations, /edits | Até 4 imagens de referência válidas | 1K / 2K / 4K |
grok-imagine-1.0 | /generations | Somente geração; suporte a referências não publicado | Sem tier público |
doubao-seedream-5-0-lite | /generations | Referências dependem de uma solicitação de geração válida e compatível | Sem tier público |
flux-2-pro | /generations | Referências dependem de uma solicitação de geração válida e compatível | Sem tier público |
midjourney | /generations | Somente prompt; sem referências | Sem tier público |
Endpoint e autenticação
POST https://api.icodeeasy.cc/v1/images/generations
POST https://api.icodeeasy.cc/v1/images/edits
Use https://api.icodeeasy.cc como Base URL principal. https://jp.icodeeasy.cc e https://sg.icodeeasy.cc são domínios de backup / fallback; mantenha o mesmo caminho ao trocar.
Headers da requisição:
- Authorization:
Bearer <your API Key>(obrigatório, começa comsk_) - Content-Type:
application/jsonpara JSON oumultipart/form-datapara upload de arquivos
POST /images/generationsePOST /images/editssem o prefixo/v1também são aceitos e têm o mesmo comportamento.
Dois formatos de corpo da requisição
A API aceita dois formatos de corpo da requisição:
- JSON (
Content-Type: application/json): coloque imagens de referência emimage_urlscomo URLs ou data URLs base64. É o formato mais comum. - multipart/form-data: envie imagens de referência por arquivos
image[]e coloque os outros parâmetros nos campos do formulário. Isso corresponde ao uso nativo deeditsda OpenAI e serve para uploads locais.
Parâmetros da requisição
- model (obrigatório): um dos oito IDs selecionados na tabela acima.
- prompt (obrigatório): descrição da imagem em inglês ou chinês. O upstream faz revisão de segurança de conteúdo; conteúdo rejeitado não é cobrado.
- n (padrão
1): número de imagens. A cobrança acumula por quantidade de imagens. - size (padrão
1:1): proporção de saída. Veja abaixo.autoé tratado como1:1; strings em pixels como1536x1024também são aceitas. - resolution (padrão
1k): Gemini 2.5 aceita somente1k; os modelos Gemini 3.x listados aceitam1k,2kou4k. Não use este campo para escolher tier emgpt-image-2. - quality (somente cobrança de
gpt-image-2):low,medium,highouauto. Não afeta a saída real e só decide o preço cobrado degpt-image-2. Modelos Gemini ignoram esse campo e usam preço fixo por modelo. - image_urls / image_input (opcional, JSON): imagens de referência para image-to-image, até 4 imagens. Os itens podem ser URLs públicas
https://...oudata:image/...;base64,...; valores mistos são permitidos. Os dois campos são aliases. - image[] (opcional, multipart): arquivos de imagem de referência para image-to-image. Vários arquivos são permitidos e equivalem ao formato de upload de
image_urls.
Nota sobre imagem de referência: URLs devem usar
https://(http é rejeitado); base64 deve ser um valor válidodata:image/*;base64,.
Proporções e resolução compatíveis
Proporções size compatíveis: 1:1 / 3:2 / 2:3 / 4:3 / 3:4 / 5:4 / 4:5 / 16:9 / 9:16 / 2:1 / 1:2 / 21:9 / 9:21 / auto.
gemini-2.5-flash-image aceita somente 1k. Os modelos Gemini 3.x listados aceitam 1k, 2k e 4k. gpt-image-2 usa size para proporção ou dimensões em pixels e não tem tier de resolução publicado.
Modos síncrono / assíncrono
Modo síncrono padrão: a requisição aguarda a geração da imagem terminar e retorna data[].url compatível com OpenAI.
Modo assíncrono: adicione ?async=1 à URL (true e yes também são aceitos). A API retorna task_id imediatamente, e você consulta o resultado por polling. Use quando não quiser manter uma conexão longa, precisar tratar progresso ou enviar lotes.
| Síncrono padrão | Assíncrono ?async=1 | |
|---|---|---|
| Return timing | Waits tens of seconds until image is ready | Returns immediately (< 1 second) |
| Status code | 200 | 202 |
| Response body | {"created":...,"data":[{"url":"..."}],"id":"..."} | {"status":"pending","task_id":"..."} |
| How to get image | Returned in one response | Poll GET /v1/images/tasks/{task_id} |
Exemplos de requisição
Minimal text-to-image, sync
curl -X POST https://api.icodeeasy.cc/v1/images/generations \
-H "Authorization: Bearer sk_xxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2",
"prompt": "an orange cat sitting on a windowsill watching the sunset, watercolor style"
}'
Especificar proporção e 2K com Gemini 3.x
curl -X POST https://api.icodeeasy.cc/v1/images/generations \
-H "Authorization: Bearer sk_xxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"model": "gemini-3.1-flash-image-preview",
"prompt": "a corgi astronaut on the moon, cinematic",
"size": "16:9",
"resolution": "2k"
}'
Gemini text-to-image
curl -X POST https://api.icodeeasy.cc/v1/images/generations \
-H "Authorization: Bearer sk_xxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"model": "gemini-3.1-flash-image-preview",
"prompt": "a futuristic coffee shop at sunrise, realistic photography",
"size": "16:9",
"resolution": "1k"
}'
Image-to-image using image URL (JSON)
curl -X POST https://api.icodeeasy.cc/v1/images/edits \
-H "Authorization: Bearer sk_xxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2",
"prompt": "make this person 70 years old",
"size": "1536x1024",
"image_urls": ["https://example.com/photo.png"]
}'
Image-to-image uploading a local file (multipart)
curl -X POST https://api.icodeeasy.cc/v1/images/edits \
-H "Authorization: Bearer sk_xxxxxxxx" \
-F "model=gpt-image-2" \
-F "prompt=make this person 70 years old" \
-F "size=1536x1024" \
-F "image[]=@/path/to/photo.png"
Image-to-image with multiple references (URL + base64 mixed)
curl -X POST https://api.icodeeasy.cc/v1/images/edits \
-H "Authorization: Bearer sk_xxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2",
"prompt": "merge these two photos into a poster",
"size": "4:3",
"image_urls": [
"https://example.com/photo-a.jpg",
"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA..."
]
}'
Async submit + polling
# 1) Submit and get task_id immediately
curl -X POST "https://api.icodeeasy.cc/v1/images/edits?async=1" \
-H "Authorization: Bearer sk_xxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2",
"prompt": "make this person 70 years old",
"image_urls": ["https://example.com/photo.png"]
}'
# -> {"status":"pending","task_id":"d142c93a-..."}
# 2) Poll until completed
curl "https://api.icodeeasy.cc/v1/images/tasks/d142c93a-..." \
-H "Authorization: Bearer sk_xxxxxxxx"
# -> {"status":"completed","result_url":"https://...png","cost":0.2,...}
Estrutura da resposta
Sync success (HTTP 200, OpenAI Images compatible):
{
"id": "3e0c77bb-9cbd-4c44-9549-bff1b4060623",
"created": 1781599773,
"data": [
{
"url": "https://api.icodeeasy.cc/v1/images/files/gpt-image-2/20260616/3e0c77bb-...-1.png"
}
]
}
Async submit (HTTP 202):
{ "status": "pending", "task_id": "d142c93a-de26-40c9-be62-0de840d10960" }
Async task query (GET /v1/images/tasks/{task_id}):
{
"task_id": "d142c93a-de26-40c9-be62-0de840d10960",
"status": "completed",
"model": "gpt-image-2",
"cost": 0.2,
"result_url": "https://api.icodeeasy.cc/v1/images/files/gpt-image-2/20260616/d142c93a-...-1.png"
}
- status:
pending/completed/failed - data[].url / result_url: image URL, usable directly in
<img src> - id / task_id: task ID for support troubleshooting
A API sempre retorna URLs e não suporta
response_format: b64_json. Baixe a imagem você mesmo se precisar dos bytes.
Comportamento da URL da imagem
data[].url looks like https://api.icodeeasy.cc/v1/images/files/gpt-image-2/YYYYMMDD/<id>-<seq>.png:
- Abrir diretamente:
GETretorna 302 e redireciona para a URL real da imagem - Forçar download: adicione
?download=1 - Disponibilidade de longo prazo: o link permanece disponível por longo prazo
- Controle de acesso: este caminho não exige API Key; o link completo funciona como credencial. Não publique links de resultado gerado, porque qualquer pessoa com a URL completa pode baixar a imagem.
Semântica síncrona e timeout
No modo síncrono padrão, a requisição fica aberta até a imagem ficar pronta:
- Timeout HTTP recomendado no cliente: pelo menos 200 segundos
- Uma imagem geralmente leva de 30 a 60 segundos; image-to-image, 2K ou múltiplas imagens podem levar mais tempo
- Se não quiser esperar em uma conexão longa, use modo assíncrono (
?async=1) para obter umtask_ide consultar depois
Resposta de erro
Error bodies use:
{
"error": {
"type": "server_error",
"message": "...",
"provider": "icodeeasy.cc"
}
}
Common statuses:
- 400 invalid_request_error: invalid parameters, unsupported ratio, more than 4 reference images, non-https reference URL, invalid base64, and similar issues
- 401 authentication_error: missing or invalid API Key
- 402 payment_required: insufficient balance or exhausted monthly quota
- 429 rate_limit_error: rate limit exceeded
- 5xx: service temporarily unavailable or generation failed; retry later
Requisições com falha não são cobradas e não descontam saldo.
Cobrança
A cobrança é fixa por quantidade de imagens x modelo / tier em CNY e não depende de tokens.
gpt-image-2 é cobrado por quality tier:
- low: CNY 0.10 / image
- medium / auto (default): CNY 0.20 / image
- high: CNY 0.40 / image
Modelos de imagem Gemini são cobrados por preço fixo por modelo:
| Model | Price |
|---|---|
gemini-2.5-flash-image | CNY 0.20 / image |
gemini-3.1-flash-image-preview | CNY 0.30 / image |
gemini-3-pro-image-preview | CNY 0.50 / image |
Em Usage Details, a requisição é registrada com o model real, e cost_breakdown inclui image_count, image_cost_rmb e image_urls, então você pode copiar links ou baixar imagens do histórico.
Diferenças em relação à OpenAI Images API
- Model: use um dos oito IDs selecionados acima; não há
gpt-image-1nemdall-e-3 - Endpoints: todos os modelos selecionados aceitam
generations; useeditssomente nos modelos explicitamente marcados acima - size: aspect ratios such as
16:9are recommended; pixel strings are also accepted - resolution: Gemini 2.5 aceita somente
1k; os Gemini 3.x listados aceitam1k,2ke4k;gpt-image-2não tem tier de resolução publicado - quality:
low,medium,high, orauto; billing only, different from OpenAIstandard/hd - response_format:
b64_jsonis not supported; URLs are always returned - Reference images: apenas modelos marcados acima as aceitam; solicitações compatíveis usam
image_urls/image_input(JSON) ouimage[](multipart), dentro dos limites do modelo - Modo assíncrono: a OpenAI não possui esse modo; esta API aceita
?async=1, retornatask_ide consulta/v1/images/tasks/{id}para obter o resultado - Task ID: responses include
id/task_idfor troubleshooting
Guias relacionados
API de geração de vídeo
Crie tarefas de vídeo com texto, quadros inicial e final ou referências; acompanhe o status, baixe o resultado e exclua tarefas concluídas.
API de Consulta de Saldo
Consulte o saldo com token Bearer para ver saldo em CNY, cota diária do plano, vencimento e o significado dos campos da resposta.