Документация NeuroAPI
Генерация

Изображения

Генерация и редактирование изображений

Основной Images API принимает текстовый prompt и возвращает массив data. В зависимости от модели результат содержит временный url либо b64_json.

Qwen Image, Wan Image и Z-Image в едином OpenAI Images контракте →

OpenAI Images

Стабильный

ЗадачаПутьФормат
ГенерацияPOST /v1/images/generationsJSON
РедактированиеPOST /v1/images/editsmultipart/form-data

Генерация

cURL

curl https://neuroapi.host/v1/images/generations \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-image-2",
    "prompt": "Минималистичный постер космической станции, тёмный фон",
    "size": "1024x1024",
    "quality": "auto"
  }'

Python · OpenAI SDK

import base64
from openai import OpenAI

client = OpenAI(
    api_key="YOUR_API_KEY",
    base_url="https://neuroapi.host/v1",
)

result = client.images.generate(
    model="gpt-image-2",
    prompt="Минималистичный постер космической станции, тёмный фон",
    size="1024x1024",
)

image = result.data[0]
if image.b64_json:
    with open("result.png", "wb") as file:
        file.write(base64.b64decode(image.b64_json))
else:
    print(image.url)

Node.js · TypeScript

import OpenAI from "openai";
import { writeFile } from "node:fs/promises";

const client = new OpenAI({
  apiKey: process.env.NEUROAPI_KEY,
  baseURL: "https://neuroapi.host/v1",
});

const result = await client.images.generate({
  model: "gpt-image-2",
  prompt: "Минималистичный постер космической станции, тёмный фон",
  size: "1024x1024",
});

const image = result.data?.[0];
if (image?.b64_json) {
  await writeFile("result.png", Buffer.from(image.b64_json, "base64"));
} else {
  console.log(image?.url);
}

Редактирование

cURL · multipart

curl https://neuroapi.host/v1/images/edits \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -F "model=gpt-image-2" \
  -F "prompt=Замени фон на вечерний город" \
  -F "image=@source.png"

Важно: Не рассчитывайте на бессрочную доступность URL. Сохраните готовое изображение в своё хранилище или используйте b64_json, если выбранная модель его возвращает.

Асинхронная генерация

Стабильный

Асинхронная генерация гарантирует, что оплаченная генерация не потеряется: если клиент отключился или сработал клиентский таймаут, сервер доводит задачу до конца, а клиент забирает результат опросом. Тело запроса, авторизация (Bearer-токен), поддержка моделей и цены полностью совпадают с синхронным POST /v1/images/generations.

Создание задачи

Принимает тот же JSON, что и синхронная генерация (model, prompt, n, size, quality и т. д.). При успехе сервер сразу отвечает HTTP 202 и возвращает task_id — сохраните его у себя.

cURL

curl https://neuroapi.host/v1/images/generations/async \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-image-2",
    "prompt": "Минималистичный постер космической станции, тёмный фон",
    "size": "1024x1024",
    "quality": "auto"
  }'

Ответ · HTTP 202

{
  "code": "success",
  "data": {
    "task_id": "image_0f3d2c1a9b4e4f8a2c7d5e6b1a3f90"
  }
}

Проверка статуса

Опрос доступен только владельцу задачи (тому же API-токену); для чужих токенов задача возвращает 404.

cURL

curl https://neuroapi.host/v1/images/generations/async/image_0f3d2c1a9b4e4f8a2c7d5e6b1a3f90 \
  -H "Authorization: Bearer YOUR_API_KEY"

Ответ

{
  "code": "success",
  "message": "",
  "data": {
    "task_id": "image_0f3d2c1a9b4e4f8a2c7d5e6b1a3f90",
    "status": "SUCCESS",
    "progress": "100%",
    "outputs": ["https://<cdn-signed-url>"],
    "fail_reason": "",
    "submit_time": 0,
    "start_time": 0,
    "finish_time": 0,
    "expired": false
  }
}

outputs содержит свежие подписанные CDN-ссылки, которые генерируются при каждом опросе и действуют 60 минут. Ссылки доступны только при статусе SUCCESS и только в пределах окна хранения; там никогда не бывает ссылок на сторонних провайдеров. После окна хранения статус остаётся SUCCESS, но outputs пуст, а expired равен true.

СтатусЗначение
QUEUEDзадача принята и ждёт выполнения
IN_PROGRESSгенерация выполняется
SUCCESSготово, результат доступен в outputs
FAILUREошибка, причина в fail_reason

fail_reason содержит безопасное сообщение для пользователя на русском языке — в нём никогда не передаётся сырой текст провайдера.

Опрос результата

Опрашивайте статус раз в 3–5 секунд; более частый polling не ускоряет генерацию.

Python

import time
import requests

API_KEY = "YOUR_API_KEY"
BASE = "https://neuroapi.host"
HEADERS = {"Authorization": f"Bearer {API_KEY}"}

create = requests.post(
    f"{BASE}/v1/images/generations/async",
    headers=HEADERS,
    json={
        "model": "gpt-image-2",
        "prompt": "Минималистичный постер космической станции, тёмный фон",
        "size": "1024x1024",
    },
)
task_id = create.json()["data"]["task_id"]

while True:
    data = requests.get(
        f"{BASE}/v1/images/generations/async/{task_id}",
        headers=HEADERS,
    ).json()["data"]

    if data["status"] == "SUCCESS":
        print(data["outputs"])
        break
    if data["status"] == "FAILURE":
        raise RuntimeError(data["fail_reason"])

    time.sleep(4)  # опрашивайте раз в 3–5 секунд

Важно: Результат хранится 1 час после готовности, затем удаляется безвозвратно.

Информация: Изображения сохраняются как есть, без сжатия и перекодирования.

Gemini image generation

Бета

Используйте Gemini-совместимый формат, когда нужны interleaved text/image parts или разговорное редактирование. Изображение возвращается как inlineData.data внутри candidates[].content.parts.

cURL

curl "https://neuroapi.host/v1beta/models/gemini-3.1-flash-lite-image:generateContent" \
  -H "x-goog-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "contents": [{
      "role": "user",
      "parts": [{"text": "Создай акварельную иллюстрацию маяка во время шторма"}]
    }],
    "generationConfig": {
      "responseModalities": ["TEXT", "IMAGE"]
    }
  }'

Входные изображения

  • Для небольших файлов Base64/data URL обычно надёжнее внешней ссылки.
  • Внешняя ссылка должна быть публичной HTTPS-ссылкой без авторизации.
  • Ссылки на локальные, приватные и внутренние адреса не принимаются.
  • Если внешний ресурс медленный или ограничен сетевой фильтрацией, скачайте файл и передайте Base64.

Информация: Параметры size, quality, число изображений и поддержка edits зависят от модели. Сверяйтесь с её карточкой в каталоге.