curl --request POST \
--url https://api.apiyi.com/v1/images/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "gpt-image-2-vip",
"prompt": "Cinematic landscape, old lighthouse by the sea at dusk, photorealistic"
}
'import requests
url = "https://api.apiyi.com/v1/images/generations"
payload = {
"model": "gpt-image-2-vip",
"prompt": "Cinematic landscape, old lighthouse by the sea at dusk, photorealistic"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
model: 'gpt-image-2-vip',
prompt: 'Cinematic landscape, old lighthouse by the sea at dusk, photorealistic'
})
};
fetch('https://api.apiyi.com/v1/images/generations', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.apiyi.com/v1/images/generations",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'model' => 'gpt-image-2-vip',
'prompt' => 'Cinematic landscape, old lighthouse by the sea at dusk, photorealistic'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.apiyi.com/v1/images/generations"
payload := strings.NewReader("{\n \"model\": \"gpt-image-2-vip\",\n \"prompt\": \"Cinematic landscape, old lighthouse by the sea at dusk, photorealistic\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.apiyi.com/v1/images/generations")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"model\": \"gpt-image-2-vip\",\n \"prompt\": \"Cinematic landscape, old lighthouse by the sea at dusk, photorealistic\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.apiyi.com/v1/images/generations")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"model\": \"gpt-image-2-vip\",\n \"prompt\": \"Cinematic landscape, old lighthouse by the sea at dusk, photorealistic\"\n}"
response = http.request(request)
puts response.read_body{
"data": [
{
"b64_json": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA..."
}
],
"created": 1778037127,
"usage": {
"input_tokens": 98,
"output_tokens": 1185,
"total_tokens": 1283
}
}Справочник API Text-to-Image
gpt-image-2-vip справочник API для text-to-image и интерактивная песочница — генерация изображений по тексту + размер, фиксированно $0.03 за изображение для всех размеров
curl --request POST \
--url https://api.apiyi.com/v1/images/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "gpt-image-2-vip",
"prompt": "Cinematic landscape, old lighthouse by the sea at dusk, photorealistic"
}
'import requests
url = "https://api.apiyi.com/v1/images/generations"
payload = {
"model": "gpt-image-2-vip",
"prompt": "Cinematic landscape, old lighthouse by the sea at dusk, photorealistic"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
model: 'gpt-image-2-vip',
prompt: 'Cinematic landscape, old lighthouse by the sea at dusk, photorealistic'
})
};
fetch('https://api.apiyi.com/v1/images/generations', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.apiyi.com/v1/images/generations",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'model' => 'gpt-image-2-vip',
'prompt' => 'Cinematic landscape, old lighthouse by the sea at dusk, photorealistic'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.apiyi.com/v1/images/generations"
payload := strings.NewReader("{\n \"model\": \"gpt-image-2-vip\",\n \"prompt\": \"Cinematic landscape, old lighthouse by the sea at dusk, photorealistic\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.apiyi.com/v1/images/generations")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"model\": \"gpt-image-2-vip\",\n \"prompt\": \"Cinematic landscape, old lighthouse by the sea at dusk, photorealistic\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.apiyi.com/v1/images/generations")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"model\": \"gpt-image-2-vip\",\n \"prompt\": \"Cinematic landscape, old lighthouse by the sea at dusk, photorealistic\"\n}"
response = http.request(request)
puts response.read_body{
"data": [
{
"b64_json": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA..."
}
],
"created": 1778037127,
"usage": {
"input_tokens": 98,
"output_tokens": 1185,
"total_tokens": 1283
}
}Bearer sk-xxx), задайте prompt и size, затем нажмите «Отправить».size — загрузка изображения не требуется. Чтобы редактировать или объединять существующие изображения, используйте эндпоинт Image Editing.Отличие от gpt-image-2-all: идентичная структура вызова, только на одно дополнительное поле size. Если вам не нужно жестко фиксировать размеры и нужен максимально быстрый результат, используйте gpt-image-2-all вместо этого.b64_json), которая может занимать несколько МБ, поэтому в браузерной песочнице может отображаться 请求时发生错误: unable to complete request — на самом деле запрос выполнен успешно; браузер просто не может отрисовать такую длинную base64-строку.Рекомендуемый рабочий процесс: скопируйте пример кода ниже и запустите его локально — он автоматически декодирует изображение и сохранит его в файл.size: передайтеauto, чтобы модель выбрала размер сама (vip обычно сходится к относительно фиксированному/стабильному размеру для данного prompt), либо выберите один из 30 поддерживаемых размеров (10 соотношений сторон × 1K Fast / 2K Recommended / 4K Detail — см. полную таблицу размеров на странице обзора) для жесткой фиксации. Используйте строчные ASCIIx, например2048x1360,3840x2160— никогда не×и не заглавныеX.quality: ❌ отклоняется — не передавайте.n: ❌ отклоняется — по одному изображению за вызов. Отправкаn=3тарифицируется в 3×, но все равно возвращается 1 изображение. Уберите это поле.aspect_ratio: ❌ отклоняется — соотношение сторон определяетсяsize.response_format: если не указывать, возвращается base64 (raw, без префикса, проверено 2026-07); передайте"url"для получения URL изображения. Компаниям, которым нужен предсказуемый вывод URL, следует переключить свой token на группуimage2_OSS, чтобы получать детерминированный вывод URL без fallback на base64.
Примеры кода
Python
import requests
API_KEY = "sk-your-api-key"
response = requests.post(
"https://api.apiyi.com/v1/images/generations",
headers={"Authorization": f"Bearer {API_KEY}"},
json={
"model": "gpt-image-2-vip",
"prompt": "Cinematic landscape, old lighthouse by the sea at dusk, photorealistic",
"size": "2048x1152", # 16:9 2K Recommended
"response_format": "url" # defaults to base64; explicit response_format needed to read the url field
},
timeout=300 # conservative; absorbs long-tail and image download
).json()
image_url = response["data"][0]["url"]
print(image_url)
import requests
response = requests.post(
"https://api.apiyi.com/v1/images/generations",
headers={"Authorization": "Bearer sk-your-api-key"},
json={
"model": "gpt-image-2-vip",
"prompt": "Desktop wallpaper, cyberpunk city night, neon signs, wet pavement reflections",
"size": "3840x2160" # 16:9 4K Detail
},
timeout=300
).json()
# Verified 2026-07: b64_json is raw base64 (no data: prefix); earlier versions included the prefix — a check is safest
import base64
b64 = response["data"][0]["b64_json"]
if b64.startswith("data:"):
b64 = b64.split(",", 1)[1]
with open("wallpaper.png", "wb") as f:
f.write(base64.b64decode(b64))
cURL
curl -X POST "https://api.apiyi.com/v1/images/generations" \
-H "Authorization: Bearer sk-your-api-key" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2-vip",
"prompt": "Product shot of a white ceramic mug on a gray desk, soft natural light",
"size": "2048x1360"
}'
Node.js
const API_KEY = "sk-your-api-key";
const response = await fetch(
"https://api.apiyi.com/v1/images/generations",
{
method: "POST",
headers: {
"Authorization": `Bearer ${API_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
model: "gpt-image-2-vip",
prompt: "1:1 square logo, minimalist cat line art",
size: "2048x2048" // 1:1 2K Recommended
})
}
);
const data = await response.json();
// Verified raw base64 (no data: prefix) — prepend before rendering; earlier versions included the prefix, so check first
let b64 = data.data[0].b64_json;
if (!b64.startsWith("data:")) b64 = `data:image/png;base64,${b64}`;
document.getElementById("result").src = b64;
OpenAI SDK (Python, рекомендуется)
from openai import OpenAI
client = OpenAI(
api_key="sk-your-api-key",
base_url="https://api.apiyi.com/v1"
)
resp = client.images.generate(
model="gpt-image-2-vip",
prompt="Ink wash landscape painting, traditional Chinese style, vertical composition",
size="1536x2048", # 3:4 2K Portrait
)
print(resp.data[0].url)
Параметры
| Параметр | Тип | Обязательно | Описание |
|---|---|---|---|
model | string | Yes | Фиксировано на gpt-image-2-vip |
prompt | string | Yes | Prompt — опишите содержание, стиль, освещение и т. д. |
size | string | Настоятельно рекомендуется | Размер вывода: auto (модель определяет — vip остаётся относительно фиксированным для данного prompt) или один из 30 размеров; формат WIDTHxHEIGHT (нижний регистр x); если поле не указано, это эквивалентно auto |
- Главные изображения для e-commerce:
2048x1360(3:2 2K) /2048x2048(1:1 2K) - Вертикальные постеры:
1536x2048(3:4 2K) /2480x3312(3:4 4K) - Миниатюры видео:
2048x1152(16:9 2K) /3840x2160(16:9 4K) - Stories / обои для телефона:
1152x2048(9:16 2K) /2160x3840(9:16 4K)
Формат ответа
По умолчанию возвращается base64 (data[0].b64_json, raw base64 без префикса, проверено в 2026-07). Чтобы вместо этого получить image URL, явно передайте response_format: "url"; компаниям, которым нужен вывод по URL, следует переключить группу своего token на image2_OSS для стабильного вывода URL без fallback на base64. data[0] возвращает либо url, либо b64_json — никогда оба сразу.
Режим b64_json (по умолчанию):
{
"data": [
{
"b64_json": "iVBORw0KGgoAAAANSUhEUgAA..."
}
],
"created": 1778037127,
"usage": {
"input_tokens": 98,
"output_tokens": 1185,
"total_tokens": 1283
}
}
url (явно передайте response_format: "url"; используйте группу image2_OSS, если вы зависите от URL — R2 CDN globally accelerated):
{
"data": [
{
"url": "https://r2cdn.copilotbase.com/r2cdn2/0e82148a-bec0-4b42-bbca-117c6b42581b.png"
}
],
"created": 1778037331,
"usage": {
"input_tokens": 30,
"output_tokens": 2074,
"total_tokens": 2104
}
}
b64_json представляет собой raw base64 без префикса data:; декодируйте его, чтобы записать файл, или добавьте префикс вручную перед рендерингом. В более ранних версиях префикс действительно присутствовал, поэтому всегда сначала выполняйте проверку startsWith('data:'), чтобы поддерживать оба варианта.Связанные ресурсы
Обзор модели (полная таблица размеров)
API редактирования изображений
/v1/images/edits объединение нескольких изображений и редактированиеСмежная модель gpt-image-2-all
Авторизации
API Key from the API易 Console
Тело
Model name, fixed to gpt-image-2-vip
gpt-image-2-vip Prompt — describe content, style, lighting, etc.
"Cinematic landscape, old lighthouse by the sea at dusk, photorealistic"
Output size. Pass auto to let the model decide (vip tends to converge on a relatively fixed size for a given prompt), or pick one of the 30 supported sizes (10 ratios × 1K Fast / 2K Recommended / 4K Detail) to lock it strictly.
Format: WIDTHxHEIGHT with lowercase ASCII x, e.g., 2048x1360, 3840x2160. Flat $0.03/image across all tiers.
auto, 1280x1280, 848x1280, 1280x848, 960x1280, 1280x960, 1024x1280, 1280x1024, 720x1280, 1280x720, 1280x544, 2048x2048, 1360x2048, 2048x1360, 1536x2048, 2048x1536, 1632x2048, 2048x1632, 1152x2048, 2048x1152, 2048x864, 2880x2880, 2336x3520, 3520x2336, 2480x3312, 3312x2480, 2560x3216, 3216x2560, 2160x3840, 3840x2160, 3840x1632 "2048x1152"
Ответ
Image successfully generated. Defaults to base64 in data[0].b64_json — url is not returned in the same response.
Image generation response. Returns base64 by default (data[0].b64_json); to get a url, switch to the image2_OSS group with response_format=url. data[0] returns either url or b64_json, never both.
Была ли эта страница полезной?