واجهة قوالب FreeRap
أنشئ فيديو من قالب باستخدام صورة مرجعية. أنشئ مهمة ثم استعلم عن حالتها للحصول على الفيديو النهائي.
عنوان الخدمةhttps://freerapvideo.com
البدء السريع
نفّذ طلبك الأول في أربع خطوات. شغّل هذه الأوامر في الطرفية أو على الخادم.
أنشئ مفتاح API
افتح الإعدادات ← API وأنشئ مفتاحًا. احفظ قيمة sk_ الكاملة في متغير بيئة على الخادم.
إنشاء مفتاح APIShellexport FREERAP_API_KEY='YOUR_API_KEY'اختر القالب والإعدادات
اجلب دليل القوالب العام واختر slug وزوج model/resolution من rows. راجع name وimageSlots وdefaultDurationSec. لا يتطلب الدليل مفتاح API.
GET /api/template-pricescurl https://freerapvideo.com/api/template-pricesأنشئ مهمة فيديو
يستخدم المثال bulin مع صورة واحدة وpro / 720p. تأكد من تسعير هذا الزوج واستبدل الصورة بعنوان HTTPS عام لصورتك، ثم احفظ data.taskId من الرد.
POST · cURLcurl --request POST \ 'https://freerapvideo.com/api/v1/templates/bulin/generations' \ --header "Authorization: Bearer $FREERAP_API_KEY" \ --header 'Content-Type: application/json' \ --data '{ "reference_image_urls": ["https://cdn.example.com/face.jpg"], "model": "pro", "resolution": "720p" }'احصل على النتيجة
استبدل TASK_ID بقيمة data.taskId. استعلم كل 30 ثانية تقريبًا حتى success أو failed أو canceled. عند النجاح، اقرأ data.videos.
GET · cURLcurl 'https://freerapvideo.com/api/v1/generations/TASK_ID' \ --header "Authorization: Bearer $FREERAP_API_KEY"
المصادقة
أرسل ترويسة Authorization إلى واجهتي المهام باستخدام مفتاح sk_ الكامل من الإعدادات ← API. يعاد HTTP 401 عند غياب المفتاح أو عدم صلاحيته. لا تكشف المفتاح في كود المتصفح.
Authorization: Bearer <API_KEY>قواعد الواجهة
يوفر القالب النص والفيديو المرجعي والموسيقى. يرسل العميل الصورة المرجعية وإعدادات التوليد. لا تُدعم عناوين الاستدعاء الراجع؛ استعلم عن المهمة للحصول على النتيجة.
تعيد الطلبات الناجحة HTTP 200 وcode 0 وmessage ok وكائن data. تعيد أخطاء الطلب code -1 وmessage. قد يشير data.status إلى فشل التوليد رغم نجاح الاستعلام.
إنشاء مهمة
/api/v1/templates/{campaign}/generationsيبدأ توليد فيديو غير متزامن لقالب نشط. يؤكد HTTP 200 إنشاء المهمة، ويكون الفيديو قيد المعالجة.
الترويسات المطلوبة: Authorization: Bearer <API_KEY> وContent-Type: application/json.
معاملات المسار
| الحقل | النوع | مطلوب | الوصف |
|---|---|---|---|
campaign | string | نعم | معرّف slug لقالب نشط مثل bulin. اعثر عليه عبر GET /api/template-prices. |
جسم الطلب
تستخدم التكاملات الجديدة reference_image_urls وmodel وresolution. الحقول التالية مشتركة بين جميع القوالب.
| الحقل | النوع | مطلوب | الوصف |
|---|---|---|---|
reference_image_urls | string[] | نعم | عدد N بالضبط من روابط صور HTTPS العامة غير الفارغة، وفق imageSlots للقالب. يقابل العنصر الأول @Image1 والثاني @Image2 وهكذا. يُحفظ الترتيب وكل العناصر مطلوبة. |
model | string | لا | basic | pro | ultra. الافتراضي pro. يجب أن يكون مسعّرًا للقالب والدقة المختارين. |
resolution | string | لا | 480p | 720p | 1080p. الافتراضي 720p. يدعم basic الدقتين 480p و720p. يدعم pro وultra أيضًا 1080p. يجب أن يكون الزوج مسعّرًا. |
متطلبات الصورة المرجعية
يجب أن تحتوي reference_image_urls على N روابط HTTPS عامة بالضبط؛ N هي قيمة imageSlots للقالب من GET /api/template-prices (من 1 إلى 5). يجب أن تكون كل صورة JPEG أو PNG أو WebP وبحجم أقصى افتراضي 10 MB وعلى المنفذ 443. تؤدي السلاسل الفارغة وnull والعناصر الناقصة أو الزائدة إلى HTTP 400. ينزّل الخادم الصور ويحفظها بالترتيب. لا تُقبل الملفات المحلية أو العناوين الخاصة أو الروابط التي تتطلب مصادقة.
إعدادات القالب
يدعم basic دقتي 480p و720p؛ ويدعم pro وultra أيضًا 1080p. تتاح فقط التركيبات المسعّرة للقالب. يعرض GET /api/template-prices التركيبات وبيانات القالب. يتحكم القالب بالمدة والنسبة؛ احذف duration وaspect_ratio. تؤدي image_url وeffect وslots وprompt وreference_video_urls وcallBackUrl والحقول غير المعروفة إلى HTTP 400.
يحدد القالب النسبة 9:16 أو 16:9 أو adaptive. تتبع adaptive نسبة فيديو القالب المرجعي. لا ترسل aspect_ratio وإلا تعاد HTTP 400. تحدد المطالبة المحفوظة والوسائط والمدة وعدد الصور تأثيرًا ثابتًا.
GET /api/template-pricesرد ناجح
القيم للتوضيح فقط. مبلغ 30 رصيدًا ليس سعرًا ثابتًا؛ اعتمد على السعر الذي يعيده طلبك.
{
"code": 0,
"message": "ok",
"data": {
"taskId": "550e8400-e29b-41d4-a716-446655440000",
"status": "processing",
"credits_estimate": 30,
"credits_charged": 30
}
}| الحقل | النوع | مطلوب | الوصف |
|---|---|---|---|
data.taskId | string (uuid) | نعم | معرّف UUID للمهمة يعيده طلب الإنشاء. |
data.status | string | نعم | تكون دائمًا processing عند نجاح الإنشاء. |
data.credits_estimate | integer | نعم | سعر المهمة بالأرصدة، يُحجز عند الإنشاء. |
data.credits_charged | integer | نعم | الأرصدة المحجوزة أثناء المعالجة، والمبلغ النهائي بعد أي استرداد عند انتهاء المهمة. |
صور مرجعية متعددة
إذا كان imageSlots = 3، أرسل ثلاثة روابط بالضبط بترتيب مراجع المطالبة. استبدل YOUR_TEMPLATE_SLUG بمعرّف القالب. لا يعني المثال أن Bulin أو Dame Hombro يتطلبان ثلاث صور. لا توجد معاملات للموضع أو effect أو slots.
curl --request POST \
'https://freerapvideo.com/api/v1/templates/YOUR_TEMPLATE_SLUG/generations' \
--header "Authorization: Bearer $FREERAP_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
"reference_image_urls": ["https://cdn.example.com/image-1.jpg", "https://cdn.example.com/image-2.jpg", "https://cdn.example.com/image-3.jpg"],
"model": "pro",
"resolution": "720p"
}'الاستعلام عن مهمة
/api/v1/generations/{taskId}يعيد حالة مهمة أُنشئت عبر API وتخص مستخدم المفتاح. لا يوجد جسم للطلب. استخدم مفتاح الإنشاء أو مفتاحًا صالحًا آخر للمستخدم نفسه.
| الحقل | النوع | مطلوب | الوصف |
|---|---|---|---|
taskId | string (uuid) | نعم | معرّف UUID للمهمة يعيده طلب الإنشاء. |
رد ناجح
{
"code": 0,
"message": "ok",
"data": {
"taskId": "550e8400-e29b-41d4-a716-446655440000",
"status": "success",
"campaign": "bulin",
"costCredits": 30,
"credits_estimate": 30,
"credits_charged": 30,
"createdAt": "2026-10-31T00:00:00.000Z",
"videos": [
"https://media.example.com/generated/video.mp4"
]
}
}| الحقل | النوع | مطلوب | الوصف |
|---|---|---|---|
data.taskId | string (uuid) | نعم | معرّف UUID للمهمة يعيده طلب الإنشاء. |
data.status | string | نعم | pending | processing | success | failed | canceled. راجع جدول الحالات أدناه. |
data.campaign | string | لا | معرّف القالب العام. قد يغيب عن المهام القديمة. |
data.credits_estimate | integer | نعم | سعر المهمة بالأرصدة، يُحجز عند الإنشاء. |
data.credits_charged | integer | نعم | الأرصدة المحجوزة أثناء المعالجة، والمبلغ النهائي بعد أي استرداد عند انتهاء المهمة. |
data.costCredits | integer | نعم | حقل توافق بالقيمة نفسها الموجودة في credits_charged. |
data.createdAt | string (date-time) | نعم | وقت الإنشاء بصيغة ISO 8601 وبتوقيت UTC. |
data.videos | string[] | نعم | عناوين الفيديوهات المستضافة لدى FreeRap عند النجاح؛ مصفوفة فارغة في بقية الحالات. |
data.error | string | لا | وصف الخطأ عند توفره. يغيب أثناء pending أوprocessing، وليس رمز خطأ ثابتًا. |
حالات المهمة
| الحالة | نهائية | الوصف |
|---|---|---|
pending | لا | في قائمة الانتظار. واصل الاستعلام. |
processing | لا | قيد التوليد. واصل الاستعلام. |
success | نعم | اكتملت. اقرأ videos وتوقف عن الاستعلام. |
failed | نعم | فشلت. اقرأ error إن وجد وتوقف عن الاستعلام. |
canceled | نعم | أُلغيت. توقف عن الاستعلام. |
استعلم كل 30 ثانية تقريبًا وتوقف عند الحالة النهائية. انتهاء مهلة الاستعلام لا يعني فشل التوليد؛ استعلم عن المهمة نفسها مجددًا.
رد فشل التوليد
يعني HTTP 200 وcode 0 نجاح الاستعلام فقط. قد يفشل التوليد؛ افحص data.status دائمًا. تعيد المهمة الفاشلة مصفوفة videos فارغة وقد تتضمن error.
{
"code": 0,
"message": "ok",
"data": {
"taskId": "550e8400-e29b-41d4-a716-446655440000",
"status": "failed",
"campaign": "bulin",
"costCredits": 0,
"credits_estimate": 30,
"credits_charged": 0,
"createdAt": "2026-10-31T00:00:00.000Z",
"videos": [],
"error": "Video generation failed."
}
}الأخطاء
تستخدم أخطاء الطلب حالة HTTP خارج 2xx والجسم التالي. تكون code دائمًا -1؛ ميّز الفئات بحالة HTTP. message نص توضيحي وليس معرّف خطأ ثابتًا للبرامج.
{
"code": -1,
"message": "Insufficient credits."
}| حالة HTTP | الواجهة | السبب | الإجراء |
|---|---|---|---|
400 | POST | JSON أو حقول أو صورة أو نموذج أو دقة أو مدة غير صالحة. | صحح الطلب قبل إعادة المحاولة. |
401 | POST / GET | مفتاح API مفقود أو غير صالح. | راجع ترويسة Authorization والمفتاح. |
402 | POST | رصيد FreeRap غير كافٍ. لا تبدأ المهمة. | أضف أرصدة ثم أنشئ المهمة. |
403 | POST | لا يوجد سعر للقالب مع هذا الزوج من النموذج والدقة. | اختر زوجًا مسعّرًا من /api/template-prices. |
404 | POST / GET | القالب غير متاح، أو المهمة مفقودة أو محذوفة أو غير متاحة للمستخدم أو لم تُنشأ عبر API. | تحقق من slug ومعرّف المهمة والحساب. توقف عن الاستعلام عن مهمة غير متاحة. |
429 | POST / GET | تجاوز معدل الطلبات أو حد 30 مهمة قيد التنفيذ. | التزم بـRetry-After إن وُجدت أو انتظر انتهاء المهام الجارية. |
500 | POST / GET | خطأ غير متوقع في الخادم. | أعد الاستعلام لاحقًا. قد يكون الإنشاء قد بدأ؛ تجنب تكرار الإرسال. |
503 | POST | تسعير الأرصدة أو التخزين أو خدمة التوليد غير متاحة. | أعد المحاولة لاحقًا وتواصل مع الدعم إن استمر الخطأ. |
الأرصدة والحدود
تُحجز الأرصدة عند الإنشاء. أثناء pending أوprocessing تساوي credits_charged قيمة credits_estimate. عند النجاح يُحتفظ بالمبلغ. عند الفشل أو الإلغاء يُرد الحجز بعد خصم رسوم الفشل إن ضُبطت، وافتراضيًا هي 0. تعرض credits_charged في الحالة النهائية المبلغ المحتفظ به.
يسمح كل مفتاح بما يصل إلى 30 مهمة pending أوprocessing. على كل نسخة خادم، الحد هو طلب إنشاء واحد وخمسة استعلامات في الثانية لكل مفتاح. قد يتضمن HTTP 429 ترويسة Retry-After بالثواني؛ إن غابت، انتظر قبل إعادة المحاولة.
