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-all",
"prompt": "Landscape 16:9 cinematic, old lighthouse at sunset"
}
'import requests
url = "https://api.apiyi.com/v1/images/generations"
payload = {
"model": "gpt-image-2-all",
"prompt": "Landscape 16:9 cinematic, old lighthouse at sunset"
}
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-all',
prompt: 'Landscape 16:9 cinematic, old lighthouse at sunset'
})
};
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-all',
'prompt' => 'Landscape 16:9 cinematic, old lighthouse at sunset'
]),
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-all\",\n \"prompt\": \"Landscape 16:9 cinematic, old lighthouse at sunset\"\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-all\",\n \"prompt\": \"Landscape 16:9 cinematic, old lighthouse at sunset\"\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-all\",\n \"prompt\": \"Landscape 16:9 cinematic, old lighthouse at sunset\"\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 для генерации изображений по тексту
Справочник API для text-to-image gpt-image-2-all и интерактивная песочница — генерируйте изображения по текстовым prompt, $0.03/image
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-all",
"prompt": "Landscape 16:9 cinematic, old lighthouse at sunset"
}
'import requests
url = "https://api.apiyi.com/v1/images/generations"
payload = {
"model": "gpt-image-2-all",
"prompt": "Landscape 16:9 cinematic, old lighthouse at sunset"
}
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-all',
prompt: 'Landscape 16:9 cinematic, old lighthouse at sunset'
})
};
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-all',
'prompt' => 'Landscape 16:9 cinematic, old lighthouse at sunset'
]),
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-all\",\n \"prompt\": \"Landscape 16:9 cinematic, old lighthouse at sunset\"\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-all\",\n \"prompt\": \"Landscape 16:9 cinematic, old lighthouse at sunset\"\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-all\",\n \"prompt\": \"Landscape 16:9 cinematic, old lighthouse at sunset\"\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 и нажмите отправку.response_format: "b64_json", поэтому ответ содержит base64-строку размером в несколько МБ, и браузерная песочница может показать 请求时发生错误: unable to complete request — запрос на самом деле выполнен успешно; браузер просто не может отрисовать такую длинную base64-строку.Рекомендуемый порядок работы:- Хотите просто посмотреть изображение в Playground? Укажите
"response_format": "url"явно — в ответе будет одна ссылка R2, и все отобразится корректно. - Нужен base64? Скопируйте кодовый пример ниже и запустите его локально — код автоматически декодирует изображение и сохранит его в файл.
size: поле не влияет на результат — отправкаautoили любого конкретного значения не вызывает ошибку, но значение молча игнорируется сервером. Размеры полностью задаются prompt:- В prompt указаны размер или соотношение сторон (например, «Landscape 16:9») → модель следует prompt
- В prompt нет указаний на размер → один и тот же prompt дает разные размеры в разных вызовах, как будто вы «тянете разные карты» — это полезно для поиска нескольких вариантов композиции
- Для строгой фиксации размера используйте
gpt-image-2-vip(поддерживаетauto+ 30 явных размеров)
n/quality/aspect_ratio: ❌ отклоняется. Отправка этих параметров может вызвать ошибки проверки параметров.
prompt, например:Landscape 16:9 cinematic, old lighthouse by the sea at duskPortrait 9:16 phone wallpaper, cyberpunk city rainy night1024×1024 square logo, minimalist cat line art
Примеры кода
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-all",
"prompt": "Landscape 16:9 cinematic, old lighthouse at sunset, photorealistic",
"response_format": "url"
},
timeout=300 # conservative — absorbs tail latency + image download time
).json()
image_url = response["data"][0]["url"]
print(image_url)
import base64
import requests
response = requests.post(
"https://api.apiyi.com/v1/images/generations",
headers={"Authorization": "Bearer sk-your-api-key"},
json={
"model": "gpt-image-2-all",
"prompt": "1024x1024 square logo, minimalist cat line art",
"response_format": "b64_json"
},
timeout=300 # conservative — absorbs tail latency + image download time
).json()
# Verified 2026-07: b64_json is raw base64 (no data: prefix); earlier versions included the prefix — a check is safest
b64 = response["data"][0]["b64_json"]
if b64.startswith("data:"):
b64 = b64.split(",", 1)[1]
with open("output.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-all",
"prompt": "Landscape 16:9 cinematic, old lighthouse at sunset",
"response_format": "url"
}'
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-all",
prompt: "1024x1024 square logo, minimalist cat line art",
response_format: "b64_json"
})
}
);
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;
JavaScript в браузере (Fetch)
const resp = await fetch('https://api.apiyi.com/v1/images/generations', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer sk-your-api-key'
},
body: JSON.stringify({
model: 'gpt-image-2-all',
prompt: 'Portrait 9:16 phone wallpaper, cyberpunk city rainy night',
response_format: 'b64_json'
})
});
const { data } = await resp.json();
let b64 = data[0].b64_json;
if (!b64.startsWith('data:')) b64 = `data:image/png;base64,${b64}`;
document.getElementById('result').src = b64;
Краткий справочник параметров
| Параметр | Тип | Обязательно | Описание |
|---|---|---|---|
model | string | Да | Фиксированное значение: gpt-image-2-all |
prompt | string | Да | Промпт. Укажите здесь размер/соотношение сторон/стиль |
size | string | Нет | Поддерживается только auto (один и тот же prompt дает разные размеры). Для строгой фиксации размера используйте gpt-image-2-vip |
response_format | string | Нет | b64_json (по умолчанию, необработанный base64) или url (возвращает ссылку R2 CDN); всегда передавайте явно |
response_format поддерживает выбор из выпадающего списка.Формат ответа
data[0] возвращает либо url, либо b64_json — никогда оба (зависит от response_format). Этот эндпоинт по умолчанию использует b64_json.
b64_json режим (по умолчанию):
{
"data": [
{
"b64_json": "iVBORw0KGgoAAAANSUhEUgAA..."
}
],
"created": 1778037127,
"usage": {
"input_tokens": 98,
"output_tokens": 1185,
"total_tokens": 1283
}
}
url режим (требует явного "response_format": "url", глобально ускорен через R2 CDN):
{
"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 Key from the API易 Console
Тело
Model name, fixed to gpt-image-2-all
gpt-image-2-all Prompt. Include size/ratio/style here, e.g., Landscape 16:9 cinematic, old lighthouse at sunset
"Landscape 16:9 cinematic, old lighthouse at sunset"
Response format. b64_json returns a base64 string already prefixed with a data URL header (default); url returns an R2 CDN link
b64_json, url Ответ
Image successfully generated. Defaults to base64 in data[0].b64_json — url is not returned in the same response.
Image generation response. data[0] returns either url or b64_json, never both (depends on response_format; this endpoint defaults to b64_json).
Была ли эта страница полезной?