Source: https://ailoot.ai/models/ar/gemini-3-pro-image/
Canonical: https://ailoot.ai/models/ar/gemini-3-pro-image/
Language: ar

# Google: Nano Banana Pro (Gemini 3 Pro Image)

[Markdown](https://ailoot.ai/models/ar/gemini-3-pro-image/index.md) · [JSON](https://ailoot.ai/models/ar/gemini-3-pro-image/facts.json)

## [Google: Nano Banana Pro (Gemini 3 Pro Image)](https://ailoot.ai/models/ar/gemini-3-pro-image/)

Nano Banana Pro (Gemini 3 Pro Image) هو نموذج Google للصور القائم على الاستدلال، للتصميم المعقد ونماذج عرض المنتجات والتصورات المرئية للحقائق. يقبل النصوص والمراجع الصورية ويولّد صورًا مع نص، بمخرجات 1K–4K وتحكم إبداعي مفصل.

- [**Ailoot · الصور** `POST /v1/images/generations` `gemini-3-pro-image`](https://ailoot.ai/models/ar/gemini-3-pro-image/#method-0)
- [**Ailoot · الصور** `POST /v1/images/generations` `gemini-3-pro-image-preview`](https://ailoot.ai/models/ar/gemini-3-pro-image/#method-1)
- [**Ailoot · الصور** `POST /v1/images/generations` `nano-banana-pro`](https://ailoot.ai/models/ar/gemini-3-pro-image/#method-2)
- [**Ailoot Ultra · محادثة OpenAI** `POST /v1/chat/completions` `google/gemini-3-pro-image`](https://ailoot.ai/models/ar/gemini-3-pro-image/#method-3)
- [**Ailoot Ultra · الصور** `POST /v1/images/generations` `google/gemini-3-pro-image`](https://ailoot.ai/models/ar/gemini-3-pro-image/#method-4)
- [**Ailoot Ultra · رسائل Anthropic** `POST /v1/messages` `google/gemini-3-pro-image`](https://ailoot.ai/models/ar/gemini-3-pro-image/#method-5)

عن النموذج

يغطي هذا الوصف قدرات النموذج. وترد أدناه المدخلات والمخرجات والخيارات المتاحة في Ailoot للطريقة المحددة.

Nano Banana Pro هو نموذج Gemini 3 Pro Image من Google لتوليد الصور وتحريرها اعتمادًا على الاستدلال. تضع الشركة المنتجة التصميم الجرافيكي المعقد ونماذج عرض المنتجات عالية الوفاء والتصور المرئي للبيانات الواقعية في صميم استخداماته المقصودة. يقبل النصوص والصور وينتج صورًا ونصًا. يستند إصدار الصور Pro المسمى هذا إلى Gemini 3 Pro، مع احتفاظه بمواصفات مستقلة للمدخلات والقدرات الخاصة بمهام الصور.

يدعم النموذج صور 1K و2K و4K. تشمل الأشكال الموثقة 1:1 و2:3 و3:2 و3:4 و4:3 و4:5 و5:4 و9:16 و16:9 و21:9. تبلغ أبعاد الصورة المربعة عند 4K مقدار 4096 × 4096؛ وتبلغ أبعاد صورة 16:9 عند 4K مقدار 5504 × 3072. اختر الدقة ونسبة الأبعاد بحسب المادة التي تحتاجها، سواء كانت ملصقًا عموديًا أو مشهد منتج أو رسمًا توضيحيًا عريضًا. خيار 0.5K والنسب المتطرفة الإضافية في Gemini 3.1 Flash Image ليست جزءًا من جدول Pro هذا.

يدعم عرض النصوص كتابة واضحة في الملصقات والمخططات وغيرها من المواد المصممة. لإنفوغراف معقد، قدّم الحقائق الأساسية والصياغة الدقيقة وتسلسل القراءة والعلاقة بين التسميات والعناصر المرئية. افصل بين المعلومات التي تريد إيصالها والأسلوب الفني المطلوب. توصي Google بإعداد النص أولًا ثم توليد الصورة التي تتضمنه. يفيد ذلك خصوصًا عندما يجمع التكوين عنوانًا رئيسيًا ومخططًا وعدة تعليقات قصيرة.

يدعم الإدخال متعدد الصور ما يصل إلى 14 مرجعًا. يصف جدول ميزات Google ما يصل إلى ستة مراجع لعناصر من أجل الوفاء بالتفاصيل، وما يصل إلى خمسة مراجع لشخصيات من أجل الاتساق، وما يصل إلى ثلاثة مراجع للأسلوب. تساعد هذه الأدوار على إعداد عنصر مرئي مركب: تحدد صورة فوتوغرافية للمنتج المظهر، وتحدد صورة منفصلة المكان، وتوجه صورة أسلوبية المعالجة البصرية. أخبر النموذج بالتفاصيل المعتمدة والمراجع التي تقدم الإلهام، بدلًا من مطالبته بدمج كل سمة ظاهرة دون تمييز.

يمكن لإسناد التوليد إلى Google Search توفير معلومات من العالم الحقيقي لتصور مرئي واقعي أو مشهد يستند إلى الظروف الراهنة. يوثق مسار صور Pro الإسناد إلى الويب؛ أما امتداد Image Search فموثق تحديدًا لـNano Banana 2.1 وGemini 3.1 Flash Image. ولرسم بيانات، قدّم القيم التي تنوي عرضها أو اطلب معلومات مستندة إلى مصادر ضمن مسار الشركة المنتجة، ثم اجعل العلاقات والتسميات والتخطيط صريحة. يظل التوليد المستنير بالبحث منتجًا لصورة تحتاج إلى مراجعة، ولا يحل محل التحقق من الحقائق المصوَّرة.

يدعم الاستدلال تكوين مطالبة معقدة قبل الرسم النهائي. يصف دليل الصور صورًا وسيطة تُستخدم لاختبار التكوين والمنطق، وهي منفصلة عن المادة النهائية. لا تنقل جدول تحكم minimal/high الخاص بـNano Banana 2 أو جدول المستوى medium الافتراضي الخاص بـNano Banana 2.1 إلى إصدار Pro هذا. ولتصميم صعب، قدّم موجزًا كاملًا يضم التسلسل البصري الهرمي والعلاقات المطلوبة بين العناصر والعناصر التي يجب أن تصمد أمام التعديلات اللاحقة.

تصف بطاقة النموذج قيودًا جوهرية باقية: قد يظهر النص الصغير جدًا والمقاطع الطويلة بصورة ضعيفة، وقد يتغير مظهر الشخصية بين المرجع والنتيجة، وقد تتبع تعديلات الأقنعة أو الرسومات الأولية التعليمات جزئيًا فقط أو تترك علامات. وقد يخلط أيضًا بين اليسار واليمين أو ينسخ عنصرًا من المصدر إلى التكوين الجديد. ولتعديل منتج، اذكر صراحة الشكل الهندسي والتسميات الواجب الحفاظ عليها وافحص المنطقة المعدلة؛ ولمخطط، قارن اتجاه الأسهم والمواضع النسبية للعناصر.

يعطي جدول API الحالي حد إدخال يبلغ 65,536 رمزًا وحد إخراج يبلغ 32,768 رمزًا. يدعم توليد الصور والتفكير وإسناد التوليد إلى البحث والمعالجة الدفعية؛ ولا يدعم توليد الصوت واستدعاء الدوال وتنفيذ الشيفرة والتخزين المؤقت والمخرجات المنظَّمة والبحث في الملفات وسياق URL وLive API. ولا تقبل مهمة الصور إدخالًا صوتيًا أو مرئيًا بالفيديو في هذا الإصدار. تتضمن الصور المولدة SynthID، ولا يُتبع العدد المطلوب لصور الإخراج بدقة دائمًا.

يمكن لموجز منتج عملي أن يجمع صورة للمنتج ومرجعًا للإضاءة والعنوان الرئيسي الدقيق: «حافظ على نسب المنتج وكتاباته، وأظهره على سطح حجري شاحب تحت ضوء جانبي ناعم، واترك الثلث العلوي خاليًا للعنوان المقدم». ولمخطط واقعي، حدّد كل كيان ورابط وقدّم التسميات المعتمدة. حسّن النتيجة عبر محادثة بتسمية تغيير واحد والسمات التي ينبغي الحفاظ عليها، مع إبقاء الصورة المختارة ونصها التفسيري معًا بوصفهما المادة التصميمية.

مهمة عملية

### مهمة عملية

مثال تقني باللغة الإنجليزية

```
Visualize a supplied packaging cycle

Create one landscape explanatory graphic showing this packaging return cycle: customer returns an empty jar, store inspects it, accepted jars are washed, clean jars are refilled. Use four large illustrated stages connected clockwise. Add only these exact labels: 'RETURN', 'INSPECT', 'WASH', 'REFILL'. Make the arrow direction and stage order unmistakable.
```

#### النتيجة المتوقعة

```
One landscape image with four labeled stages and arrows matching the supplied cycle.
```

#### التحقق من النتيجة

```
Inspect that arrows connect RETURN to INSPECT to WASH to REFILL in that order, with exact labels.
```

**Ailoot · الصور** `POST /v1/images/generations` `gemini-3-pro-image`

[`gemini-3-pro-image`](https://ailoot.ai/models/ar/#m=google%2Fgemini-3-pro-image&route=Core&caller=gemini-3-pro-image&fmt=images)

Google /`gemini-3-pro-image`

معرّف النموذج ID

- `gemini-3-pro-image`
- `gemini-3-pro-image-preview`
- `nano-banana-pro`

### البداية

Nano Banana Pro (Gemini 3 Pro Image) هو نموذج Google للصور القائم على الاستدلال، للتصميم المعقد ونماذج عرض المنتجات والتصورات المرئية للحقائق. يقبل النصوص والمراجع الصورية ويولّد صورًا مع نص، بمخرجات 1K–4K وتحكم إبداعي مفصل.

المدخلات المقبولة

النص

النتائج

الصور

### متاح في Ailoot · المدخلات والطرائق

**Ailoot · الصور** `POST /v1/images/generations`

الإدخال

`text`

الإخراج

`image`

السياق

⁦65,536⁩ tokens

الحد الأقصى للإخراج

⁦32,768⁩ tokens

صيغة الإخراج

ملف صورة

| الحقل | النوع | المتطلب | القيم والحدود | القيمة الافتراضية |
| --- | --- | --- | --- | --- |
| الحقل`model` | النوع`string` | المتطلبمطلوب | القيم والحدود gemini-3-pro-image | القيمة الافتراضية— |
| الحقل`prompt` | النوع`string` | المتطلبمطلوب | القيم والحدود الحد الأدنى للطول: ⁦1⁩ | القيمة الافتراضية— |
| الحقل`n` | النوع`integer` | المتطلباختياري | القيم والحدود الحد الأدنى: ⁦1⁩ | القيمة الافتراضية⁦1⁩ |
| الحقل`response_format` | النوع`string` | المتطلباختياري | القيم والحدود url, b64\_json | القيمة الافتراضية— |
| الحقل`stream` | النوع`boolean` | المتطلباختياري | القيم والحدود | القيمة الافتراضيةfalse |
| الحقل`size` | النوع`string` | المتطلباختياري | القيم والحدود يعتمد على النموذج | القيمة الافتراضية— |
| الحقل`quality` | النوع`string` | المتطلباختياري | القيم والحدود يعتمد على النموذج | القيمة الافتراضية— |
| الحقل`background` | النوع`string` | المتطلباختياري | القيم والحدود يعتمد على النموذج | القيمة الافتراضية— |
| الحقل`output_format` | النوع`string` | المتطلباختياري | القيم والحدود يعتمد على النموذج | القيمة الافتراضية— |
| الحقل`output_compression` | النوع`integer` | المتطلباختياري | القيم والحدود يعتمد على النموذج | القيمة الافتراضية— |
| الحقل`moderation` | النوع`string` | المتطلباختياري | القيم والحدود يعتمد على النموذج | القيمة الافتراضية— |
| الحقل`input_fidelity` | النوع`string` | المتطلباختياري | القيم والحدود يعتمد على النموذج | القيمة الافتراضية— |
| الحقل`style` | النوع`string` | المتطلباختياري | القيم والحدود يعتمد على النموذج | القيمة الافتراضية— |
| الحقل`partial_images` | النوع`integer` | المتطلباختياري | القيم والحدود يعتمد على النموذج | القيمة الافتراضية— |

تركيبات مواد الإدخال

**تحويل النص إلى صورة** · مطلوب: prompt

معلمات الطريقة ودورة حياتها

| المعلمة | المواصفات |
| --- | --- |
| المعلمة`material_types` | المواصفاتtext |
| المعلمة`required` | المواصفاتmodel, prompt |
| المعلمة`optional_controls` | المواصفاتnull |
| المعلمة`content_type` | المواصفاتapplication/json |

دورة الحياة: `synchronous_result_then_owned_library`

`GET /v1/media/tasks/{task_id}` · قيمة task\_id الفعلية المُعادة أو سجل مكتبة الوسائط

`GET /v1/media/assets/{asset_id}/content`

`GET /v1/media/assets`

`GET /v1/media/assets/{asset_id}`

بُنى الطرق ومعرّفاتها دقيقة؛ قدرة المورد منفصلة عن السماح بالطلب.

### الباقات

#### تعرفات طرائق Ailoot

الإدخال

⁦‏0.002 US$⁩ */ 1K من رموز الصور*

الإخراج

⁦‏0.134 US$⁩ *لكل صورة بدقة 1K*

الإخراج

⁦‏0.134 US$⁩ *لكل صورة بدقة 2K*

الإخراج

⁦‏0.24 US$⁩ *لكل صورة بدقة 4K*

تحجز Ailoot مبلغًا تقديريًا قبل الطلب. وبعد ظهور النتيجة، تُسوّي الرسوم النهائية بناءً على الاستخدام المقاس. وتستخدم تسوية البث سجل الاستخدام النهائي. [كيفية عمل حجز المبلغ وتسوية الرسوم →](https://ailoot.ai/docs/ar/billing/reserve/)

#### تفاصيل التعرفة المرجعية

لا تغيّر جداول التعرفة المرجعية على مستوى النموذج اختيار الطريقة أو عروض الأسعار أو الرسوم. وتستخدم الرسوم الفعلية تعرفات طريقة Ailoot المحددة.

جداول التعرفة المرجعية للنموذج

#### الأسعار حسب الإعدادات

| الإعدادات | جدول التعرفة | الرسوم |
| --- | --- | --- |
| الإعداداتUltra | جدول التعرفةالتعرفة الأساسية | الرسوم الإدخال · رموز الإدخال **$0.004000** / 1K من الرموز الإخراج · رموز الإخراج **$0.024000** / 1K من الرموز الإدخال · صورة **$0.004000** / 1K من الرموز الإخراج · إخراج الصور **$0.24000** / 1K من الرموز الإدخال · صوت **$0.004000** / 1K من الرموز الإدخال · ذاكرة التخزين المؤقت للصوت المُدخل **$0.0004000** / 1K من الرموز الإخراج · بحث في الويب **$0.028** لكل عملية بحث على الويب الإخراج · استدلال داخلي **$0.024000** / 1K من الرموز الإدخال · قراءة ذاكرة التخزين المؤقت **$0.0004000** / 1K من الرموز الإدخال · الكتابة إلى ذاكرة التخزين المؤقت **$0.000750000** / 1K من الرموز |

### أمثلة للطلبات

#### Ailoot · الصور

curlPython SDKNode.js SDK

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
export AILOOT_API_KEY
export AILOOT_API_KEY
: "${AILOOT_PROMPT_FILE:?Set your actual UTF-8 image brief}"
export AILOOT_PROMPT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "gemini-3-pro-image", "prompt": ""}')
f=Path(os.environ["AILOOT_PROMPT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 brief")
p['prompt']=f.read_text(encoding="utf-8")
if not p['prompt'].strip():raise SystemExit("Brief must contain text")
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/images/generations \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import base64, json, os, subprocess
from pathlib import Path
from urllib.parse import urlsplit, urljoin

def save_images(items):
    if not items: raise SystemExit("No completed images; retain the full response")
    for index, item in enumerate(items):
        encoded=item.get("b64_json")
        uri=item.get("url", "")
        if not encoded and uri.startswith("data:image/"):
            header, separator, encoded=uri.partition(",")
            if not separator or ";base64" not in header: raise SystemExit("Unsupported image data URI")
        if encoded:
            raw=base64.b64decode(encoded,validate=True)
        elif uri:
            uri=urljoin("https://api.ailoot.ai",uri)
            parsed=urlsplit(uri)
            if parsed.scheme!="https" or not parsed.netloc or parsed.username or parsed.password:
                raise SystemExit("Invalid returned image URL")
            owned=parsed.netloc=="api.ailoot.ai" and parsed.path.startswith("/v1/media/assets/") and parsed.path.endswith("/content")
            args=["curl","--fail-with-body","--silent","--show-error",uri]
            if owned: args += ["-H","Authorization: Bearer "+os.environ["AILOOT_API_KEY"]]
            temporary=Path(f"image-{index}.bin")
            subprocess.run(args+["-o",str(temporary)],check=True)
            raw=temporary.read_bytes()
            temporary.unlink()
        else: raise SystemExit("Image has neither bytes nor URL")
        if not raw: raise SystemExit("Empty image result")
        ext="png" if raw.startswith(b"\x89PNG") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else "svg" if raw.lstrip().startswith((b"<svg",b"<?xml")) else "bin"
        Path(f"image-{index}.{ext}").write_bytes(raw)
    print("Every returned image saved; complete response metadata retained")
save_images(json.loads(Path("result.json").read_text())["data"])
PY_RESULT
```

```python
from openai import OpenAI
import base64, json, os, subprocess
from pathlib import Path
from urllib.parse import urlsplit, urljoin

def save_images(items):
    if not items: raise SystemExit("No completed images; retain the full response")
    for index, item in enumerate(items):
        encoded=item.get("b64_json")
        uri=item.get("url", "")
        if not encoded and uri.startswith("data:image/"):
            header, separator, encoded=uri.partition(",")
            if not separator or ";base64" not in header: raise SystemExit("Unsupported image data URI")
        if encoded:
            raw=base64.b64decode(encoded,validate=True)
        elif uri:
            uri=urljoin("https://api.ailoot.ai",uri)
            parsed=urlsplit(uri)
            if parsed.scheme!="https" or not parsed.netloc or parsed.username or parsed.password:
                raise SystemExit("Invalid returned image URL")
            owned=parsed.netloc=="api.ailoot.ai" and parsed.path.startswith("/v1/media/assets/") and parsed.path.endswith("/content")
            args=["curl","--fail-with-body","--silent","--show-error",uri]
            if owned: args += ["-H","Authorization: Bearer "+os.environ["AILOOT_API_KEY"]]
            temporary=Path(f"image-{index}.bin")
            subprocess.run(args+["-o",str(temporary)],check=True)
            raw=temporary.read_bytes()
            temporary.unlink()
        else: raise SystemExit("Image has neither bytes nor URL")
        if not raw: raise SystemExit("Empty image result")
        ext="png" if raw.startswith(b"\x89PNG") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else "svg" if raw.lstrip().startswith((b"<svg",b"<?xml")) else "bin"
        Path(f"image-{index}.{ext}").write_bytes(raw)
    print("Every returned image saved; complete response metadata retained")

f=Path(os.environ["AILOOT_PROMPT_FILE"])
if not f.is_file():raise SystemExit("Set your actual UTF-8 image brief file")
request={'model': 'gemini-3-pro-image', 'prompt': ''}
request["prompt"]=f.read_text(encoding="utf-8")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
result=client.images.generate(**request)
Path("sdk-result.txt").write_text(str(result),encoding="utf-8")
save_images([{"b64_json":getattr(item,"b64_json",None),"url":getattr(item,"url",None)} for item in result.data])
```

```js
import OpenAI from "openai";
import { readFileSync, writeFileSync } from "node:fs";
const key=process.env.AILOOT_API_KEY;
if(!key) throw new Error("Set your actual Ailoot API key");
const client=new OpenAI({baseURL:"https://api.ailoot.ai/v1",apiKey:key,maxRetries:0});
const request={"model": "gemini-3-pro-image", "prompt": ""};
if(!process.env.AILOOT_PROMPT_FILE)throw new Error("Set your actual UTF-8 image brief file");
request.prompt=readFileSync(process.env.AILOOT_PROMPT_FILE,"utf8");
const result=await client.images.generate(request);
writeFileSync("sdk-result.json",JSON.stringify(result,null,2));
if(!result.data?.length) throw new Error("No completed images");
for(let index=0;index<result.data.length;index++) {
  const item=result.data[index];let encoded=item.b64_json,uri=item.url||"",raw;
  if(!encoded && uri.startsWith("data:image/")) {
    const comma=uri.indexOf(",");if(comma<0 || !uri.slice(0,comma).includes(";base64")) throw new Error("Unsupported image data URI");
    encoded=uri.slice(comma+1);
  }
  if(encoded) {
    if(encoded.length%4!==0 || !/^[A-Za-z0-9+/]*={0,2}$/.test(encoded)) throw new Error("Invalid Base64");
    raw=Buffer.from(encoded,"base64");
  } else if(uri) {
    const u=new URL(uri,"https://api.ailoot.ai");
    if(u.protocol!=="https:" || u.username || u.password) throw new Error("Invalid returned URL");
    const owned=u.origin==="https://api.ailoot.ai" && u.pathname.startsWith("/v1/media/assets/") && u.pathname.endsWith("/content");
    const response=await fetch(u,{headers:owned?{Authorization:"Bearer "+key}:{},redirect:"manual"});
    if(!response.ok) throw new Error("Image content download failed: "+response.status);
    raw=Buffer.from(await response.arrayBuffer());
  } else throw new Error("Image has neither bytes nor URL");
  if(!raw.length) throw new Error("Empty image result");
  const ext=raw.subarray(0,4).equals(Buffer.from([137,80,78,71]))?"png":raw[0]===255&&raw[1]===216?"jpg":raw.toString("ascii",0,4)==="RIFF"&&raw.toString("ascii",8,12)==="WEBP"?"webp":raw.toString("utf8").trimStart().startsWith("<svg")||raw.toString("utf8").trimStart().startsWith("<?xml")?"svg":"bin";
  writeFileSync(`image-${index}.${ext}`,raw);
}
console.log("Every returned image saved; sdk-result.json retains complete metadata");
```

### استلام النتائج وحفظها

#### Ailoot · الصور

نزّل كل صورة مُرجعة أو احفظ محتواها بصيغة Base64

- `GET /v1/media/tasks/{task_id}`
- `GET /v1/media/assets/{asset_id}/content`
- `GET /v1/media/assets`
- `GET /v1/media/assets/{asset_id}`

##### الاحتفاظ بكل النتائج المكتملة

احفظ كل صورة مكتملة؛ نزّلها من كل URL مُرجع، أو فك ترميز محتواها بصيغة Base64.

احفظ كل عنصر بيانات. فك ترميز كل b64\_json أو اجلب محتوى كل عنوان URL موقّع مُعاد. اختر امتداد اسم الملف بناءً على نوع MIME والبايتات الفعلية.

##### عند الحاجة إلى التحقق من الاستجابة الأصلية

إذا تطلبت نتيجة توليد صورة أو تعديلها التحقق، فاحتفظ بقيمة operation\_id/X-Client-Request-ID الأصلية ومعلومات النتيجة المُعادة. استعد النتائج الموجودة والمملوكة لك عبر مكتبة الوسائط باستخدام قيم task\_id أو asset\_id الفعلية. لا تُعِد إرسال طلب التوليد أو التعديل، ولا تنشئ عنوان URL للاستعلام الدوري من operation\_id.

حقول الاستجابة

| الحقل | النوع |
| --- | --- |
| الحقل`created` | النوعinteger |
| الحقل`data[].url` | النوعstring |
| الحقل`data[].b64_json` | النوعbase64 string |
| الحقل`usage` | النوعobject |

الأخطاء والخطوات التالية

| الاستجابة | الشرط | الخطوة التالية |
| --- | --- | --- |
| الاستجابة⁦400⁩ · `invalid_request_error` | الشرطحقول مطلوبة أو تمثيل مادة أو قيمة معلمة غير صحيحة | الخطوة التاليةصحّح الحقول المحددة قبل طلب إنشاء جديد. |
| الاستجابة`server_error` | الشرطتشير الاستجابة المُعادة إلى أن العملية أو النتيجة تتطلب التحقق | الخطوة التاليةاحتفظ بمعرّف العملية أو المهمة الأصلي المُعاد، وبترويسات الطلب وبالاستجابة؛ وواصل عمليات القراءة المدعومة لتلك العملية الأصلية. لا تُعِد إرسال طلب الإنشاء. |

### الأسماء البديلة

#### الأسماء البديلة للنموذج

<strong>Ailoot</strong> [`gemini-3-pro-image`](https://ailoot.ai/models/ar/#m=google%2Fgemini-3-pro-image&route=Core&caller=gemini-3-pro-image&fmt=images), [`gemini-3-pro-image-preview`](https://ailoot.ai/models/ar/#m=google%2Fgemini-3-pro-image&route=Core&caller=gemini-3-pro-image-preview&fmt=images), [`nano-banana-pro`](https://ailoot.ai/models/ar/#m=google%2Fgemini-3-pro-image&route=Core&caller=nano-banana-pro&fmt=images)
**Ailoot Ultra** [`google/gemini-3-pro-image`](https://ailoot.ai/models/ar/#m=google%2Fgemini-3-pro-image&route=Ultra&caller=google%2Fgemini-3-pro-image&fmt=images)

#### الأسماء البديلة لمسارات الطرائق

`/v1/images`

#### معرّفات النماذج ذات الصلة IDs

[`google/gemini-3-pro-image`](https://ailoot.ai/models/ar/#m=google%2Fgemini-3-pro-image&route=Ultra&caller=google%2Fgemini-3-pro-image&fmt=images), [`gemini-3-pro-image-preview`](https://ailoot.ai/models/ar/#m=google%2Fgemini-3-pro-image&route=Core&caller=gemini-3-pro-image-preview&fmt=images), [`nano-banana-pro`](https://ailoot.ai/models/ar/#m=google%2Fgemini-3-pro-image&route=Core&caller=nano-banana-pro&fmt=images), [`gemini-3-pro-image`](https://ailoot.ai/models/ar/#m=google%2Fgemini-3-pro-image&route=Core&caller=gemini-3-pro-image&fmt=images)

**Ailoot · الصور** `POST /v1/images/generations` `gemini-3-pro-image-preview`

[`gemini-3-pro-image-preview`](https://ailoot.ai/models/ar/#m=google%2Fgemini-3-pro-image&route=Core&caller=gemini-3-pro-image-preview&fmt=images)

Google /`gemini-3-pro-image-preview`

معرّف النموذج ID

- `gemini-3-pro-image`
- `gemini-3-pro-image-preview`
- `nano-banana-pro`

### البداية

Nano Banana Pro (Gemini 3 Pro Image) هو نموذج Google للصور القائم على الاستدلال، للتصميم المعقد ونماذج عرض المنتجات والتصورات المرئية للحقائق. يقبل النصوص والمراجع الصورية ويولّد صورًا مع نص، بمخرجات 1K–4K وتحكم إبداعي مفصل.

المدخلات المقبولة

النص

النتائج

الصور

### متاح في Ailoot · المدخلات والطرائق

**Ailoot · الصور** `POST /v1/images/generations`

الإدخال

`text`

الإخراج

`image`

السياق

⁦65,536⁩ tokens

الحد الأقصى للإخراج

⁦32,768⁩ tokens

صيغة الإخراج

ملف صورة

| الحقل | النوع | المتطلب | القيم والحدود | القيمة الافتراضية |
| --- | --- | --- | --- | --- |
| الحقل`model` | النوع`string` | المتطلبمطلوب | القيم والحدود gemini-3-pro-image-preview | القيمة الافتراضية— |
| الحقل`prompt` | النوع`string` | المتطلبمطلوب | القيم والحدود الحد الأدنى للطول: ⁦1⁩ | القيمة الافتراضية— |
| الحقل`n` | النوع`integer` | المتطلباختياري | القيم والحدود الحد الأدنى: ⁦1⁩ | القيمة الافتراضية⁦1⁩ |
| الحقل`response_format` | النوع`string` | المتطلباختياري | القيم والحدود url, b64\_json | القيمة الافتراضية— |
| الحقل`stream` | النوع`boolean` | المتطلباختياري | القيم والحدود | القيمة الافتراضيةfalse |
| الحقل`size` | النوع`string` | المتطلباختياري | القيم والحدود يعتمد على النموذج | القيمة الافتراضية— |
| الحقل`quality` | النوع`string` | المتطلباختياري | القيم والحدود يعتمد على النموذج | القيمة الافتراضية— |
| الحقل`background` | النوع`string` | المتطلباختياري | القيم والحدود يعتمد على النموذج | القيمة الافتراضية— |
| الحقل`output_format` | النوع`string` | المتطلباختياري | القيم والحدود يعتمد على النموذج | القيمة الافتراضية— |
| الحقل`output_compression` | النوع`integer` | المتطلباختياري | القيم والحدود يعتمد على النموذج | القيمة الافتراضية— |
| الحقل`moderation` | النوع`string` | المتطلباختياري | القيم والحدود يعتمد على النموذج | القيمة الافتراضية— |
| الحقل`input_fidelity` | النوع`string` | المتطلباختياري | القيم والحدود يعتمد على النموذج | القيمة الافتراضية— |
| الحقل`style` | النوع`string` | المتطلباختياري | القيم والحدود يعتمد على النموذج | القيمة الافتراضية— |
| الحقل`partial_images` | النوع`integer` | المتطلباختياري | القيم والحدود يعتمد على النموذج | القيمة الافتراضية— |

تركيبات مواد الإدخال

**تحويل النص إلى صورة** · مطلوب: prompt

معلمات الطريقة ودورة حياتها

| المعلمة | المواصفات |
| --- | --- |
| المعلمة`material_types` | المواصفاتtext |
| المعلمة`required` | المواصفاتmodel, prompt |
| المعلمة`optional_controls` | المواصفاتnull |
| المعلمة`content_type` | المواصفاتapplication/json |

دورة الحياة: `synchronous_result_then_owned_library`

`GET /v1/media/tasks/{task_id}` · قيمة task\_id الفعلية المُعادة أو سجل مكتبة الوسائط

`GET /v1/media/assets/{asset_id}/content`

`GET /v1/media/assets`

`GET /v1/media/assets/{asset_id}`

بُنى الطرق ومعرّفاتها دقيقة؛ قدرة المورد منفصلة عن السماح بالطلب.

### الباقات

#### تعرفات طرائق Ailoot

الإدخال

⁦‏0.002 US$⁩ */ 1K من رموز الصور*

الإخراج

⁦‏0.134 US$⁩ *لكل صورة بدقة 1K*

الإخراج

⁦‏0.134 US$⁩ *لكل صورة بدقة 2K*

الإخراج

⁦‏0.24 US$⁩ *لكل صورة بدقة 4K*

تحجز Ailoot مبلغًا تقديريًا قبل الطلب. وبعد ظهور النتيجة، تُسوّي الرسوم النهائية بناءً على الاستخدام المقاس. وتستخدم تسوية البث سجل الاستخدام النهائي. [كيفية عمل حجز المبلغ وتسوية الرسوم →](https://ailoot.ai/docs/ar/billing/reserve/)

#### تفاصيل التعرفة المرجعية

لا تغيّر جداول التعرفة المرجعية على مستوى النموذج اختيار الطريقة أو عروض الأسعار أو الرسوم. وتستخدم الرسوم الفعلية تعرفات طريقة Ailoot المحددة.

جداول التعرفة المرجعية للنموذج

#### الأسعار حسب الإعدادات

| الإعدادات | جدول التعرفة | الرسوم |
| --- | --- | --- |
| الإعداداتUltra | جدول التعرفةالتعرفة الأساسية | الرسوم الإدخال · رموز الإدخال **$0.004000** / 1K من الرموز الإخراج · رموز الإخراج **$0.024000** / 1K من الرموز الإدخال · صورة **$0.004000** / 1K من الرموز الإخراج · إخراج الصور **$0.24000** / 1K من الرموز الإدخال · صوت **$0.004000** / 1K من الرموز الإدخال · ذاكرة التخزين المؤقت للصوت المُدخل **$0.0004000** / 1K من الرموز الإخراج · بحث في الويب **$0.028** لكل عملية بحث على الويب الإخراج · استدلال داخلي **$0.024000** / 1K من الرموز الإدخال · قراءة ذاكرة التخزين المؤقت **$0.0004000** / 1K من الرموز الإدخال · الكتابة إلى ذاكرة التخزين المؤقت **$0.000750000** / 1K من الرموز |

### أمثلة للطلبات

#### Ailoot · الصور

curlPython SDKNode.js SDK

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
export AILOOT_API_KEY
export AILOOT_API_KEY
: "${AILOOT_PROMPT_FILE:?Set your actual UTF-8 image brief}"
export AILOOT_PROMPT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "gemini-3-pro-image-preview", "prompt": ""}')
f=Path(os.environ["AILOOT_PROMPT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 brief")
p['prompt']=f.read_text(encoding="utf-8")
if not p['prompt'].strip():raise SystemExit("Brief must contain text")
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/images/generations \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import base64, json, os, subprocess
from pathlib import Path
from urllib.parse import urlsplit, urljoin

def save_images(items):
    if not items: raise SystemExit("No completed images; retain the full response")
    for index, item in enumerate(items):
        encoded=item.get("b64_json")
        uri=item.get("url", "")
        if not encoded and uri.startswith("data:image/"):
            header, separator, encoded=uri.partition(",")
            if not separator or ";base64" not in header: raise SystemExit("Unsupported image data URI")
        if encoded:
            raw=base64.b64decode(encoded,validate=True)
        elif uri:
            uri=urljoin("https://api.ailoot.ai",uri)
            parsed=urlsplit(uri)
            if parsed.scheme!="https" or not parsed.netloc or parsed.username or parsed.password:
                raise SystemExit("Invalid returned image URL")
            owned=parsed.netloc=="api.ailoot.ai" and parsed.path.startswith("/v1/media/assets/") and parsed.path.endswith("/content")
            args=["curl","--fail-with-body","--silent","--show-error",uri]
            if owned: args += ["-H","Authorization: Bearer "+os.environ["AILOOT_API_KEY"]]
            temporary=Path(f"image-{index}.bin")
            subprocess.run(args+["-o",str(temporary)],check=True)
            raw=temporary.read_bytes()
            temporary.unlink()
        else: raise SystemExit("Image has neither bytes nor URL")
        if not raw: raise SystemExit("Empty image result")
        ext="png" if raw.startswith(b"\x89PNG") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else "svg" if raw.lstrip().startswith((b"<svg",b"<?xml")) else "bin"
        Path(f"image-{index}.{ext}").write_bytes(raw)
    print("Every returned image saved; complete response metadata retained")
save_images(json.loads(Path("result.json").read_text())["data"])
PY_RESULT
```

```python
from openai import OpenAI
import base64, json, os, subprocess
from pathlib import Path
from urllib.parse import urlsplit, urljoin

def save_images(items):
    if not items: raise SystemExit("No completed images; retain the full response")
    for index, item in enumerate(items):
        encoded=item.get("b64_json")
        uri=item.get("url", "")
        if not encoded and uri.startswith("data:image/"):
            header, separator, encoded=uri.partition(",")
            if not separator or ";base64" not in header: raise SystemExit("Unsupported image data URI")
        if encoded:
            raw=base64.b64decode(encoded,validate=True)
        elif uri:
            uri=urljoin("https://api.ailoot.ai",uri)
            parsed=urlsplit(uri)
            if parsed.scheme!="https" or not parsed.netloc or parsed.username or parsed.password:
                raise SystemExit("Invalid returned image URL")
            owned=parsed.netloc=="api.ailoot.ai" and parsed.path.startswith("/v1/media/assets/") and parsed.path.endswith("/content")
            args=["curl","--fail-with-body","--silent","--show-error",uri]
            if owned: args += ["-H","Authorization: Bearer "+os.environ["AILOOT_API_KEY"]]
            temporary=Path(f"image-{index}.bin")
            subprocess.run(args+["-o",str(temporary)],check=True)
            raw=temporary.read_bytes()
            temporary.unlink()
        else: raise SystemExit("Image has neither bytes nor URL")
        if not raw: raise SystemExit("Empty image result")
        ext="png" if raw.startswith(b"\x89PNG") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else "svg" if raw.lstrip().startswith((b"<svg",b"<?xml")) else "bin"
        Path(f"image-{index}.{ext}").write_bytes(raw)
    print("Every returned image saved; complete response metadata retained")

f=Path(os.environ["AILOOT_PROMPT_FILE"])
if not f.is_file():raise SystemExit("Set your actual UTF-8 image brief file")
request={'model': 'gemini-3-pro-image-preview', 'prompt': ''}
request["prompt"]=f.read_text(encoding="utf-8")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
result=client.images.generate(**request)
Path("sdk-result.txt").write_text(str(result),encoding="utf-8")
save_images([{"b64_json":getattr(item,"b64_json",None),"url":getattr(item,"url",None)} for item in result.data])
```

```js
import OpenAI from "openai";
import { readFileSync, writeFileSync } from "node:fs";
const key=process.env.AILOOT_API_KEY;
if(!key) throw new Error("Set your actual Ailoot API key");
const client=new OpenAI({baseURL:"https://api.ailoot.ai/v1",apiKey:key,maxRetries:0});
const request={"model": "gemini-3-pro-image-preview", "prompt": ""};
if(!process.env.AILOOT_PROMPT_FILE)throw new Error("Set your actual UTF-8 image brief file");
request.prompt=readFileSync(process.env.AILOOT_PROMPT_FILE,"utf8");
const result=await client.images.generate(request);
writeFileSync("sdk-result.json",JSON.stringify(result,null,2));
if(!result.data?.length) throw new Error("No completed images");
for(let index=0;index<result.data.length;index++) {
  const item=result.data[index];let encoded=item.b64_json,uri=item.url||"",raw;
  if(!encoded && uri.startsWith("data:image/")) {
    const comma=uri.indexOf(",");if(comma<0 || !uri.slice(0,comma).includes(";base64")) throw new Error("Unsupported image data URI");
    encoded=uri.slice(comma+1);
  }
  if(encoded) {
    if(encoded.length%4!==0 || !/^[A-Za-z0-9+/]*={0,2}$/.test(encoded)) throw new Error("Invalid Base64");
    raw=Buffer.from(encoded,"base64");
  } else if(uri) {
    const u=new URL(uri,"https://api.ailoot.ai");
    if(u.protocol!=="https:" || u.username || u.password) throw new Error("Invalid returned URL");
    const owned=u.origin==="https://api.ailoot.ai" && u.pathname.startsWith("/v1/media/assets/") && u.pathname.endsWith("/content");
    const response=await fetch(u,{headers:owned?{Authorization:"Bearer "+key}:{},redirect:"manual"});
    if(!response.ok) throw new Error("Image content download failed: "+response.status);
    raw=Buffer.from(await response.arrayBuffer());
  } else throw new Error("Image has neither bytes nor URL");
  if(!raw.length) throw new Error("Empty image result");
  const ext=raw.subarray(0,4).equals(Buffer.from([137,80,78,71]))?"png":raw[0]===255&&raw[1]===216?"jpg":raw.toString("ascii",0,4)==="RIFF"&&raw.toString("ascii",8,12)==="WEBP"?"webp":raw.toString("utf8").trimStart().startsWith("<svg")||raw.toString("utf8").trimStart().startsWith("<?xml")?"svg":"bin";
  writeFileSync(`image-${index}.${ext}`,raw);
}
console.log("Every returned image saved; sdk-result.json retains complete metadata");
```

### استلام النتائج وحفظها

#### Ailoot · الصور

نزّل كل صورة مُرجعة أو احفظ محتواها بصيغة Base64

- `GET /v1/media/tasks/{task_id}`
- `GET /v1/media/assets/{asset_id}/content`
- `GET /v1/media/assets`
- `GET /v1/media/assets/{asset_id}`

##### الاحتفاظ بكل النتائج المكتملة

احفظ كل صورة مكتملة؛ نزّلها من كل URL مُرجع، أو فك ترميز محتواها بصيغة Base64.

احفظ كل عنصر بيانات. فك ترميز كل b64\_json أو اجلب محتوى كل عنوان URL موقّع مُعاد. اختر امتداد اسم الملف بناءً على نوع MIME والبايتات الفعلية.

##### عند الحاجة إلى التحقق من الاستجابة الأصلية

إذا تطلبت نتيجة توليد صورة أو تعديلها التحقق، فاحتفظ بقيمة operation\_id/X-Client-Request-ID الأصلية ومعلومات النتيجة المُعادة. استعد النتائج الموجودة والمملوكة لك عبر مكتبة الوسائط باستخدام قيم task\_id أو asset\_id الفعلية. لا تُعِد إرسال طلب التوليد أو التعديل، ولا تنشئ عنوان URL للاستعلام الدوري من operation\_id.

حقول الاستجابة

| الحقل | النوع |
| --- | --- |
| الحقل`created` | النوعinteger |
| الحقل`data[].url` | النوعstring |
| الحقل`data[].b64_json` | النوعbase64 string |
| الحقل`usage` | النوعobject |

الأخطاء والخطوات التالية

| الاستجابة | الشرط | الخطوة التالية |
| --- | --- | --- |
| الاستجابة⁦400⁩ · `invalid_request_error` | الشرطحقول مطلوبة أو تمثيل مادة أو قيمة معلمة غير صحيحة | الخطوة التاليةصحّح الحقول المحددة قبل طلب إنشاء جديد. |
| الاستجابة`server_error` | الشرطتشير الاستجابة المُعادة إلى أن العملية أو النتيجة تتطلب التحقق | الخطوة التاليةاحتفظ بمعرّف العملية أو المهمة الأصلي المُعاد، وبترويسات الطلب وبالاستجابة؛ وواصل عمليات القراءة المدعومة لتلك العملية الأصلية. لا تُعِد إرسال طلب الإنشاء. |

### الأسماء البديلة

#### الأسماء البديلة للنموذج

<strong>Ailoot</strong> [`gemini-3-pro-image`](https://ailoot.ai/models/ar/#m=google%2Fgemini-3-pro-image&route=Core&caller=gemini-3-pro-image&fmt=images), [`gemini-3-pro-image-preview`](https://ailoot.ai/models/ar/#m=google%2Fgemini-3-pro-image&route=Core&caller=gemini-3-pro-image-preview&fmt=images), [`nano-banana-pro`](https://ailoot.ai/models/ar/#m=google%2Fgemini-3-pro-image&route=Core&caller=nano-banana-pro&fmt=images)
**Ailoot Ultra** [`google/gemini-3-pro-image`](https://ailoot.ai/models/ar/#m=google%2Fgemini-3-pro-image&route=Ultra&caller=google%2Fgemini-3-pro-image&fmt=images)

#### الأسماء البديلة لمسارات الطرائق

`/v1/images`

#### معرّفات النماذج ذات الصلة IDs

[`google/gemini-3-pro-image`](https://ailoot.ai/models/ar/#m=google%2Fgemini-3-pro-image&route=Ultra&caller=google%2Fgemini-3-pro-image&fmt=images), [`gemini-3-pro-image-preview`](https://ailoot.ai/models/ar/#m=google%2Fgemini-3-pro-image&route=Core&caller=gemini-3-pro-image-preview&fmt=images), [`nano-banana-pro`](https://ailoot.ai/models/ar/#m=google%2Fgemini-3-pro-image&route=Core&caller=nano-banana-pro&fmt=images), [`gemini-3-pro-image`](https://ailoot.ai/models/ar/#m=google%2Fgemini-3-pro-image&route=Core&caller=gemini-3-pro-image&fmt=images)

**Ailoot · الصور** `POST /v1/images/generations` `nano-banana-pro`

[`nano-banana-pro`](https://ailoot.ai/models/ar/#m=google%2Fgemini-3-pro-image&route=Core&caller=nano-banana-pro&fmt=images)

Google /`nano-banana-pro`

معرّف النموذج ID

- `gemini-3-pro-image`
- `gemini-3-pro-image-preview`
- `nano-banana-pro`

### البداية

Nano Banana Pro (Gemini 3 Pro Image) هو نموذج Google للصور القائم على الاستدلال، للتصميم المعقد ونماذج عرض المنتجات والتصورات المرئية للحقائق. يقبل النصوص والمراجع الصورية ويولّد صورًا مع نص، بمخرجات 1K–4K وتحكم إبداعي مفصل.

المدخلات المقبولة

النص

النتائج

الصور

### متاح في Ailoot · المدخلات والطرائق

**Ailoot · الصور** `POST /v1/images/generations`

الإدخال

`text`

الإخراج

`image`

السياق

⁦65,536⁩ tokens

الحد الأقصى للإخراج

⁦32,768⁩ tokens

صيغة الإخراج

ملف صورة

| الحقل | النوع | المتطلب | القيم والحدود | القيمة الافتراضية |
| --- | --- | --- | --- | --- |
| الحقل`model` | النوع`string` | المتطلبمطلوب | القيم والحدود nano-banana-pro | القيمة الافتراضية— |
| الحقل`prompt` | النوع`string` | المتطلبمطلوب | القيم والحدود الحد الأدنى للطول: ⁦1⁩ | القيمة الافتراضية— |
| الحقل`n` | النوع`integer` | المتطلباختياري | القيم والحدود الحد الأدنى: ⁦1⁩ | القيمة الافتراضية⁦1⁩ |
| الحقل`response_format` | النوع`string` | المتطلباختياري | القيم والحدود url, b64\_json | القيمة الافتراضية— |
| الحقل`stream` | النوع`boolean` | المتطلباختياري | القيم والحدود | القيمة الافتراضيةfalse |
| الحقل`size` | النوع`string` | المتطلباختياري | القيم والحدود يعتمد على النموذج | القيمة الافتراضية— |
| الحقل`quality` | النوع`string` | المتطلباختياري | القيم والحدود يعتمد على النموذج | القيمة الافتراضية— |
| الحقل`background` | النوع`string` | المتطلباختياري | القيم والحدود يعتمد على النموذج | القيمة الافتراضية— |
| الحقل`output_format` | النوع`string` | المتطلباختياري | القيم والحدود يعتمد على النموذج | القيمة الافتراضية— |
| الحقل`output_compression` | النوع`integer` | المتطلباختياري | القيم والحدود يعتمد على النموذج | القيمة الافتراضية— |
| الحقل`moderation` | النوع`string` | المتطلباختياري | القيم والحدود يعتمد على النموذج | القيمة الافتراضية— |
| الحقل`input_fidelity` | النوع`string` | المتطلباختياري | القيم والحدود يعتمد على النموذج | القيمة الافتراضية— |
| الحقل`style` | النوع`string` | المتطلباختياري | القيم والحدود يعتمد على النموذج | القيمة الافتراضية— |
| الحقل`partial_images` | النوع`integer` | المتطلباختياري | القيم والحدود يعتمد على النموذج | القيمة الافتراضية— |

تركيبات مواد الإدخال

**تحويل النص إلى صورة** · مطلوب: prompt

معلمات الطريقة ودورة حياتها

| المعلمة | المواصفات |
| --- | --- |
| المعلمة`material_types` | المواصفاتtext |
| المعلمة`required` | المواصفاتmodel, prompt |
| المعلمة`optional_controls` | المواصفاتnull |
| المعلمة`content_type` | المواصفاتapplication/json |

دورة الحياة: `synchronous_result_then_owned_library`

`GET /v1/media/tasks/{task_id}` · قيمة task\_id الفعلية المُعادة أو سجل مكتبة الوسائط

`GET /v1/media/assets/{asset_id}/content`

`GET /v1/media/assets`

`GET /v1/media/assets/{asset_id}`

بُنى الطرق ومعرّفاتها دقيقة؛ قدرة المورد منفصلة عن السماح بالطلب.

### الباقات

#### تعرفات طرائق Ailoot

الإدخال

⁦‏0.002 US$⁩ */ 1K من رموز الصور*

الإخراج

⁦‏0.134 US$⁩ *لكل صورة بدقة 1K*

الإخراج

⁦‏0.134 US$⁩ *لكل صورة بدقة 2K*

الإخراج

⁦‏0.24 US$⁩ *لكل صورة بدقة 4K*

تحجز Ailoot مبلغًا تقديريًا قبل الطلب. وبعد ظهور النتيجة، تُسوّي الرسوم النهائية بناءً على الاستخدام المقاس. وتستخدم تسوية البث سجل الاستخدام النهائي. [كيفية عمل حجز المبلغ وتسوية الرسوم →](https://ailoot.ai/docs/ar/billing/reserve/)

#### تفاصيل التعرفة المرجعية

لا تغيّر جداول التعرفة المرجعية على مستوى النموذج اختيار الطريقة أو عروض الأسعار أو الرسوم. وتستخدم الرسوم الفعلية تعرفات طريقة Ailoot المحددة.

جداول التعرفة المرجعية للنموذج

#### الأسعار حسب الإعدادات

| الإعدادات | جدول التعرفة | الرسوم |
| --- | --- | --- |
| الإعداداتUltra | جدول التعرفةالتعرفة الأساسية | الرسوم الإدخال · رموز الإدخال **$0.004000** / 1K من الرموز الإخراج · رموز الإخراج **$0.024000** / 1K من الرموز الإدخال · صورة **$0.004000** / 1K من الرموز الإخراج · إخراج الصور **$0.24000** / 1K من الرموز الإدخال · صوت **$0.004000** / 1K من الرموز الإدخال · ذاكرة التخزين المؤقت للصوت المُدخل **$0.0004000** / 1K من الرموز الإخراج · بحث في الويب **$0.028** لكل عملية بحث على الويب الإخراج · استدلال داخلي **$0.024000** / 1K من الرموز الإدخال · قراءة ذاكرة التخزين المؤقت **$0.0004000** / 1K من الرموز الإدخال · الكتابة إلى ذاكرة التخزين المؤقت **$0.000750000** / 1K من الرموز |

### أمثلة للطلبات

#### Ailoot · الصور

curlPython SDKNode.js SDK

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
export AILOOT_API_KEY
export AILOOT_API_KEY
: "${AILOOT_PROMPT_FILE:?Set your actual UTF-8 image brief}"
export AILOOT_PROMPT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "nano-banana-pro", "prompt": ""}')
f=Path(os.environ["AILOOT_PROMPT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 brief")
p['prompt']=f.read_text(encoding="utf-8")
if not p['prompt'].strip():raise SystemExit("Brief must contain text")
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/images/generations \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import base64, json, os, subprocess
from pathlib import Path
from urllib.parse import urlsplit, urljoin

def save_images(items):
    if not items: raise SystemExit("No completed images; retain the full response")
    for index, item in enumerate(items):
        encoded=item.get("b64_json")
        uri=item.get("url", "")
        if not encoded and uri.startswith("data:image/"):
            header, separator, encoded=uri.partition(",")
            if not separator or ";base64" not in header: raise SystemExit("Unsupported image data URI")
        if encoded:
            raw=base64.b64decode(encoded,validate=True)
        elif uri:
            uri=urljoin("https://api.ailoot.ai",uri)
            parsed=urlsplit(uri)
            if parsed.scheme!="https" or not parsed.netloc or parsed.username or parsed.password:
                raise SystemExit("Invalid returned image URL")
            owned=parsed.netloc=="api.ailoot.ai" and parsed.path.startswith("/v1/media/assets/") and parsed.path.endswith("/content")
            args=["curl","--fail-with-body","--silent","--show-error",uri]
            if owned: args += ["-H","Authorization: Bearer "+os.environ["AILOOT_API_KEY"]]
            temporary=Path(f"image-{index}.bin")
            subprocess.run(args+["-o",str(temporary)],check=True)
            raw=temporary.read_bytes()
            temporary.unlink()
        else: raise SystemExit("Image has neither bytes nor URL")
        if not raw: raise SystemExit("Empty image result")
        ext="png" if raw.startswith(b"\x89PNG") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else "svg" if raw.lstrip().startswith((b"<svg",b"<?xml")) else "bin"
        Path(f"image-{index}.{ext}").write_bytes(raw)
    print("Every returned image saved; complete response metadata retained")
save_images(json.loads(Path("result.json").read_text())["data"])
PY_RESULT
```

```python
from openai import OpenAI
import base64, json, os, subprocess
from pathlib import Path
from urllib.parse import urlsplit, urljoin

def save_images(items):
    if not items: raise SystemExit("No completed images; retain the full response")
    for index, item in enumerate(items):
        encoded=item.get("b64_json")
        uri=item.get("url", "")
        if not encoded and uri.startswith("data:image/"):
            header, separator, encoded=uri.partition(",")
            if not separator or ";base64" not in header: raise SystemExit("Unsupported image data URI")
        if encoded:
            raw=base64.b64decode(encoded,validate=True)
        elif uri:
            uri=urljoin("https://api.ailoot.ai",uri)
            parsed=urlsplit(uri)
            if parsed.scheme!="https" or not parsed.netloc or parsed.username or parsed.password:
                raise SystemExit("Invalid returned image URL")
            owned=parsed.netloc=="api.ailoot.ai" and parsed.path.startswith("/v1/media/assets/") and parsed.path.endswith("/content")
            args=["curl","--fail-with-body","--silent","--show-error",uri]
            if owned: args += ["-H","Authorization: Bearer "+os.environ["AILOOT_API_KEY"]]
            temporary=Path(f"image-{index}.bin")
            subprocess.run(args+["-o",str(temporary)],check=True)
            raw=temporary.read_bytes()
            temporary.unlink()
        else: raise SystemExit("Image has neither bytes nor URL")
        if not raw: raise SystemExit("Empty image result")
        ext="png" if raw.startswith(b"\x89PNG") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else "svg" if raw.lstrip().startswith((b"<svg",b"<?xml")) else "bin"
        Path(f"image-{index}.{ext}").write_bytes(raw)
    print("Every returned image saved; complete response metadata retained")

f=Path(os.environ["AILOOT_PROMPT_FILE"])
if not f.is_file():raise SystemExit("Set your actual UTF-8 image brief file")
request={'model': 'nano-banana-pro', 'prompt': ''}
request["prompt"]=f.read_text(encoding="utf-8")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
result=client.images.generate(**request)
Path("sdk-result.txt").write_text(str(result),encoding="utf-8")
save_images([{"b64_json":getattr(item,"b64_json",None),"url":getattr(item,"url",None)} for item in result.data])
```

```js
import OpenAI from "openai";
import { readFileSync, writeFileSync } from "node:fs";
const key=process.env.AILOOT_API_KEY;
if(!key) throw new Error("Set your actual Ailoot API key");
const client=new OpenAI({baseURL:"https://api.ailoot.ai/v1",apiKey:key,maxRetries:0});
const request={"model": "nano-banana-pro", "prompt": ""};
if(!process.env.AILOOT_PROMPT_FILE)throw new Error("Set your actual UTF-8 image brief file");
request.prompt=readFileSync(process.env.AILOOT_PROMPT_FILE,"utf8");
const result=await client.images.generate(request);
writeFileSync("sdk-result.json",JSON.stringify(result,null,2));
if(!result.data?.length) throw new Error("No completed images");
for(let index=0;index<result.data.length;index++) {
  const item=result.data[index];let encoded=item.b64_json,uri=item.url||"",raw;
  if(!encoded && uri.startsWith("data:image/")) {
    const comma=uri.indexOf(",");if(comma<0 || !uri.slice(0,comma).includes(";base64")) throw new Error("Unsupported image data URI");
    encoded=uri.slice(comma+1);
  }
  if(encoded) {
    if(encoded.length%4!==0 || !/^[A-Za-z0-9+/]*={0,2}$/.test(encoded)) throw new Error("Invalid Base64");
    raw=Buffer.from(encoded,"base64");
  } else if(uri) {
    const u=new URL(uri,"https://api.ailoot.ai");
    if(u.protocol!=="https:" || u.username || u.password) throw new Error("Invalid returned URL");
    const owned=u.origin==="https://api.ailoot.ai" && u.pathname.startsWith("/v1/media/assets/") && u.pathname.endsWith("/content");
    const response=await fetch(u,{headers:owned?{Authorization:"Bearer "+key}:{},redirect:"manual"});
    if(!response.ok) throw new Error("Image content download failed: "+response.status);
    raw=Buffer.from(await response.arrayBuffer());
  } else throw new Error("Image has neither bytes nor URL");
  if(!raw.length) throw new Error("Empty image result");
  const ext=raw.subarray(0,4).equals(Buffer.from([137,80,78,71]))?"png":raw[0]===255&&raw[1]===216?"jpg":raw.toString("ascii",0,4)==="RIFF"&&raw.toString("ascii",8,12)==="WEBP"?"webp":raw.toString("utf8").trimStart().startsWith("<svg")||raw.toString("utf8").trimStart().startsWith("<?xml")?"svg":"bin";
  writeFileSync(`image-${index}.${ext}`,raw);
}
console.log("Every returned image saved; sdk-result.json retains complete metadata");
```

### استلام النتائج وحفظها

#### Ailoot · الصور

نزّل كل صورة مُرجعة أو احفظ محتواها بصيغة Base64

- `GET /v1/media/tasks/{task_id}`
- `GET /v1/media/assets/{asset_id}/content`
- `GET /v1/media/assets`
- `GET /v1/media/assets/{asset_id}`

##### الاحتفاظ بكل النتائج المكتملة

احفظ كل صورة مكتملة؛ نزّلها من كل URL مُرجع، أو فك ترميز محتواها بصيغة Base64.

احفظ كل عنصر بيانات. فك ترميز كل b64\_json أو اجلب محتوى كل عنوان URL موقّع مُعاد. اختر امتداد اسم الملف بناءً على نوع MIME والبايتات الفعلية.

##### عند الحاجة إلى التحقق من الاستجابة الأصلية

إذا تطلبت نتيجة توليد صورة أو تعديلها التحقق، فاحتفظ بقيمة operation\_id/X-Client-Request-ID الأصلية ومعلومات النتيجة المُعادة. استعد النتائج الموجودة والمملوكة لك عبر مكتبة الوسائط باستخدام قيم task\_id أو asset\_id الفعلية. لا تُعِد إرسال طلب التوليد أو التعديل، ولا تنشئ عنوان URL للاستعلام الدوري من operation\_id.

حقول الاستجابة

| الحقل | النوع |
| --- | --- |
| الحقل`created` | النوعinteger |
| الحقل`data[].url` | النوعstring |
| الحقل`data[].b64_json` | النوعbase64 string |
| الحقل`usage` | النوعobject |

الأخطاء والخطوات التالية

| الاستجابة | الشرط | الخطوة التالية |
| --- | --- | --- |
| الاستجابة⁦400⁩ · `invalid_request_error` | الشرطحقول مطلوبة أو تمثيل مادة أو قيمة معلمة غير صحيحة | الخطوة التاليةصحّح الحقول المحددة قبل طلب إنشاء جديد. |
| الاستجابة`server_error` | الشرطتشير الاستجابة المُعادة إلى أن العملية أو النتيجة تتطلب التحقق | الخطوة التاليةاحتفظ بمعرّف العملية أو المهمة الأصلي المُعاد، وبترويسات الطلب وبالاستجابة؛ وواصل عمليات القراءة المدعومة لتلك العملية الأصلية. لا تُعِد إرسال طلب الإنشاء. |

### الأسماء البديلة

#### الأسماء البديلة للنموذج

<strong>Ailoot</strong> [`gemini-3-pro-image`](https://ailoot.ai/models/ar/#m=google%2Fgemini-3-pro-image&route=Core&caller=gemini-3-pro-image&fmt=images), [`gemini-3-pro-image-preview`](https://ailoot.ai/models/ar/#m=google%2Fgemini-3-pro-image&route=Core&caller=gemini-3-pro-image-preview&fmt=images), [`nano-banana-pro`](https://ailoot.ai/models/ar/#m=google%2Fgemini-3-pro-image&route=Core&caller=nano-banana-pro&fmt=images)
**Ailoot Ultra** [`google/gemini-3-pro-image`](https://ailoot.ai/models/ar/#m=google%2Fgemini-3-pro-image&route=Ultra&caller=google%2Fgemini-3-pro-image&fmt=images)

#### الأسماء البديلة لمسارات الطرائق

`/v1/images`

#### معرّفات النماذج ذات الصلة IDs

[`google/gemini-3-pro-image`](https://ailoot.ai/models/ar/#m=google%2Fgemini-3-pro-image&route=Ultra&caller=google%2Fgemini-3-pro-image&fmt=images), [`gemini-3-pro-image-preview`](https://ailoot.ai/models/ar/#m=google%2Fgemini-3-pro-image&route=Core&caller=gemini-3-pro-image-preview&fmt=images), [`nano-banana-pro`](https://ailoot.ai/models/ar/#m=google%2Fgemini-3-pro-image&route=Core&caller=nano-banana-pro&fmt=images), [`gemini-3-pro-image`](https://ailoot.ai/models/ar/#m=google%2Fgemini-3-pro-image&route=Core&caller=gemini-3-pro-image&fmt=images)

**Ailoot Ultra · محادثة OpenAI** `POST /v1/chat/completions` `google/gemini-3-pro-image`

[`google/gemini-3-pro-image`](https://ailoot.ai/models/ar/#m=google%2Fgemini-3-pro-image&route=Ultra&caller=google%2Fgemini-3-pro-image&fmt=chat)

Google /`google/gemini-3-pro-image`

### البداية

Nano Banana Pro (Gemini 3 Pro Image) هو نموذج Google للصور القائم على الاستدلال، للتصميم المعقد ونماذج عرض المنتجات والتصورات المرئية للحقائق. يقبل النصوص والمراجع الصورية ويولّد صورًا مع نص، بمخرجات 1K–4K وتحكم إبداعي مفصل.

المدخلات المقبولة

النص

النتائج

النص

### متاح في Ailoot · المدخلات والطرائق

**Ailoot Ultra · محادثة OpenAI** `POST /v1/chat/completions`

الإدخال

`text`

الإخراج

`text`

صيغة الإخراج

json أو SSE

| الحقل | النوع | المتطلب | القيم والحدود | القيمة الافتراضية |
| --- | --- | --- | --- | --- |
| الحقل`model` | النوع`string` | المتطلبمطلوب | القيم والحدود google/gemini-3-pro-image | القيمة الافتراضية— |
| الحقل`messages` | النوع`message[]` | المتطلبمطلوب | القيم والحدود الحد الأدنى للعناصر: ⁦1⁩ | القيمة الافتراضية— |
| الحقل`messages[].role` | النوع`string` | المتطلبمطلوب | القيم والحدود أمثلة: system, user, assistant, tool, function الشروط: تُمثَّل هذه الأدوار صراحةً بأنواع التوافق في الشيفرة المصدرية؛ وتظل مجموعة الأدوار الدقيقة خاصة بكل نموذج. يعتمد على النموذج | القيمة الافتراضية— |
| الحقل`messages[].content` | النوع`string\|content_part[]\|null` | المتطلباختياري | القيم والحدود | القيمة الافتراضية— |
| الحقل`messages[].tool_calls` | النوع`tool_call[]` | المتطلباختياري | القيم والحدود | القيمة الافتراضية— |
| الحقل`messages[].tool_call_id` | النوع`string` | المتطلباختياري | القيم والحدود ينطبق عندما: role=tool؛ استخدم المعرّف الفعلي المُرجع | القيمة الافتراضية— |
| الحقل`messages[].name` | النوع`string` | المتطلباختياري | القيم والحدود | القيمة الافتراضية— |
| الحقل`messages[].reasoning_content` | النوع`string` | المتطلباختياري | القيم والحدود ينطبق عندما: أعِد تمرير الاستدلال الفعلي المُرجع حيث يستخدمه هذا النموذج | القيمة الافتراضية— |
| الحقل`messages[].reasoning_details` | النوع`object\|array` | المتطلباختياري | القيم والحدود يعتمد على النموذج | القيمة الافتراضية— |
| الحقل`max_tokens` | النوع`integer` | المتطلباختياري | القيم والحدود الحد الأدنى: ⁦1⁩ يعتمد على النموذج | القيمة الافتراضية— |
| الحقل`max_completion_tokens` | النوع`integer` | المتطلباختياري | القيم والحدود الحد الأدنى: ⁦1⁩ يعتمد على النموذج | القيمة الافتراضية— |
| الحقل`stream` | النوع`boolean` | المتطلباختياري | القيم والحدود | القيمة الافتراضيةfalse |
| الحقل`stream_options.include_usage` | النوع`boolean` | المتطلباختياري | القيم والحدود يعتمد على النموذج | القيمة الافتراضية— |
| الحقل`temperature` | النوع`number` | المتطلباختياري | القيم والحدود يعتمد على النموذج | القيمة الافتراضية— |
| الحقل`top_p` | النوع`number` | المتطلباختياري | القيم والحدود يعتمد على النموذج | القيمة الافتراضية— |
| الحقل`stop` | النوع`string\|string[]` | المتطلباختياري | القيم والحدود يعتمد على النموذج | القيمة الافتراضية— |
| الحقل`tools` | النوع`function_tool[]` | المتطلباختياري | القيم والحدود يعتمد على النموذج | القيمة الافتراضية— |
| الحقل`tools[].type` | النوع`string` | المتطلباختياري | القيم والحدود function يعتمد على النموذج | القيمة الافتراضية— |
| الحقل`tools[].function.name` | النوع`string` | المتطلبمطلوب | القيم والحدود ينطبق عندما: أداة دالة مقدّمة | القيمة الافتراضية— |
| الحقل`tools[].function.description` | النوع`string` | المتطلباختياري | القيم والحدود | القيمة الافتراضية— |
| الحقل`tools[].function.parameters` | النوع`JSON_schema` | المتطلباختياري | القيم والحدود | القيمة الافتراضية— |
| الحقل`tool_choice` | النوع`string\|object` | المتطلباختياري | القيم والحدود يعتمد على النموذج | القيمة الافتراضية— |
| الحقل`parallel_tool_calls` | النوع`boolean` | المتطلباختياري | القيم والحدود يعتمد على النموذج | القيمة الافتراضية— |
| الحقل`response_format` | النوع`object` | المتطلباختياري | القيم والحدود يعتمد على النموذج | القيمة الافتراضية— |
| الحقل`reasoning_effort` | النوع`string` | المتطلباختياري | القيم والحدود يعتمد على النموذج | القيمة الافتراضية— |
| الحقل`reasoning` | النوع`object` | المتطلباختياري | القيم والحدود يعتمد على النموذج | القيمة الافتراضية— |
| الحقل`service_tier` | النوع`string` | المتطلباختياري | القيم والحدود يعتمد على النموذج | القيمة الافتراضية— |
| الحقل`instructions` | النوع`string` | المتطلباختياري | القيم والحدود حقل للتوافق | القيمة الافتراضية— |
| الحقل`functions` | النوع`function[]` | المتطلباختياري | القيم والحدود يعتمد على النموذج | القيمة الافتراضية— |
| الحقل`function_call` | النوع`string\|object` | المتطلباختياري | القيم والحدود يعتمد على النموذج | القيمة الافتراضية— |
| الحقل`prompt_cache_options` | النوع`object` | المتطلباختياري | القيم والحدود يعتمد على النموذج | القيمة الافتراضية— |
| الحقل`modalities` | النوع`string[]` | المتطلباختياري | القيم والحدود text | القيمة الافتراضية— |
| الحقل`provider` | النوع`object` | المتطلباختياري | القيم والحدود الشروط: يُرفَض provider.options في مسار Ultra النصي هذا | القيمة الافتراضية— |
| الحقل`cache_control.ttl` | النوع`string` | المتطلباختياري | القيم والحدود الشروط: تُرفَض 1h في المواضع الفعلية للتخزين المؤقت للموجّه | القيمة الافتراضية— |

تركيبات مواد الإدخال

**النص** · نص UTF8

`messages[].content`

معلمات الطريقة ودورة حياتها

| المعلمة | المواصفات |
| --- | --- |
| المعلمة`content_type` | المواصفاتapplication/json |
| المعلمة`required` | المواصفاتmodel, messages |
| المعلمة`material_types` | المواصفاتtext |
| المعلمة`messages` | المواصفاتمصفوفة رسائل ببنية role/content |
| المعلمة`file_material` | المواصفاتمستند UTF-8 الفعلي مُدرج كنص حرفي؛ لا يُستنتَج معرّف ملف |
| المعلمة`optional_controls` | المواصفاتstream, temperature, top\_p, stop, max\_tokens, max\_completion\_tokens, reasoning, response\_format, tools, tool\_choice |
| المعلمة`control_scope` | المواصفاتخاص بالنموذج؛ أدوات الدوال التي يقدّمها المستخدم تختلف عن الأدوات المستضافة |
| المعلمة`output_modalities` | المواصفاتtext |
| المعلمة`hosted_operations` | المواصفاتfalse |
| المعلمة`multimodal_input_binding` | المواصفاتnull |

دورة الحياة: `synchronous_or_streamed`

أرسل معرّف النموذج الدقيق مع messages.

طول السياق ليس حدًا أقصى للإخراج.

يمكن لملف نصي تقديم نص حرفي؛ وتحتاج مدخلات الصور/الصوت/كائنات الملفات إلى ربط دقيق.

### الباقات

مراجع التسعير لا تضيف خيارات للطلب. المعلمات المدعومة مذكورة للطريقة المحددة.

الوضع السريع

التعرفة القياسية عند اختيار الوضع السريع

الوضع المرن

التعرفة القياسية عند اختيار وضع flex

أقصى جهد للاستدلال

التعرفة القياسية عندما يُطبَّق الضبط الافتراضي default مع أقصى جهد للاستدلال

تسعير التخزين المؤقت الصريح

غير مفعّل عند طلب التخزين المؤقت الصريح

#### تعرفات Ailoot

#### الأسعار حسب الإعدادات

طابق كل رسم مع الشروط المعروضة. طبّق تعرفة واحدة لكل مجموعة من الإعدادات البديلة.

| الإعدادات | جدول التعرفة | رموز السياق، أكثر من | رموز السياق، حتى القيمة شاملةً | الرسوم |
| --- | --- | --- | --- | --- |
| الإعداداتالتعرفات الأساسية للرموز | جدول التعرفةالتعرفة الأساسية | رموز السياق، أكثر من— | رموز السياق، حتى القيمة شاملةًلا يوجد حد أقصى | الرسوم الإدخال · رموز الإدخال **$0.004** / 1K من الرموز الإخراج · رموز الإخراج **$0.024** / 1K من الرموز الإدخال · قراءة ذاكرة التخزين المؤقت **$0.0004** / 1K من الرموز الإدخال · الكتابة إلى ذاكرة التخزين المؤقت **$0.00075** / 1K من الرموز الإدخال · الكتابة إلى ذاكرة التخزين المؤقت، 1 ساعة **—** / 1K من الرموز الإخراج · رموز إخراج الصور **$0.24** / 1K من رموز الصور |
| الإعداداتالشريحة 1 لطول الطلب | جدول التعرفة— | رموز السياق، أكثر من⁦0⁩ | رموز السياق، حتى القيمة شاملةًلا يوجد حد أقصى | الرسوم الإدخال · رموز الإدخال **$0.004** / 1K من الرموز الإخراج · رموز الإخراج **$0.024** / 1K من الرموز الإدخال · قراءة ذاكرة التخزين المؤقت **$0.0004** / 1K من الرموز الإدخال · الكتابة إلى ذاكرة التخزين المؤقت **$0.00075** / 1K من الرموز الإدخال · الكتابة إلى ذاكرة التخزين المؤقت، 1 ساعة **—** / 1K من الرموز |

#### تفاصيل التعرفة المرجعية

لا تغيّر جداول التعرفة المرجعية على مستوى النموذج اختيار الطريقة أو عروض الأسعار أو الرسوم. وتستخدم الرسوم الفعلية تعرفات طريقة Ailoot المحددة.

Google: Nano Banana Pro (Gemini 3 Pro Image)

#### الأسعار حسب الإعدادات

| الإعدادات | شروط الفوترة | الرسوم |
| --- | --- | --- |
| الإعداداتGoogle: Nano Banana Pro (Gemini 3 Pro Image) · الإعداد الافتراضي | شروط الفوترةالإعداد الافتراضي | الرسوم الإدخال · رموز الإدخال **⁦‏0.004 US$⁩** / 1K من الرموز الإخراج · رموز الإخراج **⁦‏0.024 US$⁩** / 1K من الرموز الإدخال · صورة الإدخال **⁦‏0.004 US$⁩** / 1K من الرموز الإخراج · صورة المخرجات **⁦‏0.24 US$⁩** / 1K من الرموز الإدخال · إدخال الصوت **⁦‏0.004 US$⁩** / 1K من الرموز الإدخال · قراءة الصوت من ذاكرة التخزين المؤقت **⁦‏0.0004 US$⁩** / 1K من الرموز الإخراج · البحث في الويب **⁦‏0.028 US$⁩** لكل عملية بحث الإخراج · رموز الاستدلال **⁦‏0.024 US$⁩** / 1K من الرموز الإدخال · قراءة ذاكرة التخزين المؤقت **⁦‏0.0004 US$⁩** / 1K من الرموز الإدخال · الكتابة إلى ذاكرة التخزين المؤقت · 5 دقائق **⁦‏0.00075 US$⁩** / 1K من الرموز |

تحجز Ailoot مبلغًا تقديريًا قبل الطلب. وبعد ظهور النتيجة، تُسوّي الرسوم النهائية بناءً على الاستخدام المقاس. وتستخدم تسوية البث سجل الاستخدام النهائي. [كيفية عمل حجز المبلغ وتسوية الرسوم →](https://ailoot.ai/docs/ar/billing/reserve/)

### أمثلة للطلبات

#### Ailoot Ultra · محادثة OpenAI

curlPython SDKالبث باستخدام Python

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "google/gemini-3-pro-image", "messages": [{"role": "user", "content": "Explain the difference between an observation and a hypothesis in three sentences."}]}')

Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
r=json.loads(Path("result.json").read_text())
for x in r.get("choices",[]):
    if x.get("message",{}).get("content"): print(x["message"]["content"])
PY_RESULT
```

```python
from openai import OpenAI
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
result=client.chat.completions.create(model='google/gemini-3-pro-image',messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}])
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(result.to_dict(mode="json"))
```

```python
from openai import OpenAI
import os
from pathlib import Path

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

with client.chat.completions.stream(model='google/gemini-3-pro-image',messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}]) as stream:
    with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
        for event in stream:
            payload=event.to_dict(mode="json")
            log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
            print(json.dumps(payload,ensure_ascii=False))
    final=stream.get_final_completion()
    save_result(final.to_dict(mode="json"),"stream-result")
```

### استلام النتائج وحفظها

#### Ailoot Ultra · محادثة OpenAI

json أو SSE

##### الاحتفاظ بكل النتائج المكتملة

احتفظ بكل استجابة كاملة وكل ملف وجزء محتوى تم إرجاعه.

احتفظ بكل اختيار ومحتواه واستدعاءات أدواته واستدلاله. في SSE، جمّع التحديثات بحسب فهرس الاختيار/الأداة، واحتفظ بسبب الإنهاء النهائي والاستخدام.

##### عند الحاجة إلى التحقق من الاستجابة الأصلية

احتفظ بمعرّفات الطلبات/الاستجابات والترويسات. لا يُقدَّم URL عام لاسترجاع مهمة نصية.

حقول الاستجابة

| الحقل | النوع |
| --- | --- |
| الحقل`choices[].index` | النوعinteger |
| الحقل`choices[].message.content` | النوعstring\|null |
| الحقل`choices[].message.tool_calls` | النوعtool\_call\[\] |
| الحقل`choices[].message.reasoning_content` | النوعstring |
| الحقل`choices[].message.reasoning_details` | النوعobject\|array |
| الحقل`choices[].finish_reason` | النوعstring\|null |
| الحقل`usage` | النوعobject |

الأخطاء والخطوات التالية

| الاستجابة | الشرط | الخطوة التالية |
| --- | --- | --- |
| الاستجابة⁦400⁩ · `invalid_request_error` | الشرطحقول مطلوبة أو تمثيل مادة أو قيمة معلمة غير صحيحة | الخطوة التاليةصحّح الحقول المحددة قبل طلب إنشاء جديد. |

### الأسماء البديلة

#### الأسماء البديلة للنموذج

<strong>Ailoot</strong> [`gemini-3-pro-image`](https://ailoot.ai/models/ar/#m=google%2Fgemini-3-pro-image&route=Core&caller=gemini-3-pro-image), [`gemini-3-pro-image-preview`](https://ailoot.ai/models/ar/#m=google%2Fgemini-3-pro-image&route=Core&caller=gemini-3-pro-image-preview), [`nano-banana-pro`](https://ailoot.ai/models/ar/#m=google%2Fgemini-3-pro-image&route=Core&caller=nano-banana-pro)
**Ailoot Ultra** [`google/gemini-3-pro-image`](https://ailoot.ai/models/ar/#m=google%2Fgemini-3-pro-image&route=Ultra&caller=google%2Fgemini-3-pro-image&fmt=chat)

#### الأسماء البديلة لمسارات الطرائق

`/v1/images`

#### معرّفات النماذج ذات الصلة IDs

[`google/gemini-3-pro-image`](https://ailoot.ai/models/ar/#m=google%2Fgemini-3-pro-image&route=Ultra&caller=google%2Fgemini-3-pro-image&fmt=chat), [`gemini-3-pro-image-preview`](https://ailoot.ai/models/ar/#m=google%2Fgemini-3-pro-image&route=Core&caller=gemini-3-pro-image-preview), [`nano-banana-pro`](https://ailoot.ai/models/ar/#m=google%2Fgemini-3-pro-image&route=Core&caller=nano-banana-pro), [`gemini-3-pro-image`](https://ailoot.ai/models/ar/#m=google%2Fgemini-3-pro-image&route=Core&caller=gemini-3-pro-image)

**Ailoot Ultra · الصور** `POST /v1/images/generations` `google/gemini-3-pro-image`

[`google/gemini-3-pro-image`](https://ailoot.ai/models/ar/#m=google%2Fgemini-3-pro-image&route=Ultra&caller=google%2Fgemini-3-pro-image&fmt=images)

Google /`google/gemini-3-pro-image`

### البداية

Nano Banana Pro (Gemini 3 Pro Image) هو نموذج Google للصور القائم على الاستدلال، للتصميم المعقد ونماذج عرض المنتجات والتصورات المرئية للحقائق. يقبل النصوص والمراجع الصورية ويولّد صورًا مع نص، بمخرجات 1K–4K وتحكم إبداعي مفصل.

المدخلات المقبولة

النص · الصور

النتائج

الصور

### متاح في Ailoot · المدخلات والطرائق

**Ailoot Ultra · الصور** `POST /v1/images/generations`

الإدخال

`text`, `image`

الإخراج

`image`

| الحقل | النوع | المتطلب | القيم والحدود | القيمة الافتراضية |
| --- | --- | --- | --- | --- |
| الحقل`model` | النوع`string` | المتطلبمطلوب | القيم والحدود google/gemini-3-pro-image | القيمة الافتراضية— |
| الحقل`prompt` | النوع`string` | المتطلبمطلوب | القيم والحدود الحد الأدنى للطول: ⁦1⁩ | القيمة الافتراضية— |
| الحقل`resolution` | النوع`string` | المتطلباختياري | القيم والحدود 1K, 2K, 4K | القيمة الافتراضية— |
| الحقل`aspect_ratio` | النوع`string` | المتطلباختياري | القيم والحدود 1:1, 2:3, 3:2, 3:4, 4:3, 4:5, 5:4, 9:16, 16:9, 21:9 | القيمة الافتراضية— |
| الحقل`n` | النوع`integer` | المتطلباختياري | القيم والحدود الحد الأدنى: ⁦1⁩ الحد الأقصى: ⁦1⁩ | القيمة الافتراضية— |
| الحقل`input_references` | النوع`array` | المتطلباختياري | القيم والحدود الحد الأدنى للعناصر: ⁦0⁩ الحد الأقصى للعناصر: ⁦14⁩ | القيمة الافتراضية— |
| الحقل`provider` | النوع`object` | المتطلباختياري | القيم والحدود | القيمة الافتراضية— |

معلمات الطريقة ودورة حياتها

| المعلمة | المواصفات |
| --- | --- |
| المعلمة`content_type` | المواصفاتapplication/json |
| المعلمة`required` | المواصفاتmodel, prompt |
| المعلمة`material_types` | المواصفاتtext, image |

دورة الحياة: `synchronous_result_then_owned_library`

`GET /v1/media/tasks/{task_id}` · قيمة task\_id الفعلية المُعادة أو سجل مكتبة الوسائط

`GET /v1/media/assets/{asset_id}/content`

`GET /v1/media/assets`

`GET /v1/media/assets/{asset_id}`

### الباقات

##### كيفية احتساب الرسوم النهائية

تقدّر التعرفات المعروضة التكلفة قبل التوليد. تُحسب الرسوم النهائية من التكلفة المسجّلة لعملية التوليد الأصلية. مدة المخرجات المقاسة والكميات المتوقعة ليست الكمية النهائية الخاضعة للفوترة.

مراجع التسعير لا تضيف خيارات للطلب. المعلمات المدعومة مذكورة للطريقة المحددة.

الوضع السريع

غير محدد عند اختيار الوضع السريع

الوضع المرن

غير محدد عند اختيار وضع flex

أقصى جهد للاستدلال

غير محدد عندما يُطبَّق الضبط الافتراضي default مع أقصى جهد للاستدلال

#### تعرفات تقديرية للمقارنة

#### الأسعار حسب الإعدادات

طابق كل رسم مع الشروط المعروضة. طبّق تعرفة واحدة لكل مجموعة من الإعدادات البديلة.

| الإعدادات | جدول التعرفة | الكمية المتوقعة | الرسوم |
| --- | --- | --- | --- |
| الإعداداتالتعرفات الأساسية للرموز | جدول التعرفةالتعرفة الأساسية | الكمية المتوقعة— | الرسوم الإدخال · رموز الإدخال · تقدير للمقارنة فقط **—** / 1K من الرموز الإخراج · رموز الإخراج · تقدير للمقارنة فقط **—** / 1K من الرموز الإدخال · قراءة ذاكرة التخزين المؤقت · تقدير للمقارنة فقط **—** / 1K من الرموز الإدخال · الكتابة إلى ذاكرة التخزين المؤقت · تقدير للمقارنة فقط **—** / 1K من الرموز الإدخال · الكتابة إلى ذاكرة التخزين المؤقت، 1 ساعة · تقدير للمقارنة فقط **—** / 1K من الرموز |
| الإعداداتتكلفة التوليد التقديرية | جدول التعرفة— | الكمية المتوقعةتقدير لتوليد واحد | الرسوم الإخراج · تكلفة التوليد التقديرية · تقدير للمقارنة فقط **$0.98304** تقدير قبل الإنشاء هذا التقدير ليس رسومًا إضافية ولا تعرفة ثابتة لعملية التوليد المكتملة. |

تحجز Ailoot مبلغًا تقديريًا قبل الطلب. وبعد ظهور النتيجة، تُسوّي الرسوم النهائية بناءً على الاستخدام المقاس. وتستخدم تسوية البث سجل الاستخدام النهائي. [كيفية عمل حجز المبلغ وتسوية الرسوم →](https://ailoot.ai/docs/ar/billing/reserve/)

### أمثلة للطلبات

#### Ailoot Ultra · الصور

curl

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
export AILOOT_API_KEY
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p={'model': 'google/gemini-3-pro-image', 'prompt': 'a red panda astronaut floating in space, studio lighting'}

Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/images/generations \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import base64, json, os, subprocess
from pathlib import Path
from urllib.parse import urlsplit, urljoin

def save_images(items):
    if not items: raise SystemExit("No completed images; retain the full response")
    for index, item in enumerate(items):
        encoded=item.get("b64_json")
        uri=item.get("url", "")
        if not encoded and uri.startswith("data:image/"):
            header, separator, encoded=uri.partition(",")
            if not separator or ";base64" not in header: raise SystemExit("Unsupported image data URI")
        if encoded:
            raw=base64.b64decode(encoded,validate=True)
        elif uri:
            uri=urljoin("https://api.ailoot.ai",uri)
            parsed=urlsplit(uri)
            if parsed.scheme!="https" or not parsed.netloc or parsed.username or parsed.password:
                raise SystemExit("Invalid returned image URL")
            owned=parsed.netloc=="api.ailoot.ai" and parsed.path.startswith("/v1/media/assets/") and parsed.path.endswith("/content")
            args=["curl","--fail-with-body","--silent","--show-error",uri]
            if owned: args += ["-H","Authorization: Bearer "+os.environ["AILOOT_API_KEY"]]
            temporary=Path(f"image-{index}.bin")
            subprocess.run(args+["-o",str(temporary)],check=True)
            raw=temporary.read_bytes()
            temporary.unlink()
        else: raise SystemExit("Image has neither bytes nor URL")
        if not raw: raise SystemExit("Empty image result")
        ext="png" if raw.startswith(b"\x89PNG") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else "svg" if raw.lstrip().startswith((b"<svg",b"<?xml")) else "bin"
        Path(f"image-{index}.{ext}").write_bytes(raw)
    print("Every returned image saved; complete response metadata retained")
save_images(json.loads(Path("result.json").read_text())["data"])
PY_RESULT
```

### استلام النتائج وحفظها

#### Ailoot Ultra · الصور

نزّل كل صورة مُرجعة أو احفظ محتواها بصيغة Base64

- `GET /v1/media/tasks/{task_id}`
- `GET /v1/media/assets/{asset_id}/content`
- `GET /v1/media/assets`
- `GET /v1/media/assets/{asset_id}`

عمليات أخرى لقراءة المحتوى

قراءة الأصول الموجودة المملوكة لك

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/media/assets \
  -H "Authorization: Bearer $AILOOT_API_KEY" -o owned-assets.json
# Preserve every returned asset and follow its exact signed content URL. Do not construct a signed token.
```

##### الاحتفاظ بكل النتائج المكتملة

احفظ كل صورة مكتملة؛ نزّلها من كل URL مُرجع، أو فك ترميز محتواها بصيغة Base64.

احتفظ بالاستجابة كاملة وبجميع الترويسات، وبكل مخرج فعلي، وبالمعرّفات الأصلية المُعادة، وبجميع حقول الاستخدام. استعد العملية الأصلية دون إرسال طلب الإنشاء مجددًا.

##### عند الحاجة إلى التحقق من الاستجابة الأصلية

احتفظ بقيمة X-Client-Request-ID المُعادة للمطابقة. اقرأ فقط قيم task\_id/asset\_id الفعلية المُعادة أو مكتبة الوسائط المملوكة لك؛ ولا تنشئ عنوان URL لمهمة من معرّف العملية، ولا تُعِد إرسال طلب الإنشاء مطلقًا.

حقول الاستجابة

| الحقل | النوع |
| --- | --- |
| الحقل`created` | النوع |
| الحقل`data[].url` | النوع |
| الحقل`data[].b64_json` | النوع |
| الحقل`usage` | النوع |

### الأسماء البديلة

#### الأسماء البديلة للنموذج

<strong>Ailoot</strong> [`gemini-3-pro-image`](https://ailoot.ai/models/ar/#m=google%2Fgemini-3-pro-image&route=Core&caller=gemini-3-pro-image&fmt=images), [`gemini-3-pro-image-preview`](https://ailoot.ai/models/ar/#m=google%2Fgemini-3-pro-image&route=Core&caller=gemini-3-pro-image-preview&fmt=images), [`nano-banana-pro`](https://ailoot.ai/models/ar/#m=google%2Fgemini-3-pro-image&route=Core&caller=nano-banana-pro&fmt=images)
**Ailoot Ultra** [`google/gemini-3-pro-image`](https://ailoot.ai/models/ar/#m=google%2Fgemini-3-pro-image&route=Ultra&caller=google%2Fgemini-3-pro-image&fmt=images)

#### الأسماء البديلة لمسارات الطرائق

`/v1/images`

#### معرّفات النماذج ذات الصلة IDs

[`google/gemini-3-pro-image`](https://ailoot.ai/models/ar/#m=google%2Fgemini-3-pro-image&route=Ultra&caller=google%2Fgemini-3-pro-image&fmt=images), [`gemini-3-pro-image-preview`](https://ailoot.ai/models/ar/#m=google%2Fgemini-3-pro-image&route=Core&caller=gemini-3-pro-image-preview&fmt=images), [`nano-banana-pro`](https://ailoot.ai/models/ar/#m=google%2Fgemini-3-pro-image&route=Core&caller=nano-banana-pro&fmt=images), [`gemini-3-pro-image`](https://ailoot.ai/models/ar/#m=google%2Fgemini-3-pro-image&route=Core&caller=gemini-3-pro-image&fmt=images)

**Ailoot Ultra · رسائل Anthropic** `POST /v1/messages` `google/gemini-3-pro-image`

[`google/gemini-3-pro-image`](https://ailoot.ai/models/ar/#m=google%2Fgemini-3-pro-image&route=Ultra&caller=google%2Fgemini-3-pro-image&fmt=messages)

Google /`google/gemini-3-pro-image`

### البداية

Nano Banana Pro (Gemini 3 Pro Image) هو نموذج Google للصور القائم على الاستدلال، للتصميم المعقد ونماذج عرض المنتجات والتصورات المرئية للحقائق. يقبل النصوص والمراجع الصورية ويولّد صورًا مع نص، بمخرجات 1K–4K وتحكم إبداعي مفصل.

المدخلات المقبولة

النص

النتائج

json · sse

### متاح في Ailoot · المدخلات والطرائق

**Ailoot Ultra · رسائل Anthropic** `POST /v1/messages`

الإدخال

`text`

الإخراج

`json`, `sse`

صيغة الإخراج

JSON أو SSE

| الحقل | النوع | المتطلب | القيم والحدود | القيمة الافتراضية |
| --- | --- | --- | --- | --- |
| الحقل`model` | النوع`string` | المتطلبمطلوب | القيم والحدود google/gemini-3-pro-image | القيمة الافتراضية— |
| الحقل`messages` | النوع`message[]` | المتطلبمطلوب | القيم والحدود | القيمة الافتراضية— |
| الحقل`messages[].role` | النوع`string` | المتطلبمطلوب | القيم والحدود user, assistant | القيمة الافتراضية— |
| الحقل`messages[].content` | النوع`string` | المتطلبمطلوب | القيم والحدود | القيمة الافتراضية— |
| الحقل`max_tokens` | النوع`integer` | المتطلبمطلوب | القيم والحدود | القيمة الافتراضية— |
| الحقل`stream` | النوع`boolean` | المتطلباختياري | القيم والحدود | القيمة الافتراضيةfalse |

تركيبات مواد الإدخال

**النص** · نص UTF-8

`سلسلة نصية messages[].content`

معلمات الطريقة ودورة حياتها

| المعلمة | المواصفات |
| --- | --- |
| المعلمة`content_type` | المواصفاتapplication/json |
| المعلمة`required` | المواصفاتmodel, messages, max\_tokens |
| المعلمة`optional_controls` | المواصفاتstream |
| المعلمة`material_types` | المواصفاتtext |
| المعلمة`text_file_material` | المواصفاتاقرأ مستند UTF-8 الفعلي وضع نصه في الإدخال المحدد أو السلسلة النصية لمحتوى الرسالة. |

دورة الحياة: `synchronous_or_streamed`

### الباقات

مراجع التسعير لا تضيف خيارات للطلب. المعلمات المدعومة مذكورة للطريقة المحددة.

الوضع السريع

التعرفة القياسية عند اختيار الوضع السريع

الوضع المرن

التعرفة القياسية عند اختيار وضع flex

أقصى جهد للاستدلال

التعرفة القياسية عندما يُطبَّق الضبط الافتراضي default مع أقصى جهد للاستدلال

تسعير التخزين المؤقت الصريح

غير مفعّل عند طلب التخزين المؤقت الصريح

#### تعرفات Ailoot

#### الأسعار حسب الإعدادات

طابق كل رسم مع الشروط المعروضة. طبّق تعرفة واحدة لكل مجموعة من الإعدادات البديلة.

| الإعدادات | جدول التعرفة | رموز السياق، أكثر من | رموز السياق، حتى القيمة شاملةً | الرسوم |
| --- | --- | --- | --- | --- |
| الإعداداتالتعرفات الأساسية للرموز | جدول التعرفةالتعرفة الأساسية | رموز السياق، أكثر من— | رموز السياق، حتى القيمة شاملةًلا يوجد حد أقصى | الرسوم الإدخال · رموز الإدخال **$0.004** / 1K من الرموز الإخراج · رموز الإخراج **$0.024** / 1K من الرموز الإدخال · قراءة ذاكرة التخزين المؤقت **$0.0004** / 1K من الرموز الإدخال · الكتابة إلى ذاكرة التخزين المؤقت **$0.00075** / 1K من الرموز الإدخال · الكتابة إلى ذاكرة التخزين المؤقت، 1 ساعة **—** / 1K من الرموز الإخراج · رموز إخراج الصور **$0.24** / 1K من رموز الصور |
| الإعداداتالشريحة 1 لطول الطلب | جدول التعرفة— | رموز السياق، أكثر من⁦0⁩ | رموز السياق، حتى القيمة شاملةًلا يوجد حد أقصى | الرسوم الإدخال · رموز الإدخال **$0.004** / 1K من الرموز الإخراج · رموز الإخراج **$0.024** / 1K من الرموز الإدخال · قراءة ذاكرة التخزين المؤقت **$0.0004** / 1K من الرموز الإدخال · الكتابة إلى ذاكرة التخزين المؤقت **$0.00075** / 1K من الرموز الإدخال · الكتابة إلى ذاكرة التخزين المؤقت، 1 ساعة **—** / 1K من الرموز |

تحجز Ailoot مبلغًا تقديريًا قبل الطلب. وبعد ظهور النتيجة، تُسوّي الرسوم النهائية بناءً على الاستخدام المقاس. وتستخدم تسوية البث سجل الاستخدام النهائي. [كيفية عمل حجز المبلغ وتسوية الرسوم →](https://ailoot.ai/docs/ar/billing/reserve/)

### أمثلة للطلبات

#### Ailoot Ultra · رسائل Anthropic

جسم طلب JSON مكتمل بالحد الأدنىcurl · استخدم مستندك بترميز UTF-8Python · احفظ النتيجة كاملة

```json
{
  "model": "google/gemini-3-pro-image",
  "max_tokens": 128,
  "messages": [
    {
      "role": "user",
      "content": "Summarize the incident report."
    }
  ],
  "stream": false
}
```

```bash
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 document}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json, os
from pathlib import Path

source_file = Path(os.environ['AILOOT_TEXT_FILE'])
if not source_file.is_file():
    raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')
text = source_file.read_text(encoding='utf-8')
if not text.strip():
    raise SystemExit('Choose a document containing text')
payload = {'model': 'google/gemini-3-pro-image', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}
payload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\n\n' + text
Path('request.json').write_text(json.dumps(payload, ensure_ascii=False), encoding='utf-8')
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \
  -H "x-api-key: $AILOOT_API_KEY" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path

result = json.loads(Path('result.json').read_text(encoding='utf-8'))
print(json.dumps(result, ensure_ascii=False, indent=2))
PY_RESULT
```

```python
import json, os
from pathlib import Path

source_file = Path(os.environ['AILOOT_TEXT_FILE'])
if not source_file.is_file():
    raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')
text = source_file.read_text(encoding='utf-8')
if not text.strip():
    raise SystemExit('Choose a document containing text')
payload = {'model': 'google/gemini-3-pro-image', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}
payload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\n\n' + text
from urllib.request import Request, urlopen
from urllib.error import HTTPError

api_key = os.environ['AILOOT_API_KEY']
if not api_key.strip():
    raise SystemExit('Set AILOOT_API_KEY before making a request')
headers = {'x-api-key': 'PLACEHOLDER_KEY', 'anthropic-version': '2023-06-01', 'Content-Type': 'application/json'}
headers['x-api-key'] = api_key
request = Request('https://api.ailoot.ai/v1/messages', data=json.dumps(payload, ensure_ascii=False).encode('utf-8'), headers=headers, method='POST')
try:
    with urlopen(request, timeout=120) as response:
        raw = response.read()
        Path('response-headers.txt').write_text(str(response.headers), encoding='utf-8')
except HTTPError as error:
    Path('result.json').write_bytes(error.read())
    Path('response-headers.txt').write_text(str(error.headers), encoding='utf-8')
    raise
Path('result.json').write_bytes(raw)
import json
from pathlib import Path

result = json.loads(Path('result.json').read_text(encoding='utf-8'))
print(json.dumps(result, ensure_ascii=False, indent=2))
```

### استلام النتائج وحفظها

#### Ailoot Ultra · رسائل Anthropic

JSON أو SSE

##### الاحتفاظ بكل النتائج المكتملة

احتفظ بكل استجابة كاملة وكل ملف وجزء محتوى تم إرجاعه.

احتفظ بكل كتل المحتوى وتوقيعات التفكير ومعرّفات استخدام الأدوات الفعلية. جمّع جميع تحديثات كتل SSE؛ فأول كتلة نصية ليست الإخراج الكامل.

##### عند الحاجة إلى التحقق من الاستجابة الأصلية

احتفظ بمعرّفات الطلبات/الاستجابات والترويسات. لا يُقدَّم URL عام لاسترجاع مهمة نصية.

حقول الاستجابة

| الحقل | النوع |
| --- | --- |
| الحقل`id` | النوعstring |
| الحقل`model` | النوعstring |
| الحقل`content[]` | النوعtext\|thinking\|tool\_use\|other content block |
| الحقل`stop_reason` | النوعstring\|null |
| الحقل`usage` | النوعobject |

الأخطاء والخطوات التالية

| الاستجابة | الشرط | الخطوة التالية |
| --- | --- | --- |
| الاستجابة⁦400⁩ · `invalid_request_error` | الشرطحقول مطلوبة أو تمثيل مادة أو قيمة معلمة غير صحيحة | الخطوة التاليةصحّح الحقول المحددة قبل طلب إنشاء جديد. |

### الأسماء البديلة

#### الأسماء البديلة للنموذج

<strong>Ailoot</strong> [`gemini-3-pro-image`](https://ailoot.ai/models/ar/#m=google%2Fgemini-3-pro-image&route=Core&caller=gemini-3-pro-image), [`gemini-3-pro-image-preview`](https://ailoot.ai/models/ar/#m=google%2Fgemini-3-pro-image&route=Core&caller=gemini-3-pro-image-preview), [`nano-banana-pro`](https://ailoot.ai/models/ar/#m=google%2Fgemini-3-pro-image&route=Core&caller=nano-banana-pro)
**Ailoot Ultra** [`google/gemini-3-pro-image`](https://ailoot.ai/models/ar/#m=google%2Fgemini-3-pro-image&route=Ultra&caller=google%2Fgemini-3-pro-image&fmt=messages)

#### الأسماء البديلة لمسارات الطرائق

`/v1/images`

#### معرّفات النماذج ذات الصلة IDs

[`google/gemini-3-pro-image`](https://ailoot.ai/models/ar/#m=google%2Fgemini-3-pro-image&route=Ultra&caller=google%2Fgemini-3-pro-image&fmt=messages), [`gemini-3-pro-image-preview`](https://ailoot.ai/models/ar/#m=google%2Fgemini-3-pro-image&route=Core&caller=gemini-3-pro-image-preview), [`nano-banana-pro`](https://ailoot.ai/models/ar/#m=google%2Fgemini-3-pro-image&route=Core&caller=nano-banana-pro), [`gemini-3-pro-image`](https://ailoot.ai/models/ar/#m=google%2Fgemini-3-pro-image&route=Core&caller=gemini-3-pro-image)

FAQ · Google: Nano Banana Pro (Gemini 3 Pro Image)

ما المدخلات والنتائج المتاحة؟

`POST /v1/images/generations` · `gemini-3-pro-image`: `text` → `image` `POST /v1/images/generations` · `gemini-3-pro-image-preview`: `text` → `image` `POST /v1/images/generations` · `nano-banana-pro`: `text` → `image` `POST /v1/chat/completions` · `google/gemini-3-pro-image`: `text` → `text` `POST /v1/images/generations` · `google/gemini-3-pro-image`: `text`, `image` → `image` `POST /v1/messages` · `google/gemini-3-pro-image`: `text` → `json`, `sse`

ما الحقول التي يستخدمها الطلب؟

`POST /v1/images/generations` · `gemini-3-pro-image`: `model`, `prompt`, `n`, `response_format`, `stream` `POST /v1/images/generations` · `gemini-3-pro-image-preview`: `model`, `prompt`, `n`, `response_format`, `stream` `POST /v1/images/generations` · `nano-banana-pro`: `model`, `prompt`, `n`, `response_format`, `stream` `POST /v1/chat/completions` · `google/gemini-3-pro-image`: `model`, `messages`, `stream`, `modalities`, `provider` `POST /v1/images/generations` · `google/gemini-3-pro-image`: `model`, `prompt`, `resolution`, `aspect_ratio`, `n`, `input_references`, `provider` `POST /v1/messages` · `google/gemini-3-pro-image`: `model`, `messages`, `max_tokens`, `stream`

ما الحدود المطبقة؟

`POST /v1/images/generations` · `gemini-3-pro-image`: `ctx`: `65536`; `max_out`: `32768`; `n.minimum`: `1` `POST /v1/images/generations` · `gemini-3-pro-image-preview`: `ctx`: `65536`; `max_out`: `32768`; `n.minimum`: `1` `POST /v1/images/generations` · `nano-banana-pro`: `ctx`: `65536`; `max_out`: `32768`; `n.minimum`: `1` `POST /v1/chat/completions` · `google/gemini-3-pro-image`: `messages.min_items`: `1` `POST /v1/images/generations` · `google/gemini-3-pro-image`: `n.minimum`: `1`; `n.maximum`: `1`

اربط Ailoot بخدمة Claude Code أوOpenCode أوHermes أوتطبيقك.

## الشركة ومحفظة مشاريعها

الشركة ومحفظة مشاريعها: ملايين العملاء؛ مبيعات بالمليارات شهريًا.

## اشتر الرموز بخصم.

خصم اشتراك للعمل المنتظم. الرموز الترويجية حتى 50% على شراء الرموز.

الاشتراك

اختر خطة بخصم لطلباتك المنتظمة.

رمز خصم حتى 50%

أدخل الرمز عند الشراء. يعاد حساب السعر وفق العرض الساري.

المصروفات في السجل

يحفظ النموذج والرموز والمبلغ لكل طلب.

[اختر اشتراكا](https://ailoot.ai/docs/ar/billing/subscriptions/) · [اعرض أسعار النماذج](https://ailoot.ai/models/ar/)

## اربط API بالمنتج الذي تبيعه.

SaaS والتطبيقات والبوتات وفق العرض واتفاقية ترخيص Ailoot. لإعادة البيع، اطلب ترخيص موزع.

تطبيق تجاري

أضف توليد النص والصور والفيديو والصوت إلى ميزات خدمتك المدفوعة.

ترخيص إعادة البيع

أرسل وصف المشروع وطريقة توفير الوصول. اطلب شروط استخدام وإعادة بيع مكتوبة.

المستندات على الموقع

العرض واتفاقية الترخيص وسياسة معالجة البيانات متاحة قبل الربط.

[اطلب ترخيص إعادة بيع](mailto:support@ailoot.ai) · [العرض واتفاقية الترخيص](https://ailoot.ai/legal/offer?lang=ar)

## Ailoot · الشركة ومحفظة مشاريعها





تستند Ailoot إلى خبرة تشغيلية متراكمة وقاعدة عملاء واسعة وخدمة مستقرة ومراقبة مستمرة لمؤشرات الأداء KPI.





الشركة ومحفظة مشاريعها: ملايين العملاء؛ مبيعات بالمليارات شهريًا.





توظف Ailoot هذه الخبرة التشغيلية لإتاحة الوصول عبر API إلى قدرات الذكاء الاصطناعي في منتجات العملاء ووكلائهم وتطبيقاتهم وعمليات الأتمتة.
