{
  "aboutHtml": "<p>Sora 2 هو نموذج OpenAI لتوليد الفيديو والصوت، وينشئ مقاطع حركية انطلاقًا من وصف مكتوب للمشهد أو صورة مرجعية. وهو يولّد التسلسل البصري مع الكلام والمؤثرات وصوت الخلفية المتزامنة. ويُقدَّم إصدار Sora 2 القياسي للاستكشاف البصري وتطوير المفاهيم والنماذج الأولية والمونتاج المبدئي. أما Sora 2 Pro فهو إصدار منفصل يستهدف دقة بصرية أعلى وإخراجًا نهائيًا بدقة أكبر.</p><h4>صِف لقطة يمكن رؤيتها وسماعها</h4><p>ينظّم دليل إعداد الموجّهات لدى المطوّر وصفًا عمليًا حول التأطير والموضوع والفعل والمكان والإضاءة. امنح المشهد أسلوبًا بصريًا متماسكًا، ثم صِف الحركة على مراحل واضحة. ويمكن لمفهوم منتج أصلي أن يُظهر جسمًا ميكانيكيًا صغيرًا يدور مرة واحدة على منضدة عمل بينما تقترب الكاميرا ببطء، مع ضوء نافذة ناعم وصوت محرّك خافت. حدّد ما ينبغي للمشاهد ملاحظته وكيف ينتهي الفعل.</p><p>اجعل حركة الكاميرا وفعل الموضوع في كل لقطة مفهومين. ويمكن تقسيم التسلسل المعقّد إلى وحدات لقطات متميزة، لكل منها تأطيرها وفعلها وإضاءتها. واحتفظ بتفاصيل الموضوع نفسها ولوحة الألوان عندما يُراد لعدة مقاطع أن تشكّل تسلسلًا واحدًا. ويؤكد الدليل أن اللقطات الأقصر تتبع التوجيه عمومًا بدرجة أوثق، وأن تكرار التوليد بالموجّه نفسه ينتج محاولات مختلفة.</p><p>يصف إعلان إطلاق النموذج تحسّن السلوك الفيزيائي والاستمرارية بين اللقطات، بما في ذلك الأساليب الواقعية والسينمائية والأنمي. وهذه قدرات مقصودة يجب توجيهها وفحصها. راجع الحركة والتلامس بين الأجسام والنِّسب والاستمرارية، بدلًا من افتراض أن الإطار الأول المقنع يضمن تسلسلًا متماسكًا. وإذا كان الفعل غير واضح، فبسّطه وامنحه بداية ونهاية مرئيتين.</p><h4>وجّه الحوار والصوت بصورة منفصلة</h4><p>حدّد الجمل المنطوقة منفصلةً عن الوصف البصري، واستخدم تسميات ثابتة للمتحدثين. واجعل الحوار قصيرًا بما يكفي ليتناسب مع الفعل وطول المقطع المقصود. وفي رسوم متحركة بشخصيتين، بدّل بين سؤال وجواب قصيرين بدلًا من مطالبة لقطة قصيرة باستيعاب خطاب طويل. ويحذّر الدليل من أن الحوار الطويل والمعقّد قد يخل بالإيقاع والتزامن.</p><p>صِف البيئة الصوتية الملائمة للمشهد: صوت حركة صغيرة أو أجواء الغرفة أو إيقاع مؤثر بيئي. واشرح الصوت الذي يجب أن يتزامن مع الفعل. واستمع إلى الكلام والمؤثرات الناتجة مع الصورة، مع التحقّق من إسناد الكلام إلى المتحدثين والكلمات والتوقيت. والصوت المتزامن جزء من المقطع المُولَّد، وليس إجابة نصية منفصلة.</p><h4>الحجم والمدة وبداية موجّهة بصورة</h4><p>أحجام المخرج الموثّقة للنموذج القياسي هي 720×1280 بالاتجاه العمودي و1280×720 بالاتجاه الأفقي. ويجب ألا تُنسب الأحجام الأعلى دقة في إصدار Pro إلى Sora 2 القياسي. فالحجم والمدة إعدادات صريحة في الطلب؛ وكتابة حجم مختلف أو طلب فيلم أطول في الموجّه لا يغيّر هذه الإعدادات. ويسرد مرجع الإنشاء إعدادات مقاطع بطول 4 و8 و12 ثانية، لذا اختر حدثًا قصيرًا ومحددًا عند إعداد اللقطة. ويوثّق مسار العمل الموسّع لدى المطوّر أيضًا إعدادات بطول 16 و20 ثانية.</p><p>تثبّت الصورة المرجعية الإطار الأول، ويصف النص ما يحدث بعده. ويدعم المطوّر مراجع JPEG وPNG وWebP، ويشترط مطابقة الصورة لحجم الفيديو المستهدف. أعدّ الموضوع والبيئة والتكوين في صورة البداية، ثم اطلب حركة محددة. وهذا مرجع للإطار الافتتاحي، وليس ضمانًا لمطابقة كل تفصيل طوال المقطع.</p><h4>شخصيات غير بشرية قابلة لإعادة الاستخدام</h4><p>يمكن لمسار العمل الموسّع لدى المطوّر إنشاء أصل لشخصية قابلة لإعادة الاستخدام من فيديو مرجعي قصير لحيوان أو تميمة أو جسم. وتطلب إرشادات الإعداد مقطع MP4 بطول يقارب ثانيتين إلى أربع ثوانٍ، بدقة 720p إلى 1080p، وبنسبة 16:9 أو 9:16. وتساعد مطابقة نسبة الأبعاد بين المصدر والمخرج على تجنّب المظهر الممدود. ويمكن لعملية التوليد الاستعانة بما يصل إلى شخصيتين.</p><p>احتفظ بمعرّف الشخصية واذكر اسمها في الموجّه؛ فتمرير المعرّف وحده لا يشكّل الإعداد الكامل الوارد في الدليل. ويمكن إرفاق أصول الشخصيات بعملية توليد موجّهة بصورة، لكن تمديدات الفيديو لا تقبلها. ويحظر المطوّر افتراضيًا رفع شخصيات تشبه البشر، ويرفض الصور المرجعية التي تحتوي على وجوه بشرية في مسار API الموثّق. أما ميزات الشخصيات الشخصية في تطبيق Sora فلها مسار منتج منفصل.</p><h4>مدّد مقطعًا مكتملًا أو عدّله</h4><p>يأخذ التمديد فيديو مصدريًا مكتملًا وموجّهًا للاستمرار، ويستخدم المقطع المصدري كاملًا كسياق للحركة واتجاه الكاميرا واستمرارية المشهد. ويصف الدليل إضافات تصل إلى 20 ثانية لكل تمديد. والمدخل الموثّق للتمديد هو الفيديو المصدري والنص؛ وتُستبعد مراجع الشخصيات أو الصور الإضافية من هذا الوضع. صِف كيف يستمر الفعل الحالي بدلًا من إدخال مشهد غير مرتبط دون انتقال.</p><p>يستهدف تحرير الفيديو تغييرًا واضحًا في مقطع موجود. ويمكن لتنقيح مركّز أن يغيّر لون جسم أو لوحة ألوان المشهد مع الاحتفاظ ببقية اللقطة. ويوصي دليل المطوّر بتغيير واحد محدد جيدًا في كل مرة، ويميّز بين تحرير فيديو مُولَّد ورفع لقطات عشوائية، وهو ما يخضع لشرط أهلية منفصل. احتفظ بالمصدر المكتمل وحدّد التنقيح الدقيق المطلوب قبل إجراء تعديل آخر.</p><h4>مهام التصيير والفيديو النهائي</h4><p>مسار الفيديو الموثّق لدى المطوّر غير متزامن: فقد تكون المهمة المُرسلة في قائمة الانتظار أو قيد التنفيذ قبل أن تكتمل أو تفشل. وتنتج المهمة المكتملة فيديو MP4؛ وتدعم أصول الصور المصغّرة وأوراق تجميع اللقطات المعاينة والتصفح. وأبقِ هوية المهمة مرتبطة بالموجّه والمراجع والأصول المُعادة. فالاستجابة الأولية للمهمة ليست الفيديو النهائي القابل للتشغيل.</p><p>يصف مسار التنزيل المعتاد مدة صلاحية قدرها ساعة واحدة لرابط التنزيل. ويُعدّ مسار الدُفعات الموسّع طلبات تصيير JSON مستقلة بمعرّفات عناصر ثابتة ومراجع مرفوعة، مع ربط نتيجة كل لقطة بها؛ ولأصوله المكتملة فترة تنزيل منفصلة تصل إلى 24 ساعة. احفظ المقطع النهائي سريعًا وافحص الصورة والصوت الفعليين قبل اعتباره محاولة مختارة.</p><p>تُلزم قيود المحتوى الموثّقة في API لدى المطوّر بأن تكون المادة مناسبة لجمهور دون 18 عامًا، وترفض الشخصيات أو الموسيقى المحمية بحقوق الطبع والنشر وتوليد أشخاص حقيقيين. أعدّ المشهد والمراجع وفقًا لذلك. والنتيجة المباشرة للنموذج هي فيديو مع صوت، وليست صورًا ثابتة مُولَّدة أو استجابة حوارية من أداة أو فيلمًا بلا حدود. احتفظ بهوية النموذج القياسي الدقيقة والمقطع المصدري المقبول عند متابعة مفهوم بصري.</p>",
  "aboutText": "Sora 2 هو نموذج OpenAI لتوليد الفيديو والصوت، وينشئ مقاطع حركية انطلاقًا من وصف مكتوب للمشهد أو صورة مرجعية. وهو يولّد التسلسل البصري مع الكلام والمؤثرات وصوت الخلفية المتزامنة. ويُقدَّم إصدار Sora 2 القياسي للاستكشاف البصري وتطوير المفاهيم والنماذج الأولية والمونتاج المبدئي. أما Sora 2 Pro فهو إصدار منفصل يستهدف دقة بصرية أعلى وإخراجًا نهائيًا بدقة أكبر.\n\n### صِف لقطة يمكن رؤيتها وسماعها\n\nينظّم دليل إعداد الموجّهات لدى المطوّر وصفًا عمليًا حول التأطير والموضوع والفعل والمكان والإضاءة. امنح المشهد أسلوبًا بصريًا متماسكًا، ثم صِف الحركة على مراحل واضحة. ويمكن لمفهوم منتج أصلي أن يُظهر جسمًا ميكانيكيًا صغيرًا يدور مرة واحدة على منضدة عمل بينما تقترب الكاميرا ببطء، مع ضوء نافذة ناعم وصوت محرّك خافت. حدّد ما ينبغي للمشاهد ملاحظته وكيف ينتهي الفعل.\n\nاجعل حركة الكاميرا وفعل الموضوع في كل لقطة مفهومين. ويمكن تقسيم التسلسل المعقّد إلى وحدات لقطات متميزة، لكل منها تأطيرها وفعلها وإضاءتها. واحتفظ بتفاصيل الموضوع نفسها ولوحة الألوان عندما يُراد لعدة مقاطع أن تشكّل تسلسلًا واحدًا. ويؤكد الدليل أن اللقطات الأقصر تتبع التوجيه عمومًا بدرجة أوثق، وأن تكرار التوليد بالموجّه نفسه ينتج محاولات مختلفة.\n\nيصف إعلان إطلاق النموذج تحسّن السلوك الفيزيائي والاستمرارية بين اللقطات، بما في ذلك الأساليب الواقعية والسينمائية والأنمي. وهذه قدرات مقصودة يجب توجيهها وفحصها. راجع الحركة والتلامس بين الأجسام والنِّسب والاستمرارية، بدلًا من افتراض أن الإطار الأول المقنع يضمن تسلسلًا متماسكًا. وإذا كان الفعل غير واضح، فبسّطه وامنحه بداية ونهاية مرئيتين.\n\n### وجّه الحوار والصوت بصورة منفصلة\n\nحدّد الجمل المنطوقة منفصلةً عن الوصف البصري، واستخدم تسميات ثابتة للمتحدثين. واجعل الحوار قصيرًا بما يكفي ليتناسب مع الفعل وطول المقطع المقصود. وفي رسوم متحركة بشخصيتين، بدّل بين سؤال وجواب قصيرين بدلًا من مطالبة لقطة قصيرة باستيعاب خطاب طويل. ويحذّر الدليل من أن الحوار الطويل والمعقّد قد يخل بالإيقاع والتزامن.\n\nصِف البيئة الصوتية الملائمة للمشهد: صوت حركة صغيرة أو أجواء الغرفة أو إيقاع مؤثر بيئي. واشرح الصوت الذي يجب أن يتزامن مع الفعل. واستمع إلى الكلام والمؤثرات الناتجة مع الصورة، مع التحقّق من إسناد الكلام إلى المتحدثين والكلمات والتوقيت. والصوت المتزامن جزء من المقطع المُولَّد، وليس إجابة نصية منفصلة.\n\n### الحجم والمدة وبداية موجّهة بصورة\n\nأحجام المخرج الموثّقة للنموذج القياسي هي 720×1280 بالاتجاه العمودي و1280×720 بالاتجاه الأفقي. ويجب ألا تُنسب الأحجام الأعلى دقة في إصدار Pro إلى Sora 2 القياسي. فالحجم والمدة إعدادات صريحة في الطلب؛ وكتابة حجم مختلف أو طلب فيلم أطول في الموجّه لا يغيّر هذه الإعدادات. ويسرد مرجع الإنشاء إعدادات مقاطع بطول 4 و8 و12 ثانية، لذا اختر حدثًا قصيرًا ومحددًا عند إعداد اللقطة. ويوثّق مسار العمل الموسّع لدى المطوّر أيضًا إعدادات بطول 16 و20 ثانية.\n\nتثبّت الصورة المرجعية الإطار الأول، ويصف النص ما يحدث بعده. ويدعم المطوّر مراجع JPEG وPNG وWebP، ويشترط مطابقة الصورة لحجم الفيديو المستهدف. أعدّ الموضوع والبيئة والتكوين في صورة البداية، ثم اطلب حركة محددة. وهذا مرجع للإطار الافتتاحي، وليس ضمانًا لمطابقة كل تفصيل طوال المقطع.\n\n### شخصيات غير بشرية قابلة لإعادة الاستخدام\n\nيمكن لمسار العمل الموسّع لدى المطوّر إنشاء أصل لشخصية قابلة لإعادة الاستخدام من فيديو مرجعي قصير لحيوان أو تميمة أو جسم. وتطلب إرشادات الإعداد مقطع MP4 بطول يقارب ثانيتين إلى أربع ثوانٍ، بدقة 720p إلى 1080p، وبنسبة 16:9 أو 9:16. وتساعد مطابقة نسبة الأبعاد بين المصدر والمخرج على تجنّب المظهر الممدود. ويمكن لعملية التوليد الاستعانة بما يصل إلى شخصيتين.\n\nاحتفظ بمعرّف الشخصية واذكر اسمها في الموجّه؛ فتمرير المعرّف وحده لا يشكّل الإعداد الكامل الوارد في الدليل. ويمكن إرفاق أصول الشخصيات بعملية توليد موجّهة بصورة، لكن تمديدات الفيديو لا تقبلها. ويحظر المطوّر افتراضيًا رفع شخصيات تشبه البشر، ويرفض الصور المرجعية التي تحتوي على وجوه بشرية في مسار API الموثّق. أما ميزات الشخصيات الشخصية في تطبيق Sora فلها مسار منتج منفصل.\n\n### مدّد مقطعًا مكتملًا أو عدّله\n\nيأخذ التمديد فيديو مصدريًا مكتملًا وموجّهًا للاستمرار، ويستخدم المقطع المصدري كاملًا كسياق للحركة واتجاه الكاميرا واستمرارية المشهد. ويصف الدليل إضافات تصل إلى 20 ثانية لكل تمديد. والمدخل الموثّق للتمديد هو الفيديو المصدري والنص؛ وتُستبعد مراجع الشخصيات أو الصور الإضافية من هذا الوضع. صِف كيف يستمر الفعل الحالي بدلًا من إدخال مشهد غير مرتبط دون انتقال.\n\nيستهدف تحرير الفيديو تغييرًا واضحًا في مقطع موجود. ويمكن لتنقيح مركّز أن يغيّر لون جسم أو لوحة ألوان المشهد مع الاحتفاظ ببقية اللقطة. ويوصي دليل المطوّر بتغيير واحد محدد جيدًا في كل مرة، ويميّز بين تحرير فيديو مُولَّد ورفع لقطات عشوائية، وهو ما يخضع لشرط أهلية منفصل. احتفظ بالمصدر المكتمل وحدّد التنقيح الدقيق المطلوب قبل إجراء تعديل آخر.\n\n### مهام التصيير والفيديو النهائي\n\nمسار الفيديو الموثّق لدى المطوّر غير متزامن: فقد تكون المهمة المُرسلة في قائمة الانتظار أو قيد التنفيذ قبل أن تكتمل أو تفشل. وتنتج المهمة المكتملة فيديو MP4؛ وتدعم أصول الصور المصغّرة وأوراق تجميع اللقطات المعاينة والتصفح. وأبقِ هوية المهمة مرتبطة بالموجّه والمراجع والأصول المُعادة. فالاستجابة الأولية للمهمة ليست الفيديو النهائي القابل للتشغيل.\n\nيصف مسار التنزيل المعتاد مدة صلاحية قدرها ساعة واحدة لرابط التنزيل. ويُعدّ مسار الدُفعات الموسّع طلبات تصيير JSON مستقلة بمعرّفات عناصر ثابتة ومراجع مرفوعة، مع ربط نتيجة كل لقطة بها؛ ولأصوله المكتملة فترة تنزيل منفصلة تصل إلى 24 ساعة. احفظ المقطع النهائي سريعًا وافحص الصورة والصوت الفعليين قبل اعتباره محاولة مختارة.\n\nتُلزم قيود المحتوى الموثّقة في API لدى المطوّر بأن تكون المادة مناسبة لجمهور دون 18 عامًا، وترفض الشخصيات أو الموسيقى المحمية بحقوق الطبع والنشر وتوليد أشخاص حقيقيين. أعدّ المشهد والمراجع وفقًا لذلك. والنتيجة المباشرة للنموذج هي فيديو مع صوت، وليست صورًا ثابتة مُولَّدة أو استجابة حوارية من أداة أو فيلمًا بلا حدود. احتفظ بهوية النموذج القياسي الدقيقة والمقطع المصدري المقبول عند متابعة مفهوم بصري.",
  "editorialOverlay": {
    "copy_fields": null,
    "copy_sha256": null,
    "copy_source": null,
    "html_sha256": "e226ed2e0ad93ffd62a14479598b1824edd7f983c9800f85084f13907c20cd28",
    "module_sha256": "ee9dc1c50b1e6a8fb7fa062030fcb4646b9aaaeb08be513b723a5a92a7290f06",
    "raw_model_unchanged": true,
    "schema": "ailoot-native-model-editorial-v1"
  },
  "locale": "ar",
  "methods": [
    {
      "html": "<div class=\"sheet-head\"><span class=\"mav\" aria-hidden=\"true\">•</span><h2 id=\"sheet-title\">sora-2</h2><button class=\"icon-btn\" type=\"button\" data-close-sheet aria-label=\"إغلاق\">×</button></div><div class=\"idline\"><span>أخرى /</span><code>sora-2</code><button type=\"button\" id=\"copy-id\">نسخ ID</button></div><nav class=\"card-jump-nav\" aria-label=\"أقسام بطاقة النموذج\"><button type=\"button\" data-card-jump=\"overview\">البداية</button><button type=\"button\" data-card-jump=\"methods\">المدخلات والطرائق</button><button type=\"button\" data-card-jump=\"pricing\">الباقات</button><button type=\"button\" data-card-jump=\"examples\">أمثلة</button><button type=\"button\" data-card-jump=\"results\">النتائج</button><button type=\"button\" data-card-jump=\"aliases\">الأسماء البديلة</button></nav><div class=\"card-method-tabs\" role=\"tablist\" aria-label=\"طرائق API\"><button type=\"button\" role=\"tab\" tabindex=\"-1\" aria-controls=\"card-method-content\" aria-selected=\"false\" id=\"card-method-tab-0\" data-card-method=\"Ultra|messages|/v1/messages|sora-2\">Messages</button><button type=\"button\" role=\"tab\" tabindex=\"0\" aria-controls=\"card-method-content\" aria-selected=\"true\" id=\"card-method-tab-1\" data-card-method=\"Ultra|chat_completions|/v1/chat/completions|sora-2\">Chat Completions</button></div><div id=\"card-method-content\" role=\"tabpanel\" aria-labelledby=\"card-method-tab-1\"><section class=\"card-section\" data-card-section=\"overview\"><h3 tabindex=\"-1\">البداية</h3><p class=\"mdesc-full\">ينشئ Sora 2 فيديو بحوار ومؤثرات صوتية وصوت خلفي متزامنة انطلاقًا من نص أو صورة مرجعية. ويدعم الإصدار القياسي الاستكشاف البصري ومقاطع تطوير المفاهيم، مع مسارات عمل منفصلة لدى المطوّر للشخصيات غير البشرية القابلة لإعادة الاستخدام، وتمديد المقاطع، وتعديلات الفيديو المركّزة.</p><dl class=\"card-io\" data-card-io><div><dt>المدخلات المقبولة</dt><dd>النص</dd></div><div><dt>النتائج</dt><dd>json · sse</dd></div></dl><details class=\"card-about\"><summary>عن النموذج</summary><p class=\"note-s\" data-model-method-boundary>يغطي هذا الوصف قدرات النموذج. وترد أدناه المدخلات والمخرجات والخيارات المتاحة في Ailoot للطريقة المحددة.</p><div class=\"mabout\" id=\"m-about\"><p>Sora 2 هو نموذج OpenAI لتوليد الفيديو والصوت، وينشئ مقاطع حركية انطلاقًا من وصف مكتوب للمشهد أو صورة مرجعية. وهو يولّد التسلسل البصري مع الكلام والمؤثرات وصوت الخلفية المتزامنة. ويُقدَّم إصدار Sora 2 القياسي للاستكشاف البصري وتطوير المفاهيم والنماذج الأولية والمونتاج المبدئي. أما Sora 2 Pro فهو إصدار منفصل يستهدف دقة بصرية أعلى وإخراجًا نهائيًا بدقة أكبر.</p><h4>صِف لقطة يمكن رؤيتها وسماعها</h4><p>ينظّم دليل إعداد الموجّهات لدى المطوّر وصفًا عمليًا حول التأطير والموضوع والفعل والمكان والإضاءة. امنح المشهد أسلوبًا بصريًا متماسكًا، ثم صِف الحركة على مراحل واضحة. ويمكن لمفهوم منتج أصلي أن يُظهر جسمًا ميكانيكيًا صغيرًا يدور مرة واحدة على منضدة عمل بينما تقترب الكاميرا ببطء، مع ضوء نافذة ناعم وصوت محرّك خافت. حدّد ما ينبغي للمشاهد ملاحظته وكيف ينتهي الفعل.</p><p>اجعل حركة الكاميرا وفعل الموضوع في كل لقطة مفهومين. ويمكن تقسيم التسلسل المعقّد إلى وحدات لقطات متميزة، لكل منها تأطيرها وفعلها وإضاءتها. واحتفظ بتفاصيل الموضوع نفسها ولوحة الألوان عندما يُراد لعدة مقاطع أن تشكّل تسلسلًا واحدًا. ويؤكد الدليل أن اللقطات الأقصر تتبع التوجيه عمومًا بدرجة أوثق، وأن تكرار التوليد بالموجّه نفسه ينتج محاولات مختلفة.</p><p>يصف إعلان إطلاق النموذج تحسّن السلوك الفيزيائي والاستمرارية بين اللقطات، بما في ذلك الأساليب الواقعية والسينمائية والأنمي. وهذه قدرات مقصودة يجب توجيهها وفحصها. راجع الحركة والتلامس بين الأجسام والنِّسب والاستمرارية، بدلًا من افتراض أن الإطار الأول المقنع يضمن تسلسلًا متماسكًا. وإذا كان الفعل غير واضح، فبسّطه وامنحه بداية ونهاية مرئيتين.</p><h4>وجّه الحوار والصوت بصورة منفصلة</h4><p>حدّد الجمل المنطوقة منفصلةً عن الوصف البصري، واستخدم تسميات ثابتة للمتحدثين. واجعل الحوار قصيرًا بما يكفي ليتناسب مع الفعل وطول المقطع المقصود. وفي رسوم متحركة بشخصيتين، بدّل بين سؤال وجواب قصيرين بدلًا من مطالبة لقطة قصيرة باستيعاب خطاب طويل. ويحذّر الدليل من أن الحوار الطويل والمعقّد قد يخل بالإيقاع والتزامن.</p><p>صِف البيئة الصوتية الملائمة للمشهد: صوت حركة صغيرة أو أجواء الغرفة أو إيقاع مؤثر بيئي. واشرح الصوت الذي يجب أن يتزامن مع الفعل. واستمع إلى الكلام والمؤثرات الناتجة مع الصورة، مع التحقّق من إسناد الكلام إلى المتحدثين والكلمات والتوقيت. والصوت المتزامن جزء من المقطع المُولَّد، وليس إجابة نصية منفصلة.</p><h4>الحجم والمدة وبداية موجّهة بصورة</h4><p>أحجام المخرج الموثّقة للنموذج القياسي هي 720×1280 بالاتجاه العمودي و1280×720 بالاتجاه الأفقي. ويجب ألا تُنسب الأحجام الأعلى دقة في إصدار Pro إلى Sora 2 القياسي. فالحجم والمدة إعدادات صريحة في الطلب؛ وكتابة حجم مختلف أو طلب فيلم أطول في الموجّه لا يغيّر هذه الإعدادات. ويسرد مرجع الإنشاء إعدادات مقاطع بطول 4 و8 و12 ثانية، لذا اختر حدثًا قصيرًا ومحددًا عند إعداد اللقطة. ويوثّق مسار العمل الموسّع لدى المطوّر أيضًا إعدادات بطول 16 و20 ثانية.</p><p>تثبّت الصورة المرجعية الإطار الأول، ويصف النص ما يحدث بعده. ويدعم المطوّر مراجع JPEG وPNG وWebP، ويشترط مطابقة الصورة لحجم الفيديو المستهدف. أعدّ الموضوع والبيئة والتكوين في صورة البداية، ثم اطلب حركة محددة. وهذا مرجع للإطار الافتتاحي، وليس ضمانًا لمطابقة كل تفصيل طوال المقطع.</p><h4>شخصيات غير بشرية قابلة لإعادة الاستخدام</h4><p>يمكن لمسار العمل الموسّع لدى المطوّر إنشاء أصل لشخصية قابلة لإعادة الاستخدام من فيديو مرجعي قصير لحيوان أو تميمة أو جسم. وتطلب إرشادات الإعداد مقطع MP4 بطول يقارب ثانيتين إلى أربع ثوانٍ، بدقة 720p إلى 1080p، وبنسبة 16:9 أو 9:16. وتساعد مطابقة نسبة الأبعاد بين المصدر والمخرج على تجنّب المظهر الممدود. ويمكن لعملية التوليد الاستعانة بما يصل إلى شخصيتين.</p><p>احتفظ بمعرّف الشخصية واذكر اسمها في الموجّه؛ فتمرير المعرّف وحده لا يشكّل الإعداد الكامل الوارد في الدليل. ويمكن إرفاق أصول الشخصيات بعملية توليد موجّهة بصورة، لكن تمديدات الفيديو لا تقبلها. ويحظر المطوّر افتراضيًا رفع شخصيات تشبه البشر، ويرفض الصور المرجعية التي تحتوي على وجوه بشرية في مسار API الموثّق. أما ميزات الشخصيات الشخصية في تطبيق Sora فلها مسار منتج منفصل.</p><h4>مدّد مقطعًا مكتملًا أو عدّله</h4><p>يأخذ التمديد فيديو مصدريًا مكتملًا وموجّهًا للاستمرار، ويستخدم المقطع المصدري كاملًا كسياق للحركة واتجاه الكاميرا واستمرارية المشهد. ويصف الدليل إضافات تصل إلى 20 ثانية لكل تمديد. والمدخل الموثّق للتمديد هو الفيديو المصدري والنص؛ وتُستبعد مراجع الشخصيات أو الصور الإضافية من هذا الوضع. صِف كيف يستمر الفعل الحالي بدلًا من إدخال مشهد غير مرتبط دون انتقال.</p><p>يستهدف تحرير الفيديو تغييرًا واضحًا في مقطع موجود. ويمكن لتنقيح مركّز أن يغيّر لون جسم أو لوحة ألوان المشهد مع الاحتفاظ ببقية اللقطة. ويوصي دليل المطوّر بتغيير واحد محدد جيدًا في كل مرة، ويميّز بين تحرير فيديو مُولَّد ورفع لقطات عشوائية، وهو ما يخضع لشرط أهلية منفصل. احتفظ بالمصدر المكتمل وحدّد التنقيح الدقيق المطلوب قبل إجراء تعديل آخر.</p><h4>مهام التصيير والفيديو النهائي</h4><p>مسار الفيديو الموثّق لدى المطوّر غير متزامن: فقد تكون المهمة المُرسلة في قائمة الانتظار أو قيد التنفيذ قبل أن تكتمل أو تفشل. وتنتج المهمة المكتملة فيديو MP4؛ وتدعم أصول الصور المصغّرة وأوراق تجميع اللقطات المعاينة والتصفح. وأبقِ هوية المهمة مرتبطة بالموجّه والمراجع والأصول المُعادة. فالاستجابة الأولية للمهمة ليست الفيديو النهائي القابل للتشغيل.</p><p>يصف مسار التنزيل المعتاد مدة صلاحية قدرها ساعة واحدة لرابط التنزيل. ويُعدّ مسار الدُفعات الموسّع طلبات تصيير JSON مستقلة بمعرّفات عناصر ثابتة ومراجع مرفوعة، مع ربط نتيجة كل لقطة بها؛ ولأصوله المكتملة فترة تنزيل منفصلة تصل إلى 24 ساعة. احفظ المقطع النهائي سريعًا وافحص الصورة والصوت الفعليين قبل اعتباره محاولة مختارة.</p><p>تُلزم قيود المحتوى الموثّقة في API لدى المطوّر بأن تكون المادة مناسبة لجمهور دون 18 عامًا، وترفض الشخصيات أو الموسيقى المحمية بحقوق الطبع والنشر وتوليد أشخاص حقيقيين. أعدّ المشهد والمراجع وفقًا لذلك. والنتيجة المباشرة للنموذج هي فيديو مع صوت، وليست صورًا ثابتة مُولَّدة أو استجابة حوارية من أداة أو فيلمًا بلا حدود. احتفظ بهوية النموذج القياسي الدقيقة والمقطع المصدري المقبول عند متابعة مفهوم بصري.</p></div></details></section><section class=\"card-section\" data-card-section=\"methods\"><h3 tabindex=\"-1\">متاح في Ailoot · المدخلات والطرائق</h3><details class=\"card-method\" open><summary><b>Ailoot Ultra · Chat Completions</b> <code>POST /v1/chat/completions</code></summary><dl class=\"method-capabilities\"><div><dt>الإدخال</dt><dd><code>text</code></dd></div><div><dt>الإخراج</dt><dd><code>json</code>, <code>sse</code></dd></div><div><dt>صيغة الإخراج</dt><dd>JSON أو text/event-stream</dd></div></dl><div class=\"tw\" data-card-parameters data-typed-parameters><table><thead><tr><th>الحقل</th><th>النوع</th><th>المتطلب</th><th>القيم والحدود</th><th>القيمة الافتراضية</th></tr></thead><tbody><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"الحقل\" scope=\"row\"><span class=\"card-cell-label\">الحقل</span><code class=\"card-field-name\">model</code></th><td data-cell-label=\"النوع\" data-field-type><span class=\"card-cell-label\">النوع</span><code>string</code></td><td data-cell-label=\"المتطلب\"><span class=\"card-cell-label\">المتطلب</span>مطلوب</td><td data-cell-label=\"القيم والحدود\"><span class=\"card-cell-label\">القيم والحدود</span><div>sora-2</div></td><td data-cell-label=\"القيمة الافتراضية\" data-default=\"unspecified\"><span class=\"card-cell-label\">القيمة الافتراضية</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"الحقل\" scope=\"row\"><span class=\"card-cell-label\">الحقل</span><code class=\"card-field-name\">messages</code></th><td data-cell-label=\"النوع\" data-field-type><span class=\"card-cell-label\">النوع</span><code>message[]</code></td><td data-cell-label=\"المتطلب\"><span class=\"card-cell-label\">المتطلب</span>مطلوب</td><td data-cell-label=\"القيم والحدود\"><span class=\"card-cell-label\">القيم والحدود</span></td><td data-cell-label=\"القيمة الافتراضية\" data-default=\"unspecified\"><span class=\"card-cell-label\">القيمة الافتراضية</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"الحقل\" scope=\"row\"><span class=\"card-cell-label\">الحقل</span><code class=\"card-field-name\">messages[].role</code></th><td data-cell-label=\"النوع\" data-field-type><span class=\"card-cell-label\">النوع</span><code>string</code></td><td data-cell-label=\"المتطلب\"><span class=\"card-cell-label\">المتطلب</span>مطلوب</td><td data-cell-label=\"القيم والحدود\"><span class=\"card-cell-label\">القيم والحدود</span></td><td data-cell-label=\"القيمة الافتراضية\" data-default=\"unspecified\"><span class=\"card-cell-label\">القيمة الافتراضية</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"الحقل\" scope=\"row\"><span class=\"card-cell-label\">الحقل</span><code class=\"card-field-name\">messages[].content</code></th><td data-cell-label=\"النوع\" data-field-type><span class=\"card-cell-label\">النوع</span><code>string</code></td><td data-cell-label=\"المتطلب\"><span class=\"card-cell-label\">المتطلب</span>مطلوب</td><td data-cell-label=\"القيم والحدود\"><span class=\"card-cell-label\">القيم والحدود</span></td><td data-cell-label=\"القيمة الافتراضية\" data-default=\"unspecified\"><span class=\"card-cell-label\">القيمة الافتراضية</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"الحقل\" scope=\"row\"><span class=\"card-cell-label\">الحقل</span><code class=\"card-field-name\">stream</code></th><td data-cell-label=\"النوع\" data-field-type><span class=\"card-cell-label\">النوع</span><code>boolean</code></td><td data-cell-label=\"المتطلب\"><span class=\"card-cell-label\">المتطلب</span>اختياري</td><td data-cell-label=\"القيم والحدود\"><span class=\"card-cell-label\">القيم والحدود</span></td><td data-cell-label=\"القيمة الافتراضية\" data-default=\"known\"><span class=\"card-cell-label\">القيمة الافتراضية</span>false</td></tr></tbody></table></div><details class=\"card-about\" data-material-combinations><summary>تركيبات مواد الإدخال</summary><p class=\"note-s\"><b>owned_text_messages</b></p></details><details class=\"note-s\" data-method-contract><summary>معلمات الطريقة ودورة حياتها</summary><div class=\"tw\" data-card-table=\"contract\"><table><thead><tr><th>المعلمة</th><th>المواصفات</th></tr></thead><tbody><tr><th data-cell-label=\"المعلمة\" scope=\"row\"><span class=\"card-cell-label\">المعلمة</span><code>content_type</code></th><td data-cell-label=\"المواصفات\"><span class=\"card-cell-label\">المواصفات</span>application/json</td></tr><tr><th data-cell-label=\"المعلمة\" scope=\"row\"><span class=\"card-cell-label\">المعلمة</span><code>required</code></th><td data-cell-label=\"المواصفات\"><span class=\"card-cell-label\">المواصفات</span>model, messages</td></tr><tr><th data-cell-label=\"المعلمة\" scope=\"row\"><span class=\"card-cell-label\">المعلمة</span><code>material_types</code></th><td data-cell-label=\"المواصفات\"><span class=\"card-cell-label\">المواصفات</span>text</td></tr><tr><th data-cell-label=\"المعلمة\" scope=\"row\"><span class=\"card-cell-label\">المعلمة</span><code>messages</code></th><td data-cell-label=\"المواصفات\"><span class=\"card-cell-label\">المواصفات</span>مصفوفة رسائل تحتوي على role وعلى content كسلسلة نصية حرفية</td></tr><tr><th data-cell-label=\"المعلمة\" scope=\"row\"><span class=\"card-cell-label\">المعلمة</span><code>file_material</code></th><td data-cell-label=\"المواصفات\"><span class=\"card-cell-label\">المواصفات</span>يمكن إدراج محتوى UTF-8 الفعلي كسلسلة نصية حرفية؛ ولا يُفترض وجود مرجع ملف.</td></tr><tr><th data-cell-label=\"المعلمة\" scope=\"row\"><span class=\"card-cell-label\">المعلمة</span><code>optional_controls</code></th><td data-cell-label=\"المواصفات\"><span class=\"card-cell-label\">المواصفات</span>stream</td></tr></tbody></table></div><p>دورة الحياة: <code>synchronous_json_or_sse</code></p></details></details></section><section class=\"card-section\" data-card-section=\"pricing\"><h3 tabindex=\"-1\">الباقات</h3><div data-native-semantic-method=\"v1\" data-tariff-reference-only><p class=\"note-s\" data-rate-support-note>مراجع التسعير لا تضيف خيارات للطلب. المعلمات المدعومة مذكورة للطريقة المحددة.</p><dl data-price-conditions><dt>الوضع السريع</dt><dd>غير محدد <span class=\"note-s\">عند اختيار الوضع السريع</span></dd><dt>الوضع المرن</dt><dd>غير محدد <span class=\"note-s\">عند اختيار وضع flex</span></dd><dt>أقصى جهد للاستدلال</dt><dd>غير محدد <span class=\"note-s\">عندما يُطبَّق الضبط الافتراضي default مع أقصى جهد للاستدلال</span></dd></dl></div><div data-declared-tariff-pricing><h4>تعرفات Ailoot</h4><h4>الأسعار حسب الإعدادات</h4><div class=\"tw\" data-pricing-profiles><table><thead><tr><th>الإعدادات</th><th>جدول التعرفة</th><th>الرسوم</th></tr></thead><tbody><tr><th data-cell-label=\"الإعدادات\" scope=\"row\"><span class=\"card-cell-label\">الإعدادات</span>التعرفات الأساسية للرموز</th><td data-cell-label=\"جدول التعرفة\"><span class=\"card-cell-label\">جدول التعرفة</span>التعرفة الأساسية</td><td data-cell-label=\"الرسوم\"><span class=\"card-cell-label\">الرسوم</span><div><span>الإدخال · رموز الإدخال</span> <b>$0</b> <span class=\"price-unit\">/ 1K من الرموز</span></div><div><span>الإخراج · رموز الإخراج</span> <b>$0.2</b> <span class=\"price-unit\">/ 1K من الرموز</span></div><div><span>الإدخال · قراءة ذاكرة التخزين المؤقت</span> <b>$0</b> <span class=\"price-unit\">/ 1K من الرموز</span></div><div><span>الإدخال · الكتابة إلى ذاكرة التخزين المؤقت</span> <b>$0</b> <span class=\"price-unit\">/ 1K من الرموز</span></div><div><span>الإدخال · الكتابة إلى ذاكرة التخزين المؤقت، 1 ساعة</span> <b>—</b> <span class=\"price-unit\">/ 1K من الرموز</span></div></td></tr></tbody></table></div></div><p class=\"note-s\">تحجز Ailoot مبلغًا تقديريًا قبل الطلب. وبعد ظهور النتيجة، تُسوّي الرسوم النهائية بناءً على الاستخدام المقاس. وتستخدم تسوية البث سجل الاستخدام النهائي. <a href=\"/docs/ar/billing/reserve/\">كيفية عمل حجز المبلغ وتسوية الرسوم →</a></p></section><section class=\"card-section\" data-card-section=\"examples\"><h3 tabindex=\"-1\">أمثلة للطلبات</h3><h4>Ailoot Ultra · Chat Completions</h4><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"خيارات الشيفرة\"><button class=\"cg-tab\" id=\"model-code-2605-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-2605-panel-0\" aria-selected=\"true\" tabindex=\"0\">curl · استجابة JSON كاملة</button><button class=\"cg-tab\" id=\"model-code-2605-tab-1\" role=\"tab\" type=\"button\" aria-controls=\"model-code-2605-panel-1\" aria-selected=\"false\" tabindex=\"-1\">Python SDK · استجابة JSON كاملة</button><button class=\"cg-tab\" id=\"model-code-2605-tab-2\" role=\"tab\" type=\"button\" aria-controls=\"model-code-2605-panel-2\" aria-selected=\"false\" tabindex=\"-1\">curl · احتفظ ببث SSE</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"نسخ الشيفرة\"><svg class=\"cp\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><rect x=\"5.25\" y=\"5.25\" width=\"8.5\" height=\"8.5\" rx=\"1.75\"/><path d=\"M10.75 5.25V3.5a1.25 1.25 0 0 0-1.25-1.25H3.5A1.25 1.25 0 0 0 2.25 3.5v6a1.25 1.25 0 0 0 1.25 1.25h1.75\"/></svg><svg class=\"ok\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><path d=\"m3 8.5 3.25 3.25L13 5\"/></svg></button></div></div><div class=\"cg-body\"><div class=\"cg-pane\" id=\"model-code-2605-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-2605-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\npython3 - &lt;&lt;&#39;PY_REQUEST&#39;\nimport json,os\nfrom pathlib import Path\np=json.loads(&#39;{&quot;model&quot;:&quot;sora-2&quot;,&quot;messages&quot;:[{&quot;role&quot;:&quot;user&quot;,&quot;content&quot;:&quot;hello&quot;}],&quot;stream&quot;:false}&#39;)\n\nPath(&quot;request.json&quot;).write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \\\n  -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -H &#39;Content-Type: application/json&#39; \\\n  --data-binary @request.json -D response-headers.txt -o result.json\npython3 - &lt;&lt;&#39;PY_RESULT&#39;\nfrom pathlib import Path\nprint(Path(&quot;result.json&quot;).read_text(encoding=&quot;utf-8&quot;))\nPY_RESULT\n</code></pre></div><div class=\"cg-pane\" id=\"model-code-2605-panel-1\" role=\"tabpanel\" aria-labelledby=\"model-code-2605-tab-1\" hidden><pre data-lang=\"python\"><code>from openai import OpenAI\nimport os\n\nif not os.environ.get(&quot;AILOOT_API_KEY&quot;, &quot;&quot;).strip(): raise SystemExit(&quot;Set AILOOT_API_KEY before making a request&quot;)\nclient=OpenAI(base_url=&quot;https://api.ailoot.ai/v1&quot;,api_key=os.environ[&quot;AILOOT_API_KEY&quot;],max_retries=0)\nresult=client.chat.completions.create(model=&quot;sora-2&quot;, messages=[{&quot;role&quot;:&quot;user&quot;,&quot;content&quot;:&quot;hello&quot;}], stream=False)\nimport json\nfrom pathlib import Path\n\ndata = result.to_dict(mode=&quot;json&quot;)\nPath(&quot;result.json&quot;).write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding=&quot;utf-8&quot;)\nprint(json.dumps(data, ensure_ascii=False, indent=2))\n</code></pre></div><div class=\"cg-pane\" id=\"model-code-2605-panel-2\" role=\"tabpanel\" aria-labelledby=\"model-code-2605-tab-2\" hidden><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\npython3 - &lt;&lt;&#39;PY_REQUEST&#39;\nimport json,os\nfrom pathlib import Path\np=json.loads(&#39;{&quot;model&quot;:&quot;sora-2&quot;,&quot;messages&quot;:[{&quot;role&quot;:&quot;user&quot;,&quot;content&quot;:&quot;hello&quot;}],&quot;stream&quot;:true}&#39;)\n\nPath(&quot;request.json&quot;).write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \\\n  -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -H &#39;Content-Type: application/json&#39; \\\n  --data-binary @request.json -D response-headers.txt -o result.sse\n</code></pre></div></div></div></section><section class=\"card-section\" data-card-section=\"results\"><h3 tabindex=\"-1\">استلام النتائج وحفظها</h3><h4>Ailoot Ultra · Chat Completions</h4><p class=\"note-s\">JSON أو text/event-stream</p><div class=\"card-result-process\" data-all-results><h5>الاحتفاظ بكل النتائج المكتملة</h5><p class=\"note-s\">احتفظ بكل استجابة كاملة وكل ملف وجزء محتوى تم إرجاعه.</p><p class=\"note-s\">احتفظ ببايتات JSON أو SSE كاملة، وترويسات الاستجابة، والاستخدام المُعاد، وجميع حقول النتائج المقدَّمة. لا يُؤكَّد نوع مخرجات خاص بالنموذج.</p></div><div class=\"card-result-process\" data-unknown-recovery><h5>عند الحاجة إلى التحقق من الاستجابة الأصلية</h5><p class=\"note-s\">احتفظ بالاستجابة الأصلية وهوية المحاولة؛ ولا يُستنتج جواز الاستعلام عن مهمة جديدة أو إعادة الإرسال.</p></div><details class=\"card-about\" data-output-fields><summary>حقول الاستجابة</summary><div class=\"tw\" data-card-table=\"output\"><table><thead><tr><th>الحقل</th><th>النوع</th><th>المعنى</th></tr></thead><tbody><tr><th data-cell-label=\"الحقل\" scope=\"row\"><span class=\"card-cell-label\">الحقل</span><code class=\"card-field-name\">complete response JSON</code></th><td data-cell-label=\"النوع\" data-field-type><span class=\"card-cell-label\">النوع</span>object</td><td data-cell-label=\"المعنى\"><span class=\"card-cell-label\">المعنى</span>احتفظ بكل حقل مُعاد دون افتراض نوع نتائج خاص بالنموذج.</td></tr><tr><th data-cell-label=\"الحقل\" scope=\"row\"><span class=\"card-cell-label\">الحقل</span><code class=\"card-field-name\">SSE data events</code></th><td data-cell-label=\"النوع\" data-field-type><span class=\"card-cell-label\">النوع</span>stream</td><td data-cell-label=\"المعنى\"><span class=\"card-cell-label\">المعنى</span>احتفظ بكل حدث مُعاد وبكل علامة نهائية، دون الاكتفاء باختيار حقول النص.</td></tr></tbody></table></div></details></section><section class=\"card-section\" data-card-section=\"aliases\"><h3 tabindex=\"-1\">الأسماء البديلة</h3><h4>الأسماء البديلة للنموذج</h4><p class=\"note-s\"><span data-model-alias-route=\"Ultra\"><b>Ailoot Ultra</b> <a href=\"#m=sora-2&amp;route=Ultra&amp;caller=sora-2&amp;fmt=chat_completions\"><code>sora-2</code></a></span></p><h4>الأسماء البديلة لمسارات الطرائق</h4><p class=\"note-s\">استخدم مسارات الطرائق المعروضة أعلاه.</p><h4>معرّفات النماذج ذات الصلة IDs</h4><p class=\"note-s\"><a href=\"#m=sora-2&amp;route=Ultra&amp;caller=sora-2&amp;fmt=chat_completions\"><code>sora-2</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "sora-2",
        "fmt": "chat_completions",
        "http": "POST",
        "path": "/v1/chat/completions",
        "request_model_id": "sora-2",
        "route_label": "Ultra"
      },
      "method_key": "Ultra|chat_completions|/v1/chat/completions|sora-2",
      "ordinal": 0,
      "rawMethod": {
        "available": null,
        "cache_read": 0,
        "cache_write": 0,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "authentication": {
              "api_key_source": "AILOOT_API_KEY",
              "header": "Authorization: Bearer"
            },
            "example_body": {
              "messages": [
                {
                  "content": "hello",
                  "role": "user"
                }
              ],
              "model": "sora-2",
              "stream": false
            },
            "hints": [
              "Supply owned text as messages[].content.",
              "Use stream:false for JSON or stream:true for SSE; keep the complete response."
            ],
            "ignored_fields": [],
            "lifecycle": {
              "cancel": null,
              "create": {
                "http": "POST",
                "path": "/v1/chat/completions"
              },
              "job_read": null,
              "mode": "synchronous_json_or_sse",
              "status_poll": null,
              "unknown": "احتفظ بالاستجابة الأصلية وهوية المحاولة؛ ولا يُستنتج جواز الاستعلام عن مهمة جديدة أو إعادة الإرسال."
            },
            "material_combinations": [
              {
                "alternatives": [
                  "message[] with literal string content"
                ],
                "mode": "owned_text_messages"
              }
            ],
            "outputs": {
              "all_results": "احتفظ ببايتات JSON أو SSE كاملة، وترويسات الاستجابة، والاستخدام المُعاد، وجميع حقول النتائج المقدَّمة. لا يُؤكَّد نوع مخرجات خاص بالنموذج.",
              "family": "protocol",
              "fields": [
                {
                  "description": "احتفظ بكل حقل مُعاد دون افتراض نوع نتائج خاص بالنموذج.",
                  "name": "complete response JSON",
                  "type": "object"
                },
                {
                  "description": "احتفظ بكل حدث مُعاد وبكل علامة نهائية، دون الاكتفاء باختيار حقول النص.",
                  "name": "SSE data events",
                  "type": "stream"
                }
              ],
              "format": "JSON أو text/event-stream"
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "sora-2"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "messages",
                "required": true,
                "type": "message[]"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "messages[].role",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "messages[].content",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": false,
                "default_known": true,
                "enum": null,
                "enum_known": false,
                "name": "stream",
                "required": false,
                "type": "boolean"
              }
            ],
            "profile_binding": "Current d09 shared client interface only; model-specific provider output and acceptance are not claimed.",
            "request_schema": {
              "additionalProperties": false,
              "properties": {
                "messages": {
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "content": {
                        "oneOf": [
                          {
                            "type": "string"
                          },
                          {
                            "items": {
                              "oneOf": [
                                {
                                  "properties": {
                                    "text": {
                                      "type": "string"
                                    },
                                    "type": {
                                      "const": "text"
                                    }
                                  },
                                  "required": [
                                    "type",
                                    "text"
                                  ],
                                  "type": "object"
                                },
                                {
                                  "properties": {
                                    "image_url": {
                                      "properties": {
                                        "detail": {
                                          "type": "string"
                                        },
                                        "url": {
                                          "type": "string"
                                        }
                                      },
                                      "required": [
                                        "url"
                                      ],
                                      "type": "object"
                                    },
                                    "type": {
                                      "const": "image_url"
                                    }
                                  },
                                  "required": [
                                    "type",
                                    "image_url"
                                  ],
                                  "type": "object"
                                }
                              ]
                            },
                            "type": "array"
                          }
                        ]
                      },
                      "role": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "role",
                      "content"
                    ],
                    "type": "object"
                  },
                  "minItems": 1,
                  "type": "array"
                },
                "model": {
                  "enum": [
                    "sora-2"
                  ],
                  "type": "string"
                },
                "stream": {
                  "default": false,
                  "type": "boolean"
                }
              },
              "required": [
                "model",
                "messages"
              ],
              "type": "object"
            },
            "schema_template": {
              "messages": [
                {
                  "content": "hello",
                  "role": "user"
                }
              ],
              "model": "sora-2",
              "stream": false
            },
            "unsupported": [
              "Model-specific optional tools or structured-output controls are not part of this minimal profile.",
              "No image/audio/video request controls, dimensions or foreign model limits are inherited.",
              "No asynchronous media job route or manufacturer output capability is inferred."
            ]
          },
          "input": {
            "content_type": "application/json",
            "file_material": "يمكن إدراج محتوى UTF-8 الفعلي كسلسلة نصية حرفية؛ ولا يُفترض وجود مرجع ملف.",
            "material_types": [
              "text"
            ],
            "messages": "مصفوفة رسائل تحتوي على role وعلى content كسلسلة نصية حرفية",
            "optional_controls": [
              "stream"
            ],
            "required": [
              "model",
              "messages"
            ]
          },
          "lifecycle": {
            "cancel": null,
            "create": {
              "http": "POST",
              "path": "/v1/chat/completions"
            },
            "job_read": null,
            "mode": "synchronous_json_or_sse",
            "status_poll": null,
            "unknown": "Preserve the original response and attempt identity; no new job polling or resubmission is inferred."
          },
          "manufacturer_capability": null,
          "method": {
            "http": "POST",
            "path": "/v1/chat/completions"
          },
          "operation_modes": [
            "request_response",
            "response_stream"
          ],
          "output": {
            "all_results": "Retain the complete JSON or SSE bytes, response headers, returned usage and all supplied result fields. No model-specific output family is asserted.",
            "family": "protocol",
            "format": "JSON or text/event-stream",
            "manufacturer_output_family": null
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "التعرفات الأساسية للرموز",
            "units": [
              {
                "amount": "0",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": "0.2000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": "0.0002",
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": "0",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": "0",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\np=json.loads('{\"model\":\"sora-2\",\"messages\":[{\"role\":\"user\",\"content\":\"hello\"}],\"stream\":false}')\n\nPath(\"request.json\").write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o result.json\npython3 - <<'PY_RESULT'\nfrom pathlib import Path\nprint(Path(\"result.json\").read_text(encoding=\"utf-8\"))\nPY_RESULT\n",
            "label": "curl · complete JSON response",
            "language": "bash"
          },
          {
            "code": "from openai import OpenAI\nimport os\n\nif not os.environ.get(\"AILOOT_API_KEY\", \"\").strip(): raise SystemExit(\"Set AILOOT_API_KEY before making a request\")\nclient=OpenAI(base_url=\"https://api.ailoot.ai/v1\",api_key=os.environ[\"AILOOT_API_KEY\"],max_retries=0)\nresult=client.chat.completions.create(model=\"sora-2\", messages=[{\"role\":\"user\",\"content\":\"hello\"}], stream=False)\nimport json\nfrom pathlib import Path\n\ndata = result.to_dict(mode=\"json\")\nPath(\"result.json\").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding=\"utf-8\")\nprint(json.dumps(data, ensure_ascii=False, indent=2))\n",
            "label": "Python SDK · complete JSON response",
            "language": "python"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\np=json.loads('{\"model\":\"sora-2\",\"messages\":[{\"role\":\"user\",\"content\":\"hello\"}],\"stream\":true}')\n\nPath(\"request.json\").write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o result.sse\n",
            "label": "curl · preserve SSE stream",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "chat_completions",
        "hints": [
          "Supply owned text as messages[].content.",
          "Use stream:false for JSON or stream:true for SSE; keep the complete response."
        ],
        "http": "POST",
        "in": 0,
        "input": [
          "text"
        ],
        "label": "Chat Completions",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [],
        "out": 200,
        "output": [
          "json",
          "sse"
        ],
        "path": "/v1/chat/completions",
        "price_conditions": [
          {
            "label": "Fast mode",
            "value": "Not specified",
            "when": "When fast mode is selected"
          },
          {
            "label": "Flex mode",
            "value": "Not specified",
            "when": "When flex mode is selected"
          },
          {
            "label": "Maximum reasoning effort",
            "value": "Not specified",
            "when": "When maximum reasoning effort uses the default adjustment"
          }
        ],
        "pricing": {
          "billing_mode": "token",
          "image_input_price": null,
          "image_output_price": null,
          "per_request_price": null
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": "0",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": "0.2000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": "0.0002",
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": "0",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": "0",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          }
        ],
        "request_model_id": "sora-2",
        "route_label": "Ultra",
        "status_reads": [],
        "tiers": [],
        "units": [
          {
            "amount": "0",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": "0",
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": "0.2000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": "0.0002",
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": "0",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": "0",
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": "0",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": "0",
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_1h_price",
            "label": "Cache write, 1 hour",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "one_hour_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          }
        ]
      }
    },
    {
      "html": "<div class=\"sheet-head\"><span class=\"mav\" aria-hidden=\"true\">•</span><h2 id=\"sheet-title\">sora-2</h2><button class=\"icon-btn\" type=\"button\" data-close-sheet aria-label=\"إغلاق\">×</button></div><div class=\"idline\"><span>أخرى /</span><code>sora-2</code><button type=\"button\" id=\"copy-id\">نسخ ID</button></div><nav class=\"card-jump-nav\" aria-label=\"أقسام بطاقة النموذج\"><button type=\"button\" data-card-jump=\"overview\">البداية</button><button type=\"button\" data-card-jump=\"methods\">المدخلات والطرائق</button><button type=\"button\" data-card-jump=\"pricing\">الباقات</button><button type=\"button\" data-card-jump=\"examples\">أمثلة</button><button type=\"button\" data-card-jump=\"results\">النتائج</button><button type=\"button\" data-card-jump=\"aliases\">الأسماء البديلة</button></nav><div class=\"card-method-tabs\" role=\"tablist\" aria-label=\"طرائق API\"><button type=\"button\" role=\"tab\" tabindex=\"0\" aria-controls=\"card-method-content\" aria-selected=\"true\" id=\"card-method-tab-0\" data-card-method=\"Ultra|messages|/v1/messages|sora-2\">Messages</button><button type=\"button\" role=\"tab\" tabindex=\"-1\" aria-controls=\"card-method-content\" aria-selected=\"false\" id=\"card-method-tab-1\" data-card-method=\"Ultra|chat_completions|/v1/chat/completions|sora-2\">Chat Completions</button></div><div id=\"card-method-content\" role=\"tabpanel\" aria-labelledby=\"card-method-tab-0\"><section class=\"card-section\" data-card-section=\"overview\"><h3 tabindex=\"-1\">البداية</h3><p class=\"mdesc-full\">ينشئ Sora 2 فيديو بحوار ومؤثرات صوتية وصوت خلفي متزامنة انطلاقًا من نص أو صورة مرجعية. ويدعم الإصدار القياسي الاستكشاف البصري ومقاطع تطوير المفاهيم، مع مسارات عمل منفصلة لدى المطوّر للشخصيات غير البشرية القابلة لإعادة الاستخدام، وتمديد المقاطع، وتعديلات الفيديو المركّزة.</p><dl class=\"card-io\" data-card-io><div><dt>المدخلات المقبولة</dt><dd>النص</dd></div><div><dt>النتائج</dt><dd>json · sse</dd></div></dl><details class=\"card-about\"><summary>عن النموذج</summary><p class=\"note-s\" data-model-method-boundary>يغطي هذا الوصف قدرات النموذج. وترد أدناه المدخلات والمخرجات والخيارات المتاحة في Ailoot للطريقة المحددة.</p><div class=\"mabout\" id=\"m-about\"><p>Sora 2 هو نموذج OpenAI لتوليد الفيديو والصوت، وينشئ مقاطع حركية انطلاقًا من وصف مكتوب للمشهد أو صورة مرجعية. وهو يولّد التسلسل البصري مع الكلام والمؤثرات وصوت الخلفية المتزامنة. ويُقدَّم إصدار Sora 2 القياسي للاستكشاف البصري وتطوير المفاهيم والنماذج الأولية والمونتاج المبدئي. أما Sora 2 Pro فهو إصدار منفصل يستهدف دقة بصرية أعلى وإخراجًا نهائيًا بدقة أكبر.</p><h4>صِف لقطة يمكن رؤيتها وسماعها</h4><p>ينظّم دليل إعداد الموجّهات لدى المطوّر وصفًا عمليًا حول التأطير والموضوع والفعل والمكان والإضاءة. امنح المشهد أسلوبًا بصريًا متماسكًا، ثم صِف الحركة على مراحل واضحة. ويمكن لمفهوم منتج أصلي أن يُظهر جسمًا ميكانيكيًا صغيرًا يدور مرة واحدة على منضدة عمل بينما تقترب الكاميرا ببطء، مع ضوء نافذة ناعم وصوت محرّك خافت. حدّد ما ينبغي للمشاهد ملاحظته وكيف ينتهي الفعل.</p><p>اجعل حركة الكاميرا وفعل الموضوع في كل لقطة مفهومين. ويمكن تقسيم التسلسل المعقّد إلى وحدات لقطات متميزة، لكل منها تأطيرها وفعلها وإضاءتها. واحتفظ بتفاصيل الموضوع نفسها ولوحة الألوان عندما يُراد لعدة مقاطع أن تشكّل تسلسلًا واحدًا. ويؤكد الدليل أن اللقطات الأقصر تتبع التوجيه عمومًا بدرجة أوثق، وأن تكرار التوليد بالموجّه نفسه ينتج محاولات مختلفة.</p><p>يصف إعلان إطلاق النموذج تحسّن السلوك الفيزيائي والاستمرارية بين اللقطات، بما في ذلك الأساليب الواقعية والسينمائية والأنمي. وهذه قدرات مقصودة يجب توجيهها وفحصها. راجع الحركة والتلامس بين الأجسام والنِّسب والاستمرارية، بدلًا من افتراض أن الإطار الأول المقنع يضمن تسلسلًا متماسكًا. وإذا كان الفعل غير واضح، فبسّطه وامنحه بداية ونهاية مرئيتين.</p><h4>وجّه الحوار والصوت بصورة منفصلة</h4><p>حدّد الجمل المنطوقة منفصلةً عن الوصف البصري، واستخدم تسميات ثابتة للمتحدثين. واجعل الحوار قصيرًا بما يكفي ليتناسب مع الفعل وطول المقطع المقصود. وفي رسوم متحركة بشخصيتين، بدّل بين سؤال وجواب قصيرين بدلًا من مطالبة لقطة قصيرة باستيعاب خطاب طويل. ويحذّر الدليل من أن الحوار الطويل والمعقّد قد يخل بالإيقاع والتزامن.</p><p>صِف البيئة الصوتية الملائمة للمشهد: صوت حركة صغيرة أو أجواء الغرفة أو إيقاع مؤثر بيئي. واشرح الصوت الذي يجب أن يتزامن مع الفعل. واستمع إلى الكلام والمؤثرات الناتجة مع الصورة، مع التحقّق من إسناد الكلام إلى المتحدثين والكلمات والتوقيت. والصوت المتزامن جزء من المقطع المُولَّد، وليس إجابة نصية منفصلة.</p><h4>الحجم والمدة وبداية موجّهة بصورة</h4><p>أحجام المخرج الموثّقة للنموذج القياسي هي 720×1280 بالاتجاه العمودي و1280×720 بالاتجاه الأفقي. ويجب ألا تُنسب الأحجام الأعلى دقة في إصدار Pro إلى Sora 2 القياسي. فالحجم والمدة إعدادات صريحة في الطلب؛ وكتابة حجم مختلف أو طلب فيلم أطول في الموجّه لا يغيّر هذه الإعدادات. ويسرد مرجع الإنشاء إعدادات مقاطع بطول 4 و8 و12 ثانية، لذا اختر حدثًا قصيرًا ومحددًا عند إعداد اللقطة. ويوثّق مسار العمل الموسّع لدى المطوّر أيضًا إعدادات بطول 16 و20 ثانية.</p><p>تثبّت الصورة المرجعية الإطار الأول، ويصف النص ما يحدث بعده. ويدعم المطوّر مراجع JPEG وPNG وWebP، ويشترط مطابقة الصورة لحجم الفيديو المستهدف. أعدّ الموضوع والبيئة والتكوين في صورة البداية، ثم اطلب حركة محددة. وهذا مرجع للإطار الافتتاحي، وليس ضمانًا لمطابقة كل تفصيل طوال المقطع.</p><h4>شخصيات غير بشرية قابلة لإعادة الاستخدام</h4><p>يمكن لمسار العمل الموسّع لدى المطوّر إنشاء أصل لشخصية قابلة لإعادة الاستخدام من فيديو مرجعي قصير لحيوان أو تميمة أو جسم. وتطلب إرشادات الإعداد مقطع MP4 بطول يقارب ثانيتين إلى أربع ثوانٍ، بدقة 720p إلى 1080p، وبنسبة 16:9 أو 9:16. وتساعد مطابقة نسبة الأبعاد بين المصدر والمخرج على تجنّب المظهر الممدود. ويمكن لعملية التوليد الاستعانة بما يصل إلى شخصيتين.</p><p>احتفظ بمعرّف الشخصية واذكر اسمها في الموجّه؛ فتمرير المعرّف وحده لا يشكّل الإعداد الكامل الوارد في الدليل. ويمكن إرفاق أصول الشخصيات بعملية توليد موجّهة بصورة، لكن تمديدات الفيديو لا تقبلها. ويحظر المطوّر افتراضيًا رفع شخصيات تشبه البشر، ويرفض الصور المرجعية التي تحتوي على وجوه بشرية في مسار API الموثّق. أما ميزات الشخصيات الشخصية في تطبيق Sora فلها مسار منتج منفصل.</p><h4>مدّد مقطعًا مكتملًا أو عدّله</h4><p>يأخذ التمديد فيديو مصدريًا مكتملًا وموجّهًا للاستمرار، ويستخدم المقطع المصدري كاملًا كسياق للحركة واتجاه الكاميرا واستمرارية المشهد. ويصف الدليل إضافات تصل إلى 20 ثانية لكل تمديد. والمدخل الموثّق للتمديد هو الفيديو المصدري والنص؛ وتُستبعد مراجع الشخصيات أو الصور الإضافية من هذا الوضع. صِف كيف يستمر الفعل الحالي بدلًا من إدخال مشهد غير مرتبط دون انتقال.</p><p>يستهدف تحرير الفيديو تغييرًا واضحًا في مقطع موجود. ويمكن لتنقيح مركّز أن يغيّر لون جسم أو لوحة ألوان المشهد مع الاحتفاظ ببقية اللقطة. ويوصي دليل المطوّر بتغيير واحد محدد جيدًا في كل مرة، ويميّز بين تحرير فيديو مُولَّد ورفع لقطات عشوائية، وهو ما يخضع لشرط أهلية منفصل. احتفظ بالمصدر المكتمل وحدّد التنقيح الدقيق المطلوب قبل إجراء تعديل آخر.</p><h4>مهام التصيير والفيديو النهائي</h4><p>مسار الفيديو الموثّق لدى المطوّر غير متزامن: فقد تكون المهمة المُرسلة في قائمة الانتظار أو قيد التنفيذ قبل أن تكتمل أو تفشل. وتنتج المهمة المكتملة فيديو MP4؛ وتدعم أصول الصور المصغّرة وأوراق تجميع اللقطات المعاينة والتصفح. وأبقِ هوية المهمة مرتبطة بالموجّه والمراجع والأصول المُعادة. فالاستجابة الأولية للمهمة ليست الفيديو النهائي القابل للتشغيل.</p><p>يصف مسار التنزيل المعتاد مدة صلاحية قدرها ساعة واحدة لرابط التنزيل. ويُعدّ مسار الدُفعات الموسّع طلبات تصيير JSON مستقلة بمعرّفات عناصر ثابتة ومراجع مرفوعة، مع ربط نتيجة كل لقطة بها؛ ولأصوله المكتملة فترة تنزيل منفصلة تصل إلى 24 ساعة. احفظ المقطع النهائي سريعًا وافحص الصورة والصوت الفعليين قبل اعتباره محاولة مختارة.</p><p>تُلزم قيود المحتوى الموثّقة في API لدى المطوّر بأن تكون المادة مناسبة لجمهور دون 18 عامًا، وترفض الشخصيات أو الموسيقى المحمية بحقوق الطبع والنشر وتوليد أشخاص حقيقيين. أعدّ المشهد والمراجع وفقًا لذلك. والنتيجة المباشرة للنموذج هي فيديو مع صوت، وليست صورًا ثابتة مُولَّدة أو استجابة حوارية من أداة أو فيلمًا بلا حدود. احتفظ بهوية النموذج القياسي الدقيقة والمقطع المصدري المقبول عند متابعة مفهوم بصري.</p></div></details></section><section class=\"card-section\" data-card-section=\"methods\"><h3 tabindex=\"-1\">متاح في Ailoot · المدخلات والطرائق</h3><details class=\"card-method\" open><summary><b>Ailoot Ultra · رسائل Anthropic</b> <code>POST /v1/messages</code></summary><dl class=\"method-capabilities\"><div><dt>الإدخال</dt><dd><code>text</code></dd></div><div><dt>الإخراج</dt><dd><code>json</code>, <code>sse</code></dd></div><div><dt>صيغة الإخراج</dt><dd>JSON أو SSE</dd></div></dl><div class=\"tw\" data-card-parameters data-typed-parameters><table><thead><tr><th>الحقل</th><th>النوع</th><th>المتطلب</th><th>القيم والحدود</th><th>القيمة الافتراضية</th></tr></thead><tbody><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"الحقل\" scope=\"row\"><span class=\"card-cell-label\">الحقل</span><code class=\"card-field-name\">model</code></th><td data-cell-label=\"النوع\" data-field-type><span class=\"card-cell-label\">النوع</span><code>string</code></td><td data-cell-label=\"المتطلب\"><span class=\"card-cell-label\">المتطلب</span>مطلوب</td><td data-cell-label=\"القيم والحدود\"><span class=\"card-cell-label\">القيم والحدود</span><div>sora-2</div></td><td data-cell-label=\"القيمة الافتراضية\" data-default=\"unspecified\"><span class=\"card-cell-label\">القيمة الافتراضية</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"الحقل\" scope=\"row\"><span class=\"card-cell-label\">الحقل</span><code class=\"card-field-name\">messages</code></th><td data-cell-label=\"النوع\" data-field-type><span class=\"card-cell-label\">النوع</span><code>message[]</code></td><td data-cell-label=\"المتطلب\"><span class=\"card-cell-label\">المتطلب</span>مطلوب</td><td data-cell-label=\"القيم والحدود\"><span class=\"card-cell-label\">القيم والحدود</span></td><td data-cell-label=\"القيمة الافتراضية\" data-default=\"unspecified\"><span class=\"card-cell-label\">القيمة الافتراضية</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"الحقل\" scope=\"row\"><span class=\"card-cell-label\">الحقل</span><code class=\"card-field-name\">messages[].role</code></th><td data-cell-label=\"النوع\" data-field-type><span class=\"card-cell-label\">النوع</span><code>string</code></td><td data-cell-label=\"المتطلب\"><span class=\"card-cell-label\">المتطلب</span>مطلوب</td><td data-cell-label=\"القيم والحدود\"><span class=\"card-cell-label\">القيم والحدود</span><div>user, assistant</div></td><td data-cell-label=\"القيمة الافتراضية\" data-default=\"unspecified\"><span class=\"card-cell-label\">القيمة الافتراضية</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"الحقل\" scope=\"row\"><span class=\"card-cell-label\">الحقل</span><code class=\"card-field-name\">messages[].content</code></th><td data-cell-label=\"النوع\" data-field-type><span class=\"card-cell-label\">النوع</span><code>string</code></td><td data-cell-label=\"المتطلب\"><span class=\"card-cell-label\">المتطلب</span>مطلوب</td><td data-cell-label=\"القيم والحدود\"><span class=\"card-cell-label\">القيم والحدود</span></td><td data-cell-label=\"القيمة الافتراضية\" data-default=\"unspecified\"><span class=\"card-cell-label\">القيمة الافتراضية</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"الحقل\" scope=\"row\"><span class=\"card-cell-label\">الحقل</span><code class=\"card-field-name\">max_tokens</code></th><td data-cell-label=\"النوع\" data-field-type><span class=\"card-cell-label\">النوع</span><code>integer</code></td><td data-cell-label=\"المتطلب\"><span class=\"card-cell-label\">المتطلب</span>مطلوب</td><td data-cell-label=\"القيم والحدود\"><span class=\"card-cell-label\">القيم والحدود</span></td><td data-cell-label=\"القيمة الافتراضية\" data-default=\"unspecified\"><span class=\"card-cell-label\">القيمة الافتراضية</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"الحقل\" scope=\"row\"><span class=\"card-cell-label\">الحقل</span><code class=\"card-field-name\">stream</code></th><td data-cell-label=\"النوع\" data-field-type><span class=\"card-cell-label\">النوع</span><code>boolean</code></td><td data-cell-label=\"المتطلب\"><span class=\"card-cell-label\">المتطلب</span>اختياري</td><td data-cell-label=\"القيم والحدود\"><span class=\"card-cell-label\">القيم والحدود</span></td><td data-cell-label=\"القيمة الافتراضية\" data-default=\"known\"><span class=\"card-cell-label\">القيمة الافتراضية</span>false</td></tr></tbody></table></div><details class=\"card-about\" data-material-combinations><summary>تركيبات مواد الإدخال</summary><p class=\"note-s\"><b>النص</b> · نص UTF-8</p><p class=\"note-s\"><code>سلسلة نصية messages[].content</code></p></details><details class=\"note-s\" data-method-contract><summary>معلمات الطريقة ودورة حياتها</summary><div class=\"tw\" data-card-table=\"contract\"><table><thead><tr><th>المعلمة</th><th>المواصفات</th></tr></thead><tbody><tr><th data-cell-label=\"المعلمة\" scope=\"row\"><span class=\"card-cell-label\">المعلمة</span><code>content_type</code></th><td data-cell-label=\"المواصفات\"><span class=\"card-cell-label\">المواصفات</span>application/json</td></tr><tr><th data-cell-label=\"المعلمة\" scope=\"row\"><span class=\"card-cell-label\">المعلمة</span><code>required</code></th><td data-cell-label=\"المواصفات\"><span class=\"card-cell-label\">المواصفات</span>model, messages, max_tokens</td></tr><tr><th data-cell-label=\"المعلمة\" scope=\"row\"><span class=\"card-cell-label\">المعلمة</span><code>optional_controls</code></th><td data-cell-label=\"المواصفات\"><span class=\"card-cell-label\">المواصفات</span>stream</td></tr><tr><th data-cell-label=\"المعلمة\" scope=\"row\"><span class=\"card-cell-label\">المعلمة</span><code>material_types</code></th><td data-cell-label=\"المواصفات\"><span class=\"card-cell-label\">المواصفات</span>text</td></tr><tr><th data-cell-label=\"المعلمة\" scope=\"row\"><span class=\"card-cell-label\">المعلمة</span><code>text_file_material</code></th><td data-cell-label=\"المواصفات\"><span class=\"card-cell-label\">المواصفات</span>اقرأ مستند UTF-8 الفعلي وضع نصه في الإدخال المحدد أو السلسلة النصية لمحتوى الرسالة.</td></tr></tbody></table></div><p>دورة الحياة: <code>synchronous_or_streamed</code></p></details></details></section><section class=\"card-section\" data-card-section=\"pricing\"><h3 tabindex=\"-1\">الباقات</h3><div data-native-semantic-method=\"v1\" data-tariff-reference-only><p class=\"note-s\" data-rate-support-note>مراجع التسعير لا تضيف خيارات للطلب. المعلمات المدعومة مذكورة للطريقة المحددة.</p><dl data-price-conditions><dt>الوضع السريع</dt><dd>غير محدد <span class=\"note-s\">عند اختيار الوضع السريع</span></dd><dt>الوضع المرن</dt><dd>غير محدد <span class=\"note-s\">عند اختيار وضع flex</span></dd><dt>أقصى جهد للاستدلال</dt><dd>غير محدد <span class=\"note-s\">عندما يُطبَّق الضبط الافتراضي default مع أقصى جهد للاستدلال</span></dd></dl></div><div data-declared-tariff-pricing><h4>تعرفات Ailoot</h4><h4>الأسعار حسب الإعدادات</h4><div class=\"tw\" data-pricing-profiles><table><thead><tr><th>الإعدادات</th><th>جدول التعرفة</th><th>الرسوم</th></tr></thead><tbody><tr><th data-cell-label=\"الإعدادات\" scope=\"row\"><span class=\"card-cell-label\">الإعدادات</span>التعرفات الأساسية للرموز</th><td data-cell-label=\"جدول التعرفة\"><span class=\"card-cell-label\">جدول التعرفة</span>التعرفة الأساسية</td><td data-cell-label=\"الرسوم\"><span class=\"card-cell-label\">الرسوم</span><div><span>الإدخال · رموز الإدخال</span> <b>$0</b> <span class=\"price-unit\">/ 1K من الرموز</span></div><div><span>الإخراج · رموز الإخراج</span> <b>$0.2</b> <span class=\"price-unit\">/ 1K من الرموز</span></div><div><span>الإدخال · قراءة ذاكرة التخزين المؤقت</span> <b>$0</b> <span class=\"price-unit\">/ 1K من الرموز</span></div><div><span>الإدخال · الكتابة إلى ذاكرة التخزين المؤقت</span> <b>$0</b> <span class=\"price-unit\">/ 1K من الرموز</span></div><div><span>الإدخال · الكتابة إلى ذاكرة التخزين المؤقت، 1 ساعة</span> <b>—</b> <span class=\"price-unit\">/ 1K من الرموز</span></div></td></tr></tbody></table></div></div><p class=\"note-s\">تحجز Ailoot مبلغًا تقديريًا قبل الطلب. وبعد ظهور النتيجة، تُسوّي الرسوم النهائية بناءً على الاستخدام المقاس. وتستخدم تسوية البث سجل الاستخدام النهائي. <a href=\"/docs/ar/billing/reserve/\">كيفية عمل حجز المبلغ وتسوية الرسوم →</a></p></section><section class=\"card-section\" data-card-section=\"examples\"><h3 tabindex=\"-1\">أمثلة للطلبات</h3><h4>Ailoot Ultra · رسائل Anthropic</h4><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"خيارات الشيفرة\"><button class=\"cg-tab\" id=\"model-code-2606-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-2606-panel-0\" aria-selected=\"true\" tabindex=\"0\">جسم طلب JSON مكتمل بالحد الأدنى</button><button class=\"cg-tab\" id=\"model-code-2606-tab-1\" role=\"tab\" type=\"button\" aria-controls=\"model-code-2606-panel-1\" aria-selected=\"false\" tabindex=\"-1\">curl · استخدم مستندك بترميز UTF-8</button><button class=\"cg-tab\" id=\"model-code-2606-tab-2\" role=\"tab\" type=\"button\" aria-controls=\"model-code-2606-panel-2\" aria-selected=\"false\" tabindex=\"-1\">Python · احفظ النتيجة كاملة</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"نسخ الشيفرة\"><svg class=\"cp\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><rect x=\"5.25\" y=\"5.25\" width=\"8.5\" height=\"8.5\" rx=\"1.75\"/><path d=\"M10.75 5.25V3.5a1.25 1.25 0 0 0-1.25-1.25H3.5A1.25 1.25 0 0 0 2.25 3.5v6a1.25 1.25 0 0 0 1.25 1.25h1.75\"/></svg><svg class=\"ok\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><path d=\"m3 8.5 3.25 3.25L13 5\"/></svg></button></div></div><div class=\"cg-body\"><div class=\"cg-pane\" id=\"model-code-2606-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-2606-tab-0\"><pre data-lang=\"json\"><code>{\n  &quot;model&quot;: &quot;sora-2&quot;,\n  &quot;max_tokens&quot;: 128,\n  &quot;messages&quot;: [\n    {\n      &quot;role&quot;: &quot;user&quot;,\n      &quot;content&quot;: &quot;Summarize the incident report.&quot;\n    }\n  ],\n  &quot;stream&quot;: false\n}</code></pre></div><div class=\"cg-pane\" id=\"model-code-2606-panel-1\" role=\"tabpanel\" aria-labelledby=\"model-code-2606-tab-1\" hidden><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\n: &quot;${AILOOT_TEXT_FILE:?Set your actual UTF-8 document}&quot;\nexport AILOOT_TEXT_FILE\npython3 - &lt;&lt;&#39;PY_REQUEST&#39;\nimport json, os\nfrom pathlib import Path\n\nsource_file = Path(os.environ[&#39;AILOOT_TEXT_FILE&#39;])\nif not source_file.is_file():\n    raise SystemExit(&#39;Set AILOOT_TEXT_FILE to your actual UTF-8 document&#39;)\ntext = source_file.read_text(encoding=&#39;utf-8&#39;)\nif not text.strip():\n    raise SystemExit(&#39;Choose a document containing text&#39;)\npayload = {&#39;model&#39;: &#39;sora-2&#39;, &#39;max_tokens&#39;: 128, &#39;messages&#39;: [{&#39;role&#39;: &#39;user&#39;, &#39;content&#39;: &#39;Summarize the incident report.&#39;}]}\npayload[&#39;messages&#39;][0][&#39;content&#39;] = &#39;Summarize this material and quote supporting source passages.\\n\\n&#39; + text\nPath(&#39;request.json&#39;).write_text(json.dumps(payload, ensure_ascii=False), encoding=&#39;utf-8&#39;)\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \\\n  -H &quot;x-api-key: $AILOOT_API_KEY&quot; -H &#39;anthropic-version: 2023-06-01&#39; -H &#39;Content-Type: application/json&#39; \\\n  --data-binary @request.json -D response-headers.txt -o result.json\npython3 - &lt;&lt;&#39;PY_RESULT&#39;\nimport json\nfrom pathlib import Path\n\nresult = json.loads(Path(&#39;result.json&#39;).read_text(encoding=&#39;utf-8&#39;))\nprint(json.dumps(result, ensure_ascii=False, indent=2))\nPY_RESULT\n</code></pre></div><div class=\"cg-pane\" id=\"model-code-2606-panel-2\" role=\"tabpanel\" aria-labelledby=\"model-code-2606-tab-2\" hidden><pre data-lang=\"python\"><code>import json, os\nfrom pathlib import Path\n\nsource_file = Path(os.environ[&#39;AILOOT_TEXT_FILE&#39;])\nif not source_file.is_file():\n    raise SystemExit(&#39;Set AILOOT_TEXT_FILE to your actual UTF-8 document&#39;)\ntext = source_file.read_text(encoding=&#39;utf-8&#39;)\nif not text.strip():\n    raise SystemExit(&#39;Choose a document containing text&#39;)\npayload = {&#39;model&#39;: &#39;sora-2&#39;, &#39;max_tokens&#39;: 128, &#39;messages&#39;: [{&#39;role&#39;: &#39;user&#39;, &#39;content&#39;: &#39;Summarize the incident report.&#39;}]}\npayload[&#39;messages&#39;][0][&#39;content&#39;] = &#39;Summarize this material and quote supporting source passages.\\n\\n&#39; + text\nfrom urllib.request import Request, urlopen\nfrom urllib.error import HTTPError\n\napi_key = os.environ[&#39;AILOOT_API_KEY&#39;]\nif not api_key.strip():\n    raise SystemExit(&#39;Set AILOOT_API_KEY before making a request&#39;)\nheaders = {&#39;x-api-key&#39;: &#39;PLACEHOLDER_KEY&#39;, &#39;anthropic-version&#39;: &#39;2023-06-01&#39;, &#39;Content-Type&#39;: &#39;application/json&#39;}\nheaders[&#39;x-api-key&#39;] = api_key\nrequest = Request(&#39;https://api.ailoot.ai/v1/messages&#39;, data=json.dumps(payload, ensure_ascii=False).encode(&#39;utf-8&#39;), headers=headers, method=&#39;POST&#39;)\ntry:\n    with urlopen(request, timeout=120) as response:\n        raw = response.read()\n        Path(&#39;response-headers.txt&#39;).write_text(str(response.headers), encoding=&#39;utf-8&#39;)\nexcept HTTPError as error:\n    Path(&#39;result.json&#39;).write_bytes(error.read())\n    Path(&#39;response-headers.txt&#39;).write_text(str(error.headers), encoding=&#39;utf-8&#39;)\n    raise\nPath(&#39;result.json&#39;).write_bytes(raw)\nimport json\nfrom pathlib import Path\n\nresult = json.loads(Path(&#39;result.json&#39;).read_text(encoding=&#39;utf-8&#39;))\nprint(json.dumps(result, ensure_ascii=False, indent=2))\n</code></pre></div></div></div></section><section class=\"card-section\" data-card-section=\"results\"><h3 tabindex=\"-1\">استلام النتائج وحفظها</h3><h4>Ailoot Ultra · رسائل Anthropic</h4><p class=\"note-s\">JSON أو SSE</p><div class=\"card-result-process\" data-all-results><h5>الاحتفاظ بكل النتائج المكتملة</h5><p class=\"note-s\">احتفظ بكل استجابة كاملة وكل ملف وجزء محتوى تم إرجاعه.</p><p class=\"note-s\">احتفظ بكل كتل المحتوى وتوقيعات التفكير ومعرّفات استخدام الأدوات الفعلية. جمّع جميع تحديثات كتل SSE؛ فأول كتلة نصية ليست الإخراج الكامل.</p></div><div class=\"card-result-process\" data-unknown-recovery><h5>عند الحاجة إلى التحقق من الاستجابة الأصلية</h5><p class=\"note-s\">احتفظ بمعرّفات الطلبات/الاستجابات والترويسات. لا يُقدَّم URL عام لاسترجاع مهمة نصية.</p></div><details class=\"card-about\" data-output-fields><summary>حقول الاستجابة</summary><div class=\"tw\" data-card-table=\"output\"><table><thead><tr><th>الحقل</th><th>النوع</th></tr></thead><tbody><tr><th data-cell-label=\"الحقل\" scope=\"row\"><span class=\"card-cell-label\">الحقل</span><code class=\"card-field-name\">id</code></th><td data-cell-label=\"النوع\" data-field-type><span class=\"card-cell-label\">النوع</span>string</td></tr><tr><th data-cell-label=\"الحقل\" scope=\"row\"><span class=\"card-cell-label\">الحقل</span><code class=\"card-field-name\">model</code></th><td data-cell-label=\"النوع\" data-field-type><span class=\"card-cell-label\">النوع</span>string</td></tr><tr><th data-cell-label=\"الحقل\" scope=\"row\"><span class=\"card-cell-label\">الحقل</span><code class=\"card-field-name\">content[]</code></th><td data-cell-label=\"النوع\" data-field-type><span class=\"card-cell-label\">النوع</span>text|thinking|tool_use|other content block</td></tr><tr><th data-cell-label=\"الحقل\" scope=\"row\"><span class=\"card-cell-label\">الحقل</span><code class=\"card-field-name\">stop_reason</code></th><td data-cell-label=\"النوع\" data-field-type><span class=\"card-cell-label\">النوع</span>string|null</td></tr><tr><th data-cell-label=\"الحقل\" scope=\"row\"><span class=\"card-cell-label\">الحقل</span><code class=\"card-field-name\">usage</code></th><td data-cell-label=\"النوع\" data-field-type><span class=\"card-cell-label\">النوع</span>object</td></tr></tbody></table></div></details><details class=\"card-about\" data-method-errors><summary>الأخطاء والخطوات التالية</summary><div class=\"tw\" data-card-table=\"errors\"><table><thead><tr><th>الاستجابة</th><th>الشرط</th><th>الخطوة التالية</th></tr></thead><tbody><tr><th data-cell-label=\"الاستجابة\" scope=\"row\"><span class=\"card-cell-label\">الاستجابة</span>⁦400⁩ · <code>invalid_request_error</code></th><td data-cell-label=\"الشرط\"><span class=\"card-cell-label\">الشرط</span>حقول مطلوبة أو تمثيل مادة أو قيمة معلمة غير صحيحة</td><td data-cell-label=\"الخطوة التالية\"><span class=\"card-cell-label\">الخطوة التالية</span>صحّح الحقول المحددة قبل طلب إنشاء جديد.</td></tr></tbody></table></div></details></section><section class=\"card-section\" data-card-section=\"aliases\"><h3 tabindex=\"-1\">الأسماء البديلة</h3><h4>الأسماء البديلة للنموذج</h4><p class=\"note-s\"><span data-model-alias-route=\"Ultra\"><b>Ailoot Ultra</b> <a href=\"#m=sora-2&amp;route=Ultra&amp;caller=sora-2&amp;fmt=messages\"><code>sora-2</code></a></span></p><h4>الأسماء البديلة لمسارات الطرائق</h4><p class=\"note-s\">استخدم مسارات الطرائق المعروضة أعلاه.</p><h4>معرّفات النماذج ذات الصلة IDs</h4><p class=\"note-s\"><a href=\"#m=sora-2&amp;route=Ultra&amp;caller=sora-2&amp;fmt=messages\"><code>sora-2</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "sora-2",
        "fmt": "messages",
        "http": "POST",
        "path": "/v1/messages",
        "request_model_id": "sora-2",
        "route_label": "Ultra"
      },
      "method_key": "Ultra|messages|/v1/messages|sora-2",
      "ordinal": 1,
      "rawMethod": {
        "available": null,
        "cache_read": 0,
        "cache_write": 0,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "authentication": {
              "api_key_source": "AILOOT_API_KEY",
              "headers": [
                "Authorization: Bearer",
                "x-api-key",
                "anthropic-version"
              ],
              "version_example": "2023-06-01"
            },
            "errors": [
              {
                "code": null,
                "condition": "حقول مطلوبة أو تمثيل مادة أو قيمة معلمة غير صحيحة",
                "http_status": 400,
                "recovery": "صحّح الحقول المحددة قبل طلب إنشاء جديد.",
                "type": "invalid_request_error"
              }
            ],
            "example_body": {
              "max_tokens": 128,
              "messages": [
                {
                  "content": "Summarize the incident report.",
                  "role": "user"
                }
              ],
              "model": "sora-2",
              "stream": false
            },
            "lifecycle": {
              "create": {
                "http": "POST",
                "path": "/v1/messages"
              },
              "job_read": null,
              "mode": "synchronous_or_streamed",
              "unknown": "احتفظ بمعرّفات الطلبات/الاستجابات والترويسات. لا يُقدَّم URL عام لاسترجاع مهمة نصية."
            },
            "material_combinations": [
              {
                "mode": "text",
                "representation": "سلسلة نصية messages[].content",
                "required_material": "نص UTF-8"
              }
            ],
            "operation_modes": [
              "synchronous_json",
              "streamed_SSE"
            ],
            "outputs": {
              "all_results": "احتفظ بكل كتل المحتوى وتوقيعات التفكير ومعرّفات استخدام الأدوات الفعلية. جمّع جميع تحديثات كتل SSE؛ فأول كتلة نصية ليست الإخراج الكامل.",
              "family": "protocol",
              "fields": [
                {
                  "description": null,
                  "name": "id",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "model",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "content[]",
                  "type": "text|thinking|tool_use|other content block"
                },
                {
                  "description": null,
                  "name": "stop_reason",
                  "type": "string|null"
                },
                {
                  "description": null,
                  "name": "usage",
                  "type": "object"
                }
              ],
              "format": "JSON أو SSE"
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "sora-2"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "messages",
                "required": true,
                "type": "message[]"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "user",
                  "assistant"
                ],
                "enum_known": true,
                "name": "messages[].role",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "messages[].content",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "max_tokens",
                "required": true,
                "type": "integer"
              },
              {
                "availability": "source_interface",
                "default": false,
                "default_known": true,
                "enum": null,
                "enum_known": false,
                "name": "stream",
                "required": false,
                "type": "boolean"
              }
            ],
            "profile_binding": "Documented current stock Messages bridge; optional model capabilities are separate from this minimal text request.",
            "request_schema": {
              "additionalProperties": false,
              "properties": {
                "max_tokens": {
                  "minimum": 1,
                  "type": "integer"
                },
                "messages": {
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "content": {
                        "oneOf": [
                          {
                            "type": "string"
                          },
                          {
                            "items": {
                              "oneOf": [
                                {
                                  "properties": {
                                    "text": {
                                      "type": "string"
                                    },
                                    "type": {
                                      "const": "text"
                                    }
                                  },
                                  "required": [
                                    "type",
                                    "text"
                                  ],
                                  "type": "object"
                                },
                                {
                                  "properties": {
                                    "source": {
                                      "oneOf": [
                                        {
                                          "properties": {
                                            "type": {
                                              "const": "url"
                                            },
                                            "url": {
                                              "type": "string"
                                            }
                                          },
                                          "required": [
                                            "type",
                                            "url"
                                          ],
                                          "type": "object"
                                        },
                                        {
                                          "properties": {
                                            "data": {
                                              "type": "string"
                                            },
                                            "media_type": {
                                              "type": "string"
                                            },
                                            "type": {
                                              "const": "base64"
                                            }
                                          },
                                          "required": [
                                            "type",
                                            "media_type",
                                            "data"
                                          ],
                                          "type": "object"
                                        }
                                      ]
                                    },
                                    "type": {
                                      "const": "image"
                                    }
                                  },
                                  "required": [
                                    "type",
                                    "source"
                                  ],
                                  "type": "object"
                                }
                              ]
                            },
                            "type": "array"
                          }
                        ]
                      },
                      "role": {
                        "enum": [
                          "user",
                          "assistant"
                        ],
                        "type": "string"
                      }
                    },
                    "required": [
                      "role",
                      "content"
                    ],
                    "type": "object"
                  },
                  "minItems": 1,
                  "type": "array"
                },
                "model": {
                  "enum": [
                    "sora-2"
                  ],
                  "type": "string"
                },
                "stream": {
                  "default": false,
                  "type": "boolean"
                }
              },
              "required": [
                "model",
                "messages",
                "max_tokens"
              ],
              "type": "object"
            },
            "schema_template": {
              "max_tokens": 128,
              "messages": [
                {
                  "content": "Summarize the incident report.",
                  "role": "user"
                }
              ],
              "model": "sora-2",
              "stream": false
            },
            "unsupported": [
              "No query API key.",
              "Hosted/server-side tools and model-specific optional controls are not part of this minimal family example."
            ]
          },
          "input": {
            "content_type": "application/json",
            "material_types": [
              "text"
            ],
            "optional_controls": [
              "stream"
            ],
            "required": [
              "model",
              "messages",
              "max_tokens"
            ],
            "text_file_material": "اقرأ مستند UTF-8 الفعلي وضع نصه في الإدخال المحدد أو السلسلة النصية لمحتوى الرسالة."
          },
          "lifecycle": {
            "create": {
              "http": "POST",
              "path": "/v1/messages"
            },
            "job_read": null,
            "mode": "synchronous_or_streamed",
            "unknown": "Keep request/response IDs and headers. No generic text job retrieval URL is supplied."
          },
          "manufacturer_capability": null,
          "method": {
            "http": "POST",
            "path": "/v1/messages"
          },
          "output": {
            "all_results": "Keep all content blocks, thinking signatures and actual tool-use IDs. Assemble all SSE block deltas; a first text block is not the complete output.",
            "family": "protocol",
            "format": "JSON or SSE"
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "التعرفات الأساسية للرموز",
            "units": [
              {
                "amount": "0",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": "0.2000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": "0.0002",
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": "0",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": "0",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "{\n  \"model\": \"sora-2\",\n  \"max_tokens\": 128,\n  \"messages\": [\n    {\n      \"role\": \"user\",\n      \"content\": \"Summarize the incident report.\"\n    }\n  ],\n  \"stream\": false\n}",
            "label": "Complete minimal JSON body",
            "language": "json"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_TEXT_FILE:?Set your actual UTF-8 document}\"\nexport AILOOT_TEXT_FILE\npython3 - <<'PY_REQUEST'\nimport json, os\nfrom pathlib import Path\n\nsource_file = Path(os.environ['AILOOT_TEXT_FILE'])\nif not source_file.is_file():\n    raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')\ntext = source_file.read_text(encoding='utf-8')\nif not text.strip():\n    raise SystemExit('Choose a document containing text')\npayload = {'model': 'sora-2', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}\npayload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\\n\\n' + text\nPath('request.json').write_text(json.dumps(payload, ensure_ascii=False), encoding='utf-8')\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \\\n  -H \"x-api-key: $AILOOT_API_KEY\" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o result.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\n\nresult = json.loads(Path('result.json').read_text(encoding='utf-8'))\nprint(json.dumps(result, ensure_ascii=False, indent=2))\nPY_RESULT\n",
            "label": "curl · use your UTF-8 document",
            "language": "bash"
          },
          {
            "code": "import json, os\nfrom pathlib import Path\n\nsource_file = Path(os.environ['AILOOT_TEXT_FILE'])\nif not source_file.is_file():\n    raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')\ntext = source_file.read_text(encoding='utf-8')\nif not text.strip():\n    raise SystemExit('Choose a document containing text')\npayload = {'model': 'sora-2', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}\npayload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\\n\\n' + text\nfrom urllib.request import Request, urlopen\nfrom urllib.error import HTTPError\n\napi_key = os.environ['AILOOT_API_KEY']\nif not api_key.strip():\n    raise SystemExit('Set AILOOT_API_KEY before making a request')\nheaders = {'x-api-key': 'PLACEHOLDER_KEY', 'anthropic-version': '2023-06-01', 'Content-Type': 'application/json'}\nheaders['x-api-key'] = api_key\nrequest = Request('https://api.ailoot.ai/v1/messages', data=json.dumps(payload, ensure_ascii=False).encode('utf-8'), headers=headers, method='POST')\ntry:\n    with urlopen(request, timeout=120) as response:\n        raw = response.read()\n        Path('response-headers.txt').write_text(str(response.headers), encoding='utf-8')\nexcept HTTPError as error:\n    Path('result.json').write_bytes(error.read())\n    Path('response-headers.txt').write_text(str(error.headers), encoding='utf-8')\n    raise\nPath('result.json').write_bytes(raw)\nimport json\nfrom pathlib import Path\n\nresult = json.loads(Path('result.json').read_text(encoding='utf-8'))\nprint(json.dumps(result, ensure_ascii=False, indent=2))\n",
            "label": "Python · save the complete result",
            "language": "python"
          }
        ],
        "family": "anthropic",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "messages",
        "http": "POST",
        "in": 0,
        "input": [
          "text"
        ],
        "label": "رسائل Anthropic",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [],
        "out": 200,
        "output": [
          "json",
          "sse"
        ],
        "path": "/v1/messages",
        "price_conditions": [
          {
            "label": "Fast mode",
            "value": "Not specified",
            "when": "When fast mode is selected"
          },
          {
            "label": "Flex mode",
            "value": "Not specified",
            "when": "When flex mode is selected"
          },
          {
            "label": "Maximum reasoning effort",
            "value": "Not specified",
            "when": "When maximum reasoning effort uses the default adjustment"
          }
        ],
        "pricing": {
          "billing_mode": "token",
          "image_input_price": null,
          "image_output_price": null,
          "per_request_price": null
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": "0",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": "0.2000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": "0.0002",
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": "0",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": "0",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          }
        ],
        "request_model_id": "sora-2",
        "route_label": "Ultra",
        "status_reads": [],
        "tiers": [],
        "units": [
          {
            "amount": "0",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": "0",
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": "0.2000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": "0.0002",
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": "0",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": "0",
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": "0",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": "0",
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_1h_price",
            "label": "Cache write, 1 hour",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "one_hour_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          }
        ]
      }
    }
  ],
  "model_id": "sora-2",
  "nativeProvenance": {
    "input_facts_canonical_sha256": "3424514e8989c139e36055d37ec3bfe3671c80e5e0fb4df70e85f1318fb4046d",
    "input_html_sha256": "539fc21a9ceab34fb0ebf64c94302cb435418ad89e515fd7d40543ee97c4c3b1",
    "private_audit_sha256": "598ed3cd766fb0006087db54a9206649563fe887484c8cc615b2eb122f8fbe5c",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/ar/sora-2/",
    "description": "ينشئ Sora 2 فيديو بحوار ومؤثرات صوتية وصوت خلفي متزامنة انطلاقًا من نص أو صورة مرجعية. ويدعم الإصدار القياسي الاستكشاف البصري ومقاطع تطوير المفاهيم، مع مسارات عمل منفصلة لدى المطوّر للشخصيات غير البشرية القابلة لإعادة الاستخدام، وتمديد المقاطع، وتعديلات الفيديو المركّزة.",
    "locale": "ar",
    "md_url": "https://ailoot.ai/models/ar/sora-2/index.md",
    "title": "sora-2 — Ailoot",
    "url": "https://ailoot.ai/models/ar/sora-2/"
  },
  "rawModel": {
    "about": "Sora 2 هو نموذج OpenAI لتوليد الفيديو والصوت، وينشئ مقاطع حركية انطلاقًا من وصف مكتوب للمشهد أو صورة مرجعية. وهو يولّد التسلسل البصري مع الكلام والمؤثرات وصوت الخلفية المتزامنة. ويُقدَّم إصدار Sora 2 القياسي للاستكشاف البصري وتطوير المفاهيم والنماذج الأولية والمونتاج المبدئي. أما Sora 2 Pro فهو إصدار منفصل يستهدف دقة بصرية أعلى وإخراجًا نهائيًا بدقة أكبر.\n\n### صِف لقطة يمكن رؤيتها وسماعها\n\nينظّم دليل إعداد الموجّهات لدى المطوّر وصفًا عمليًا حول التأطير والموضوع والفعل والمكان والإضاءة. امنح المشهد أسلوبًا بصريًا متماسكًا، ثم صِف الحركة على مراحل واضحة. ويمكن لمفهوم منتج أصلي أن يُظهر جسمًا ميكانيكيًا صغيرًا يدور مرة واحدة على منضدة عمل بينما تقترب الكاميرا ببطء، مع ضوء نافذة ناعم وصوت محرّك خافت. حدّد ما ينبغي للمشاهد ملاحظته وكيف ينتهي الفعل.\n\nاجعل حركة الكاميرا وفعل الموضوع في كل لقطة مفهومين. ويمكن تقسيم التسلسل المعقّد إلى وحدات لقطات متميزة، لكل منها تأطيرها وفعلها وإضاءتها. واحتفظ بتفاصيل الموضوع نفسها ولوحة الألوان عندما يُراد لعدة مقاطع أن تشكّل تسلسلًا واحدًا. ويؤكد الدليل أن اللقطات الأقصر تتبع التوجيه عمومًا بدرجة أوثق، وأن تكرار التوليد بالموجّه نفسه ينتج محاولات مختلفة.\n\nيصف إعلان إطلاق النموذج تحسّن السلوك الفيزيائي والاستمرارية بين اللقطات، بما في ذلك الأساليب الواقعية والسينمائية والأنمي. وهذه قدرات مقصودة يجب توجيهها وفحصها. راجع الحركة والتلامس بين الأجسام والنِّسب والاستمرارية، بدلًا من افتراض أن الإطار الأول المقنع يضمن تسلسلًا متماسكًا. وإذا كان الفعل غير واضح، فبسّطه وامنحه بداية ونهاية مرئيتين.\n\n### وجّه الحوار والصوت بصورة منفصلة\n\nحدّد الجمل المنطوقة منفصلةً عن الوصف البصري، واستخدم تسميات ثابتة للمتحدثين. واجعل الحوار قصيرًا بما يكفي ليتناسب مع الفعل وطول المقطع المقصود. وفي رسوم متحركة بشخصيتين، بدّل بين سؤال وجواب قصيرين بدلًا من مطالبة لقطة قصيرة باستيعاب خطاب طويل. ويحذّر الدليل من أن الحوار الطويل والمعقّد قد يخل بالإيقاع والتزامن.\n\nصِف البيئة الصوتية الملائمة للمشهد: صوت حركة صغيرة أو أجواء الغرفة أو إيقاع مؤثر بيئي. واشرح الصوت الذي يجب أن يتزامن مع الفعل. واستمع إلى الكلام والمؤثرات الناتجة مع الصورة، مع التحقّق من إسناد الكلام إلى المتحدثين والكلمات والتوقيت. والصوت المتزامن جزء من المقطع المُولَّد، وليس إجابة نصية منفصلة.\n\n### الحجم والمدة وبداية موجّهة بصورة\n\nأحجام المخرج الموثّقة للنموذج القياسي هي 720×1280 بالاتجاه العمودي و1280×720 بالاتجاه الأفقي. ويجب ألا تُنسب الأحجام الأعلى دقة في إصدار Pro إلى Sora 2 القياسي. فالحجم والمدة إعدادات صريحة في الطلب؛ وكتابة حجم مختلف أو طلب فيلم أطول في الموجّه لا يغيّر هذه الإعدادات. ويسرد مرجع الإنشاء إعدادات مقاطع بطول 4 و8 و12 ثانية، لذا اختر حدثًا قصيرًا ومحددًا عند إعداد اللقطة. ويوثّق مسار العمل الموسّع لدى المطوّر أيضًا إعدادات بطول 16 و20 ثانية.\n\nتثبّت الصورة المرجعية الإطار الأول، ويصف النص ما يحدث بعده. ويدعم المطوّر مراجع JPEG وPNG وWebP، ويشترط مطابقة الصورة لحجم الفيديو المستهدف. أعدّ الموضوع والبيئة والتكوين في صورة البداية، ثم اطلب حركة محددة. وهذا مرجع للإطار الافتتاحي، وليس ضمانًا لمطابقة كل تفصيل طوال المقطع.\n\n### شخصيات غير بشرية قابلة لإعادة الاستخدام\n\nيمكن لمسار العمل الموسّع لدى المطوّر إنشاء أصل لشخصية قابلة لإعادة الاستخدام من فيديو مرجعي قصير لحيوان أو تميمة أو جسم. وتطلب إرشادات الإعداد مقطع MP4 بطول يقارب ثانيتين إلى أربع ثوانٍ، بدقة 720p إلى 1080p، وبنسبة 16:9 أو 9:16. وتساعد مطابقة نسبة الأبعاد بين المصدر والمخرج على تجنّب المظهر الممدود. ويمكن لعملية التوليد الاستعانة بما يصل إلى شخصيتين.\n\nاحتفظ بمعرّف الشخصية واذكر اسمها في الموجّه؛ فتمرير المعرّف وحده لا يشكّل الإعداد الكامل الوارد في الدليل. ويمكن إرفاق أصول الشخصيات بعملية توليد موجّهة بصورة، لكن تمديدات الفيديو لا تقبلها. ويحظر المطوّر افتراضيًا رفع شخصيات تشبه البشر، ويرفض الصور المرجعية التي تحتوي على وجوه بشرية في مسار API الموثّق. أما ميزات الشخصيات الشخصية في تطبيق Sora فلها مسار منتج منفصل.\n\n### مدّد مقطعًا مكتملًا أو عدّله\n\nيأخذ التمديد فيديو مصدريًا مكتملًا وموجّهًا للاستمرار، ويستخدم المقطع المصدري كاملًا كسياق للحركة واتجاه الكاميرا واستمرارية المشهد. ويصف الدليل إضافات تصل إلى 20 ثانية لكل تمديد. والمدخل الموثّق للتمديد هو الفيديو المصدري والنص؛ وتُستبعد مراجع الشخصيات أو الصور الإضافية من هذا الوضع. صِف كيف يستمر الفعل الحالي بدلًا من إدخال مشهد غير مرتبط دون انتقال.\n\nيستهدف تحرير الفيديو تغييرًا واضحًا في مقطع موجود. ويمكن لتنقيح مركّز أن يغيّر لون جسم أو لوحة ألوان المشهد مع الاحتفاظ ببقية اللقطة. ويوصي دليل المطوّر بتغيير واحد محدد جيدًا في كل مرة، ويميّز بين تحرير فيديو مُولَّد ورفع لقطات عشوائية، وهو ما يخضع لشرط أهلية منفصل. احتفظ بالمصدر المكتمل وحدّد التنقيح الدقيق المطلوب قبل إجراء تعديل آخر.\n\n### مهام التصيير والفيديو النهائي\n\nمسار الفيديو الموثّق لدى المطوّر غير متزامن: فقد تكون المهمة المُرسلة في قائمة الانتظار أو قيد التنفيذ قبل أن تكتمل أو تفشل. وتنتج المهمة المكتملة فيديو MP4؛ وتدعم أصول الصور المصغّرة وأوراق تجميع اللقطات المعاينة والتصفح. وأبقِ هوية المهمة مرتبطة بالموجّه والمراجع والأصول المُعادة. فالاستجابة الأولية للمهمة ليست الفيديو النهائي القابل للتشغيل.\n\nيصف مسار التنزيل المعتاد مدة صلاحية قدرها ساعة واحدة لرابط التنزيل. ويُعدّ مسار الدُفعات الموسّع طلبات تصيير JSON مستقلة بمعرّفات عناصر ثابتة ومراجع مرفوعة، مع ربط نتيجة كل لقطة بها؛ ولأصوله المكتملة فترة تنزيل منفصلة تصل إلى 24 ساعة. احفظ المقطع النهائي سريعًا وافحص الصورة والصوت الفعليين قبل اعتباره محاولة مختارة.\n\nتُلزم قيود المحتوى الموثّقة في API لدى المطوّر بأن تكون المادة مناسبة لجمهور دون 18 عامًا، وترفض الشخصيات أو الموسيقى المحمية بحقوق الطبع والنشر وتوليد أشخاص حقيقيين. أعدّ المشهد والمراجع وفقًا لذلك. والنتيجة المباشرة للنموذج هي فيديو مع صوت، وليست صورًا ثابتة مُولَّدة أو استجابة حوارية من أداة أو فيلمًا بلا حدود. احتفظ بهوية النموذج القياسي الدقيقة والمقطع المصدري المقبول عند متابعة مفهوم بصري.",
    "alias_of": null,
    "aliases": [],
    "author": "Other",
    "capabilities": {
      "context_length": 60000,
      "manufacturer_input": [],
      "manufacturer_output": []
    },
    "card_routes": [
      {
        "label": "Ultra",
        "rates": [
          {
            "amount": "0",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": "0",
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": "0.2000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": "0.0002",
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          }
        ],
        "summary": "التسعير الكامل للتكوين في التفاصيل."
      }
    ],
    "ctx": null,
    "formats": [
      "chat_completions",
      "messages"
    ],
    "id": "sora-2",
    "input": [
      "text"
    ],
    "kind": "text",
    "max_out": null,
    "methods": [
      {
        "available": null,
        "cache_read": 0,
        "cache_write": 0,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "authentication": {
              "api_key_source": "AILOOT_API_KEY",
              "header": "Authorization: Bearer"
            },
            "example_body": {
              "messages": [
                {
                  "content": "hello",
                  "role": "user"
                }
              ],
              "model": "sora-2",
              "stream": false
            },
            "hints": [
              "Supply owned text as messages[].content.",
              "Use stream:false for JSON or stream:true for SSE; keep the complete response."
            ],
            "ignored_fields": [],
            "lifecycle": {
              "cancel": null,
              "create": {
                "http": "POST",
                "path": "/v1/chat/completions"
              },
              "job_read": null,
              "mode": "synchronous_json_or_sse",
              "status_poll": null,
              "unknown": "احتفظ بالاستجابة الأصلية وهوية المحاولة؛ ولا يُستنتج جواز الاستعلام عن مهمة جديدة أو إعادة الإرسال."
            },
            "material_combinations": [
              {
                "alternatives": [
                  "message[] with literal string content"
                ],
                "mode": "owned_text_messages"
              }
            ],
            "outputs": {
              "all_results": "احتفظ ببايتات JSON أو SSE كاملة، وترويسات الاستجابة، والاستخدام المُعاد، وجميع حقول النتائج المقدَّمة. لا يُؤكَّد نوع مخرجات خاص بالنموذج.",
              "family": "protocol",
              "fields": [
                {
                  "description": "احتفظ بكل حقل مُعاد دون افتراض نوع نتائج خاص بالنموذج.",
                  "name": "complete response JSON",
                  "type": "object"
                },
                {
                  "description": "احتفظ بكل حدث مُعاد وبكل علامة نهائية، دون الاكتفاء باختيار حقول النص.",
                  "name": "SSE data events",
                  "type": "stream"
                }
              ],
              "format": "JSON أو text/event-stream"
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "sora-2"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "messages",
                "required": true,
                "type": "message[]"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "messages[].role",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "messages[].content",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": false,
                "default_known": true,
                "enum": null,
                "enum_known": false,
                "name": "stream",
                "required": false,
                "type": "boolean"
              }
            ],
            "profile_binding": "Current d09 shared client interface only; model-specific provider output and acceptance are not claimed.",
            "request_schema": {
              "additionalProperties": false,
              "properties": {
                "messages": {
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "content": {
                        "oneOf": [
                          {
                            "type": "string"
                          },
                          {
                            "items": {
                              "oneOf": [
                                {
                                  "properties": {
                                    "text": {
                                      "type": "string"
                                    },
                                    "type": {
                                      "const": "text"
                                    }
                                  },
                                  "required": [
                                    "type",
                                    "text"
                                  ],
                                  "type": "object"
                                },
                                {
                                  "properties": {
                                    "image_url": {
                                      "properties": {
                                        "detail": {
                                          "type": "string"
                                        },
                                        "url": {
                                          "type": "string"
                                        }
                                      },
                                      "required": [
                                        "url"
                                      ],
                                      "type": "object"
                                    },
                                    "type": {
                                      "const": "image_url"
                                    }
                                  },
                                  "required": [
                                    "type",
                                    "image_url"
                                  ],
                                  "type": "object"
                                }
                              ]
                            },
                            "type": "array"
                          }
                        ]
                      },
                      "role": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "role",
                      "content"
                    ],
                    "type": "object"
                  },
                  "minItems": 1,
                  "type": "array"
                },
                "model": {
                  "enum": [
                    "sora-2"
                  ],
                  "type": "string"
                },
                "stream": {
                  "default": false,
                  "type": "boolean"
                }
              },
              "required": [
                "model",
                "messages"
              ],
              "type": "object"
            },
            "schema_template": {
              "messages": [
                {
                  "content": "hello",
                  "role": "user"
                }
              ],
              "model": "sora-2",
              "stream": false
            },
            "unsupported": [
              "Model-specific optional tools or structured-output controls are not part of this minimal profile.",
              "No image/audio/video request controls, dimensions or foreign model limits are inherited.",
              "No asynchronous media job route or manufacturer output capability is inferred."
            ]
          },
          "input": {
            "content_type": "application/json",
            "file_material": "يمكن إدراج محتوى UTF-8 الفعلي كسلسلة نصية حرفية؛ ولا يُفترض وجود مرجع ملف.",
            "material_types": [
              "text"
            ],
            "messages": "مصفوفة رسائل تحتوي على role وعلى content كسلسلة نصية حرفية",
            "optional_controls": [
              "stream"
            ],
            "required": [
              "model",
              "messages"
            ]
          },
          "lifecycle": {
            "cancel": null,
            "create": {
              "http": "POST",
              "path": "/v1/chat/completions"
            },
            "job_read": null,
            "mode": "synchronous_json_or_sse",
            "status_poll": null,
            "unknown": "Preserve the original response and attempt identity; no new job polling or resubmission is inferred."
          },
          "manufacturer_capability": null,
          "method": {
            "http": "POST",
            "path": "/v1/chat/completions"
          },
          "operation_modes": [
            "request_response",
            "response_stream"
          ],
          "output": {
            "all_results": "Retain the complete JSON or SSE bytes, response headers, returned usage and all supplied result fields. No model-specific output family is asserted.",
            "family": "protocol",
            "format": "JSON or text/event-stream",
            "manufacturer_output_family": null
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "التعرفات الأساسية للرموز",
            "units": [
              {
                "amount": "0",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": "0.2000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": "0.0002",
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": "0",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": "0",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\np=json.loads('{\"model\":\"sora-2\",\"messages\":[{\"role\":\"user\",\"content\":\"hello\"}],\"stream\":false}')\n\nPath(\"request.json\").write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o result.json\npython3 - <<'PY_RESULT'\nfrom pathlib import Path\nprint(Path(\"result.json\").read_text(encoding=\"utf-8\"))\nPY_RESULT\n",
            "label": "curl · complete JSON response",
            "language": "bash"
          },
          {
            "code": "from openai import OpenAI\nimport os\n\nif not os.environ.get(\"AILOOT_API_KEY\", \"\").strip(): raise SystemExit(\"Set AILOOT_API_KEY before making a request\")\nclient=OpenAI(base_url=\"https://api.ailoot.ai/v1\",api_key=os.environ[\"AILOOT_API_KEY\"],max_retries=0)\nresult=client.chat.completions.create(model=\"sora-2\", messages=[{\"role\":\"user\",\"content\":\"hello\"}], stream=False)\nimport json\nfrom pathlib import Path\n\ndata = result.to_dict(mode=\"json\")\nPath(\"result.json\").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding=\"utf-8\")\nprint(json.dumps(data, ensure_ascii=False, indent=2))\n",
            "label": "Python SDK · complete JSON response",
            "language": "python"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\np=json.loads('{\"model\":\"sora-2\",\"messages\":[{\"role\":\"user\",\"content\":\"hello\"}],\"stream\":true}')\n\nPath(\"request.json\").write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o result.sse\n",
            "label": "curl · preserve SSE stream",
            "language": "bash"
          }
        ],
        "family": "openai",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "chat_completions",
        "hints": [
          "Supply owned text as messages[].content.",
          "Use stream:false for JSON or stream:true for SSE; keep the complete response."
        ],
        "http": "POST",
        "in": 0,
        "input": [
          "text"
        ],
        "label": "Chat Completions",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [],
        "out": 200,
        "output": [
          "json",
          "sse"
        ],
        "path": "/v1/chat/completions",
        "price_conditions": [
          {
            "label": "Fast mode",
            "value": "Not specified",
            "when": "When fast mode is selected"
          },
          {
            "label": "Flex mode",
            "value": "Not specified",
            "when": "When flex mode is selected"
          },
          {
            "label": "Maximum reasoning effort",
            "value": "Not specified",
            "when": "When maximum reasoning effort uses the default adjustment"
          }
        ],
        "pricing": {
          "billing_mode": "token",
          "image_input_price": null,
          "image_output_price": null,
          "per_request_price": null
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": "0",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": "0.2000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": "0.0002",
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": "0",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": "0",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          }
        ],
        "request_model_id": "sora-2",
        "route_label": "Ultra",
        "status_reads": [],
        "tiers": [],
        "units": [
          {
            "amount": "0",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": "0",
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": "0.2000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": "0.0002",
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": "0",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": "0",
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": "0",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": "0",
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_1h_price",
            "label": "Cache write, 1 hour",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "one_hour_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          }
        ]
      },
      {
        "available": null,
        "cache_read": 0,
        "cache_write": 0,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "authentication": {
              "api_key_source": "AILOOT_API_KEY",
              "headers": [
                "Authorization: Bearer",
                "x-api-key",
                "anthropic-version"
              ],
              "version_example": "2023-06-01"
            },
            "errors": [
              {
                "code": null,
                "condition": "حقول مطلوبة أو تمثيل مادة أو قيمة معلمة غير صحيحة",
                "http_status": 400,
                "recovery": "صحّح الحقول المحددة قبل طلب إنشاء جديد.",
                "type": "invalid_request_error"
              }
            ],
            "example_body": {
              "max_tokens": 128,
              "messages": [
                {
                  "content": "Summarize the incident report.",
                  "role": "user"
                }
              ],
              "model": "sora-2",
              "stream": false
            },
            "lifecycle": {
              "create": {
                "http": "POST",
                "path": "/v1/messages"
              },
              "job_read": null,
              "mode": "synchronous_or_streamed",
              "unknown": "احتفظ بمعرّفات الطلبات/الاستجابات والترويسات. لا يُقدَّم URL عام لاسترجاع مهمة نصية."
            },
            "material_combinations": [
              {
                "mode": "text",
                "representation": "سلسلة نصية messages[].content",
                "required_material": "نص UTF-8"
              }
            ],
            "operation_modes": [
              "synchronous_json",
              "streamed_SSE"
            ],
            "outputs": {
              "all_results": "احتفظ بكل كتل المحتوى وتوقيعات التفكير ومعرّفات استخدام الأدوات الفعلية. جمّع جميع تحديثات كتل SSE؛ فأول كتلة نصية ليست الإخراج الكامل.",
              "family": "protocol",
              "fields": [
                {
                  "description": null,
                  "name": "id",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "model",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "content[]",
                  "type": "text|thinking|tool_use|other content block"
                },
                {
                  "description": null,
                  "name": "stop_reason",
                  "type": "string|null"
                },
                {
                  "description": null,
                  "name": "usage",
                  "type": "object"
                }
              ],
              "format": "JSON أو SSE"
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "sora-2"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "messages",
                "required": true,
                "type": "message[]"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "user",
                  "assistant"
                ],
                "enum_known": true,
                "name": "messages[].role",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "messages[].content",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "max_tokens",
                "required": true,
                "type": "integer"
              },
              {
                "availability": "source_interface",
                "default": false,
                "default_known": true,
                "enum": null,
                "enum_known": false,
                "name": "stream",
                "required": false,
                "type": "boolean"
              }
            ],
            "profile_binding": "Documented current stock Messages bridge; optional model capabilities are separate from this minimal text request.",
            "request_schema": {
              "additionalProperties": false,
              "properties": {
                "max_tokens": {
                  "minimum": 1,
                  "type": "integer"
                },
                "messages": {
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "content": {
                        "oneOf": [
                          {
                            "type": "string"
                          },
                          {
                            "items": {
                              "oneOf": [
                                {
                                  "properties": {
                                    "text": {
                                      "type": "string"
                                    },
                                    "type": {
                                      "const": "text"
                                    }
                                  },
                                  "required": [
                                    "type",
                                    "text"
                                  ],
                                  "type": "object"
                                },
                                {
                                  "properties": {
                                    "source": {
                                      "oneOf": [
                                        {
                                          "properties": {
                                            "type": {
                                              "const": "url"
                                            },
                                            "url": {
                                              "type": "string"
                                            }
                                          },
                                          "required": [
                                            "type",
                                            "url"
                                          ],
                                          "type": "object"
                                        },
                                        {
                                          "properties": {
                                            "data": {
                                              "type": "string"
                                            },
                                            "media_type": {
                                              "type": "string"
                                            },
                                            "type": {
                                              "const": "base64"
                                            }
                                          },
                                          "required": [
                                            "type",
                                            "media_type",
                                            "data"
                                          ],
                                          "type": "object"
                                        }
                                      ]
                                    },
                                    "type": {
                                      "const": "image"
                                    }
                                  },
                                  "required": [
                                    "type",
                                    "source"
                                  ],
                                  "type": "object"
                                }
                              ]
                            },
                            "type": "array"
                          }
                        ]
                      },
                      "role": {
                        "enum": [
                          "user",
                          "assistant"
                        ],
                        "type": "string"
                      }
                    },
                    "required": [
                      "role",
                      "content"
                    ],
                    "type": "object"
                  },
                  "minItems": 1,
                  "type": "array"
                },
                "model": {
                  "enum": [
                    "sora-2"
                  ],
                  "type": "string"
                },
                "stream": {
                  "default": false,
                  "type": "boolean"
                }
              },
              "required": [
                "model",
                "messages",
                "max_tokens"
              ],
              "type": "object"
            },
            "schema_template": {
              "max_tokens": 128,
              "messages": [
                {
                  "content": "Summarize the incident report.",
                  "role": "user"
                }
              ],
              "model": "sora-2",
              "stream": false
            },
            "unsupported": [
              "No query API key.",
              "Hosted/server-side tools and model-specific optional controls are not part of this minimal family example."
            ]
          },
          "input": {
            "content_type": "application/json",
            "material_types": [
              "text"
            ],
            "optional_controls": [
              "stream"
            ],
            "required": [
              "model",
              "messages",
              "max_tokens"
            ],
            "text_file_material": "اقرأ مستند UTF-8 الفعلي وضع نصه في الإدخال المحدد أو السلسلة النصية لمحتوى الرسالة."
          },
          "lifecycle": {
            "create": {
              "http": "POST",
              "path": "/v1/messages"
            },
            "job_read": null,
            "mode": "synchronous_or_streamed",
            "unknown": "Keep request/response IDs and headers. No generic text job retrieval URL is supplied."
          },
          "manufacturer_capability": null,
          "method": {
            "http": "POST",
            "path": "/v1/messages"
          },
          "output": {
            "all_results": "Keep all content blocks, thinking signatures and actual tool-use IDs. Assemble all SSE block deltas; a first text block is not the complete output.",
            "family": "protocol",
            "format": "JSON or SSE"
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "التعرفات الأساسية للرموز",
            "units": [
              {
                "amount": "0",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": "0.2000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": "0.0002",
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": "0",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": "0",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "{\n  \"model\": \"sora-2\",\n  \"max_tokens\": 128,\n  \"messages\": [\n    {\n      \"role\": \"user\",\n      \"content\": \"Summarize the incident report.\"\n    }\n  ],\n  \"stream\": false\n}",
            "label": "Complete minimal JSON body",
            "language": "json"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_TEXT_FILE:?Set your actual UTF-8 document}\"\nexport AILOOT_TEXT_FILE\npython3 - <<'PY_REQUEST'\nimport json, os\nfrom pathlib import Path\n\nsource_file = Path(os.environ['AILOOT_TEXT_FILE'])\nif not source_file.is_file():\n    raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')\ntext = source_file.read_text(encoding='utf-8')\nif not text.strip():\n    raise SystemExit('Choose a document containing text')\npayload = {'model': 'sora-2', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}\npayload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\\n\\n' + text\nPath('request.json').write_text(json.dumps(payload, ensure_ascii=False), encoding='utf-8')\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \\\n  -H \"x-api-key: $AILOOT_API_KEY\" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o result.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\n\nresult = json.loads(Path('result.json').read_text(encoding='utf-8'))\nprint(json.dumps(result, ensure_ascii=False, indent=2))\nPY_RESULT\n",
            "label": "curl · use your UTF-8 document",
            "language": "bash"
          },
          {
            "code": "import json, os\nfrom pathlib import Path\n\nsource_file = Path(os.environ['AILOOT_TEXT_FILE'])\nif not source_file.is_file():\n    raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')\ntext = source_file.read_text(encoding='utf-8')\nif not text.strip():\n    raise SystemExit('Choose a document containing text')\npayload = {'model': 'sora-2', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}\npayload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\\n\\n' + text\nfrom urllib.request import Request, urlopen\nfrom urllib.error import HTTPError\n\napi_key = os.environ['AILOOT_API_KEY']\nif not api_key.strip():\n    raise SystemExit('Set AILOOT_API_KEY before making a request')\nheaders = {'x-api-key': 'PLACEHOLDER_KEY', 'anthropic-version': '2023-06-01', 'Content-Type': 'application/json'}\nheaders['x-api-key'] = api_key\nrequest = Request('https://api.ailoot.ai/v1/messages', data=json.dumps(payload, ensure_ascii=False).encode('utf-8'), headers=headers, method='POST')\ntry:\n    with urlopen(request, timeout=120) as response:\n        raw = response.read()\n        Path('response-headers.txt').write_text(str(response.headers), encoding='utf-8')\nexcept HTTPError as error:\n    Path('result.json').write_bytes(error.read())\n    Path('response-headers.txt').write_text(str(error.headers), encoding='utf-8')\n    raise\nPath('result.json').write_bytes(raw)\nimport json\nfrom pathlib import Path\n\nresult = json.loads(Path('result.json').read_text(encoding='utf-8'))\nprint(json.dumps(result, ensure_ascii=False, indent=2))\n",
            "label": "Python · save the complete result",
            "language": "python"
          }
        ],
        "family": "anthropic",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "messages",
        "http": "POST",
        "in": 0,
        "input": [
          "text"
        ],
        "label": "رسائل Anthropic",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "method_aliases": [],
        "out": 200,
        "output": [
          "json",
          "sse"
        ],
        "path": "/v1/messages",
        "price_conditions": [
          {
            "label": "Fast mode",
            "value": "Not specified",
            "when": "When fast mode is selected"
          },
          {
            "label": "Flex mode",
            "value": "Not specified",
            "when": "When flex mode is selected"
          },
          {
            "label": "Maximum reasoning effort",
            "value": "Not specified",
            "when": "When maximum reasoning effort uses the default adjustment"
          }
        ],
        "pricing": {
          "billing_mode": "token",
          "image_input_price": null,
          "image_output_price": null,
          "per_request_price": null
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": "0",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": "0.2000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": "0.0002",
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": "0",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": "0",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": "0",
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          }
        ],
        "request_model_id": "sora-2",
        "route_label": "Ultra",
        "status_reads": [],
        "tiers": [],
        "units": [
          {
            "amount": "0",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": "0",
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": "0.2000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": "0.0002",
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": "0",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": "0",
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": "0",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": "0",
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_1h_price",
            "label": "Cache write, 1 hour",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "one_hour_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          }
        ]
      }
    ],
    "model_aliases": [
      {
        "canonical_model_id": "sora-2",
        "request_model_id": "sora-2",
        "route_label": "Ultra"
      }
    ],
    "name": "sora-2",
    "price": {
      "in": 0,
      "in_label": null,
      "out": 200,
      "out_label": null,
      "scope_label": "Token rates",
      "sort_in": 0,
      "sort_out": 200,
      "varies": false
    },
    "short": "ينشئ Sora 2 فيديو بحوار ومؤثرات صوتية وصوت خلفي متزامنة انطلاقًا من نص أو صورة مرجعية. ويدعم الإصدار القياسي الاستكشاف البصري ومقاطع تطوير المفاهيم، مع مسارات عمل منفصلة لدى المطوّر للشخصيات غير البشرية القابلة لإعادة الاستخدام، وتمديد المقاطع، وتعديلات الفيديو المركّزة."
  },
  "renderer_schema": {
    "method_order": "Original DTO methods order; every exact route/format/path/caller survives.",
    "prices": "Original public DTO fields and original native display HTML; no flattened or normalized offers."
  },
  "representation": "exact-public-dto-and-native-renderer-html",
  "representationNotes": {
    "current_reference": {
      "about_json_pointer": "/aboutHtml",
      "methods": [
        {
          "contract_json_pointer": "/methods/0/rawMethod/contract",
          "html_json_pointer": "/methods/0/html",
          "method_ordinal": 0
        },
        {
          "contract_json_pointer": "/methods/1/rawMethod/contract",
          "html_json_pointer": "/methods/1/html",
          "method_ordinal": 1
        }
      ],
      "role": "current-semantic-reference"
    },
    "raw_input": {
      "examples_role": "historical-input-not-current-ready-examples",
      "json_pointers": [
        "/rawModel",
        "/methods/0/rawMethod",
        "/methods/1/rawMethod"
      ],
      "role": "historical-owner-input"
    },
    "schema": "ailoot-native-model-representations-v1"
  },
  "schema": "ailoot-static-model-facts-v1",
  "schema_version": 1,
  "shortText": "ينشئ Sora 2 فيديو بحوار ومؤثرات صوتية وصوت خلفي متزامنة انطلاقًا من نص أو صورة مرجعية. ويدعم الإصدار القياسي الاستكشاف البصري ومقاطع تطوير المفاهيم، مع مسارات عمل منفصلة لدى المطوّر للشخصيات غير البشرية القابلة لإعادة الاستخدام، وتمديد المقاطع، وتعديلات الفيديو المركّزة.",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_json_sha256": "0a832bbd1c8facad6ef8991da7d8b1673b1b322b1b594d70e2e2ecc6a2cf17f8",
    "renderer_sha256": "081ee0fd5b6b1b60564b02c52d62547e01e922c8c0a16e91a0d055073e76a10e"
  },
  "sourceRevision": "c02e480f9c5619e57895de3568fba9271f1acd8b3c123348125e0105a039caf5"
}
