modelos

OpenAI: GPT-5.4 Image 2

Markdown · JSON

OpenAI: GPT-5.4 Image 2

Un flujo que combina el razonamiento textual de GPT-5.4 con la generación y edición de imágenes de GPT Image 2. Utiliza unas instrucciones escritas y referencias visuales para desarrollar una ilustración o una edición, manteniendo distintas las funciones de los componentes textual y de imagen.

Sobre el modelo

Esta descripción cubre las capacidades del modelo. Las entradas, salidas y opciones disponibles en Ailoot se indican a continuación para el método seleccionado.

GPT-5.4 Image 2 describe un flujo que combina el modelo textual GPT-5.4 de OpenAI con GPT Image 2 para generación y edición de imágenes. Los componentes tienen funciones distintas: GPT-5.4 puede interpretar un encargo y desarrollar las instrucciones escritas, mientras que GPT Image 2 crea o modifica una imagen. GPT-5.4 acepta texto e imágenes y produce texto; GPT Image 2 acepta entradas de texto e imágenes y produce imágenes.

Para un nuevo elemento visual, describe su propósito, su sujeto, su composición, su estilo y los detalles relevantes para el resultado. Un ejemplo de tarea consiste en preparar la ilustración de un artículo: define la idea que debe comunicar la imagen, el recorte previsto y el espacio necesario para el texto que la acompaña en la página. La etapa escrita puede organizar esos requisitos en unas instrucciones claras. La etapa de imagen utiliza las instrucciones textuales y las referencias, si las hay, para crear el elemento visual.

Para una edición, proporciona la imagen de origen y separa los cambios solicitados de los elementos que deben conservarse. GPT Image 2 procesa automáticamente las imágenes de entrada con alta fidelidad, lo que permite ediciones sensibles a los detalles y flujos basados en referencias. El fabricante documenta la edición de zonas de una imagen y el trabajo con referencias de imagen. Una máscara puede orientar la zona que se edita, pero el enmascaramiento de GPT Image se basa en las instrucciones textuales y puede no seguir exactamente la forma de la máscara. El flujo de máscara documentado requiere que la imagen de destino y la máscara coincidan en formato y dimensiones, que la máscara tenga un canal alfa y que los archivos sean de menos de 50 MB.

GPT Image 2 admite las opciones de calidad low, medium, high y selección automática. Sus tamaños personalizados requieren que ambos lados sean múltiplos de 16 píxeles, que ningún lado supere los 3.840 píxeles, que la relación de aspecto no sea más extrema que 3:1 y que el tamaño total esté entre 655.360 y 8.294.400 píxeles. Los ejemplos documentados incluyen 1.024 × 1.024, 1.536 × 1.024, 2.048 × 2.048 y 3.840 × 2.160. Elige las dimensiones según el destino en lugar de suponer que todos los elementos visuales deben ser cuadrados. En el perfil de salida de Image API documentado por el proveedor, PNG es el formato predeterminado y también están disponibles JPEG y WebP. JPEG y WebP admiten un ajuste de compresión de 0 a 100.

El componente textual tiene su propia especificación. La ventana de contexto publicada de GPT-5.4 es de 1.050.000 tokens, su salida máxima es de 128.000 tokens y su fecha límite de conocimientos es el 31 de agosto de 2025. Sus opciones de esfuerzo de razonamiento son none, low, medium, high y xhigh, con none como valor predeterminado. El proveedor incluye la generación de imágenes entre las herramientas de GPT-5.4, mientras que Image API también proporciona operaciones separadas de generación y edición. Estas funciones documentadas de los componentes no convierten el nombre combinado en un nuevo modelo independiente con un único límite compartido de texto e imagen.

La guía de imágenes describe limitaciones en la colocación precisa del texto, la coherencia visual recurrente y la composición exacta. Prepara texto breve y claramente especificado cuando la rotulación importe, proporciona la referencia pertinente para un sujeto recurrente e identifica explícitamente las restricciones de composición. Revisa la imagen generada o editada frente a esos requisitos. Un resultado útil puede incluir las instrucciones escritas, la imagen y una lista concreta de cambios para la siguiente edición, vinculando el elemento visual con el propósito editorial o de producto original.

Tarea práctica

Tarea práctica

Ejemplo técnico en inglés

Revise an editorial illustration crop

Edit the supplied article illustration for a landscape header. Preserve the central paper boat's shape, folded edges and blue color. Extend the calm water naturally to the left and leave that side visually quiet for page text added later. Keep the existing light direction and add no words, logos, people or extra boats.

Resultado esperado

An edited landscape image with the original boat preserved and clear composition space on the left.

Comprobar el resultado

Compare boat details and light direction with the source, and inspect the added water for repeated or distorted elements.
Ailoot Ultra · OpenAI Chat POST /v1/chat/completions openai/gpt-5.4-image-2

openai/gpt-5.4-image-2

OpenAI /openai/gpt-5.4-image-2

Primeros pasos

Un flujo que combina el razonamiento textual de GPT-5.4 con la generación y edición de imágenes de GPT Image 2. Utiliza unas instrucciones escritas y referencias visuales para desarrollar una ilustración o una edición, manteniendo distintas las funciones de los componentes textual y de imagen.

Entradas aceptadas
Texto
Resultados
Texto

Disponible en Ailoot · entradas y métodos

Ailoot Ultra · OpenAI Chat POST /v1/chat/completions
Tipos de entrada
text
Tipos de salida
text
Formato de salida
json o SSE
CampoTipoRequisitoValores y límitesPredeterminado
CampomodelTipostringRequisitoObligatorioValores y límites
openai/gpt-5.4-image-2
Predeterminado—
CampomessagesTipomessage[]RequisitoObligatorioValores y límites
Número mínimo de elementos: 1
Predeterminado—
Campomessages[].roleTipostringRequisitoObligatorioValores y límites
Ejemplos: system, user, assistant, tool, function
Condiciones: Estos roles están representados explícitamente por los tipos de compatibilidad del código fuente; el conjunto exacto de roles depende del modelo.
Depende del modelo
Predeterminado—
Campomessages[].contentTipostring|content_part[]|nullRequisitoOpcionalValores y límitesPredeterminado—
Campomessages[].tool_callsTipotool_call[]RequisitoOpcionalValores y límitesPredeterminado—
Campomessages[].tool_call_idTipostringRequisitoOpcionalValores y límites
Se aplica cuando: role=tool; utiliza el ID real devuelto
Predeterminado—
Campomessages[].nameTipostringRequisitoOpcionalValores y límitesPredeterminado—
Campomessages[].reasoning_contentTipostringRequisitoOpcionalValores y límites
Se aplica cuando: Devuelve en los turnos siguientes el razonamiento realmente recibido cuando este modelo lo utilice
Predeterminado—
Campomessages[].reasoning_detailsTipoobject|arrayRequisitoOpcionalValores y límites
Depende del modelo
Predeterminado—
Campomax_tokensTipointegerRequisitoOpcionalValores y límites
Mínimo: 1
Depende del modelo
Predeterminado—
Campomax_completion_tokensTipointegerRequisitoOpcionalValores y límites
Mínimo: 1
Depende del modelo
Predeterminado—
CampostreamTipobooleanRequisitoOpcionalValores y límitesPredeterminadofalse
Campostream_options.include_usageTipobooleanRequisitoOpcionalValores y límites
Depende del modelo
Predeterminado—
CampotemperatureTiponumberRequisitoOpcionalValores y límites
Depende del modelo
Predeterminado—
Campotop_pTiponumberRequisitoOpcionalValores y límites
Depende del modelo
Predeterminado—
CampostopTipostring|string[]RequisitoOpcionalValores y límites
Depende del modelo
Predeterminado—
CampotoolsTipofunction_tool[]RequisitoOpcionalValores y límites
Depende del modelo
Predeterminado—
Campotools[].typeTipostringRequisitoOpcionalValores y límites
function
Depende del modelo
Predeterminado—
Campotools[].function.nameTipostringRequisitoObligatorioValores y límites
Se aplica cuando: herramienta de función proporcionada
Predeterminado—
Campotools[].function.descriptionTipostringRequisitoOpcionalValores y límitesPredeterminado—
Campotools[].function.parametersTipoJSON_schemaRequisitoOpcionalValores y límitesPredeterminado—
Campotool_choiceTipostring|objectRequisitoOpcionalValores y límites
Depende del modelo
Predeterminado—
Campoparallel_tool_callsTipobooleanRequisitoOpcionalValores y límites
Depende del modelo
Predeterminado—
Camporesponse_formatTipoobjectRequisitoOpcionalValores y límites
Depende del modelo
Predeterminado—
Camporeasoning_effortTipostringRequisitoOpcionalValores y límites
Depende del modelo
Predeterminado—
CamporeasoningTipoobjectRequisitoOpcionalValores y límites
Depende del modelo
Predeterminado—
Camposervice_tierTipostringRequisitoOpcionalValores y límites
Depende del modelo
Predeterminado—
CampoinstructionsTipostringRequisitoOpcionalValores y límites
Campo de compatibilidad
Predeterminado—
CampofunctionsTipofunction[]RequisitoOpcionalValores y límites
Depende del modelo
Predeterminado—
Campofunction_callTipostring|objectRequisitoOpcionalValores y límites
Depende del modelo
Predeterminado—
Campoprompt_cache_optionsTipoobjectRequisitoOpcionalValores y límites
Depende del modelo
Predeterminado—
CampomodalitiesTipostring[]RequisitoOpcionalValores y límites
text
Predeterminado—
CampoproviderTipoobjectRequisitoOpcionalValores y límites
Condiciones: provider.options se rechaza en esta ruta de texto Ultra
Predeterminado—
Campocache_control.ttlTipostringRequisitoOpcionalValores y límites
Condiciones: 1h se rechaza en los campos reales de caché de instrucciones
Predeterminado—
Combinaciones de materiales de entrada

Texto · Texto UTF8

messages[].content

Parámetros del método y ciclo de vida
ParámetroContrato
Parámetrocontent_typeContratoapplication/json
ParámetrorequiredContratomodel, messages
Parámetromaterial_typesContratotext
ParámetromessagesContratomatriz de mensajes con estructura role/content
Parámetrofile_materialContratodocumento real en UTF-8 insertado como texto literal; no se deduce ningún ID de archivo
Parámetrooptional_controlsContratostream, temperature, top_p, stop, max_tokens, max_completion_tokens, reasoning, response_format, tools, tool_choice
Parámetrocontrol_scopeContratodepende del modelo; las herramientas de funciones del usuario difieren de las herramientas alojadas
Parámetrooutput_modalitiesContratotext
Parámetrohosted_operationsContratofalse
Parámetromultimodal_input_bindingContratonull

Ciclo de vida: synchronous_or_streamed

Envía el ID exacto del modelo junto con messages.

La longitud del contexto no es un límite máximo de salida.

Un archivo de texto puede aportar texto literal; las entradas de imagen, audio u objetos de archivo requieren una vinculación exacta.

Planes

Las referencias tarifarias no añaden opciones a la solicitud. Los parámetros admitidos se indican en el método seleccionado.

Modo rápido
Tarifa estándar Cuando se selecciona el modo rápido
Modo flex
Tarifa estándar Cuando se selecciona el modo flex
Esfuerzo máximo de razonamiento
Tarifa estándar Cuando el esfuerzo máximo de razonamiento utiliza el ajuste predeterminado (default)
Esfuerzo de razonamiento · alto
Tarifa estándar Cuando el esfuerzo de razonamiento es alto
Esfuerzo de razonamiento · bajo
Tarifa estándar Cuando el esfuerzo de razonamiento es bajo
Esfuerzo de razonamiento · medio
Tarifa estándar Cuando el esfuerzo de razonamiento es medio
Esfuerzo de razonamiento · ninguno
Tarifa estándar Cuando no hay esfuerzo de razonamiento
Esfuerzo de razonamiento · xhigh
Tarifa estándar Cuando el esfuerzo de razonamiento es xhigh

Tarifas de Ailoot

Precios por configuración

Relaciona cada cargo con las condiciones mostradas. Usa una tarifa para cada conjunto de configuraciones alternativas.

ConfiguraciónTabla de tarifasTokens de contexto, más deTokens de contexto, hasta inclusiveCargo
ConfiguraciónTarifas base por tokenTabla de tarifasTarifa baseTokens de contexto, más de—Tokens de contexto, hasta inclusiveSin límite superiorCargo
Entrada · Tokens de entrada $0.016 / 1K tokens
Salida · Tokens de salida $0.03 / 1K tokens
Entrada · Lectura de caché $0.004 / 1K tokens
Entrada · Escritura en caché — / 1K tokens
Entrada · Escritura en caché, 1 hora — / 1K tokens
Salida · Tokens de salida de imagen $0.06 / 1K tokens de imagen
ConfiguraciónTramo 1 por longitud de la solicitudTabla de tarifas—Tokens de contexto, más de0Tokens de contexto, hasta inclusiveSin límite superiorCargo
Entrada · Tokens de entrada $0.016 / 1K tokens
Salida · Tokens de salida $0.03 / 1K tokens
Entrada · Lectura de caché $0.004 / 1K tokens
Entrada · Escritura en caché — / 1K tokens
Entrada · Escritura en caché, 1 hora — / 1K tokens

Detalles de la tarifa de referencia

Las tablas de referencia del modelo no cambian la selección del método, las estimaciones de coste ni los cargos. Los cargos aplicados usan las tarifas del método Ailoot seleccionado.

OpenAI: GPT-5.4 Image 2

Precios por configuración

ConfiguraciónCondiciones de facturaciónCargo
ConfiguraciónOpenAI: GPT-5.4 Image 2 · Configuración predeterminadaCondiciones de facturaciónConfiguración predeterminadaCargo
Entrada · Tokens de entrada 0,016 US$ / 1K tokens
Salida · Tokens de salida 0,03 US$ / 1K tokens
Salida · Imagen de salida 0,06 US$ / 1K tokens
Salida · Búsqueda web 0,02 US$ por búsqueda
Entrada · Lectura de caché 0,004 US$ / 1K tokens

Ailoot reserva un importe estimado antes de la solicitud. Tras obtener el resultado, liquida el cargo definitivo según el uso medido. En las respuestas en flujo, la liquidación usa el registro de uso final. Cómo funcionan la reserva y la liquidación →

Solicitudes de ejemplo

Ailoot Ultra · OpenAI Chat

curlPython SDKFlujo en Python
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "openai/gpt-5.4-image-2", "messages": [{"role": "user", "content": "Explain the difference between an observation and a hypothesis in three sentences."}]}')

Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
r=json.loads(Path("result.json").read_text())
for x in r.get("choices",[]):
    if x.get("message",{}).get("content"): print(x["message"]["content"])
PY_RESULT
from openai import OpenAI
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
result=client.chat.completions.create(model='openai/gpt-5.4-image-2',messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}])
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(result.to_dict(mode="json"))
from openai import OpenAI
import os
from pathlib import Path

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

with client.chat.completions.stream(model='openai/gpt-5.4-image-2',messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}]) as stream:
    with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
        for event in stream:
            payload=event.to_dict(mode="json")
            log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
            print(json.dumps(payload,ensure_ascii=False))
    final=stream.get_final_completion()
    save_result(final.to_dict(mode="json"),"stream-result")

Recibir y guardar resultados

Ailoot Ultra · OpenAI Chat

json o SSE

Conserva todos los resultados completados

Conserva todas las respuestas, archivos y partes de contenido completos recibidos.

Conserva cada alternativa y su contenido, llamadas de herramientas y razonamiento. En SSE, ensambla los fragmentos incrementales por índice de alternativa/herramienta y conserva el motivo final de terminación y el uso.

Si es necesario revisar la respuesta original

Conserva los ID de solicitud y respuesta y las cabeceras. No se proporciona una URL genérica para recuperar tareas de texto.

Campos de respuesta
CampoTipo
Campochoices[].indexTipointeger
Campochoices[].message.contentTipostring|null
Campochoices[].message.tool_callsTipotool_call[]
Campochoices[].message.reasoning_contentTipostring
Campochoices[].message.reasoning_detailsTipoobject|array
Campochoices[].finish_reasonTipostring|null
CampousageTipoobject
Errores y siguientes pasos
RespuestaCondiciónSiguiente paso
Respuesta400 · invalid_request_errorCondiciónCampos obligatorios, representación del material o valor del parámetro no válidosSiguiente pasoCorrige los campos indicados antes de una nueva solicitud de creación.

Alias

Alias del modelo

Ailoot Ultra openai/gpt-5.4-image-2

Alias de rutas de métodos

/v1/images

ID de modelo relacionados

openai/gpt-5.4-image-2

Ailoot Ultra · Imágenes POST /v1/images/generations openai/gpt-5.4-image-2

openai/gpt-5.4-image-2

OpenAI /openai/gpt-5.4-image-2

Primeros pasos

Un flujo que combina el razonamiento textual de GPT-5.4 con la generación y edición de imágenes de GPT Image 2. Utiliza unas instrucciones escritas y referencias visuales para desarrollar una ilustración o una edición, manteniendo distintas las funciones de los componentes textual y de imagen.

Entradas aceptadas
Texto · Imágenes
Resultados
Imágenes

Disponible en Ailoot · entradas y métodos

Ailoot Ultra · Imágenes POST /v1/images/generations
Tipos de entrada
text, image
Tipos de salida
image
CampoTipoRequisitoValores y límitesPredeterminado
CampomodelTipostringRequisitoObligatorioValores y límites
openai/gpt-5.4-image-2
Predeterminado—
CampopromptTipostringRequisitoObligatorioValores y límites
Longitud mínima: 1
Predeterminado—
Campoaspect_ratioTipostringRequisitoOpcionalValores y límites
1:1, 3:2, 2:3, 4:3, 3:4, 16:9, 9:16, 21:9, auto
Predeterminado—
CampoqualityTipostringRequisitoOpcionalValores y límites
auto, low, medium, high
Predeterminado—
CampobackgroundTipostringRequisitoOpcionalValores y límites
auto, opaque
Predeterminado—
CamponTipointegerRequisitoOpcionalValores y límites
Mínimo: 1
Máximo: 10
Predeterminado—
Campoinput_referencesTipoarrayRequisitoOpcionalValores y límites
Número mínimo de elementos: 0
Número máximo de elementos: 16
Predeterminado—
Campooutput_compressionTipointegerRequisitoOpcionalValores y límites
Mínimo: 0
Máximo: 100
Predeterminado—
CampoproviderTipoobjectRequisitoOpcionalValores y límitesPredeterminado—
Parámetros del método y ciclo de vida
ParámetroContrato
Parámetrocontent_typeContratoapplication/json
ParámetrorequiredContratomodel, prompt
Parámetromaterial_typesContratotext, image

Ciclo de vida: synchronous_result_then_owned_library

GET /v1/media/tasks/{task_id} · task_id real devuelto o registro de la biblioteca multimedia

GET /v1/media/assets/{asset_id}/content

GET /v1/media/assets

GET /v1/media/assets/{asset_id}

Planes

Cómo se calcula el cargo definitivo

Las tarifas mostradas estiman el coste antes de la generación. El cargo final se calcula a partir del coste registrado para la generación original. La duración medida del resultado y las cantidades previstas no constituyen la cantidad facturable final.

Las referencias tarifarias no añaden opciones a la solicitud. Los parámetros admitidos se indican en el método seleccionado.

Modo rápido
Sin especificar Cuando se selecciona el modo rápido
Modo flex
Sin especificar Cuando se selecciona el modo flex
Esfuerzo máximo de razonamiento
Sin especificar Cuando el esfuerzo máximo de razonamiento utiliza el ajuste predeterminado (default)

Tarifas estimadas para comparar

Precios por configuración

Relaciona cada cargo con las condiciones mostradas. Usa una tarifa para cada conjunto de configuraciones alternativas.

ConfiguraciónTabla de tarifasCantidad previstaCargo
ConfiguraciónTarifas base por tokenTabla de tarifasTarifa baseCantidad prevista—Cargo
Entrada · Tokens de entrada · Estimación solo para comparar — / 1K tokens
Salida · Tokens de salida · Estimación solo para comparar — / 1K tokens
Entrada · Lectura de caché · Estimación solo para comparar — / 1K tokens
Entrada · Escritura en caché · Estimación solo para comparar — / 1K tokens
Entrada · Escritura en caché, 1 hora · Estimación solo para comparar — / 1K tokens
ConfiguraciónCoste estimado de generaciónTabla de tarifas—Cantidad previstaestimación para una generaciónCargo
Salida · Coste estimado de generación · Estimación solo para comparar $0.24576 estimación previa a la generación

Esta estimación no es un cargo adicional ni una tarifa fija para la generación completada.

Ailoot reserva un importe estimado antes de la solicitud. Tras obtener el resultado, liquida el cargo definitivo según el uso medido. En las respuestas en flujo, la liquidación usa el registro de uso final. Cómo funcionan la reserva y la liquidación →

Solicitudes de ejemplo

Ailoot Ultra · Imágenes

curl
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
export AILOOT_API_KEY
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p={'model': 'openai/gpt-5.4-image-2', 'prompt': 'a red panda astronaut floating in space, studio lighting'}

Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/images/generations \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import base64, json, os, subprocess
from pathlib import Path
from urllib.parse import urlsplit, urljoin

def save_images(items):
    if not items: raise SystemExit("No completed images; retain the full response")
    for index, item in enumerate(items):
        encoded=item.get("b64_json")
        uri=item.get("url", "")
        if not encoded and uri.startswith("data:image/"):
            header, separator, encoded=uri.partition(",")
            if not separator or ";base64" not in header: raise SystemExit("Unsupported image data URI")
        if encoded:
            raw=base64.b64decode(encoded,validate=True)
        elif uri:
            uri=urljoin("https://api.ailoot.ai",uri)
            parsed=urlsplit(uri)
            if parsed.scheme!="https" or not parsed.netloc or parsed.username or parsed.password:
                raise SystemExit("Invalid returned image URL")
            owned=parsed.netloc=="api.ailoot.ai" and parsed.path.startswith("/v1/media/assets/") and parsed.path.endswith("/content")
            args=["curl","--fail-with-body","--silent","--show-error",uri]
            if owned: args += ["-H","Authorization: Bearer "+os.environ["AILOOT_API_KEY"]]
            temporary=Path(f"image-{index}.bin")
            subprocess.run(args+["-o",str(temporary)],check=True)
            raw=temporary.read_bytes()
            temporary.unlink()
        else: raise SystemExit("Image has neither bytes nor URL")
        if not raw: raise SystemExit("Empty image result")
        ext="png" if raw.startswith(b"\x89PNG") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else "svg" if raw.lstrip().startswith((b"<svg",b"<?xml")) else "bin"
        Path(f"image-{index}.{ext}").write_bytes(raw)
    print("Every returned image saved; complete response metadata retained")
save_images(json.loads(Path("result.json").read_text())["data"])
PY_RESULT

Recibir y guardar resultados

Ailoot Ultra · Imágenes

Descarga cada imagen recibida o guarda su contenido Base64

  • GET /v1/media/tasks/{task_id}
  • GET /v1/media/assets/{asset_id}/content
  • GET /v1/media/assets
  • GET /v1/media/assets/{asset_id}
Otras consultas de contenido
Consultar los archivos existentes que te pertenecen
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/media/assets \
  -H "Authorization: Bearer $AILOOT_API_KEY" -o owned-assets.json
# Preserve every returned asset and follow its exact signed content URL. Do not construct a signed token.
Conserva todos los resultados completados

Guarda todas las imágenes completadas; descarga cada URL recibida o decodifica su contenido Base64.

Conserva la respuesta completa y las cabeceras, todas las salidas reales, los identificadores originales devueltos y todos los campos de uso. Recupera la operación original sin volver a enviar la solicitud de creación.

Si es necesario revisar la respuesta original

Conserva el X-Client-Request-ID devuelto para la conciliación. Consulta únicamente los valores task_id/asset_id realmente devueltos o la biblioteca multimedia propia; nunca construyas una URL de tarea a partir del ID de la operación ni vuelvas a enviar la solicitud de creación.

Campos de respuesta
CampoTipo
CampocreatedTipo
Campodata[].urlTipo
Campodata[].b64_jsonTipo
CampousageTipo

Alias

Alias del modelo

Ailoot Ultra openai/gpt-5.4-image-2

Alias de rutas de métodos

/v1/images

ID de modelo relacionados

openai/gpt-5.4-image-2

Ailoot Ultra · Anthropic Messages POST /v1/messages openai/gpt-5.4-image-2

openai/gpt-5.4-image-2

OpenAI /openai/gpt-5.4-image-2

Primeros pasos

Un flujo que combina el razonamiento textual de GPT-5.4 con la generación y edición de imágenes de GPT Image 2. Utiliza unas instrucciones escritas y referencias visuales para desarrollar una ilustración o una edición, manteniendo distintas las funciones de los componentes textual y de imagen.

Entradas aceptadas
Texto
Resultados
json · sse

Disponible en Ailoot · entradas y métodos

Ailoot Ultra · Anthropic Messages POST /v1/messages
Tipos de entrada
text
Tipos de salida
json, sse
Formato de salida
JSON o SSE
CampoTipoRequisitoValores y límitesPredeterminado
CampomodelTipostringRequisitoObligatorioValores y límites
openai/gpt-5.4-image-2
Predeterminado—
CampomessagesTipomessage[]RequisitoObligatorioValores y límitesPredeterminado—
Campomessages[].roleTipostringRequisitoObligatorioValores y límites
user, assistant
Predeterminado—
Campomessages[].contentTipostringRequisitoObligatorioValores y límitesPredeterminado—
Campomax_tokensTipointegerRequisitoObligatorioValores y límitesPredeterminado—
CampostreamTipobooleanRequisitoOpcionalValores y límitesPredeterminadofalse
Combinaciones de materiales de entrada

Texto · Texto UTF-8

cadena messages[].content

Parámetros del método y ciclo de vida
ParámetroContrato
Parámetrocontent_typeContratoapplication/json
ParámetrorequiredContratomodel, messages, max_tokens
Parámetrooptional_controlsContratostream
Parámetromaterial_typesContratotext
Parámetrotext_file_materialContratoLee el documento real en UTF-8 y coloca su texto en el campo input indicado o en la cadena de contenido del mensaje.

Ciclo de vida: synchronous_or_streamed

Planes

Las referencias tarifarias no añaden opciones a la solicitud. Los parámetros admitidos se indican en el método seleccionado.

Modo rápido
Tarifa estándar Cuando se selecciona el modo rápido
Modo flex
Tarifa estándar Cuando se selecciona el modo flex
Esfuerzo máximo de razonamiento
Tarifa estándar Cuando el esfuerzo máximo de razonamiento utiliza el ajuste predeterminado (default)
Esfuerzo de razonamiento · alto
Tarifa estándar Cuando el esfuerzo de razonamiento es alto
Esfuerzo de razonamiento · bajo
Tarifa estándar Cuando el esfuerzo de razonamiento es bajo
Esfuerzo de razonamiento · medio
Tarifa estándar Cuando el esfuerzo de razonamiento es medio
Esfuerzo de razonamiento · ninguno
Tarifa estándar Cuando no hay esfuerzo de razonamiento
Esfuerzo de razonamiento · xhigh
Tarifa estándar Cuando el esfuerzo de razonamiento es xhigh

Tarifas de Ailoot

Precios por configuración

Relaciona cada cargo con las condiciones mostradas. Usa una tarifa para cada conjunto de configuraciones alternativas.

ConfiguraciónTabla de tarifasTokens de contexto, más deTokens de contexto, hasta inclusiveCargo
ConfiguraciónTarifas base por tokenTabla de tarifasTarifa baseTokens de contexto, más de—Tokens de contexto, hasta inclusiveSin límite superiorCargo
Entrada · Tokens de entrada $0.016 / 1K tokens
Salida · Tokens de salida $0.03 / 1K tokens
Entrada · Lectura de caché $0.004 / 1K tokens
Entrada · Escritura en caché — / 1K tokens
Entrada · Escritura en caché, 1 hora — / 1K tokens
Salida · Tokens de salida de imagen $0.06 / 1K tokens de imagen
ConfiguraciónTramo 1 por longitud de la solicitudTabla de tarifas—Tokens de contexto, más de0Tokens de contexto, hasta inclusiveSin límite superiorCargo
Entrada · Tokens de entrada $0.016 / 1K tokens
Salida · Tokens de salida $0.03 / 1K tokens
Entrada · Lectura de caché $0.004 / 1K tokens
Entrada · Escritura en caché — / 1K tokens
Entrada · Escritura en caché, 1 hora — / 1K tokens

Ailoot reserva un importe estimado antes de la solicitud. Tras obtener el resultado, liquida el cargo definitivo según el uso medido. En las respuestas en flujo, la liquidación usa el registro de uso final. Cómo funcionan la reserva y la liquidación →

Solicitudes de ejemplo

Ailoot Ultra · Anthropic Messages

Cuerpo JSON mínimo completocurl · usa tu documento en UTF-8Python · guarda el resultado completo
{
  "model": "openai/gpt-5.4-image-2",
  "max_tokens": 128,
  "messages": [
    {
      "role": "user",
      "content": "Summarize the incident report."
    }
  ],
  "stream": false
}
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 document}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json, os
from pathlib import Path

source_file = Path(os.environ['AILOOT_TEXT_FILE'])
if not source_file.is_file():
    raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')
text = source_file.read_text(encoding='utf-8')
if not text.strip():
    raise SystemExit('Choose a document containing text')
payload = {'model': 'openai/gpt-5.4-image-2', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}
payload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\n\n' + text
Path('request.json').write_text(json.dumps(payload, ensure_ascii=False), encoding='utf-8')
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \
  -H "x-api-key: $AILOOT_API_KEY" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path

result = json.loads(Path('result.json').read_text(encoding='utf-8'))
print(json.dumps(result, ensure_ascii=False, indent=2))
PY_RESULT
import json, os
from pathlib import Path

source_file = Path(os.environ['AILOOT_TEXT_FILE'])
if not source_file.is_file():
    raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')
text = source_file.read_text(encoding='utf-8')
if not text.strip():
    raise SystemExit('Choose a document containing text')
payload = {'model': 'openai/gpt-5.4-image-2', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}
payload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\n\n' + text
from urllib.request import Request, urlopen
from urllib.error import HTTPError

api_key = os.environ['AILOOT_API_KEY']
if not api_key.strip():
    raise SystemExit('Set AILOOT_API_KEY before making a request')
headers = {'x-api-key': 'PLACEHOLDER_KEY', 'anthropic-version': '2023-06-01', 'Content-Type': 'application/json'}
headers['x-api-key'] = api_key
request = Request('https://api.ailoot.ai/v1/messages', data=json.dumps(payload, ensure_ascii=False).encode('utf-8'), headers=headers, method='POST')
try:
    with urlopen(request, timeout=120) as response:
        raw = response.read()
        Path('response-headers.txt').write_text(str(response.headers), encoding='utf-8')
except HTTPError as error:
    Path('result.json').write_bytes(error.read())
    Path('response-headers.txt').write_text(str(error.headers), encoding='utf-8')
    raise
Path('result.json').write_bytes(raw)
import json
from pathlib import Path

result = json.loads(Path('result.json').read_text(encoding='utf-8'))
print(json.dumps(result, ensure_ascii=False, indent=2))

Recibir y guardar resultados

Ailoot Ultra · Anthropic Messages

JSON o SSE

Conserva todos los resultados completados

Conserva todas las respuestas, archivos y partes de contenido completos recibidos.

Conserva todos los bloques de contenido, las firmas de razonamiento y los ID reales de uso de herramientas. Ensambla todos los fragmentos incrementales de los bloques SSE; el primer bloque de texto no constituye la salida completa.

Si es necesario revisar la respuesta original

Conserva los ID de solicitud y respuesta y las cabeceras. No se proporciona una URL genérica para recuperar tareas de texto.

Campos de respuesta
CampoTipo
CampoidTipostring
CampomodelTipostring
Campocontent[]Tipotext|thinking|tool_use|other content block
Campostop_reasonTipostring|null
CampousageTipoobject
Errores y siguientes pasos
RespuestaCondiciónSiguiente paso
Respuesta400 · invalid_request_errorCondiciónCampos obligatorios, representación del material o valor del parámetro no válidosSiguiente pasoCorrige los campos indicados antes de una nueva solicitud de creación.

Alias

Alias del modelo

Ailoot Ultra openai/gpt-5.4-image-2

Alias de rutas de métodos

/v1/images

ID de modelo relacionados

openai/gpt-5.4-image-2

FAQ · OpenAI: GPT-5.4 Image 2
¿Qué entradas y resultados están disponibles?

POST /v1/chat/completions · openai/gpt-5.4-image-2: text → text

POST /v1/images/generations · openai/gpt-5.4-image-2: text, image → image

POST /v1/messages · openai/gpt-5.4-image-2: text → json, sse

¿Qué campos utiliza la solicitud?

POST /v1/chat/completions · openai/gpt-5.4-image-2: model, messages, stream, modalities, provider

POST /v1/images/generations · openai/gpt-5.4-image-2: model, prompt, aspect_ratio, quality, background, n, input_references, output_compression, provider

POST /v1/messages · openai/gpt-5.4-image-2: model, messages, max_tokens, stream

¿Qué límites se aplican?

POST /v1/chat/completions · openai/gpt-5.4-image-2: messages.min_items: 1

POST /v1/images/generations · openai/gpt-5.4-image-2: n.minimum: 1; n.maximum: 10; output_compression.minimum: 0; output_compression.maximum: 100

Más detalles

Conecta Ailoot a Claude Code, OpenCode, Hermes o tu aplicación.

La empresa y su cartera de proyectos

La empresa y su cartera de proyectos: millones de clientes; ventas por miles de millones al mes.

Compra tokens con descuento.

Ahorro por suscripción para trabajo habitual. Códigos promocionales: hasta el 50% al comprar tokens.

Suscripción
Elige un plan con descuento para tus peticiones habituales.
Código de hasta el 50%
Introduce el código al comprar. El precio se recalcula según la promoción vigente.
Gasto en el historial
Modelo, tokens e importe quedan guardados por cada petición.

Elegir suscripción · Consultar precios de modelos

Conecta la API al producto que vendes.

SaaS, aplicaciones y bots bajo la oferta y el acuerdo de licencia Ailoot. Solicita una licencia de reventa para redistribuir el acceso.

Aplicación comercial
Integra generación de texto, imágenes, vídeo y sonido en funciones de pago de tu servicio.
Licencia para revendedores
Envía descripción del proyecto y esquema de acceso. Solicita condiciones escritas de uso y reventa.
Documentos en la web
La oferta, el acuerdo de licencia y la política de datos están disponibles antes de conectar.

Solicitar licencia de reventa · Oferta y acuerdo de licencia