المظهر
اللغة

توليد الوسائط

POST /api/media/generate — توليد غير متزامن للصور والفيديو وتحويل النص إلى كلام والموسيقى والرسوم ثلاثية الأبعاد. المعلمات model و prompt و opts. استطلع النتيجة عبر GET /api/media/jobs/{id}.

توليد الوسائط غير المتزامن: الصور والفيديو والتعليق الصوتي (TTS) وتحويل الكلام إلى نص والموسيقى والـ 3D. تنشئ مهمة ثم تتبّع النتيجة. تجد قائمة الطرازات الكاملة في media-models catalog؛ أما الـ webhooks والأخطاء والفوترة ففي webhook section.

POSThttps://getvibeapi.com/api/media/generate
GEThttps://getvibeapi.com/api/media/jobs/{id}

معاملات الإنشاء

المعلمةالنوعالوصف
modelreq.stringاسم نموذج وسائط، مثل veo-3.1 أو gpt-image-2 (انظر الكتالوج).
promptreq.stringوصف نصي.
optsobjectخيارات توليد إضافية (حسب النموذج): الدقة والمدة وما إلى ذلك.

الإنشاء والاستعلام

يُعيد الإنشاء 202 مع { ok: true, jobId, status: "processing" }. استعلم بـ GET /api/media/jobs/{jobId} حتى status: "success"، ثم خُذ resultUrls.

# 1. create a generation job
curl https://getvibeapi.com/api/media/generate \
  -H "Authorization: Bearer $GETVIBE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "veo-3.1",
    "prompt": "a cat on a skateboard, slow motion"
  }'
# → {"ok":true,"jobId":"...","status":"processing"}
تعتمد الفوترة على حجم التوليد الفعلي (الدقة، المدة). وإذا كان النموذج غير متاح أو رُفض الطلب، تأتي الاستجابة مع ok: false دون أي احتساب. وأسعار الموقع إرشادية؛ ويُعاد المبلغ الدقيق في ترويسة x-pv-cost-rub لكل استجابة مقبولة. ولا تتغيّر أجسام البث افتراضيًا؛ أرسل x-pv-cost: 1 لإضافة التكلفة إلى حدث الاستخدام النهائي لذلك البروتوكول.

معاملات متقدمة (opts)

إلى جانب model وprompt، يمكنك تمرير خيارات إضافية في opts. وتعتمد المجموعة على النموذج. أما العقد الكامل القابل للقراءة آليًا فهو متاح عبر GET /api/model-capabilities (أو GET /api/model-capabilities/{model} لنموذج محدّد).

المعاملات المتقدمة شائعة الاستخدام
المعلمةالنوعالوصف
aspect_ratiostringAspect ratio: 1:1, 16:9, 9:16, 4:3, 3:4.
durationstring|numberمدة الفيديو بالثواني (5، 10، 15).
resolutionstringResolution: 480p, 720p, 1080p, 4K.
image_urlstring (URL)الصورة المصدر لـ I2V / تحويل صورة إلى صورة.
negative_promptstringما يجب استبعاده من التوليد (qwen-image, wan-2-7).
guidancenumberمقياس التوجيه — مدى الالتزام بالطلب النصي (flux-2، qwen-image، seedance).
seednumberSeed للحصول على نتيجة قابلة لإعادة الإنتاج (flux-2).
stabilitynumberالثبات 0–1 (hailuo، happyhorse، seedance، TTS).
camerastringحركة الكاميرا، مثل "pan left" (kling-3.0، hailuo).
first_frame_urlstring (URL)First frame for I2V (kling-3.0, wan-2-7).
last_frame_urlstring (URL)الإطار الأخير لـ I2V (seedance، kling-3.0، wan-2-7).
reference_imagestring (URL)مرجع النمط/الشخصية (happyhorse).
similarity_boostnumberتشابه الصوت 0–1 ‏(ElevenLabs TTS).
speednumberسرعة الكلام 0.5–2 (ElevenLabs TTS).
جميع المعاملات اختيارية ما لم يُذكر خلاف ذلك. تُتجاهل المعاملات غير المعروفة. تجد القائمة الكاملة بالأنواع والنطاقات والأمثلة في استجابة GET /api/model-capabilities/{model}.

ملفاتك الخاصة: base64 بدلًا من رابط

خيارات URL ‏(image_url، input_urls، mask_url وما عداها) هي روابط يجلبها المزوّد، لذا تقبل فقط عناوين https:// عامة. ويُرفض أي نص data:image/...;base64,… مضمَّن في أحد تلك الحقول مع 400.

لإرسال ملفك الخاص، استخدم حقل *_base64 المطابق بدلًا من ذلك: تخزّن الخدمة البايتات وتنشرها وتمرّر الرابط الناتج إلى المزوّد. حتى 16 ملفًا لكل طلب في input_base64.

الملفات المضمّنة
المعلمةالنوعالوصف
image_base64stringالصورة المصدر. تحل محل image_url.
mask_base64stringقناع Inpainting (صور فقط image/*). يستبدل mask_url.
input_base64string[]مراجع للتحويل من صورة إلى صورة والمدخلات المتعددة. تحل محل input_urls.
audio_base64stringالصوت المصدر. يحل محل audio_url.
video_base64stringفيديو المصدر. يحل محل video_url.
القيمة هي سلسلة data:image/png;base64,… الكاملة بما فيها البادئة — ويُقرأ نوع الملف منها.

عقد الطلب: strict, quote_id, max_price_rub

يقبل POST /api/media/generate و POST /api/media/price النص نفسه، لذا يمكنك تسعيره ثم إرساله دون تغيير. لا توجد حقول أخرى على المستوى الأعلى: يُرفض أي حقل غير معروف على كلا النقطتين بالرمز 400 وكود unknown_field مع تسميته (field, fields)، مع strict أو بدونه. تُوضع معلمات التوليد داخل opts.

الحقول من المستوى الأعلى
المعلمةالنوعالوصف
modelreq.stringمعرّف نموذج عام أو أحد مساراته (base:alias).
promptstringالنص؛ مطلوب فقط عندما تتطلبه عملية النموذج.
optsobjectخيارات النموذج. المخطط الدقيق: operations[].requestJsonSchema في GET /v1/model-capabilities/{model}.
strictbooleanالوضع الصارم (أو الترويسة x-getvibe-strict: 1): يُرفض أي طلب لن يُنفَّذ كما كُتب تمامًا (بسبب إسقاط معلمة، أو تقييد قيمة بالحدود المسموح بها، أو وجود مفتاح خارج نطاق مواصفات النموذج) بالرمز 422 strict_validation_failed وقائمة violations، قبل تقديم أي عرض سعر أو احتساب أي رسوم. لا يُعدّ الحقل الموثَّق الذي يقبله النموذج ويتجاهله (duration في النماذج التي تعتمد طول المصدر) مخالفة: بل يُعاد بوصفه تحذيرًا من نوع param_ignored.
quote_idstringmq_… من POST /api/media/price. لا تُنفَّذ المهمة إلا بذلك السعر؛ ويُرفض العرض القديم أو المستخدَم أو المعاد توجيهه بـ 409/422 قبل تشغيل أي شيء.
max_price_rubnumberالحد الأقصى لهذه المهمة الواحدة بعملة الحساب. إذا كان العرض أعلى: 422 media_max_price_exceeded ولن يُنفَّذ أي شيء. لا تُحتسب على مهمة مقيسة رسوم تتجاوز هذا الحد أبدًا.
webhook_urlstringرابط https عام يستقبل إشعار إتمام موقّعًا.

الملفات حسب المعرّف (Files API)

يمكن إرسال أي ملف مصدر بثلاث طرق: كرابط (image_url، audio_url، video_url…)، أو كبايتات مضمَّنة (image_base64، audio_base64، video_base64…)، أو كمعرّف ملفك الخاص من POST /v1/files. حقول المعرّف مدرجة في requestJsonSchema لكل عملية ومقبولة في الوضع الصارم.

المعلمةالنوعالوصف
image_file_idstringبدلًا من image_url.
audio_file_idstringبدلًا من audio_url.
video_file_idstringبدلًا من video_url.
mask_file_idstringبدلًا من mask_url.
first_frame_file_id / last_frame_file_idstringInstead of first_frame_url / last_frame_url.
input_file_idsstring[]تُضاف إلى input_urls.
reference_*_file_idsstring[]Appended to reference_image_urls / reference_audio_urls / reference_video_urls.

تسعير الفيديو بحسب طول الملف المُدخَل

بالنسبة إلى النماذج التي يتبع طول مخرجاتها مسارًا مرفوعًا — kling-ai-avatar، omnihuman-v2، omnihuman-2-0، omnihuman-v1.5، omnihuman-1-5، volcengine-lipsync (audio)، kling-motion-control، wan-animate، topaz-video-upscale، p-video-edit (video)، lipsync-2-pro، sync-3، react-1 (both inputs) — تقيس /api/media/price وفحص ما قبل التنفيذ max_price_rub على /api/media/generate ذلك الملف من جانب الخادم (link أو data: URI أو base64 أو *_file_id)، وتحتسب السعر وفق الثواني المقاسة. تتضمن الاستجابة sourceSeconds (outputSeconds for lip-sync)، ويذكر estimateReason أنه تم قياس الطول. وإذا تعذّر قراءة الملف، يبقى السعر مستندًا إلى أساسه السابق (ثانية واحدة أو تقدير الكتالوج أو الحد الأقصى للمسار)، ويذكر estimateReason ذلك. وتساوي التكلفة معدل الثانية × عدد الثواني التي تم عرضها فعليًا، على ألا تتجاوز max_price_rub مطلقًا. ويُقبل opts.duration في هذه النماذج ويتم تجاهله مع تحذير param_ignored.

استنساخ الصوت

POSThttps://getvibeapi.com/api/media/voices
GEThttps://getvibeapi.com/api/media/voices
POSThttps://getvibeapi.com/api/media/voices/{voice_id}/samples
DELETEhttps://getvibeapi.com/api/media/voices/{voice_id}

Create: { name, consent: true, engine, audio_url | audio_base64 } or several recordings samples: [{ audio_url } | { audio_base64 }, …] (engine: "elevenlabs" only). An ElevenLabs voice is used by voice-clone-tts and by the Voice Changer (elevenlabs-voice-changer). Appending recordings to an ElevenLabs voice is free. Every recording is downloaded and measured before the supplier is called: a refusal changes and charges nothing.

الحدود وأكواد الأخطاء
المعلمةالنوعالوصف
one recording≤ 10 MBwav/mp3, up to 60 s. Larger: 422 voice_sample_too_large / voice_sample_invalid.
recordings per voice≤ 25مع احتساب تلك المضافة بالفعل. المزيد: 422 voice_samples_limit.
voice length≤ 300 sجميع التسجيلات معًا، بما في ذلك المُضافة بالفعل. الأطول: 422 voice_samples_limit؛ والأقصر من الحد الأدنى للمحرك: 422 voice_samples_invalid.
recordings size≤ 50 MBجميع تسجيلات الطلب الواحد معًا. المزيد: 422 voice_samples_too_large.
request body≤ 70 953 644 B50 ميغابايت من التسجيلات بترميز base64 (×4/3) إضافةً إلى JSON. الأحجام الأكبر: 413 payload_too_large (بصيغة JSON، مع max_body_bytes). أرسل المجموعات الطويلة على أجزاء عبر …/samples، أو على هيئة روابط audio_url.
additions per 24 h20لكل عميل. المزيد: 429 voice_samples_rate_limited.
استجابات أخرى: 404 voice_not_found (صوت غير معروف أو محذوف أو يخص حسابًا آخر)، 409 voice_samples_unsupported (لا يمكن إضافة التسجيلات إلا إلى صوت ElevenLabs)، 409 voice_slots_full، 502 voice_samples_failed (رفض المورّد التسجيلات؛ الصوت دون تغيير). يُفوتر صوت ElevenLabs شهريًا؛ الأسعار في GET /api/media/voices (pricing).

مغيّر الصوت والمحاذاة القسرية

المعلمةالنوعالوصف
elevenlabs-voice-changermodelopts.voice_id (your ElevenLabs voice) + the source recording opts.audio_url | audio_base64 | audio_file_id, up to 5 minutes. Priced on the measured length: 1 minute = 1000 characters.
forced-alignmentmodelprompt is the transcript, opts.audio_url | audio_base64 | audio_file_id the recording. Result: word timings in resultMeta.words and an SRT file in resultUrls. Priced per 1000 characters of text.

بيئة اختبار: نتيجة إرسال غير معروفة

عندما لا يصل تأكيد البدء من المورّد، تبقى المهمة في الحالة: "submitting" مع stage: "submission_unknown"، وerrorCode: "media_submission_uncertain"، وfailure.advice: "reconcile_first" — واصل الاستعلام عن نفس jobId ولا تنشئ نسخة مكرّرة. لاختبار هذا المسار دون أي تكلفة، أرسل POST /api/media/generate بمفتاح sandbox مع الترويسة x-pv-sandbox-outcome: submission_uncertain. تكون الإجابة 202 عادية مع jobId؛ ويجيب الاستعلام عنه كإرسال غير معروف لمدة 60 ثانية، ثم كمهمة لم تبدأ قط (failure.code: "submission_not_started"، charged: false). لا يُخزَّن شيء ولا يُرسَل إلى أي مورّد ولا يُحتسب أي مبلغ. أما المفتاح العادي مع هذه الترويسة فيحصل على 400 sandbox_outcome_requires_sandbox_key.

تحويل الكلام إلى نص (النسخ)

المسار نفسه المستخدم لبقية عمليات التوليد: ضع اسم طراز STT في model، واترك prompt سلسلة فارغة، ومرّر التسجيل في opts.audio_url. يصل النص المكتوب في resultText عند GET /api/media/jobs/{id}؛ ويبقى resultUrls فارغاً — فالنسخ الكتابي لا ينتج أي ملف.

# speech-to-text: create the job, then read the transcript
curl https://getvibeapi.com/api/media/generate \
  -H "Authorization: Bearer $GETVIBE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "whisper-large-v3-turbo",
    "prompt": "",
    "opts": {
      "audio_url": "https://example.com/meeting.mp3",
      "language_code": "en"
    }
  }'
# → {"ok":true,"jobId":"JOB_ID","status":"processing","priceRub":0.03}

curl https://getvibeapi.com/api/media/jobs/JOB_ID \
  -H "Authorization: Bearer $GETVIBE_API_KEY"
# → {"status":"success","resultText":"the transcribed text…","resultUrls":[],"priceRub":0.03}

النماذج

  • whisper-large-v3-turbo — 0.00025 دولار لكل دقيقة من الصوت. الأرخص والأسرع، ويدعم 99 لغة.
  • nemotron-asr-multilingual — 0.00025 دولار لكل دقيقة. تعرّف آلي متعدد اللغات من NVIDIA، ويضيف علامات الترقيم من تلقاء نفسه.
  • whisper-large-v3 — 0.000563 دولار لكل دقيقة. Whisper كامل: أبطأ من turbo، لكنه أدق مع الصوت المشوّش.
  • universal-2 — 0.003125 دولار لكل دقيقة.
  • speech-to-text — 0.01 دولار لكل دقيقة (ElevenLabs Scribe). يدعم تمييز المتحدثين ووسوم الأحداث الصوتية.

المعلمات

المعلمةالنوعالوصف
audio_urlreq.string (URL)رابط https عام يقدّم الملف مباشرة. تُرفض عمليات إعادة التوجيه وعناوين الشبكات الخاصة. استخدم audio_base64 بدلًا منه إذا لم يكن الملف متاحًا على الإنترنت.
audio_base64stringالتسجيل مضمَّنًا كبيانات: data:audio/mpeg;base64,… يحل محل audio_url.
language_codestringرمز اللغة (en, ru, …). يُكتشف تلقائيًا عند حذفه.
duration_minutesnumberطول التسجيل بالدقائق — يُستخدم في تقدير السعر المسبق. أما الفاتورة النهائية فتُحتسب بالقياس (انظر أدناه).
diarizebooleanتقسيم المتحدثين (universal-2، تحويل الكلام إلى نص).
tag_audio_eventsbooleanوسم الأحداث الصوتية مثل الضحك أو التصفيق (تحويل الكلام إلى نص).
keytermsstring[]قائمة تلميحات بالمصطلحات والأسماء (تحويل الكلام إلى نص؛ +30% على السعر).

الصيغ والحدود

تُقبل mp3 و wav و m4a/mp4 و flac و ogg/opus و webm. الحد الأقصى لحجم الملف 25 ميغابايت — أي نحو 26 دقيقة من mp3 بمعدل 128 kbps، أو عدة ساعات من الكلام بصيغة opus. وكل ما يتجاوز ذلك يُرفض فورًا برسالة صريحة ولا تُحتسب له فاتورة؛ قسّم التسجيل بدلًا من ذلك.

الفوترة لكل دقيقة من الصوت. وبالنسبة إلى whisper-large-v3-turbo وwhisper-large-v3 وnemotron-asr-multilingual يُحسب المبلغ النهائي من المدة المقيسة للتسجيل، مأخوذةً من النص المكتوب — لا مما مرّرته في duration_minutes. والحد الأدنى للاحتساب هو كوبيك واحد. ويُعاد المبلغ الدقيق دائمًا باسم priceRub في المهمة المكتملة.

خطاف الجاهزية (بدلًا من الاستقصاء الدوري)

لتجنب الاستقصاء الدوري، سجّل عنوانًا واحدًا mediaWebhookUrl في لوحة التحكم. وعند اكتمال المهمة (نجاحًا أو خطأً)، تُجري الخدمة حتى خمس محاولات تسليم لـ POST بجسم JSON:

// POST to your mediaWebhookUrl when a job finishes
{
  "jobId": "...",
  "status": "success",            // or "fail"
  "model": "veo-3.1",
  "kind": "video",                // image | video | audio | music | 3d
  "resultUrls": ["https://getvibeapi.com/api/media/file/..."],
  "failMsg": null,
  "createdAt": "2026-06-17T10:00:00.000Z"
}
تفاصيل التسليم ورموز الأخطاء والفوترة في دورة حياة الـ webhook ومهام الوسائط. باختصار: يُوقّع الـ webhook بترويسات Standard Webhooks، والتكرارات ممكنة، ويتوقف التسليم بعد خمس محاولات فاشلة. ويبقى الاستعلام هو مصدر الحقيقة.

جلب الملف: /api/media/file/{id}/{idx}

GEThttps://getvibeapi.com/api/media/file/{id}/{idx}

رابط نتيجة التوليد (صورة أو فيديو أو صوت أو نموذج 3D) من resultUrls. استخدمه كما يُعيده هو: يُفتح دون مفتاح API ويعمل في <img> أو <video> أو المتصفح. المزوّد مخفي: يُستنبط العنوان الأعلى من جهة الخادم ولا يراه العميل قط.

معلمات المسار والاستعلام
المعلمةالنوعالوصف
idreq.string (path)معرّف المهمة (jobId) من استجابة /api/media/jobs/{id}.
idxreq.integer (المسار)فهرس النتيجة (يبدأ من 0). لنتيجة واحدة — 0.
query paramsكما في resultUrlsلا تبنِ الرابط بنفسك ولا تعدّل المعاملات التي تُعيدها الخدمة.
downloadstring (query)يعيد download=1 الملف كمرفق يتبع اسمه وامتداده نوع المحتوى (.glb لنموذج ثلاثي الأبعاد). وبدونه يُفتح الملف في المتصفح.
# The signed URL is returned in resultUrls of the /api/media/jobs/{id} response
# or in the webhook body. Opens directly in the browser / <img> — no key needed.
https://getvibeapi.com/api/media/file/JOB_ID/0?sig=HMAC_SIGNATURE
تُحفظ النتائج لمدة 7 أيام بعد اكتمال المهمة (حقل resultsExpireAt في /api/media/jobs/{id}). يُنسخ الملف النهائي إلى مساحة التخزين لدينا وتتحوّل resultUrls إلى عنوان دائم بالصيغة https://getvibeapi.com/media/r/…؛ ويظل رابط /api/media/file/… الذي أُعيد سابقًا يعمل أيضًا. ويدعم كلا العنوانين طلبات Range (التنقل داخل الفيديو والصوت). وبعد 7 أيام يُحذف الملف ويُعيد العنوان 410 Gone مع الرمز media_result_expired — نزّل ما تحتاجه قبل ذلك.
توليد الوسائط في GetVibe API — الصور والفيديو والصوت والموسيقى و3D | GetVibe API