Tema
Idioma

Geração de imagens (API OpenAI Images)

Geração síncrona de imagens no formato da API OpenAI Images: parâmetros, uma espera de até 300 segundos, cobrança somente por uma imagem concluída e configuração do Cherry Studio. A edição é feita por meio de /api/media/generate de forma assíncrona.

POST /v1/images/generations gera imagens no formato da API OpenAI Images: você envia uma solicitação e recebe a imagem na mesma resposta. Ele é um adaptador sobre a mesma fila que POST /api/media/generate: os modelos, o preço, a verificação de saldo, o failover de fornecedores e a cobrança são compartilhados, portanto a mesma geração custa o mesmo nos dois endereços.

POSThttps://getvibeapi.com/v1/images/generations
curl https://getvibeapi.com/v1/images/generations \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"nano-banana","prompt":"a red bicycle on a bridge","n":1,"size":"1024x1024"}'

Resposta (HTTP 200):

{
  "created": 1792706400,
  "data": [{ "url": "https://getvibeapi.com/media/r/…/0.png" }]
}

Passe a chave como Authorization: Bearer sk-pv-… ou x-api-key. O SDK oficial da OpenAI funciona sem alterações:

from openai import OpenAI

client = OpenAI(base_url="https://getvibeapi.com/v1", api_key="sk-pv-...", timeout=600)
image = client.images.generate(model="nano-banana", prompt="a red bicycle on a bridge", size="1024x1024")
print(image.data[0].url)

Parâmetros do corpo

ParâmetroTipoDescrição
modelreq.stringUm id de modelo de imagem de /api/media-catalog (kind: "image"), por exemplo, nano-banana, gpt-image-2, flux-2. Um id com prefixo do fornecedor (google/nano-banana) e uma variante fixada (gpt-image-2:network) também são aceitos. Modelos de vídeo e áudio são recusados aqui com 400.
promptreq.stringDescrição da imagem.
nnumberSomente 1: cada geração é uma tarefa separada com seu próprio preço. Para gerar várias imagens, envie várias solicitações.
sizestringÉ considerado como uma proporção de aspecto: 1024x1024 → 1:1, 1792x1024 → 16:9, 1024x1792 → 9:16, 1536x1024 → 3:2, 1024x1536 → 2:3; outros valores são reduzidos exatamente (1920x1080 → 16:9). Uma proporção que o modelo não oferece é recusada com a lista de tamanhos compatíveis — não há substituição pela correspondência mais próxima. "auto" ou a ausência do campo significa o padrão do modelo.
qualitystringSomente para modelos com um parâmetro de qualidade no catálogo; um valor incompatível é recusado. "auto" o omite.
response_format"url" | "b64_json"url por padrão. b64_json retorna o arquivo no corpo da resposta (até 20 MB).
userstringAceito e ignorado.

Campos desconhecidos e background, style, output_format, output_compression, moderation, stream e partial_images são recusados com 400 pelo nome, em vez de serem descartados silenciosamente — caso contrário, você pagaria por uma imagem que não pediu. Modelos que precisam de uma imagem de origem (edição, aumento de resolução, preenchimento) não funcionam neste endereço, porque não há como passar uma imagem aqui; use POST /api/media/generate.

Espera e tempo limite

A solicitação permanece aberta até a conclusão da tarefa, por até 300 segundos. O tempo mediano é de 15 a 85 segundos, dependendo do modelo; gerações individuais nos modelos mais lentos levam de 3 a 4 minutos. Defina o tempo limite do cliente como pelo menos 300 segundos (o padrão do SDK da OpenAI é 600).

  • Toda resposta, incluindo erros após a criação da tarefa, contém o cabeçalho x-pv-media-job-id com o id da tarefa.
  • Se a tarefa não for concluída em 300 segundos, a resposta será 504 com cause: image_generation_timeout e o id da tarefa na mensagem. A geração continua em execução: obtenha-a em GET /api/media/jobs/{id}.
  • Se a conexão cair (tempo limite do app, rede), a tarefa ainda será concluída. GET /v1/images/generations?limit=20 (até 100) lista as imagens recentes desta chave com o status, os links e o valor cobrado cost_rub.

Faturamento

Nada é cobrado no envio. Somente uma geração concluída com sucesso é cobrada, pelo mesmo preço de /api/media-catalog e da cotação de POST /api/media/price. Uma geração malsucedida retorna 502 com a mensagem "Nothing was charged" e não custa nada. O valor cobrado é retornado no cabeçalho x-pv-cost-rub. Se o saldo não puder cobrir a geração, a resposta será 402 antes do início de qualquer tarefa.

Os links em data[].url apontam para nosso domínio e ficam disponíveis por 7 dias após a conclusão da geração; depois respondem 410 media_result_expired. Salve os arquivos do seu lado.

Erros

ParâmetroTipoDescrição
400invalid_request_errorInvalid body: unknown_parameter, unsupported_parameter, unsupported_n, unsupported_size, unsupported_quality, unsupported_model_kind. Fix the request.
401 / 403authentication_error / permission_errorChave inválida ou o IP que fez a chamada não está na lista de permissões da chave.
402insufficient_quotaSaldo insuficiente para esta geração. Nenhuma tarefa foi criada.
404not_found_errormodel_not_found — não há nenhum modelo de imagem com esse nome. Consulte /api/media-catalog.
429rate_limit_errorLimite de taxa de mídia; tente novamente após Retry-After.
502upstream_errorA geração falhou. Nada foi cobrado; você pode tentar novamente.
503upstream_errorO modelo está indisponível em todos os fornecedores no momento. Nenhuma tarefa foi criada; tente novamente mais tarde ou escolha outro modelo.
504upstream_errorimage_generation_timeout — o trabalho ainda está em execução; recupere-o pelo ID indicado por x-pv-media-job-id.

Apps para desktop (Cherry Studio e outros)

Qualquer app que possa gerar imagens por meio de um provedor compatível com OpenAI funciona. Usando o Cherry Studio como exemplo:

  1. Adicione um provedor do tipo OpenAI com o endereço da API https://getvibeapi.com (o app adiciona /v1 por conta própria) e sua chave sk-pv-….
  2. Adicione o modelo manualmente, usando um id de https://getvibeapi.com/api/media-catalog (somente entradas com kind: "image"), por exemplo, nano-banana ou gpt-image-2. A lista de modelos do app mostra modelos de texto; os modelos de mídia não aparecem nela.
  3. Gere a partir do recurso de pintura / geração de imagens do app, não a partir do chat comum. O chat envia a solicitação para /v1/chat/completions, onde os modelos de imagem não funcionam.
  4. Se o app permitir definir um tempo limite da solicitação, defina-o como pelo menos 300 segundos. Uma imagem da qual o app desistiu aparece em GET /v1/images/generations. Tentar novamente pelo app cria uma nova geração, que é cobrada separadamente.

O modo que edita uma imagem enviada em aplicativos desse tipo é chamado de /v1/images/edits, que também é disponibilizado (veja abaixo).

Editing: /v1/images/edits

POST /v1/images/edits recebe a solicitação do SDK da OpenAI (multipart/form-data: o arquivo em image, ou vários arquivos em image[], com prompt, model, size, quality e response_format) ou JSON com images: [{"image_url": "…"}]. Ele funciona como a geração acima: a mesma resposta, o mesmo tempo de espera, o mesmo x-pv-media-job-id e o mesmo preço que POST /api/media/generate com uma imagem de origem; uma edição malsucedida não é cobrada. O modo de edição do modelo é escolhido no catálogo. Um mask é recusado com 400 unsupported_parameter, e um modelo que não aceita imagem de origem com model_cannot_edit. Para uma edição com máscara, use POST /api/media/generate e consulte GET /api/media/jobs/{id} — veja o guia de geração assíncrona. Vídeos não são gerados de forma síncrona: /v1/video/generations e /v1/videos também respondem com 410 (detalhes).

ID do Nano Banana Pro

No catálogo e em códigos novos, use nano-banana-pro. Para migrar clientes assíncronos existentes, o valor gemini-3-pro-image ainda é aceito apenas no campo model da solicitação /api/media/generate e é resolvido para o mesmo modelo público. Ele não é publicado na descoberta nem nos preços.

Geração de imagens do GetVibe API — API Images compatível com OpenAI | GetVibe API