Gemini 3.1 Flash Image Preview
Integrate
gemini-3.1-flash-image-preview
# Run the model; wait up to 20 s for the finished result in the same call
curl -X POST "https://api.doitong.com/v1/run/gemini-3.1-flash-image-preview?wait=20" \
-H "Authorization: Bearer $DOITONG_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field"
}'
# Still "queued" or "running"? Poll with the id from the response:
curl "https://api.doitong.com/v1/requests/REQUEST_ID?wait=20" \
-H "Authorization: Bearer $DOITONG_API_KEY"
const API = "https://api.doitong.com/v1";
const headers = {
"Authorization": "Bearer " + process.env.DOITONG_API_KEY,
"Content-Type": "application/json",
};
// Run the model; wait up to 20 s for the finished result in the same call
let res = await fetch(API + "/run/gemini-3.1-flash-image-preview?wait=20", {
method: "POST",
headers,
body: JSON.stringify({
"prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field"
}),
});
let request = await res.json();
if (!res.ok) throw new Error(request.error.code + ": " + request.error.message);
// Not finished yet: long-poll until it is
while (request.status === "queued" || request.status === "running") {
res = await fetch(API + "/requests/" + request.id + "?wait=20", { headers });
request = await res.json();
}
if (request.status !== "succeeded") throw new Error(JSON.stringify(request.error));
console.log(request.outputs.map((o) => o.url), request.cost.credits + " API credits ($" + request.cost.usd + ")");
import os
import requests
API = "https://api.doitong.com/v1"
headers = {"Authorization": "Bearer " + os.environ["DOITONG_API_KEY"]}
payload = {
"prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field",
}
# Run the model; wait up to 20 s for the finished result in the same call
r = requests.post(API + "/run/gemini-3.1-flash-image-preview", params={"wait": 20}, json=payload, headers=headers)
request = r.json()
if not r.ok:
raise RuntimeError(request["error"]["code"] + ": " + request["error"]["message"])
# Not finished yet: long-poll until it is
while request["status"] in ("queued", "running"):
request = requests.get(API + "/requests/" + request["id"], params={"wait": 20}, headers=headers).json()
if request["status"] != "succeeded":
raise RuntimeError(request["error"])
print([o["url"] for o in request["outputs"]], request["cost"]["credits"], "API credits", "$" + request["cost"]["usd"])
# 1. Connect once (Claude Code; Cursor, VS Code, Claude Desktop: https://doitong.com/en-US/developers/docs/mcp)
claude mcp add --transport http doitong-models https://api.doitong.com/v1/mcp \
--header "Authorization: Bearer $DOITONG_API_KEY"
# 2. Your agent calls the "run" tool with:
{
"model_id": "gemini-3.1-flash-image-preview",
"input": {
"prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field"
}
}
Call the Gemini 3.1 Flash Image Preview model (gemini-3.1-flash-image-preview) through the Doitong API. Docs for agents: https://doitong.com/en-US/developers/models/gemini-3.1-flash-image-preview.md
POST https://api.doitong.com/v1/run/gemini-3.1-flash-image-preview?wait=20
Authorization: Bearer $DOITONG_API_KEY
Content-Type: application/json
{
"prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field"
}
If the response status is "queued" or "running", poll GET https://api.doitong.com/v1/requests/REQUEST_ID?wait=20 until it is "succeeded"; the files are in outputs[].url. POST https://api.doitong.com/v1/quote/gemini-3.1-flash-image-preview with the same body returns the exact price before the run.
This request: $0.08 80 API credits Run it on this page
Your new API key. It is shown only now and is already in the code and in the API key field below. Keep it secret: never put it in code that runs in a browser.
Made on Doitong
Public works made with Gemini 3.1 Flash Image Preview by the Doitong community. Reuse a prompt in one click.
Strong rule: style --- 3D Pixar ---. Высокий скалистый берег, омываемый бурными волнами глубокого темно-синего цвета. На вершине скалы стоит Певец, его фигура занимает центральную часть кадра. Камера снимает со среднего плана, чуть снизу вверх, чтобы подчеркнуть значимость момента. Солнце...
Strong rule: style --- 3D Pixar ---. Молодая девушка около 22 лет с яркими, выразительными карими глазами и копной каштановых вьющихся волос, собранных в небрежный пучок. На ней стильные очки в тонкой золотистой оправе и уютный оверсайз-худи пастельно-фиолетового цвета. Лицо отражает...
Strong rule: style --- 3D Pixar ---. Силуэт Певца на фоне огромного заходящего солнца. Он стоит в профиль, голова гордо поднята. Камера на дальнем плане. Небо окрашено в невероятные оттенки огненно-рыжего, пурпурного и глубокого синего. Солнце выглядит как огромный светящийся шар. Атмосфера...
Strong rule: style --- 3D Pixar ---. На горизонте появляется старинный парусник с ярко-алыми парусами, освещенный ярким солнцем. Он скользит по синей глади воды, оставляя за собой белый след. Камера снимает с уровня воды, глядя в сторону корабля. Цвета невероятно насыщенные: глубокая синева моря...
Strong rule: style --- 3D Pixar ---. Подводный мир в лазурных тонах. Лучи солнца пронзают толщу воды, создавая танцующие световые столбы (каустику) на песчаном дне. Камера находится под водой, снимая снизу вверх. Видны косяки мелких серебристых рыб и медленно колышущиеся водоросли. Атмосфера...
Strong rule: style --- 3D Pixar ---. Стилизованный молодой мужчина около 30 лет с округлым лицом и светлой кожей. У него светло-каштановые волосы средней длины, разделенные на прямой пробор, и выразительные большие голубые глаза за очками в широкой черной оправе. На лице аккуратная бородка и...
Strong rule: style --- 3D Pixar ---. Стилизованный молодой мужчина около 30 лет с округлым лицом и светлой кожей. У него светло-каштановые волосы средней длины, разделенные на прямой пробор, и выразительные большие голубые глаза за очками в широкой черной оправе. На лице аккуратная бородка и...
Strong rule: style --- 3D Pixar ---. Сюрреалистичный и нежный образ: огромные волны, напоминающие по форме ладони, бережно держат маленькие бумажные кораблики и сказочные фрегаты. Камера на среднем плане. Освещение мягкое, лунное, создающее сказочную атмосферу. Море выглядит живым и заботливым....
Strong rule: style --- 3D Pixar ---. Величественный общий план: Певец стоит на краю обрыва, раскинув руки, на фоне огромного бушующего океана. Огромные волны бьются о подножие скал, поднимая тучи белой пены. Камера расположена далеко, создавая масштабную композицию. Небо затянуто драматичными...
Strong rule: style --- 3D Pixar ---. Стилизованный кадр открытого космоса, переходящий в земную атмосферу. Видны туманности синего цвета и падающие звезды-метеоры, оставляющие длинные хвосты. Камера совершает быстрый пролет сквозь пространство. Освещение неоновое, магическое. Атмосфера...
Strong rule: style --- 3D Pixar ---. Ночное небо над морем, усыпанное мириадами ярких звезд и Млечным Путем. Звезды отражаются в спокойной темной воде, создавая иллюзию бесконечного пространства. Камера направлена вверх под углом 45 градусов. Освещение холодное, лунное, с серебристыми бликами на...
Strong rule: style --- 3D Pixar ---. Крупный план морской пены, разбивающейся о прибрежные камни. Брызги воды разлетаются во все стороны, сверкая как алмазы в лучах восходящего солнца. Камера зафиксирована в динамичном ракурсе сбоку. Освещение теплое, золотистое, контрастирующее с холодными...
Strong rule: style --- 3D Pixar ---. Крупный план лица Певца, выражающего глубокое одухотворение. Его глаза блестят от эмоций, взгляд направлен вдаль. Он прикладывает руку к сердцу в искреннем жесте. Камера находится на уровне глаз, создавая интимную связь со зрителем. Фоном служит размытый...
Strong rule: style --- 3D Pixar ---. Финальный кадр: горизонт, где небо встречается с морем в полной темноте, освещенный лишь тонкой полоской света. Камера зафиксирована. В центре кадра появляется каллиграфическая надпись 'Синяя вечность'. Стиль минималистичный и элегантный. Освещение едва...
Strong rule: style --- 3D Pixar ---. Вид с палубы корабля с алыми парусами, уходящего в закат. Камера направлена вперед, в сторону заходящего солнца, которое касается горизонта. Паруса занимают часть кадра, они пылают красным цветом. Освещение теплое, оранжево-золотое. Атмосфера умиротворения и...
Strong rule: style --- 3D Pixar ---. Возвращение к эпическому виду скал в полдень. Солнце стоит в зените, освещая море до самого дна у берега. Певец стоит на той же скале, но теперь его образ еще более мощный и уверенный. Камера делает круговой облет (bullet time эффект). Освещение максимально...
Build a request
Controls are generated from the model schema. The code and the price update as you change them.
/run/gemini-3.1-flash-image-preview?wait=20
quote → $0.08
# Run the model; wait up to 20 s for the finished result in the same call
curl -X POST "https://api.doitong.com/v1/run/gemini-3.1-flash-image-preview?wait=20" \
-H "Authorization: Bearer $DOITONG_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field"
}'
# Still "queued" or "running"? Poll with the id from the response:
curl "https://api.doitong.com/v1/requests/REQUEST_ID?wait=20" \
-H "Authorization: Bearer $DOITONG_API_KEY"
const API = "https://api.doitong.com/v1";
const headers = {
"Authorization": "Bearer " + process.env.DOITONG_API_KEY,
"Content-Type": "application/json",
};
// Run the model; wait up to 20 s for the finished result in the same call
let res = await fetch(API + "/run/gemini-3.1-flash-image-preview?wait=20", {
method: "POST",
headers,
body: JSON.stringify({
"prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field"
}),
});
let request = await res.json();
if (!res.ok) throw new Error(request.error.code + ": " + request.error.message);
// Not finished yet: long-poll until it is
while (request.status === "queued" || request.status === "running") {
res = await fetch(API + "/requests/" + request.id + "?wait=20", { headers });
request = await res.json();
}
if (request.status !== "succeeded") throw new Error(JSON.stringify(request.error));
console.log(request.outputs.map((o) => o.url), request.cost.credits + " API credits ($" + request.cost.usd + ")");
import os
import requests
API = "https://api.doitong.com/v1"
headers = {"Authorization": "Bearer " + os.environ["DOITONG_API_KEY"]}
payload = {
"prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field",
}
# Run the model; wait up to 20 s for the finished result in the same call
r = requests.post(API + "/run/gemini-3.1-flash-image-preview", params={"wait": 20}, json=payload, headers=headers)
request = r.json()
if not r.ok:
raise RuntimeError(request["error"]["code"] + ": " + request["error"]["message"])
# Not finished yet: long-poll until it is
while request["status"] in ("queued", "running"):
request = requests.get(API + "/requests/" + request["id"], params={"wait": 20}, headers=headers).json()
if request["status"] != "succeeded":
raise RuntimeError(request["error"])
print([o["url"] for o in request["outputs"]], request["cost"]["credits"], "API credits", "$" + request["cost"]["usd"])
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "run",
"arguments": {
"model_id": "gemini-3.1-flash-image-preview",
"input": {
"prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field"
},
"wait_seconds": 20
}
}
}
Run this request
Your key stays in this browser: it is sent only to the Doitong API and saved (localStorage) only if you tick Remember. Get an API key
About Gemini 3.1 Flash Image Preview
Generates images from a `prompt`, with `resolution` of 0.5K, 1K, 2K or 4K and aspect ratios including extreme ones such as 8:1 and 1:8. Optional `system_prompt`, `enable_web_search` and `thinking_level` (minimal or high) shape the generation. Produces 1 to 4 images in PNG, JPEG or WebP.
Parameters
Send either the canonical name or the native name, not both. Canonical names
promptrequired
num_imagesoptional
num_outputs
seedoptional
aspect_ratiooptional
output_formatoptional
safety_toleranceoptional
system_promptoptional
resolutionoptional
limit_generationsoptional
enable_web_searchoptional
thinking_leveloptional
Output
{
"id": "req_8k2m4q7x1z9c3v5b6n0p2r4t",
"object": "request",
"model": "gemini-3.1-flash-image-preview",
"status": "succeeded",
"created_at": "2026-10-20T12:00:00Z",
"started_at": "2026-10-20T12:00:02Z",
"completed_at": "2026-10-20T12:00:09Z",
"queue_position": null,
"cost": {
"credits": 80,
"usd": "0.08",
"charged": 80,
"refunded": 0
},
"input": {
"prompt": "A red fox trots through fresh snow at sunrise, soft golden light, shallow depth of field"
},
"output": {
"images": [
{
"url": "https://content.doitong.com/dev-api/2026/10/20/req_8k2m4q7x1z9c3v5b6n0p2r4t/0-output.jpeg",
"content_type": "image/jpeg",
"file_name": "0-output.jpeg",
"file_size": 1843200,
"width": 1024,
"height": 768
}
],
"description": "string"
},
"outputs": [
{
"type": "image",
"url": "https://content.doitong.com/dev-api/2026/10/20/req_8k2m4q7x1z9c3v5b6n0p2r4t/0-output.jpeg",
"content_type": "image/jpeg",
"file_size": 1843200,
"width": 1024,
"height": 768,
"stored": true
}
],
"error": null,
"metrics": {
"inference_seconds": 6.8
},
"urls": {
"self": "https://api.doitong.com/v1/requests/req_8k2m4q7x1z9c3v5b6n0p2r4t",
"cancel": "https://api.doitong.com/v1/requests/req_8k2m4q7x1z9c3v5b6n0p2r4t/cancel"
}
}
Fields of output
- images
- array of object {url, content_type, file_name, file_size, width, height}Images produced by the model.
- description
- stringDescription accompanying the generated images.
Other Gemini 3.1 Flash Image Preview variants
More models: Text to Image
For AI agents: this page as Markdown is at https://doitong.com/en-US/developers/models/gemini-3.1-flash-image-preview.md. All models and guides: https://doitong.com/developers/llms.txt







