Api.Airforce
API REFERENCE

Генерация изображений

Создавайте и редактируйте изображения через одну конечную точку, совместимую с OpenAI. Один и тот же формат запроса подходит для каждой модели изображений в каталоге.

Один OpenAI-совместимый image endpoint распределяет запросы между Flux, Nano-Banana, Wan и другими провайдерами. Отправляйте одну и ту же форму request независимо от upstream; специфичные для провайдера опции передаются и проверяются на соответствие возможностям каждой модели.

Находите image-модели, запросив models endpoint и оставив те, у которых среди output modalities есть image.

POST /v1/images/generations

Модуль, совместимый с OpenAI images.generate СДК. Параметры, специфичные для поставщика, живут рядом со стандартными — серверная часть передает то, что понимает каждая модель.

POSThttps://api.airforce/v1/images/generations

Модели изображений

…· live

Общие параметры

ParameterTypeRequiredDescription
modelstringRequiredImage model ID. Find them on /v1/models: image models carry media_type: "image" and an image_caps block.
promptstringRequiredImage description.
nintegerOptionalNumber of variations to generate per request. Capped by the model's image_caps.max_n.
sizestringOptionalOpenAI-style WxH, e.g. "1024x1024". Provider-specific values pass through.
aspect_ratiostringOptionalAlternative to size. "16:9", "1:1", "9:16", … Validated against image_caps.aspect_ratios.
qualitystringOptional"standard" | "hd" (OpenAI) or model-specific labels. Validated.
response_formatstringOptional"url" (default) or "b64_json".
seedintegerOptionalReproducibility seed. Same prompt + same seed = same image (where the upstream supports it).
input_imagesarrayOptional[{ url? } | { b64_json? }] for image-to-image / reference / first-frame.
ssebooleanOptionalWhen true the response is sent as Server-Sent Events. The full JSON arrives in one event followed by [DONE]. Useful to keep long upstream renders from timing out at proxies.

Базовый пример

curl https://api.airforce/v1/images/generations \
  -H "Authorization: Bearer sk-air-YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "nano-banana-2",
    "prompt": "A cute baby sea otter floating on its back",
    "n": 1,
    "response_format": "url"
  }'

Форма ответа

ParameterTypeRequiredDescription
createdintegerOptionalUnix timestamp.
dataarrayOptionalGenerated assets.
data[].urlstringOptionalImage URL when response_format is "url" (default). The image is re-hosted to a file host and the link ends in /image.jpeg; null if the re-host fails.
data[].b64_jsonstringOptionalBase64-encoded image bytes when response_format is "b64_json". The format follows the upstream provider (often JPEG), not necessarily PNG.
{
  "created": 1715000000,
  "data": [{
    "url": "https://.../image.jpeg"
  }]
}

Потоковый вариант

Проходить sse: true при проксировании через промежуточное программное обеспечение с жесткими тайм-аутами простоя. Ответом является одно событие SSE с полным JSON, затем [DONE].

data: {"created":1715000000,"data":[{"url":"https://.../image.jpeg"}]}

data: [DONE]

Изображение к изображению и ссылка

Модели с image_caps.max_input_images > 0 принять эталонные изображения. Либо передайте URL-адреса, либо данные в кодировке Base64.

curl https://api.airforce/v1/images/generations \
  -H "Authorization: Bearer sk-air-YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "nano-banana-2",
    "prompt": "Same character, now in a snowy forest",
    "aspect_ratio": "16:9",
    "input_images": [
      {"url": "https://example.com/character.jpg"}
    ]
  }'

Редактирование изображений

Совместимый с OpenAI эндпоинт редактирования. Отправьте исходное изображение файлом multipart, как это делают SDK OpenAI для images.edit, или отправьте показанное выше JSON-тело с input_images. Он идёт тем же путём, что и /v1/images/generations: те же модели, цены и формат ответа.

POSThttps://api.airforce/v1/images/edits
ParameterTypeRequiredDescription
modelstringRequiredAn image model with image_caps.max_input_images > 0 (see Discovering capabilities below).
promptstringRequiredWhat to change or create from the input image(s).
imagefileRequiredThe source image. Repeat as image[] for several references; images, images[] and input_images are accepted too, as files or as image URLs.
maskfileOptionalForwarded as is, but no listed model declares mask support, so the serving model may ignore it.
nintegerOptionalNumber of images to generate.
sizestringOptionalOutput size, e.g. "1024x1024", where the model supports it.
aspect_ratiostringOptionalOutput aspect ratio, e.g. "16:9", where the model supports it.
qualitystringOptionalModel-specific quality level.
response_formatstringOptional"url" or "b64_json", as on /v1/images/generations.
curl https://api.airforce/v1/images/edits \
  -H "Authorization: Bearer sk-air-YOUR_API_KEY" \
  -F "model=nano-banana-2" \
  -F "prompt=Same character, now in a snowy forest" \
  -F "[email protected]" \
  -F "aspect_ratio=16:9"
from openai import OpenAI

client = OpenAI(base_url="https://api.airforce/v1", api_key="sk-air-YOUR_API_KEY")

with open("character.png", "rb") as image:
    result = client.images.edit(
        model="nano-banana-2",
        image=image,
        prompt="Same character, now in a snowy forest",
    )
print(result.data[0].url)

До 16 входных изображений на запрос, по 25 МБ каждое; собственный лимит модели — image_caps.max_input_images. Запрос без входного изображения отклоняется с кодом 400, а не превращается в генерацию по тексту. Каждое входное изображение может увеличить цену, как указано на странице модели.


Параметры, специфичные для модели

Помимо общих параметров, указанных выше, отдельные семейства моделей допускают дополнительные параметры. Неизвестные параметры передаются в восходящий поток как есть, поэтому любая будущая ручка, зависящая от поставщика, также будет работать без обновления SDK.

Nano-Banana

nano-banana-2, nano-banana-pro

ParameterTypeRequiredDescription
aspect_ratiostringOptional"1:1", "16:9", "9:16", "4:3".
resolutionstringOptional"512", "1024", "2048".
image_urlsarrayOptionalReference images.

Suno (music)

suno-v4.5, suno-v5 и suno-v5.5 исторически принимались на этой конечной точке. Теперь они относятся к нативному музыкальному API по адресу /v1/audio/music — вызовы здесь отклоняются с `wrong_endpoint`.


Открытие возможностей

Каждая модель изображения раскрывает image_caps на /v1/models чтобы клиенты могли проверять вводимые данные перед отправкой:

ParameterTypeRequiredDescription
image_caps.max_nintegerOptionalMaximum n per request.
image_caps.aspect_ratiosarrayOptionalAllowed aspect_ratio values.
image_caps.qualitiesarrayOptionalAllowed quality values.
image_caps.max_input_imagesintegerOptional0 = text-only model. Higher = supports reference images.
image_caps.supports_url_inputbooleanOptionalWhether input_images may be passed as URLs (vs base64).
image_caps.supports_seedbooleanOptionalWhether the model honours a seed value (most scraping-proxy upstreams ignore it).

Цены на изображения не указаны в image_caps — для определения стоимости используйте поля цен модели в /v1/models.