GPT-Image-2.6 · Text-to-image
curl --request POST \
--url https://api.gravitex.ai/v1/images/generations \
--header 'Authorization: <authorization>' \
--header 'Content-Type: <content-type>'import requests
url = "https://api.gravitex.ai/v1/images/generations"
headers = {
"Authorization": "<authorization>",
"Content-Type": "<content-type>"
}
response = requests.post(url, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: '<authorization>', 'Content-Type': '<content-type>'}
};
fetch('https://api.gravitex.ai/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.gravitex.ai/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_HTTPHEADER => [
"Authorization: <authorization>",
"Content-Type: <content-type>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.gravitex.ai/v1/images/generations"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("Authorization", "<authorization>")
req.Header.Add("Content-Type", "<content-type>")
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.gravitex.ai/v1/images/generations")
.header("Authorization", "<authorization>")
.header("Content-Type", "<content-type>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.gravitex.ai/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"] = '<content-type>'
response = http.request(request)
puts response.read_bodyimage-2.6
GPT-Image-2.6 · Text-to-image
GPT-Image-2.6 Flare / Sunburst · POST /v1/images/generations
POST
/
v1
/
images
/
generations
GPT-Image-2.6 · Text-to-image
curl --request POST \
--url https://api.gravitex.ai/v1/images/generations \
--header 'Authorization: <authorization>' \
--header 'Content-Type: <content-type>'import requests
url = "https://api.gravitex.ai/v1/images/generations"
headers = {
"Authorization": "<authorization>",
"Content-Type": "<content-type>"
}
response = requests.post(url, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: '<authorization>', 'Content-Type': '<content-type>'}
};
fetch('https://api.gravitex.ai/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.gravitex.ai/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_HTTPHEADER => [
"Authorization: <authorization>",
"Content-Type: <content-type>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.gravitex.ai/v1/images/generations"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("Authorization", "<authorization>")
req.Header.Add("Content-Type", "<content-type>")
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.gravitex.ai/v1/images/generations")
.header("Authorization", "<authorization>")
.header("Content-Type", "<content-type>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.gravitex.ai/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"] = '<content-type>'
response = http.request(request)
puts response.read_bodyIntroduction
GPT-Image-2.6 is OpenAI’s image model family, with Flare for fast iteration and Sunburst for detailed visual work. UsePOST /v1/images/generations to turn text descriptions into images for posters, product visuals, illustrations, icons, and infographics.
Both models support PNG, JPEG, and WebP images, as well as animated GIF and SVG vector output, subject to project access and channel availability. GIF suits looping motion; SVG suits icons and illustrations that need scalable, editable paths and colors.
Use quality for rendering quality and the independent complexity setting for planning before rendering. Set dimensions and background for your use case, then inspect text, layout, and details. Choose Flare when response time matters most, or Sunburst for demanding compositions and visual detail.
Choose a model
| Model ID | Best suited for |
|---|---|
gpt-image-2.6-flare | Fast iteration and interactive generation |
gpt-image-2.6-sunburst | Detailed visual work and complex layouts |
Authentication
string
required
Bearer $GRAVITEX_API_KEY
string
required
application/json
Request parameters
| Parameter | Type | Description |
|---|---|---|
model | string | Required: gpt-image-2.6-flare or gpt-image-2.6-sunburst |
prompt | string | Required description of the image to generate; up to 32,000 characters |
quality | string | auto / low / medium / high / xhigh / max; default auto |
complexity | string | low / medium / high; default high. Planning effort independent of quality |
size | string | auto or WxH with dimensions divisible by 16; model size and pixel budgets apply |
n | integer | 1–10; SVG requires 1 |
background | string | auto / opaque / transparent; use png or webp for transparent raster output |
output_format | string | png / jpeg / webp / gif; generation also supports svg |
output_compression | integer | 0–100 for jpeg/webp only; unavailable for GIF/SVG |
moderation | string | auto / low; default auto |
safety_identifier | string | Stable hashed end-user identifier, up to 128 characters; replaces user |
stream | boolean | Default false. When true, read SSE events instead of parsing a single JSON response. Unsupported for GIF; SVG unsupported |
partial_images | integer | Raster streaming only: 0–3, default 0. Requested preview count; fewer previews may arrive. Unsupported for GIF; SVG unsupported |
frame_count | integer | GIF only: 2–16; default 9 |
frame_duration_ms | integer | GIF only: default 200; guide recommends 20–2000ms rounded to 10ms |
svg | object | Required for SVG: author model and optional reasoning settings |
Request examples
Examples read the platform token from GRAVITEX_API_KEY in your terminal environment. For uploads, curl -F generates Content-Type and boundary automatically; do not manually set a bare multipart/form-data header.Basic generation
curl https://api.gravitex.ai/v1/images/generations \
-H "Authorization: Bearer $GRAVITEX_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2.6-flare",
"prompt": "A clean botanical poster with precise typography",
"quality": "medium",
"complexity": "high",
"size": "1024x1024"
}'
Animated GIF
curl https://api.gravitex.ai/v1/images/generations \
-H "Authorization: Bearer $GRAVITEX_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2.6-flare",
"prompt": "A fox mascot waving, seamless looping animation",
"output_format": "gif",
"frame_count": 9,
"frame_duration_ms": 200,
"size": "auto"
}'
SVG output
This channel requires svg.model for SVG output; omitting it returns missing_required_parameter. gpt-6.1-sol with reasoning.effort=low was tested successfully on 2026-11-09. Confirm channel availability before choosing a different author.
Specify the SVG author
This example uses gpt-6.1-sol, successfully tested as the SVG author on this channel on 2026-11-09. Use an available author model for other channels or projects.curl https://api.gravitex.ai/v1/images/generations \
-H "Authorization: Bearer $GRAVITEX_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2.6-flare",
"prompt": "A simple botanical logo with editable paths",
"output_format": "svg",
"n": 1,
"quality": "medium",
"complexity": "high",
"svg": {
"model": "gpt-6.1-sol",
"reasoning": {
"effort": "low"
}
}
}'
Field guide
| Field | Purpose |
|---|---|
model | Image model that renders the reference image; use this page’s 2.6 model ID |
prompt | Desired SVG content, text, layout, and style |
output_format | Set to svg |
n | Must be 1 for SVG |
quality | Rendering quality of the reference image; medium in this example |
complexity | Image-model planning effort for the reference; high in this example |
svg.model | SVG author model; required for SVG output |
svg.reasoning.effort | Author-model reasoning effort, independent of complexity. Use low only if the chosen author supports it; omit reasoning to use its default |
Do not substitute either 2.6 image model for the SVG author. Available authors and supported effort values depend on the project and chosen model.
Streaming
curl --no-buffer https://api.gravitex.ai/v1/images/generations \
-H "Authorization: Bearer $GRAVITEX_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2.6-flare",
"prompt": "A simple green botanical illustration",
"quality": "medium",
"size": "1024x1024",
"stream": true,
"partial_images": 1
}'
Limits and notes
GIF size describes each frame. Frame count, n, and model pixel budgets jointly constrain it. Prefer auto; reduce frames or dimensions if limits are exceeded. GIF requires preview access. Omit mask, stream, partial_images, and custom output_compression. Frame count, frame dimensions, and n share the request pixel budget; reduce them or use size=auto if limits are exceeded. SVG is supported here on generation only, subject to project access. Set n=1; omit stream, partial_images, output_compression, and prompt_rewriter. This channel requires svg.model. Complexity has no separate fee, but can affect latency and results. Lower complexity does not guarantee a fixed response time or per-image cost.Response example
This is a schematic non-streaming response. Image data and token counts are illustrative, not an actual generation. Decode b64_json to the selected file format; do not save the Base64 text directly as an image.{
"created": 1794268800,
"data": [
{
"b64_json": "<BASE64_IMAGE_DATA>"
}
],
"usage": {
"input_tokens": 100,
"output_tokens": 824,
"total_tokens": 924
}
}
Response and billing
Non-streaming examples return image bytes as b64_json. Do not request response_format=url expecting a hosted image URL. Equal token rates do not imply equal cost per image; use actual usage. Decode data[].b64_json into the selected file format. usage reports token consumption. SVG can also return svg_usage for separately billed author-model tokens. Prices below are OpenAI standard rates, not a GravitexAI quote; platform billing follows the console.| Type | USD / 1M tokens |
|---|---|
| Text input | $5.00 |
| Cached text input | $1.25 |
| Image input | $8.00 |
| Cached image input | $2.00 |
| Image output | $30.00 |
