GPT-Image-2.5 VIP Генерация и редактирование изображений
curl --request POST \
--url https://toapis.com/v1/images/generations \
--header 'Authorization: <authorization>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "<string>",
"prompt": "<string>",
"quality": "<string>",
"size": "<string>",
"background": "<string>",
"n": 123
}
'import requests
url = "https://toapis.com/v1/images/generations"
payload = {
"model": "<string>",
"prompt": "<string>",
"quality": "<string>",
"size": "<string>",
"background": "<string>",
"n": 123
}
headers = {
"Authorization": "<authorization>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: '<authorization>', 'Content-Type': 'application/json'},
body: JSON.stringify({
model: '<string>',
prompt: '<string>',
quality: '<string>',
size: '<string>',
background: '<string>',
n: 123
})
};
fetch('https://toapis.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://toapis.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' => '<string>',
'prompt' => '<string>',
'quality' => '<string>',
'size' => '<string>',
'background' => '<string>',
'n' => 123
]),
CURLOPT_HTTPHEADER => [
"Authorization: <authorization>",
"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://toapis.com/v1/images/generations"
payload := strings.NewReader("{\n \"model\": \"<string>\",\n \"prompt\": \"<string>\",\n \"quality\": \"<string>\",\n \"size\": \"<string>\",\n \"background\": \"<string>\",\n \"n\": 123\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "<authorization>")
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://toapis.com/v1/images/generations")
.header("Authorization", "<authorization>")
.header("Content-Type", "application/json")
.body("{\n \"model\": \"<string>\",\n \"prompt\": \"<string>\",\n \"quality\": \"<string>\",\n \"size\": \"<string>\",\n \"background\": \"<string>\",\n \"n\": 123\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://toapis.com/v1/images/generations")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<authorization>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"model\": \"<string>\",\n \"prompt\": \"<string>\",\n \"quality\": \"<string>\",\n \"size\": \"<string>\",\n \"background\": \"<string>\",\n \"n\": 123\n}"
response = http.request(request)
puts response.read_bodyGPT-Image-2.5 VIP
GPT-Image-2.5 VIP Генерация и редактирование изображений
Руководство по асинхронным задачам генерации изображений gpt-image-2.5-flare-vip и gpt-image-2.5-sunburst-vip: пять уровней качества, размеры в пикселях, прозрачный фон и постоплата по фактическому расходу токенов
POST
/
v1
/
images
/
generations
GPT-Image-2.5 VIP Генерация и редактирование изображений
curl --request POST \
--url https://toapis.com/v1/images/generations \
--header 'Authorization: <authorization>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "<string>",
"prompt": "<string>",
"quality": "<string>",
"size": "<string>",
"background": "<string>",
"n": 123
}
'import requests
url = "https://toapis.com/v1/images/generations"
payload = {
"model": "<string>",
"prompt": "<string>",
"quality": "<string>",
"size": "<string>",
"background": "<string>",
"n": 123
}
headers = {
"Authorization": "<authorization>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: '<authorization>', 'Content-Type': 'application/json'},
body: JSON.stringify({
model: '<string>',
prompt: '<string>',
quality: '<string>',
size: '<string>',
background: '<string>',
n: 123
})
};
fetch('https://toapis.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://toapis.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' => '<string>',
'prompt' => '<string>',
'quality' => '<string>',
'size' => '<string>',
'background' => '<string>',
'n' => 123
]),
CURLOPT_HTTPHEADER => [
"Authorization: <authorization>",
"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://toapis.com/v1/images/generations"
payload := strings.NewReader("{\n \"model\": \"<string>\",\n \"prompt\": \"<string>\",\n \"quality\": \"<string>\",\n \"size\": \"<string>\",\n \"background\": \"<string>\",\n \"n\": 123\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "<authorization>")
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://toapis.com/v1/images/generations")
.header("Authorization", "<authorization>")
.header("Content-Type", "application/json")
.body("{\n \"model\": \"<string>\",\n \"prompt\": \"<string>\",\n \"quality\": \"<string>\",\n \"size\": \"<string>\",\n \"background\": \"<string>\",\n \"n\": 123\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://toapis.com/v1/images/generations")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<authorization>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"model\": \"<string>\",\n \"prompt\": \"<string>\",\n \"quality\": \"<string>\",\n \"size\": \"<string>\",\n \"background\": \"<string>\",\n \"n\": 123\n}"
response = http.request(request)
puts response.read_bodyVIP-версия создаёт задачу генерации изображения через
Пример ответа на отправку:
Сохраните полученный
Задача проходит статусы
Готовую задачу запрашивают по ID как обычно, а URL изображения читают из
Пусть curl сам задаст Content-Type и boundary для multipart. Используйте ID задачи из ответа для опроса эндпоинта статуса и читайте URL отредактированного изображения из
Все пять уровней качества используют эти цены за токены. В VIP-версии нет фиксированной цены за изображение в зависимости от качества: после завершения задачи расчёт идёт по фактическому расходу. При отправке задачи средства сначала резервируются, а после завершения расчёт идёт по фактическим текстовым токенам и токенам изображения, с возвратом разницы или доплатой. Перед вызовом всё равно нужны достаточный баланс аккаунта и лимит API Key.
Формула стоимости в USD:
Например, одно текст→изображение 1024x1024 с качеством
Одно измеренное редактирование по референсу содержало 21 входной токен текста, 1024 входных токена изображения и 196 выходных токенов изображения. По формуле получается 0.0113416,апослеокруглениядоминимальнойединицыквотыплатформысписывается0.011342. Это примеры конкретных запросов, а не фиксированная стоимость за изображение при одинаковом качестве.
Индивидуальные тарифы или скидки аккаунта могут отличаться; актуальные цены смотрите на странице тарифов моделей и в настройках аккаунта. Итоговое списание можно проверить в журнале использования.
POST /v1/images/generations и возвращает ID задачи. После завершения задачи получите URL изображения через эндпоинт статуса. Общее у VIP-версии со стандартной то, что обе используют асинхронные задачи; различия — в имени модели, формате size и способе тарификации.
| Модель | model в запросе |
|---|---|
| Flare VIP | gpt-image-2.5-flare-vip |
| Sunburst VIP | gpt-image-2.5-sunburst-vip |
gpt-image-2.5-vip — это название серии в этом документе. В запросе всегда указывайте полное имя модели из таблицы.
Стандартная версия тоже использует асинхронные задачи, но тарифицируется по разрешению и использует соотношения в
size; см. отдельную документацию GPT-Image-2.5. VIP-версия использует размеры в пикселях и рассчитывается по фактическим токенам.Для пользователей из материкового Китая: замените
https://toapis.com в примерах этого документа на https://toapis.cn. API Key создаётся в консоли.Быстрый старт
Сохраните свой API Key в переменную окруженияTOAPIS_API_KEY и отправьте задачу:
curl --fail-with-body --request POST \
--url https://toapis.com/v1/images/generations \
--header "Authorization: Bearer $TOAPIS_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
"model": "gpt-image-2.5-flare-vip",
"prompt": "Стиль детской книги с картинками, ветеринар слушает стетоскопом сердце маленькой выдры",
"quality": "low",
"size": "1024x1024",
"n": 1
}'
{
"id": "tsk_img_example",
"object": "generation.task",
"model": "gpt-image-2.5-flare-vip",
"status": "pending",
"progress": 0,
"created_at": 1788951900,
"metadata": {}
}
id, подставьте его вместо TASK_ID в примере ниже и запросите результат:
curl --fail-with-body \
--url https://toapis.com/v1/images/generations/TASK_ID \
--header "Authorization: Bearer $TOAPIS_API_KEY"
pending, queued и in_progress, а затем переходит в completed или failed. При статусе completed читайте URL изображения из result.data, при failed — из error. Запрашивайте статус каждые несколько секунд. Полный список полей описан в разделе Статус задачи изображения.
Успешная отправка означает только то, что задача создана. Дождитесь статуса completed, прежде чем скачивать изображение, и во время ожидания продолжайте опрашивать тот же ID задачи. Запросы с высоким качеством выполняются дольше, поэтому продолжайте опрос и не отправляйте задачу повторно.
Параметры запроса генерации
string
обязательно
Аутентификация через
Bearer YOUR_TOAPIS_API_KEY.string
обязательно
gpt-image-2.5-flare-vip или gpt-image-2.5-sunburst-vip.string
обязательно
Описание изображения. При редактировании опишите, что нужно сохранить, а что изменить.
string
по умолчанию:"high"
Поддерживаются пять уровней:
low, medium, high, xhigh и max. По умолчанию high. Используйте значения в нижнем регистре.Качество влияет на результат генерации и на фактический расход выходных токенов. Изображения с одинаковым качеством тоже могут стоить по-разному из-за размеров и содержимого.string
по умолчанию:"1024x1024"
Размер выходного изображения в пикселях в формате
ширинахвысота, например 1024x1024, 1536x1024, 1024x1536, 1280x1024.Поддерживаются пользовательские размеры в пикселях, допустимые у вышестоящего провайдера, а не только примеры выше. Допустимый диапазон размеров проверяется валидацией эндпоинта. В примерах VIP-версии не используются значения-соотношения вроде 1:1, и дополнительный resolution не требуется.string
Необязательный параметр фона. Значение
"transparent" включает генерацию изображения с прозрачным фоном. Без этого поля выполняется обычная генерация.Поддерживается для генерации по тексту и редактирования по референсному изображению.integer
по умолчанию:1
Используйте
1 на запрос, чтобы сгенерировать одно изображение.Прозрачный фон
Добавьте"background": "transparent" в запрос генерации, чтобы получить изображение с прозрачным фоном. Без этого поля выполняется обычная генерация.
curl --fail-with-body --request POST \
--url https://toapis.com/v1/images/generations \
--header "Authorization: Bearer $TOAPIS_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
"model": "gpt-image-2.5-flare-vip",
"prompt": "Красная круглая наклейка на прозрачном фоне",
"quality": "low",
"size": "1024x1024",
"background": "transparent",
"n": 1
}'
result.data.
Редактирование по референсу
Для редактирования используетсяPOST /v1/images/edits с телом multipart/form-data. Передайте локальное изображение в файловом поле image, а вместе с ним model, prompt, quality, size и n. Редактирование тоже является асинхронной задачей: после отправки возвращается ID задачи, а опрос выполняется так же, как при генерации.
В примере ниже Sunburst VIP добавляет жёлтый шарф маленькой выдре из otter.png:
curl --fail-with-body --request POST \
--url https://toapis.com/v1/images/edits \
--header "Authorization: Bearer $TOAPIS_API_KEY" \
--form 'model=gpt-image-2.5-sunburst-vip' \
--form 'prompt=Сохрани маленькую выдру и ветеринара с исходного изображения и добавь выдре жёлтый шарф' \
--form 'image=@otter.png;type=image/png' \
--form 'quality=low' \
--form 'size=1024x1024' \
--form 'n=1'
result.data.
Flare VIP поддерживает такой же способ редактирования: измените модель на gpt-image-2.5-flare-vip. Ввод референсного изображения создаёт расход входных токенов изображения.
Цены за токены
Ниже указаны стандартные цены, проверенные 2026-09-09. Обе VIP-модели одинаковы и тарифицируются с 20% скидкой от официальных цен за токены:| Тип | USD за миллион токенов |
|---|---|
| Ввод текста | 4.00 |
| Кэшированный ввод текста | 1.00 |
| Ввод изображения | 6.40 |
| Кэшированный ввод изображения | 1.60 |
| Вывод изображения | 24.00 |
стоимость = (
некэшированные входные токены текста * 4
+ кэшированные входные токены текста * 1
+ некэшированные входные токены изображения * 6.4
+ кэшированные входные токены изображения * 1.6
+ выходные токены изображения * 24
) / 1,000,000
low содержит 27 входных токенов текста и 196 выходных токенов изображения, и стоит:
(27 * 4 + 196 * 24) / 1,000,000 = $0.004812
Переход со стандартной версии
- Замените полное имя модели на соответствующее имя с
-vip. - Замените
sizeс соотношения на размеры в пикселях и уберитеresolution. - И для текст→изображение, и для редактирования по референсу опрашивайте результат по ID задачи и читайте URL изображения из
result.data. - Для редактирования по референсу перейдите на
/v1/images/editsи загружайте файл изображения. - Оценивайте стоимость по фактическим токенам.