ClipMaster API
أتمت ClipMaster من سطر الأوامر، أو من سكربتاتك، أو من مساعد ذكي. نقاط النهاية نفسها التي يستخدمها التطبيق — تُحتسب بالتوكنات نفسها، بلا فوترة منفصلة.
تفضّل النص العادي؟ اقرأ هذه الصفحة بصيغة Markdown — مصممة للنماذج اللغوية والوكلاء. تستخدم Claude؟ اربط خادم MCP بدل استدعاء نقاط النهاية يدويًا.
نظرة عامة
استخدم ClipMaster برمجيًا بمفتاح API. كل نقطة نهاية تعمل تمامًا كما في التطبيق، ضمن مشاريعك ومقاطعك فقط. الوصول إلى API متاح في الخطط المدفوعة.
عنوان URL الأساسي:
https://api.clipmaster.app/api/v1
المصادقة
أنشئ مفتاحًا في التطبيق من الإعدادات ← الوصول إلى API. يظهر المفتاح كاملًا (cm_live_…) مرة واحدة عند إنشائه — احفظه في مكان آمن. أرسله كـ Bearer token في ترويسة Authorization:
curl https://api.clipmaster.app/api/v1/projects \-H "Authorization: Bearer cm_live_xxxxxxxxxxxxxxxxxxxx"
- في الترويسة فقط. لا تُقبل المفاتيح كمعامل استعلام
?token=. - المفتاح مرتبط بحسابك ويتصرف باسمك، ضمن بياناتك فقط.
- ألغِ أي مفتاح في أي وقت من الإعدادات؛ والمفتاح الملغى يتوقف عن العمل فورًا.
403 session_auth_required لتسجيل الدخول/OAuth، الفوترة والدفع (يُسمح بقراءة رصيد التوكن والاستخدام)، الإدارة، إدارة مفتاح API، وربط قناة اجتماعية. اربط قناتك في تطبيق الويب أولاً — كل شيء آخر قابل للبرمجة.بعض نقاط النهاية هي ميزات خطة مدفوعة، ومُشار إليها أدناه باسم الميزة (على سبيل المثال compilation). في خطة بدونها، تُجيب 403 subscription_required مع تلك feature.
حدود الطلبات
120 طلبًا في الدقيقة لكل مفتاح. تجاوز الحد يعيد 429 مع ترويسة Retry-After.
تخضع نقاط نهاية الذكاء الاصطناعي (الاقتراحات، التحرير التلقائي، قياس الصوت، الترتيب) أيضًا لقيودها الخاصة لكل مستخدم وتجيب 429 بنفس الطريقة.
بداية سريعة
استورد فيديو من YouTube، وانتظر المعالجة، ثم اعرض المقاطع ونزّلها. اضبط هذه المتغيرات مرة واحدة في الطرفية:
KEY="cm_live_xxxxxxxxxxxxxxxxxxxx"BASE="https://api.clipmaster.app/api/v1"
الطلب
curl -X POST "$BASE/upload/from-url" \-H "Authorization: Bearer $KEY" \-H "Content-Type: application/json" \-d @body.json
جسم الطلب
{"source_url": "https://youtube.com/watch?v=..."}
الاستجابة
{"project_id": 123,"task_id": "a1b2c3d4-5e6f-7890-abcd-ef1234567890","message": "Processing started","progress_url": "/api/v1/projects/123/status"}
الطلب
curl "$BASE/projects/123/status" \-H "Authorization: Bearer $KEY"
الاستجابة
{"project_id": 123,"status": "completed","progress": 1.0,"progress_percent": 100,"total_clips": 6,"processing_complete": true}
الطلب
curl "$BASE/projects/123/clips" \-H "Authorization: Bearer $KEY"
الاستجابة
[{"clip_id": 456,"start_time": 0.0,"end_time": 42.3,"description": "Founder explains the pivot","status": "ready"}]
الطلب
# Render it (charges tokens) -> {"export_id": 37, "status": "rendering", ...}curl -X POST "$BASE/projects/123/clips/456/export" \-H "Authorization: Bearer $KEY"# Poll until "status" is "completed"curl "$BASE/exports/37/status" -H "Authorization: Bearer $KEY"# The clip's exports, newest firstcurl "$BASE/exports?clip_id=456" -H "Authorization: Bearer $KEY"# Download from the newest completed export's download_urlcurl -L "$DOWNLOAD_URL" -o clip.mp4
التنزيل هو دائمًا تصدير: المقطع مُصيَّرًا بترجماته وتأثيراته وقصّه المحفوظة. download_url رابط S3 موقَّع صالح حتى الساعة 00:00 UTC التالية (30 دقيقة على الأقل) — دون ترويسة مصادقة. استدعِ GET /exports مجددًا للحصول على رابط جديد.
الرفع
للملفات، استخدم تدفق التحميل ذو الخطوتين؛ لـ YouTube، استورد بواسطة URL. كلاهما يأخذ نفس الحقول الاختيارية: processing_mode (تلقائي، دلالي أو فيديو كامل)، query، min_duration، orientation، علامات التسمية التوضيحية، و compilation_format مع compilation_prompt لبناء تجميع بمجرد أن تصبح المقاطع جاهزة. يستغرق المعالجة 1 توكن لكل دقيقة مصدر.
استورد رابط YouTube. تبدأ المعالجة فورًا؛ استعلم عن حالة المشروع المُرجع. مدفوع: youtube_import.
الطلب
curl -X POST "$BASE/upload/from-url" \-H "Authorization: Bearer $KEY" \-H "Content-Type: application/json" \-d @body.json
جسم الطلب
{"source_url": "https://youtube.com/watch?v=...","orientation": "vertical","compilation_format": "auto"}
الاستجابة
{"project_id": 123,"task_id": "a1b2c3d4-5e6f-7890-abcd-ef1234567890","message": "Processing started","metadata": { "duration_sec": 212.4, "resolution": "1920x1080" },"progress_url": "/api/v1/projects/123/status"}
الخطوة 1 من رفع ملف. تعيد وجهة رفع قصيرة الصلاحية: أرسل الملف بـ POST إلى upload.url مع upload.fields المُعادة كما هي، ثم استدعِ complete.
الطلب
curl -X POST "$BASE/uploads/init" \-H "Authorization: Bearer $KEY" \-H "Content-Type: application/json" \-d @body.json
جسم الطلب
{"filename": "talk.mp4","size_bytes": 94371840,"sha256": "e3b0c44298fc1c14...","duration_sec": 693.5,"content_type": "video/mp4"}
الاستجابة
{"project_id": 124,"upload": {"url": "https://uploads.clipmaster.app","fields": {"...": "opaque form fields - send them back unchanged"}},"expires_at": "2026-08-14T21:00:00Z"}
الخطوة 2: أكّد انتهاء الرفع وابدأ المعالجة.
الطلب
curl -X POST "$BASE/uploads/124/complete" \-H "Authorization: Bearer $KEY"
الاستجابة
{"project_id": 124,"task_id": "b2c3d4e5-...","message": "Processing started","progress_url": "/api/v1/projects/124/status"}
حمّل شعارًا، تعليقًا صوتيًا أو ملف مشهد تجميع بدون متصفح. purpose هو logo، narration، scene_video أو scene_image (الاثنان الأخيران مدفوعان: compilation). أرسل حقول POST المُرجعة، ثم الملف أخيرًا، إلى upload.url في غضون 15 دقيقة، ثم استخدم asset_key في /users/me/logo/from-upload، /projects/{id}/clips/{clip_id}/logo/from-upload، /compilations/{id}/narration/from-upload أو /compilations/{id}/media-scenes (باسم upload_key).
الطلب
curl -X POST "$BASE/uploads/assets" \-H "Authorization: Bearer $KEY" \-H "Content-Type: application/json" \-d '{"purpose": "logo", "content_type": "image/png", "size_bytes": 20480}'
الاستجابة
{"asset_key": "originals/staging/42/9f1c2b7e.png","upload": {"url": "https://s3.amazonaws.com/...","fields": { "...": "opaque form fields - send them back unchanged" }},"expires_at": "2026-09-11T21:15:00Z"}
الحالة والمقاطع
استعلم عن تقدم المعالجة. قيمة status واحدة من: uploading، uploaded، processing، completed، failed.
الطلب
curl "$BASE/projects/123/status" \-H "Authorization: Bearer $KEY"
الاستجابة
{"project_id": 123,"status": "processing","progress": 0.45,"progress_percent": 45,"current_step": "Transcription","total_scenes": 8,"total_clips": 0,"processing_complete": false}
اعرض المقاطع المُنشأة مع بياناتها الوصفية من الذكاء الاصطناعي (الخطّاف، نوع المقطع، الثقة).
الطلب
curl "$BASE/projects/123/clips" \-H "Authorization: Bearer $KEY"
الاستجابة
[{"clip_id": 456,"start_time": 0.0,"end_time": 42.3,"description": "Founder explains the pivot","display_name": null,"status": "ready","source": "Clipmaster","streaming_url": "https://clipmaster-media.s3.amazonaws.com/...mp4?...","features": {"scene_id": 2265,"clip_duration": 42.3,"vision_analysis": {"hook": "The moment everything changed","clip_type": "story","confidence": 0.9}}}]
تفاصيل كاملة لمقطع واحد — مجموعة شاملة من عنصر القائمة: كل حقل ميزة، تحليل الذكاء الاصطناعي للمشهد، حشوته، شارةه وانتشاره. كل إطار، الصوت والكلمات موجودة في GET …/analysis.
الطلب
curl "$BASE/projects/123/clips/456" \-H "Authorization: Bearer $KEY"
بنفس شكل عنصر القائمة أعلاه، مع كائن features كاملًا.
اعرض مشاريعك.
الطلب
curl "$BASE/projects" -H "Authorization: Bearer $KEY"
الاستجابة
[{"project_id": 123,"filename": "keynote.mp4","status": "completed","created_at": "2026-08-14T20:11:38Z","video_metadata": {"duration_sec": 693.5,"resolution": "1920x1080","detected_orientation": "horizontal"},"is_demo": false}]
احذف مشروعًا مع كل مقاطعه ومشاهده وملفاته.
الطلب
curl -X DELETE "$BASE/projects/123" \-H "Authorization: Bearer $KEY"
الاستجابة
{"project_id": 123,"success": true,"message": "Project deleted"}
أعد نسخ الفيديو بأكمله، في الخلفية. المقاطع التي تحتوي على كلماتها المحررة الخاصة بها تحتفظ بها. استعلم عن الحالة لـ project_config.transcription_rerun_status. لا توكنات؛ محدودة بمعدل.
الطلب
curl -X POST "$BASE/projects/123/transcription" \-H "Authorization: Bearer $KEY"
الاستجابة
{"project_id": 123,"status": "running","progress_url": "/api/v1/projects/123/status"}
التحليل
اقرأ التحليل، كـ JSON، لوضع تعديل على ما وجده. تستخدم مستندات المقطع وقت المشاهد — ساعة التراكبات والاقتراحات والتحرير التلقائي: ثوانٍ من بداية مشهده. يتم تشغيل المقطع من 0 إلى time.duration؛ الأوقات خارج ذلك هي المساحة المحيطة بالمشهد، حيث لا يمكن وضع التراكبات. تحتفظ قائمة اللحظات بما يتم تشغيله فقط، لذا يمكن وضع كل t كما هي؛ من تحليل المقطع الكامل، ضع الأوقات بين 0 و time.duration فقط. ثواني الفيديو = t + time.scene_start. يستخدم مستند الفيديو الثواني من بداية التحميل. الصناديق هي كسور {x, y, w, h} من الإطار. القراءة مجانية وتعمل على المشروع التجريبي.
تحليل المقطع المخزن بالكامل. الأقسام: scene (الوصف، الخطاف، الموضوع، النوع، النتيجة، الشارة، الانتشار)، layout (قصات الكاميرا، ولكل إطار، نوع اللقطة، الوجوه ولوحات الشاشة/كاميرا الويب)، audio (صوت عالٍ، هادئ، إيقاع، غناء؛ onsets=true يضيف كل ضربة)، transcript (كلمات المقطع، مع المتحدثين عند معرفتهم)، sound_events (ضحك، تصفيق، موسيقى)، video_moments، talk_scenes و auto_edit (اللقطة المخزنة، مع نطاقات سرعتها). include يختار الأقسام، مفصولة بفاصلة؛ الكل افتراضيًا.
الطلب
curl "$BASE/projects/123/clips/456/analysis?include=scene,layout,audio" \-H "Authorization: Bearer $KEY"
الاستجابة
{"project_id": 123,"clip_id": 456,"scene_id": 2265,"time": {"clock": "viewer","unit": "seconds","note": "0 = scene start, …","duration": 10.0,"scene_start": 100.0,"scene_end": 110.0,"clip_start": -2.0,"clip_end": 12.0},"analyses": {"layout": {"status": "completed","error": null,"step": null,"started_at": "2026-10-22T18:02:11+00:00","finished_at": "2026-10-22T18:02:40+00:00","what": "Faces, screen/webcam/gameplay panels, shot type per frame, camera cuts.","rest": "POST /api/v1/projects/123/clips/456/layout-analysis","mcp": "analyze_clip_layout","cost": "Paid plans (smart crop); no tokens."},"audio_cues": { "status": "completed", "...": "same fields" },"auto_edit": { "status": null, "...": "same fields" }},"scene": {"description": "He grabs the rim and the crowd erupts","hook": "The dunk nobody saw coming","topic": "basketball","clip_type": "reaction","score": 8,"...": "the rest of its stored AI fields","badge": { "label": "Highlight", "key": "highlight", "color": "#FF6B6B" },"virality": { "tier": "hot", "label": "Hot", "color": "#FF4444" }},"layout": {"current": true,"faces_placeable": true,"analyzed_at": "2026-10-22T18:02:40+00:00","model": "gemini-3.5-flash-lite","frame_interval": 2.0,"frame_size": { "width": 1920, "height": 1080 },"cuts": [4.0],"frames": [{ "t": 0.0, "shot": "solo_talking_head","faces": [{ "x": 0.4, "y": 0.1, "w": 0.2, "h": 0.4 }], "panels": [] },{ "t": 4.0, "shot": "screen_share_with_webcam","faces": [{ "x": 0.8, "y": 0.04, "w": 0.12, "h": 0.18 }],"panels": [{ "kind": "webcam_overlay", "x": 0.75, "y": 0.0, "w": 0.25, "h": 0.25,"highlighted": true }] }]},"audio": {"current": true,"measured_at": "2026-10-22T18:01:05+00:00","has_audio": true,"median_active_db": -20.0,"loud": [{ "t": 4.0, "end": 4.5, "over_db": 9.0 }],"quiet": [{ "start": -2.0, "end": -0.5, "level_db": -48.0 }],"beat": [{ "start": 0.0, "end": 10.0, "tempo_bpm": 120.0, "first_beat": 0.1, "period": 0.5 }],"singing": null}}
time و analyses موجودان دائمًا. تحتوي analyses على إدخال واحد لكل تشغيل حسب الطلب (layout، audio_cues، auto_edit): status قيد التشغيل، مكتمل، فاشل، قديم (تم وضع علامة قيد التشغيل لأكثر من 30 دقيقة، لذا من المحتمل أنه توقف — تحقق مرة أخرى قبل إعادة تشغيله) أو null (لم يتم تشغيله مطلقًا)، مع error، step (الخطوة الأخيرة التي تم الوصول إليها؛ ذات معنى أثناء التشغيل)، الطوابع الزمنية ونقطة النهاية التي تبدأه. layout، audio و auto_edit هي null حتى يتم تشغيلها؛ sound_events، video_moments و talk_scenes هي [] عندما لا يتم العثور على شيء. current: false يعني أن النتيجة لم تعد تتطابق مع المقطع: تم قص ملف الفيديو الخاص به مرة أخرى منذ ذلك الحين (القص وحده لا يغيره)، بالنسبة لـ layout أيضًا عندما لم يكتمل آخر تشغيل، بالنسبة لـ audio أيضًا عندما تغير القياس نفسه. القص يجعل auto_edit current: false، نظرًا لأن أوقاته على ساعة المشهد؛ قراءة أقدم لم تسجل مشهدها current: null (غير معروف). يتم تحويل أوقات الصوت من الملف الذي تم قياسها عليه. القسم غير المعروف هو 400 unknown_section.
المقطع كقائمة واحدة مرتبة زمنيًا من {t, kind, source, …}: cut، shot و faces (عندما يتغير عدد اللقطات أو الوجوه)، أدوار speaker، sound، loud، quiet، beat، singing و moments من تمرير الرؤية. يتم سرد ما يتم تشغيله فقط — تم قص الامتدادات إلى 0–time.duration، لقطة، عدد وجوه أو مجموعة متحدثين في المساحة المحيطة التي تم نقلها إلى 0، أي شيء آخر في المساحة المحيطة تم تركه — لذا فإن كل t يذهب إلى POST …/overlays كما هو. يتم حذف تحليل التخطيط أو الصوت الذي لم يعد يتطابق مع المقطع ويتم تسميته في stale. مع summary للمشهد، ما هي التحليلات available، و analyses. نفس ساعة تحليل المقطع.
الطلب
curl "$BASE/projects/123/clips/456/moments" \-H "Authorization: Bearer $KEY"
الاستجابة
{"project_id": 123,"clip_id": 456,"time": { "clock": "viewer", "duration": 10.0, "...": "as in …/analysis" },"summary": {"description": "He grabs the rim and the crowd erupts","hook": "The dunk nobody saw coming","topic": "basketball","clip_type": "reaction","score": 8},"available": { "layout": true, "audio": true, "transcript": true, "video_moments": true },"stale": [],"analyses": { "...": "as in …/analysis" },"moments": [{ "t": 0.0, "kind": "beat", "source": "audio", "end": 10.0, "tempo_bpm": 120.0 },{ "t": 0.0, "kind": "faces", "source": "layout", "count": 1 },{ "t": 0.0, "kind": "shot", "source": "layout", "detail": "solo_talking_head" },{ "t": 0.0, "kind": "speaker", "source": "transcript", "speaker": "speaker_0", "first_word": "Here" },{ "t": 1.0, "kind": "moment", "source": "video", "end": 3.0, "detail": "action_peak","score": 8, "description": "Rim grab" },{ "t": 3.0, "kind": "sound", "source": "transcript", "end": 4.0, "detail": "laughter" },{ "t": 4.0, "kind": "cut", "source": "layout" },{ "t": 4.0, "kind": "loud", "source": "audio", "end": 4.5, "over_db": 9.0 },{ "t": 4.0, "kind": "shot", "source": "layout", "detail": "screen_share_with_webcam" }]}
الفيديو بأكمله، على وقت الفيديو: metadata، transcript حسب المقطع مع المتحدثين، sound_events، video_moments من تمرير الرؤية و talk_scenes من تمرير النص (كل منها مع …_status وكتلة …_pass: حالة النموذج وتمريره، بالإضافة إلى خطأ ووقت تمرير الرؤية)، وكل مشهد مع خطافه ودرجته وعلامة degraded (صحيح: فشلت خطوة مشهد الذكاء الاصطناعي وهو بديل ثابت الطول غير مسجل). include يختار الأقسام؛ words (كل كلمة، مع المتحدث والثقة) يأتي فقط عند تسميته. analyses.transcription يبلغ عن إعادة النسخ.
الطلب
curl "$BASE/projects/123/analysis" \-H "Authorization: Bearer $KEY"
الاستجابة
{"project_id": 123,"time": { "clock": "video", "unit": "seconds", "note": "Seconds from the start of the upload." },"analyses": {"transcription": {"status": null,"...": "same fields as a clip's runs","rest": "POST /api/v1/projects/123/transcription","mcp": "transcribe_video"}},"metadata": { "duration_sec": 693.5, "resolution": "1920x1080", "detected_orientation": "horizontal","...": "the rest of the upload's metadata" },"transcript": {"language": "english","provider": "openai_whisper","duration": 693.5,"no_audio": false,"speakers": [],"segments": [{ "start": 99.0, "end": 106.0, "text": "Here we go.", "speaker": null }]},"sound_events": [{ "t": 103.0, "end": 104.0, "kind": "laughter", "label": "[laughter]","speaker": null, "confidence": null }],"video_moments": [{ "start": 101.0, "end": 103.0, "type": "action_peak", "score": 8,"description": "Rim grab" }],"video_moments_status": "ok","video_moments_pass": { "status": "ok", "error": null, "model": "gemini-3.8-flash","analyzed_at": "2026-10-22T17:40:12+00:00" },"talk_scenes": [{ "start": 95.0, "end": 105.0, "clip_type": "story", "score": 7,"hook": "Why he almost quit", "topic": "basketball","description": "He tells how the season started", "confidence": 0.8 }],"talk_scenes_status": "ok","talk_scenes_pass": { "status": "ok", "model": "gpt-4o-mini" },"scenes": [{ "scene_id": 2265, "start": 100.0, "end": 110.0, "source": "merged","description": "He grabs the rim and the crowd erupts","hook": "The dunk nobody saw coming", "topic": "basketball","clip_type": "reaction", "score": 8, "degraded": false }]}
قم بقياس صوت المقطع — اللحظات الصاخبة، الامتدادات الهادئة، الإيقاع والسرعة، الغناء — في الخلفية. استعلم GET …/analysis حتى يصبح analyses.audio_cues.status مكتملًا أو فاشلاً؛ النتيجة هي قسم audio الخاص به. تقترح ميزة الاقتراح والتحرير التلقائي قياسه بنفسها؛ اتصل بهذا لقراءة الصوت أولاً. 409 audio_cues_running، audio_cues_current (القياس المخزن لا يزال يتطابق مع ملف المقطع) أو clip_file_missing. مدفوع: ai_suggestions؛ لا توكنات؛ يشارك حد معدل مع اقتراح التأثيرات والتحرير التلقائي.
الطلب
curl -X POST "$BASE/projects/123/clips/456/audio-cues" \-H "Authorization: Bearer $KEY"
الاستجابة
{"project_id": 123,"clip_id": 456,"status": "running"}
التحرير
كل ما يفعله المحرر داخل التطبيق قابل للبرمجة: القص، التسميات التوضيحية وترجمتها، التخطيطات، التكبير، تأثيرات الشاشة، السرعة، الإيموجي، صور GIF، الملصقات، مقاطع التفاعل، المؤثرات الصوتية، الشعار، شريط التقدم والاتجاه.
ساعتان. التراكبات التي تضيفها (POST …/overlays) وكل اقتراح يستخدم وقت المشاهد — ثوانٍ من بداية المقطع كما يتم تشغيله. تحتفظ الإعدادات المحفوظة بالأوقات مقابل ملف المقطع المبطن، أطول ببضع ثوانٍ في كل طرف؛ تقوم نقطة نهاية التراكبات بالتحويل لك.
القص — حرّك بداية المقطع/نهايته. تُحدَّث كل مقاطع المشهد تلقائيًا.
الطلب
curl -X PUT "$BASE/projects/123/scenes/2265/boundaries" \-H "Authorization: Bearer $KEY" \-H "Content-Type: application/json" \-d @body.json
جسم الطلب
{"new_start_time": 12.0,"new_end_time": 27.5}
الاستجابة
{"scene_id": 2265,"project_id": 123,"old_start_time": 0.0,"old_end_time": 42.3,"new_start_time": 12.0,"new_end_time": 27.5,"message": "Scene boundaries updated successfully."}
اقرأ أو حدّث حالة المحرر الكاملة: التسميات التوضيحية (مع secondary لسطر ثانٍ)، الإيموجي، صور GIF، الملصقات ومقاطع التفاعل (gifs، مميزة بواسطة kind)، المؤثرات الصوتية، التكبير، تأثيرات الشاشة، التأطير، الشعار، شريط التقدم، الاتجاه، speed و speedRanges. PUT يستبدل الكائن بأكمله — أعد كل ما أرجعه GET، مع تغييراتك؛ أي شيء يُترك يتم مسحه.
الطلب
curl -X PUT "$BASE/projects/123/clips/456/settings" \-H "Authorization: Bearer $KEY" \-H "Content-Type: application/json" \-d @body.json
جسم الطلب
{"orientation": "vertical","captions": {"enabled": true,"style": "hormozi","karaoke": true},"speed": 1.25}
الاستجابة
{"clip_id": 456,"settings": {"captions": { "enabled": true, "style": "hormozi", "karaoke": true },"zoom": null,"screenEffects": null,"logo": null,"progressBar": null,"smartCrop": null,"gifs": null,"orientation": "vertical","speed": 1.25,"speedRanges": null}}
التكبير هو شكل واحد: {type: "zoom", start, end, scale, glide, target, center} — يدخل عند start (ثواني glide للوصول إلى هناك، 0 يلتقط)، يُحتفظ به عند scale (1.05–2.5)، يعود عند end، أو يُحتفظ به حتى نهاية المقطع عندما يكون end فارغًا. يتم تحويل التكبيرات القديمة السريعة والبطيئة.
اقرأ كلمات الترجمة أو استبدلها مع توقيت كل كلمة.
الطلب
curl -X PUT "$BASE/projects/123/clips/456/captions" \-H "Authorization: Bearer $KEY" \-H "Content-Type: application/json" \-d @body.json
جسم الطلب
{"words": [{ "text": "Use", "start": 28.06, "end": 28.14 },{ "text": "correct", "start": 28.14, "end": 28.22 }]}
الاستجابة
{"words": [{ "text": "Use", "start": 28.06, "end": 28.14, "highlight": null },{ "text": "correct", "start": 28.14, "end": 28.22, "highlight": null }]}
أعد تسمية مقطع. النص الفارغ يعيده إلى الاسم المُنشأ تلقائيًا.
الطلب
curl -X PATCH "$BASE/projects/123/clips/456/name" \-H "Authorization: Bearer $KEY" \-H "Content-Type: application/json" \-d @body.json
جسم الطلب
{"name": "Best hook"}
الاستجابة
{"clip_id": 456,"display_name": "Best hook"}
أعد نسخ صوت هذا المقطع واجعل النتيجة تسمياته التوضيحية. يستبدل الكلمات المحررة؛ يُجيب بالكلمات الجديدة. لا توكنات؛ محدودة بمعدل.
الطلب
curl -X POST "$BASE/projects/123/clips/456/transcribe" \-H "Authorization: Bearer $KEY"
أضف تراكبات في الوقت الذي يراه المشاهد: emojis، inline_emojis، gifs، stickers، reaction_clips، sfx، zooms، screen_effects و speed_ranges. يتم تطبيق تحويل وقت المحرر والإعدادات الافتراضية لك، ويمكن إرسال اقتراحات الذكاء الاصطناعي كما جاءت. يضيف فقط.
الطلب
curl -X POST "$BASE/projects/123/clips/456/overlays" \-H "Authorization: Bearer $KEY" \-H "Content-Type: application/json" \-d @body.json
جسم الطلب
{"emojis": [{ "emoji": "🔥", "timestamp": 12.0 }],"inline_emojis": [{ "emoji": "💰", "word_index": 5 }],"gifs": [{ "source_id": "k1", "slug": "mind-blown", "mp4_url": "https://…","width": 480, "height": 270, "timestamp": 8.0 }],"sfx": [{ "sfx_id": 3, "timestamp": 3.0, "volume": 0.4 }],"zooms": [{ "start": 20.0, "length": 1.0, "scale": 1.3 }],"screen_effects": [{ "look": "flash", "start": 20.0 }],"speed_ranges": [{ "start": 31.0, "length": 2.5, "speed": 2.0 }]}
الاستجابة
{"clip_id": 456,"settings": {"emojis": [{ "type": "floating", "emoji": "🔥", "timestamp": 14.0, "duration": 1.0,"position": { "x": 0.5, "y": 0.694 }, "scale": 1.0 }],"zoom": [{ "type": "zoom", "start": 22.0, "end": 23.0, "scale": 1.3, "glide": 0,"target": "frame", "center": { "x": 0.5, "y": 0.5 } }]}}
يحتوي المقطع على ما يصل إلى 5 صور متحركة، 5 ملصقات و 5 مقاطع رد فعل. spot على إيموجي أو ملصق يتبع الوجه الرئيسي، و target: "face" على تكبير يركز عليه — مدفوع (smart_crop)، بعد تحليل تخطيط المقطع.
سطر تسمية توضيحية ثانٍ بلغة أخرى. GET يسرد اللغات التي يمتلكها هذا المقطع بالفعل واللغات المدعومة؛ POST {"language": "es"} يترجمه — 1 توكن، مجاني عندما يمتلكه المقطع بالفعل. مدفوع: caption_translation. يظهر بمجرد تعيين captions.secondary في الإعدادات.
الطلب
curl -X POST "$BASE/projects/123/clips/456/translations" \-H "Authorization: Bearer $KEY" \-H "Content-Type: application/json" \-d '{"language": "es"}'
الاستجابة
{"project_id": 123,"language": "es","lines": [{ "text": "Usa la palabra correcta", "start": 28.06, "end": 29.4 }],"created": true,"tokens_charged": 1}
تحليل ما يظهره كل لحظة من المقطع — أنواع اللقطات، الوجوه، لوحات الشاشة وكاميرا الويب — في الخلفية. مطلوب قبل أن تتمكن التراكبات من تتبع الوجه. استعلم عن المقطع لـ features.vision_analysis.layout_rerun_status، أو GET …/analysis لـ analyses.layout.status؛ كل إطار هو قسم layout الخاص به. مدفوع: smart_crop؛ لا توكنات.
الطلب
curl -X POST "$BASE/projects/123/clips/456/layout-analysis" \-H "Authorization: Bearer $KEY"
الاستجابة
{"project_id": 123,"clip_id": 456,"status": "running"}
حمّل (متعدد الأجزاء، حقل file) أو أزل شعارًا لكل مقطع. بدون متصفح، قم بتجهيزه باستخدام POST /uploads/assets وارفقه في …/logo/from-upload.
الطلب
curl -X POST "$BASE/projects/123/clips/456/logo/from-upload" \-H "Authorization: Bearer $KEY" \-H "Content-Type: application/json" \-d '{"asset_key": "originals/staging/42/9f1c2b7e.png"}'
اقتراحات الذكاء الاصطناعي والتعديل التلقائي
الاقتراحات للقراءة فقط: تُرجع مواضع في وقت المشاهد، جاهزة للإرسال إلى POST …/overlays كما جاءت. مدفوعة: ai_suggestions. لا توكنات؛ محدودة بمعدل.
اقتراحات لمقطع واحد. kind هو gifs، stickers، reaction-clips، emojis، sfx، effects (وصفات التكبير وتأثيرات الشاشة) أو speed (الهواء الميت مسرع، حركة بطيئة). معلمة الاستعلام max_suggestions.
الطلب
curl -X POST "$BASE/projects/123/clips/456/gifs/suggest?max_suggestions=3" \-H "Authorization: Bearer $KEY"
الاستجابة
{"clip_id": 456,"suggestions": [{"source_id": "k1","slug": "mind-blown","title": "Mind Blown","mp4_url": "https://…","width": 480,"height": 270,"preview_url": "https://…","timestamp": 8.0,"duration": 2.0,"query": "mind blown","reason": "Reacts to the reveal"}]}
تُجيب effects و speed بـ audio_cues_ready: false بينما لا يزال صوت المقطع قيد القياس — اسأل مرة أخرى بعد بضع ثوانٍ. اقتراح السرعة هو {start, end, speed}: أرسله بـ length = end − start.
خطط لتعديل كامل للمقطع — تكبيرات، تأثيرات الشاشة، ملصقات، أصوات ونطاقات سرعة — في الخلفية. استعلم عن المقطع لـ features.vision_analysis.auto_edit_rerun_status؛ التعديل هو features.vision_analysis.auto_edit ({effects, stickers, sfx, speed}، وأيضًا قسم auto_edit من GET …/analysis). لا يتم تطبيق أي شيء: أرسل أجزائه إلى POST …/overlays. مدفوع: ai_suggestions؛ لا توكنات.
الطلب
curl -X POST "$BASE/projects/123/clips/456/auto-edit" \-H "Authorization: Bearer $KEY"
الاستجابة
{"project_id": 123,"clip_id": 456,"status": "running"}
التصدير
صدّر مقطعًا بإعداداته المحفوظة. يعيد معرّف تصدير للاستعلام عنه؛ ويخصم توكنات.
الطلب
curl -X POST "$BASE/projects/123/clips/456/export" \-H "Authorization: Bearer $KEY"
الاستجابة
{"export_id": 37,"status": "rendering","message": "Export render triggered"}
استعلم عن حالة تصدير. عند اكتماله، يكون download_url رابطًا مؤقتًا تنتهي صلاحيته — نزّل الملف سريعًا.
الطلب
curl "$BASE/exports/37/status" \-H "Authorization: Bearer $KEY"
الاستجابة
{"export_id": 37,"status": "completed","download_url": "https://clipmaster-media.s3.amazonaws.com/...mp4?...&Expires=...","created_at": "2026-08-14T21:47:35Z","completed_at": "2026-08-14T21:48:42Z"}
يسرد تصديراتك، الأحدث أولًا. صفِّ النتائج بـ clip_id أو project_id. هكذا تنزّل مقطعًا: خذ أحدث تصدير بحالة completed ونزّل download_url الخاص به.
الطلب
curl "$BASE/exports?clip_id=456" \-H "Authorization: Bearer $KEY"
الاستجابة
{"exports": [{"export_id": 37,"clip_id": 456,"project_id": 123,"status": "completed","progress": null,"export_number": 2,"tokens_charged": 1,"clip_duration_sec": 42.3,"download_url": "https://clipmaster-media.s3.amazonaws.com/...mp4?...&Expires=...","created_at": "2026-08-14T21:47:35Z","completed_at": "2026-08-14T21:48:42Z"}],"total": 2,"limit": 20,"offset": 0}
التجميعات
التجميع هو تعديل واحد مبني من مقاطع من أي من فيديوهاتك. إنشاء، ترتيب وتصدير واحد مدفوع: compilation.
اعرض تجميعاتك (مجموعات مقاطع من مشاريع مختلفة).
الطلب
curl "$BASE/compilations" -H "Authorization: Bearer $KEY"
الاستجابة
{"items": [{"id": 10,"name": "Funny Personal Anecdotes","clip_count": 5,"total_duration_sec": 149.9,"output": { "width": 1920, "height": 1080, "fps": 30 },"format": null,"latest_export": null,"created_at": "2026-08-10T19:05:41Z"}]}
أنشئ تجميعًا فارغًا. مدفوع: compilation.
الطلب
curl -X POST "$BASE/compilations" \-H "Authorization: Bearer $KEY" \-H "Content-Type: application/json" \-d @body.json
جسم الطلب
{"name": "Best of March","output": { "width": 1080, "height": 1920, "fps": 30 }}
اقرأ تجميعًا واحدًا — مقاطعه، estimated_tokens للتصدير، خطة التعديل في arrangement_metadata.edit_plan والملفات التي يتم تشغيلها في media — أو غيّر name، output، logo_config أو progress_bar_config.
الطلب
curl "$BASE/compilations/10" -H "Authorization: Bearer $KEY"
ما سيتم حذفه مع الحذف: التحميلات الموجودة فقط لهذا التجميع، والمنشورات المعلقة.
الطلب
curl "$BASE/compilations/10/deletion-preview" -H "Authorization: Bearer $KEY"
الاستجابة
{"compilation_id": 10,"source_project_ids": [],"scheduled_posts_pending": 0}
احذف تجميعًا؛ يتم إلغاء منشوراته المعلقة. delete_sources=true يحذف أيضًا التحميلات من المعاينة؛ مررها كـ expected_project_ids ويتم رفض الحذف (409) إذا تغيرت هذه المجموعة.
الطلب
curl -X DELETE "$BASE/compilations/10" \-H "Authorization: Bearer $KEY"
الاستجابة
{"compilation_id": 10,"deleted_project_ids": [],"scheduled_posts_cancelled": 0}
مقاطعك من كل الفيديوهات، لإضافتها. معايير الاستعلام q, limit, offset.
الطلب
curl "$BASE/compilations/available-clips?q=pivot&limit=50" \-H "Authorization: Bearer $KEY"
أضف مقطعًا (clip_id، position اختياري). DELETE /compilations/{id}/clips/{compilation_clip_id} لإزالة مقطع واحد.
الطلب
curl -X POST "$BASE/compilations/10/clips" \-H "Authorization: Bearer $KEY" \-H "Content-Type: application/json" \-d '{"clip_id": 456}'
المزيد من المقاطع من مكتبتك التي تناسب هذا التجميع، الأفضل أولاً.
الطلب
curl -X POST "$BASE/compilations/10/clips/suggest" \-H "Authorization: Bearer $KEY"
أفكار تجميع من مكتبتك لملخص. حوّل إحداها إلى تجميع باستخدام POST /compilations/from-suggestion (name, clip_ids).
الطلب
curl -X POST "$BASE/compilations/suggest" \-H "Authorization: Bearer $KEY" \-H "Content-Type: application/json" \-d '{"prompt": "funny moments", "max_suggestions": 3}'
الاستجابة
{"suggestions": [{"theme": "Funny moments","reason": "Five clips where the audience laughs","clip_ids": [456, 457, 461],"total_duration_sec": 94.2}]}
اعرض التجميع. يخصم توكنز لثواني المصدر التي يتم تشغيلها (estimated_tokens على التجميع).
الطلب
curl -X POST "$BASE/compilations/10/export" \-H "Authorization: Bearer $KEY"
الاستجابة
{"export_id": 5,"compilation_id": 10,"status": "pending","estimated_tokens": 3,"message": "Export started"}
استعلم عن حالة تصدير التجميع؛ download_url يعمل كما هو الحال لتصدير المقطع. GET /compilations/{id}/exports يسردها.
الطلب
curl "$BASE/compilations/10/exports/5/status" \-H "Authorization: Bearer $KEY"
الاستجابة
{"export_id": 5,"compilation_id": 10,"status": "completed","progress": null,"download_url": "https://clipmaster-media.s3.amazonaws.com/...mp4?...&Expires=...","created_at": "2026-08-14T21:47:35Z","completed_at": "2026-08-14T21:50:02Z"}
تعديل التجميعات
التجميع هو خطة تحرير: مشاهد من لوحة واحدة إلى ثلاث لوحات (مقطع أو ملف) مع انتقالات وبطاقات نصية، بالإضافة إلى تراكبات وموسيقى وتعليق صوتي على التعديل بأكمله. الأوقات هي ثوانٍ في التجميع.
أعد قص التجميع بالذكاء الاصطناعي إلى خطة مشاهد جديدة. format: مخصص (مونتاج؛ يحتاج prompt)، الأفضل، عد تنازلي، إعلان تشويقي، خطاف_حلقة، تعليمي، أبرز_أسئلة_وأجوبة أو تلقائي. يستبدل المشاهد والإيموجي والصور المتحركة المثبتة عليها؛ تبقى التسميات التوضيحية والموسيقى والتعليق الصوتي.
الطلب
curl -X POST "$BASE/compilations/10/arrange" \-H "Authorization: Bearer $KEY" \-H "Content-Type: application/json" \-d @body.json
جسم الطلب
{"format": "hook_loop"}
الاستجابة
{"id": 10,"name": "Funny Personal Anecdotes","format": "hook_loop","total_duration_sec": 58.2,"estimated_tokens": 1,"clips": [{ "compilation_clip_id": 88, "position": 0, "clip_id": 456, "duration_sec": 12.4, "missing": false }],"arrangement_metadata": {"resolved_format": "hook_loop","degraded": false,"edit_plan": {"version": "2.0","scenes": [{"id": "1","layout": "full","sources": [{ "clip_id": 456, "slot": 0, "audio": "primary","start_offset_sec": 3.0, "end_offset_sec": 9.5, "speed": 1.0 }],"text": []}]}}}
degraded: true يعني أن خطوة الذكاء الاصطناعي فشلت وتم الاحتفاظ بالمقاطع بالترتيب.
plan/undo يعود إلى ما قبل آخر ترتيب أو إعادة تعيين أو وضع (يعيد التنفيذ مرة أخرى)؛ plan/reset ينشئ قصًا عاديًا، كل مقطع كامل؛ plan/place-added-clips يعمل على المقاطع المضافة منذ التعديل بالذكاء الاصطناعي. لا يوجد نص.
الطلب
curl -X POST "$BASE/compilations/10/plan/undo" \-H "Authorization: Bearer $KEY"
أعد قص مشهد واحد بالذكاء الاصطناعي، مع ترك الباقي. prompt اختياري. معرفات المشاهد نصية.
الطلب
curl -X POST "$BASE/compilations/10/scenes/3/regenerate" \-H "Authorization: Bearer $KEY" \-H "Content-Type: application/json" \-d '{"prompt": "use the boat clip instead"}'
يمنح مشهدًا واحدًا نمط إيقاع: تكرارات قصيرة صامتة لمقطعه على إيقاع الموسيقى، قبله مباشرة. pattern: stutter أو quick_stutter أو build_up أو jump_cut أو teaser، أو null لإزالته. يتطلب موسيقى مقيسة (409 music_not_measured حتى ذلك الحين).
الطلب
curl -X PUT "$BASE/compilations/10/scenes/3/beat-pattern" \-H "Authorization: Bearer $KEY" \-H "Content-Type: application/json" \-d '{"pattern": "stutter"}'
استبدل خطة التعديل. التخطيطات: full (لوحة واحدة)، stack2 / cols2 / pip (2)، stack3 / cols3 (3). المصدر يشغل clip_id أو media_key؛ إزاحاته هي بداية ونهاية النافذة بالثواني في مشهد المقطع؛ مصدر واحد على الأكثر لكل مشهد هو صوت primary. الانتقالات: قص، تلاشي، انزلاق، مسح. التراكبات المتروكة تبقى؛ الموسيقى music المتروكة تُزال.
الطلب
curl -X PUT "$BASE/compilations/10/plan" \-H "Authorization: Bearer $KEY" \-H "Content-Type: application/json" \-d @body.json
جسم الطلب
{"version": "2.0","scenes": [{"id": "1","layout": "full","sources": [{ "clip_id": 456, "audio": "primary","start_offset_sec": 2.0, "end_offset_sec": 14.5 }],"text": [{ "text": "Day one", "role": "title", "start_ms": 0, "duration_ms": 2000 }]},{"id": "2","layout": "stack2","transition_in": { "kind": "fade", "duration_ms": 400 },"sources": [{ "clip_id": 457, "slot": 0, "audio": "primary", "speed": 1.5 },{ "clip_id": 458, "slot": 1 }]}],"music": { "track_id": "a1b2c3", "volume": 0.3 }}
POST يضيف إيموجي، صور متحركة، ملصقات، تكبيرات، تأثيرات شاشة وتأثيرات صوتية على المونتاج بأكمله، بأشكال تراكبات المقطع. PATCH يستبدل مجموعة مخزنة بالكامل بدلاً من ذلك (captions, emojis, gifs, screenEffects, zoom, sfx)؛ ما ترسله فقط هو الذي يتغير.
الطلب
curl -X POST "$BASE/compilations/10/plan/overlays" \-H "Authorization: Bearer $KEY" \-H "Content-Type: application/json" \-d @body.json
جسم الطلب
{"emojis": [{ "emoji": "🎉", "timestamp": 3.0 }],"screen_effects": [{ "look": "bw", "start": 10.0, "length": 2.0 }]}
الاستجابة
{"id": 10,"arrangement_metadata": {"edit_plan": {"emojis": [{ "type": "floating", "emoji": "🎉", "timestamp": 3.0, "duration": 1.0,"position": { "x": 0.5, "y": 0.694 }, "scale": 1.0 }]}}}
حرر التجميعة بأكملها دفعة واحدة وطبقها، مع ملء ما هو فارغ فقط: كيفية ظهور كل مشهد (أي انتقال متاح)، بطاقات نصية (كلمات، خط، حجم، موضع، توقيت)، مقطع صوتي من المكتبة، نطاقات سرعة على المقاطع بالسرعة العادية وشريط التقدم، بالإضافة إلى تكبيرات، تأثيرات الشاشة، ملصقات، صور GIF، إيموجي، مؤثرات صوتية وما يصل إلى مشهدين من مقاطع التفاعل. direction (اختياري، حتى 300 حرف) يوجه كل ذلك ويتم الاحتفاظ به للتشغيل التالي. أرسل take المعادة إلى …/auto-edit/undo لإزالتها، أو أعدها هنا كـ replace_take لتبديلها بواحدة جديدة. مدفوع: compilation؛ لا توجد توكنات.
الطلب
curl -X POST "$BASE/compilations/10/auto-edit" \-H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \-d '{"direction": "hype energy, big bold text"}'
الاستجابة
{"compilation": { "id": 10, "...": "as GET /compilations/{id}" },"take": {"scene_ids": ["r1"],"effect_ids": ["e1", "e2"],"sticker_ids": ["g1"],"emoji_ids": ["m1"],"zoom_ids": ["z1"],"sfx_ids": ["s1"],"transitions": [{ "scene_id": "2", "kind": "slide", "duration_ms": 400 }],"text_cards": [{ "scene_id": "1", "text": "Best of the year" }],"music_track_id": "lib-42","speed_ranges": [{ "scene_id": "2", "slot": 0, "start": 24.0, "end": 25.2, "speed": 0.5 }],"progress_bar": true},"counts": { "effects": 2, "stickers": 0, "gifs": 1, "emojis": 1,"reaction_clips": 1, "zooms": 1, "sounds": 1, "transitions": 1,"texts": 1, "music": 1, "speed_ranges": 1, "progress_bar": 1 }}
صوت المونتاج المقاس على توقيته الخاص: إيقاع الموسيقى (أو إيقاع مقطع مسموع)، اللحظات الصاخبة، الفترات الهادئة والغناء؛ onsets=true يضيف كل بداية صوتية. يُقاس كل صوت مرة واحدة في الخلفية، أول مرة يُقرأ فيها أو ينضم إلى المونتاج — sources يبيّن ما تم قياسه، ويبقى measuring صحيحًا حتى يُقاس الكل. تأخذ أضواء الحفلة beat_first وbeat_period وbeat_clock منه. مدفوع: compilation؛ لا توجد توكنات.
الطلب
curl "$BASE/compilations/10/audio" \-H "Authorization: Bearer $KEY"
الاستجابة
{"compilation_id": 10,"duration_sec": 37.4,"measuring": false,"sources": [{ "kind": "music", "status": "measured", "track_id": "lib-42" },{ "kind": "clip", "status": "measured", "scene_id": "1", "clip_id": 1621 }],"beat": [{ "start": 12.0, "end": 37.4, "first_beat": 12.02, "period": 0.38,"tempo_bpm": 157.9, "clock": "edit" }],"loud": [{ "t": 33.0, "end": 33.4, "over_db": 11.0 }],"quiet": [{ "start": 3.4, "end": 9.0, "level_db": -38.0 }],"singing": [],"onsets": null}
أضف مشهدًا يشغل ملفًا بدلاً من مقطع: مقطع رد فعل Klipy (klipy) أو فيديو أو صورة تم تحميلها (upload_key). يأتي بعد after_scene_id، أو أخيرًا؛ into_scene_id يجعله لوحة إضافية بجانب مقاطع هذا المشهد. الفيديو المحمل يُحسب ضمن توكنز التصدير؛ مقاطع رد الفعل والصور مجانية. مدفوع: compilation.
الطلب
curl -X POST "$BASE/compilations/10/media-scenes" \-H "Authorization: Bearer $KEY" \-H "Content-Type: application/json" \-d @body.json
جسم الطلب
{"klipy": { "source_id": "c3", "slug": "emotional-damage","title": "Emotional Damage", "mp4_url": "https://…" },"after_scene_id": "2"}
تعليق صوتي على المونتاج بأكمله، منسوخ للتسميات التوضيحية. POST يحمله (متعدد الأجزاء، حقل file) أو يرفق واحدًا مُجهزًا في …/narration/from-upload؛ PATCH يضبط volume و duck؛ DELETE يزيله.
الطلب
curl -X POST "$BASE/compilations/10/narration/from-upload" \-H "Authorization: Bearer $KEY" \-H "Content-Type: application/json" \-d '{"asset_key": "originals/staging/42/5d8e1a.mp3"}'
الاستجابة
{"url": "https://clipmaster-media.s3.amazonaws.com/...mp3?...","volume": 1.0,"duck": true,"duration_sec": 61.4,"word_count": 152}
مقاطع صوتية تناسب المونتاج، كل منها مع سبب. اختر واحدًا باستخدام POST /music/tracks/{track_id}/select، ثم اضبط music.track_id في الخطة.
الطلب
curl -X POST "$BASE/compilations/10/music/suggest" \-H "Authorization: Bearer $KEY"
اقتراحات للمونتاج بأكمله، في ثوانيه الخاصة: kind هو gifs، stickers أو emojis. أرسلها إلى POST …/plan/overlays. مدفوع: compilation.
الطلب
curl -X POST "$BASE/compilations/10/emojis/suggest" \-H "Authorization: Bearer $KEY"
الاستجابة
{"compilation_id": 10,"suggestions": [{ "emoji": "😂", "timestamp": 14.2, "duration": 1.5, "reason": "The punchline lands" }]}
أسطر العنوان والتسمية لمشهد واحد.
الطلب
curl -X POST "$BASE/compilations/10/scenes/1/text/suggest" \-H "Authorization: Bearer $KEY"
الاستجابة
{"suggestions": [{ "text": "Day one", "role": "title" }]}
الجدولة
انشر المقاطع والتجميعات على قناة مربوطة. تتطلب الجدولة صلاحية الجدولة على المنصات.
قنواتك المربوطة. اربطها من تطبيق الويب أولًا.
الطلب
curl "$BASE/social/accounts" -H "Authorization: Bearer $KEY"
الاستجابة
{"platforms_available": ["youtube"],"accounts": [{"id": 2,"platform": "youtube","account_name": "MyChannel","status": "active"}]}
جدول نشر تصدير مقطع أو تجميعة. آمن للتكرار — إعادة المحاولة بالحساب والتصدير والوقت نفسها تعيد المنشور الموجود.
الطلب
curl -X POST "$BASE/scheduled-posts" \-H "Authorization: Bearer $KEY" \-H "Content-Type: application/json" \-d @body.json
جسم الطلب
{"social_account_id": 2,"clip_id": 456,"export_id": 37,"scheduled_at": "2026-08-20T16:00:00Z","title": "The pivot that saved us","hashtags": ["startup", "founder"],"privacy": "public"}
الاستجابة
{"id": 12,"clip_id": 456,"export_id": 37,"social_account_id": 2,"platform": "youtube","account_name": "MyChannel","status": "scheduled","scheduled_at": "2026-08-20T16:00:00","title": "The pivot that saved us"}
نطاق تقويمي للمنشورات المجدولة والمنشورة.
الطلب
curl "$BASE/scheduled-posts?from_date=2026-08-01T00:00:00Z&to_date=2026-08-31T23:59:59Z" \-H "Authorization: Bearer $KEY"
الاستجابة
{"posts": [{"id": 12,"status": "scheduled","scheduled_at": "2026-08-20T16:00:00","title": "The pivot that saved us"}]}
أعد توقيت أو عدّل منشورًا قبل نشره (scheduled_at, title, description, hashtags, privacy)، أو ألغه.
الطلب
curl -X PATCH "$BASE/scheduled-posts/12" \-H "Authorization: Bearer $KEY" \-H "Content-Type: application/json" \-d '{"scheduled_at": "2026-08-21T16:00:00Z"}'
عنوان ووصف وهاشتاجات بالذكاء الاصطناعي من نص مقطع.
الطلب
curl -X POST "$BASE/scheduled-posts/metadata-suggest" \-H "Authorization: Bearer $KEY" \-H "Content-Type: application/json" \-d '{"clip_id": 456, "platform": "youtube"}'
الاستجابة
{"title": "The pivot that saved us","description": "How one decision turned the company around.","hashtags": ["startup", "founder"]}
افصل قناة. سجل منشوراتها، المعلقة والمنشورة، يذهب معها.
الطلب
curl -X DELETE "$BASE/social/accounts/2" \-H "Authorization: Bearer $KEY"
المكتبة
اعرض أنماط الترجمة الـ 15 وقيمها الافتراضية.
الطلب
curl "$BASE/export/styles" \-H "Authorization: Bearer $KEY"
الاستجابة
[{"key": "clean","name": "Clean","category": "social","fontFamily": "Inter","fontSize": 56,"color": "#FFFFFF","highlightColor": "#9DC34F"}]
مكتبة المؤثرات الصوتية؛ معرفاتها تذهب في تراكبات sfx. category اختياري.
الطلب
curl "$BASE/sfx" -H "Authorization: Bearer $KEY"
ابحث في Klipy، أو اسرد ما هو شائع. kind هو gif، sticker أو clip (مقاطع رد الفعل). ضع نتيجة باستخدام id كـ source_id و mp4.url كـ mp4_url؛ الملصق يحتاج أيضًا image.url كـ image_url.
الطلب
curl "$BASE/gifs/search?q=mind%20blown&kind=sticker&per_page=10" \-H "Authorization: Bearer $KEY"
الاستجابة
{"items": [{"id": "s9","slug": "mind-blown-sticker","title": "Mind Blown","kind": "sticker","mp4": { "url": "https://….webm", "width": 320, "height": 320 },"preview": { "url": "https://….webp", "width": 160, "height": 160 },"image": { "url": "https://….webp", "width": 320, "height": 320 }}],"page": 1,"per_page": 10,"has_next": true}
ابحث عن موسيقى خلفية. genre, duration_min, duration_max اختياري.
الطلب
curl "$BASE/music/search?q=upbeat" -H "Authorization: Bearer $KEY"
خذ مقطعًا صوتيًا إلى مكتبتك حتى يتمكن التجميع من استخدامه.
الطلب
curl -X POST "$BASE/music/tracks/a1b2c3/select" \-H "Authorization: Bearer $KEY"
الحساب
رصيد التوكنز الخاص بك: الإجمالي، المحجوز بواسطة المهام الجارية، والمتاح.
الطلب
curl "$BASE/billing/balance" -H "Authorization: Bearer $KEY"
الاستجابة
{"balance": 120,"reserved": 3,"available": 117,"total_purchased": 200,"total_spent": 80}
ما استخدمته خلال الأيام period الماضية (1–365).
الطلب
curl "$BASE/billing/usage?period=30" -H "Authorization: Bearer $KEY"
الاستجابة
{"period_days": 30,"tokens_spent": 42,"tokens_purchased": 0,"uploads_count": 6,"exports_count": 11,"minutes_processed": 38.5,"minutes_exported": 7.9}
الأخطاء
تحمل الأخطاء رمزًا قابلًا للقراءة آليًا:
{"detail": {"error": "insufficient_tokens","message": "Not enough tokens for this operation"}}
الرموز الشائعة: api_access_required / session_auth_required (403)، subscription_required (403، تسمي الخطة feature)، insufficient_tokens (402)، export_in_progress / export_expired (409). مفتاح سيء أو ملغى يُرجع 401؛ تجاوز حد المعدل يُرجع 429.
تكلفة التوكنات
يتم احتسابه بدقة مثل التطبيق — 1 توكن = 1 دقيقة مصدر لمعالجة تحميل أو استيراد YouTube؛ تفرض الصادرات رسومًا وفقًا لقواعد التطبيق (تجميع حسب ثواني المصدر التي يتم تشغيلها)؛ ترجمة تسمية توضيحية للمقطع تكلف 1 توكن. الاقتراحات، التحرير التلقائي، الترتيب، تحليل التخطيط، قياس الصوت وإعادة النسخ لا تستهلك توكنات. لا توجد فاتورة API منفصلة.