Files API
ارفع ملفات مرجعية من الصور أو الفيديو أو الصوت لطلبات التوليد عبر Rivya API، مع فحوصات MIME، وحدود الحجم، وduration tokens.
آخر مراجعة في 2026/08/26
استخدم POST /api/v1/files لرفع وسائط مرجعية للنماذج التي تحتاج إلى مدخلات صور أو فيديو أو صوت.
Files API مخصص للمدخلات المرجعية فقط. لا ينشئ مهام توليد بمفرده. بعد الرفع، مرر url والبيانات الوصفية العائدة إلى params الخاصة بالنموذج، عادة عبر params.referenceMediaItems.
Endpoint
POST https://rivya.ai/api/v1/files
GET https://rivya.ai/api/v1/files/{fileId}Headers مطلوبة:
Authorization: Bearer rvya_sk_...
Content-Type: multipart/form-dataيجب أن يتضمن مفتاح API نطاق files:create للرفع وfiles:read لجلب البيانات الوصفية. تتضمن مفاتيح Rivya API الجديدة كلا النطاقين افتراضيا.
حقول Multipart
| Field | Type | Required | Notes |
|---|---|---|---|
file | binary | yes | ملف الصورة أو الفيديو أو الصوت المراد رفعه. |
kind | string | yes | واحد من image أو video أو audio. |
model | string | no | معرف نموذج عام. عند وجوده، تتحقق Rivya من أن النموذج يقبل نوع الملف هذا. |
client_request_id | string | no | معرف التتبع الخاص بك، حتى 128 حرفا. |
استخدم model عندما يكون الملف موجها إلى نموذج محدد. يمنحك ذلك تحققا خاصا بالنموذج من MIME والحجم قبل قبول الملف.
حدود الرفع
تستخدم Files API سياسة الرفع نفسها الخاصة بمراجع Rivya.
الحدود الافتراضية:
| Kind | Default max size | Common MIME types |
|---|---|---|
image | 10 MB | image/jpeg, image/png, image/webp |
video | 50 MB | video/mp4, video/quicktime, video/webm |
audio | 10 MB | audio/mpeg, audio/mp4, audio/wav, audio/x-wav, audio/aac, audio/ogg |
بعض النماذج لها حدود مختلفة. على سبيل المثال، تسمح نماذج صور مرجعية محددة بصور أكبر، وتسمح نماذج فيديو مرجعية محددة بملفات حتى سقف الرفع الآمن للمنتج. مرر دائما model عندما تعرف النموذج المستهدف، واقرأ مرجع Model API قبل قبول رفع المستخدمين.
تشمل حدود مراجع الصور الموقعة ما يلي:
| النموذج | الحد الأقصى للصور | حد الصورة الواحدة | أنواع MIME المقبولة للصور |
|---|---|---|---|
seedream-5-pro | 10 | 10 MB | JPEG, PNG, WebP |
seedream-5-pro-layer-decomposition | 1 بالضبط | 30 MB | JPEG, PNG, WebP, BMP, GIF, TIFF |
nano-banana-2-lite | 10 | 30 MB | JPEG, PNG, WebP |
qwen-image-3 / qwen-image-3-pro | 3 | 10 MB | JPEG, PNG, WebP, BMP, GIF, TIFF |
grok-imagine-image-2-0 | 5 | 10 MB | JPEG, PNG, WebP |
wan-3-0-video | 10 في وضع المرجع؛ 1–2 في وضع الإطارات | 20 MB | JPEG، وPNG غير الشفاف، وWebP، وBMP |
يجب رفع كل صورة مرجعية لنماذج Image5 أو لنموذجي Grok Imagine Image 2.0 وWan 3.0 باستخدام model المستهدف. احتفظ بقيم width وheight وsize_bytes وimage_dimensions_token من الاستجابة الأصلية؛ ويجب أن يرسلها طلب التوليد بأسماء width وheight وsizeBytes وimageDimensionsToken. لا تفي عناوين URL الخارجية العشوائية للصور بمتطلبات هذا التحقق المرتبط بالنموذج.
يتحقق تفكيك الطبقات أيضا من أبعاد الصورة المكتشفة قبل الرفع: يجب أن يتراوح إجمالي عدد البكسلات بين 262,144 و 36,000,000، وأن تتراوح نسبة العرض إلى الارتفاع من 1:16 إلى 16:1.
تشمل حدود الرفع الخاصة بنماذج Video8 ما يلي:
| النموذج | مدخلات الصور | مدخلات الفيديو | مدخلات الصوت |
|---|---|---|---|
kling-3-turbo | 1 × 10 MB؛ JPEG أو PNG | غير مقبولة | غير مقبولة |
seedance-2-mini | حتى 9 × 30 MB؛ JPEG أو PNG أو WebP أو BMP أو GIF أو TIFF | حتى 3 × 50 MB؛ MP4 أو MOV | حتى 3 × 15 MB؛ MP3 أو WAV |
seedance-2-5 | حتى 30 × 30 MB؛ JPEG أو PNG أو WebP أو BMP أو GIF أو TIFF | حتى 10 × 95 MB؛ MP4 أو MOV | حتى 10 × 15 MB؛ MP3 أو WAV |
minimax-h3 | حتى 9 × 30 MB؛ JPEG أو PNG أو WebP | حتى 3 × 50 MB؛ MP4 أو MOV | حتى 3 × 15 MB؛ MP3 أو WAV |
happyhorse-1-1 | حتى 9 × 20 MB؛ JPEG أو PNG أو WebP | غير مقبولة | غير مقبولة |
omnihuman-1-5 | 1 × 10 MB؛ JPEG أو PNG أو WebP | غير مقبولة | 1 × 10 MB؛ MP3 أو M4A أو WAV أو AAC أو OGG |
volcengine-video-lip-sync | غير مقبولة | 1 × 95 MB؛ MP4 أو MOV | 1 × 10 MB؛ MP3 أو M4A أو WAV أو AAC أو OGG |
wan-3-0-video | الإطارات: صورة 1 مطلوبة وصورة 1 اختيارية؛ المرجع: حتى 10 × 20 MB؛ JPEG أو PNG غير الشفاف أو WebP أو BMP | المرجع: حتى 5 × 95 MB؛ MP4 أو MOV؛ كل منها من 1 إلى 15 ثانية، ومجموعها 15 ثانية | المرجع: حتى 5 × 15 MB؛ MP3 أو WAV؛ كل منها من 1 إلى 15 ثانية، ومجموعها 15 ثانية؛ لا تُقبل وحدها |
هذه هي سقوف الرفع التي تقبلها Rivya، وقد تكون أقل من حدود الخدمة المصدرية. ارفع كل مرجع لنماذج Video8 أو Wan 3.0 باستخدام model المستهدف. تتطلب مقاطع الفيديو المرجعية كلا من إثبات المدة الموقع والبيانات الوصفية الموقعة للفيديو من استجابة الرفع الأصلية المرتبطة بالنموذج. وتربط رموز مدة الصوت في Wan 3.0 أيضا نوع MIME المكتشف وحجم الرفع بالبايت.
يجب أن يتراوح طول كل جانب في صور Wan 3.0 بين 240 و8,000 بكسل، وفي الفيديوهات بين 240 و4,096 بكسل؛ ويجب أن تبقى نسبة العرض إلى الارتفاع في كليهما ضمن 1:8–8:1. في وضع المرجع، للفيديو والصوت حدان إجماليان منفصلان قدر كل منهما 15 ثانية، ولا يمكن أن يكون الصوت نوع المرجع الوحيد.
تتحقق Rivya من توقيع الملف المكتشف، لا من امتداد اسم الملف فقط.
مثال curl
curl https://rivya.ai/api/v1/files \
-H "Authorization: Bearer rvya_sk_..." \
-F "file=@./reference.png" \
-F "kind=image" \
-F "model=nano-banana-2-lite" \
-F "client_request_id=asset-123"مثال JavaScript
import { readFile } from "node:fs/promises";
const form = new FormData();
const file = new Blob([await readFile("./reference.png")], {
type: "image/png"
});
form.set("file", file, "reference.png");
form.set("kind", "image");
form.set("model", "nano-banana-2-lite");
form.set("client_request_id", "asset-123");
const response = await fetch("https://rivya.ai/api/v1/files", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.RIVYA_API_KEY}`
},
body: form
});
const uploadedFile = await response.json();
console.log(uploadedFile.id, uploadedFile.url);مثال Python
import os
import requests
with open("./reference.png", "rb") as file_handle:
response = requests.post(
"https://rivya.ai/api/v1/files",
headers={
"Authorization": f"Bearer {os.environ['RIVYA_API_KEY']}",
},
files={"file": ("reference.png", file_handle, "image/png")},
data={
"kind": "image",
"model": "nano-banana-2-lite",
"client_request_id": "asset-123",
},
timeout=60,
)
uploaded_file = response.json()
print(uploaded_file["id"], uploaded_file["url"])الاستجابة
{
"id": "file_...",
"object": "file",
"kind": "image",
"file_name": "reference.png",
"mime_type": "image/png",
"size_bytes": 482314,
"url": "https://...",
"duration_seconds": null,
"duration_token": null,
"width": 1024,
"height": 1024,
"image_dimensions_token": "signed_image_metadata_token",
"video_width": null,
"video_height": null,
"frames_per_second": null,
"video_bitrate_mbps": null,
"video_file_size_bytes": null,
"video_metadata_token": null,
"created_at": "2026-05-11T00:00:00.000Z",
"expires_at": null
}بالنسبة إلى رفع الفيديو والصوت، قد تمتلئ قيمة duration_seconds. عندما يتطلب نموذج التحقق من المدة، انسخ duration_token إلى معامل التوليد المرتبط باسم durationToken.
بالنسبة إلى عمليات رفع الصور المدعومة، يتم اكتشاف width وheight من وحدات بايت الملف. تتطلب نماذج Image5 الخمسة كلها ونموذجا Grok Imagine Image 2.0 وWan 3.0 قيمة image_dimensions_token الموقعة من استجابة الرفع الأصلية المرتبطة بالنموذج؛ انسخها إلى عنصر المرجع باسم imageDimensionsToken، وانسخ size_bytes باسم sizeBytes. قد تعيد عملية لاحقة لجلب بيانات الملف الوصفية هذا الرمز بقيمة null، لذا أعد رفع الصورة المصدر إذا لم يعد الرمز الأصلي متاحا أو انتهت صلاحيته.
بالنسبة إلى عمليات رفع الفيديو المدعومة في Video8 وWan 3.0، تفحص Rivya وحدات بايت MP4 أو MOV وتعيد video_width وvideo_height وframes_per_second وvideo_bitrate_mbps وvideo_file_size_bytes وvideo_metadata_token. انسخها إلى عنصر المرجع بأسماء width وheight وframesPerSecond وvideoBitrateMbps وsizeBytes وvideoMetadataToken. يرتبط الرمز بالحساب، والنموذج المستهدف، وعنوان URL، ونوع MIME، والأبعاد، ومعدل الإطارات، ومعدل البت، وحجم الرفع. ويجري التحقق من المدة بصورة مستقلة باستخدام durationToken. قد تعيد عملية لاحقة لجلب بيانات الملف الوصفية video_metadata_token بقيمة null؛ أعد رفع الفيديو المصدر بدلا من اختلاق البيانات الوصفية.
جلب بيانات الملف الوصفية
استخدم GET /api/v1/files/{fileId} لقراءة البيانات الوصفية لملف يملكه حساب Rivya نفسه:
curl https://rivya.ai/api/v1/files/file_... \
-H "Authorization: Bearer rvya_sk_..."تستخدم الاستجابة شكل PublicApiFile نفسه المستخدم في الرفع. إذا كان الملف ينتمي إلى حساب آخر أو لم يعد متاحا، يعيد API الخطأ not_found.
استخدام الرفع في معاملات التوليد
لا ترسل حقل files على المستوى الأعلى إلى POST /api/v1/generations.
للتكاملات الجديدة، مرر نتيجة الرفع عبر params.referenceMediaItems:
{
"model": "nano-banana-2-lite",
"prompt": "Restyle this product photo for a clean editorial catalog page",
"params": {
"referenceMediaItems": [
{
"url": "https://...",
"kind": "image",
"name": "reference.png",
"mimeType": "image/png",
"width": 1024,
"height": 1024,
"sizeBytes": 482314,
"imageDimensionsToken": "image_dimensions_token_from_files_api"
}
]
},
"client_request_id": "order-123-preview"
}للفيديو أو الصوت:
{
"url": "https://...",
"kind": "video",
"name": "source.mov",
"mimeType": "video/quicktime",
"durationSeconds": 12.4,
"durationToken": "duration_token_from_files_api",
"width": 1920,
"height": 1080,
"framesPerSecond": 30,
"videoBitrateMbps": 8.5,
"sizeBytes": 26214400,
"videoMetadataToken": "video_metadata_token_from_files_api"
}تكون حقول الفيديو الموقعة الكاملة أعلاه مطلوبة لمراجع فيديو Video8 وWan 3.0. تستخدم مراجع الصوت في Wan 3.0 الحقول mimeType وsizeBytes وdurationSeconds وdurationToken؛ وتستخدم مراجع الصور عقد بيانات الصور الوصفية الخاص بكل نموذج كما هو موضح أعلاه.
بالنسبة إلى Seedream 5.0 Pro Layer Decomposition، أرسل صورة واحدة بالضبط والبيانات الوصفية الموقعة التي أعادها الرفع المرتبط بالنموذج:
{
"model": "seedream-5-pro-layer-decomposition",
"prompt": "Separate the product, shadow, typography, and background into clean layers",
"params": {
"size": "auto",
"output_format": "png",
"referenceMediaItems": [
{
"url": "https://...",
"kind": "image",
"name": "campaign.tiff",
"mimeType": "image/tiff",
"width": 2048,
"height": 2048,
"sizeBytes": 6291456,
"imageDimensionsToken": "image_dimensions_token_from_files_api"
}
]
}
}لا تزال بعض معاملات النماذج الأقدم تستخدم حقول URL خاصة بالنموذج. إذا وثق مرجع Model API معاملا محددا، فاتبع صفحة ذلك النموذج بدلا من اختراع حقل جديد.
الأخطاء
تستخدم Files API غلاف الخطأ العام نفسه كبقية Rivya API:
{
"error": {
"code": "validation_failed",
"message": "The request is invalid.",
"requestId": "req_..."
}
}الحالات الشائعة:
| HTTP | Code | Cause |
|---|---|---|
| 400 | validation_failed | حقل file مفقود، أو kind غير مدعوم، أو نوع MIME غير مدعوم، أو الملف كبير جدا، أو النموذج لا يقبل النوع المحدد. |
| 401 | api_key_missing / api_key_invalid | مفتاح Bearer API مفقود أو غير صالح. |
| 403 | api_scope_denied | لا يتضمن المفتاح files:create أو files:read للإجراء المطلوب. |
| 429 | rate_limited | عدد كبير جدا من عمليات رفع الملفات في الدقيقة الحالية. |
| 503 | public_api_disabled | Public API معطل في البيئة الحالية. |
ملاحظات الأمان
لا تخزن مفاتيح API الكاملة في المتصفحات، أو عملاء الهاتف، أو السجلات، أو أحداث analytics، أو لقطات الشاشة.
تعامل مع عناوين URL للملفات المرفوعة وقيم duration_token وimage_dimensions_token وvideo_metadata_token كمواد تكامل مؤقتة. استخدمها فقط لبناء طلب التوليد اللاحق، ولا تعرضها في صفحات عامة.
