واجهة استنساخ الصوت والتوليد بصوت محدد (غير موصى به)
⛔ مسار قديم، غير موصى به للتكاملات الجديدة. تصف هذه الصفحة مسار
personaالمبكر (voice_task_id/generate-with-voice). لا يزال يعمل، لكنه لم يعد موصى به للعملاء؛ وقد وُسم في القائمة على اليسار بأنه «غير موصى به».للتكاملات الجديدة استخدم 【موصى به】 واجهة الملف الصوتي الشخصي: أنشئ ملفاً صوتياً شخصياً من عينة صوتية واحدة (
POST /api/music/voice-profile/create)، ثم استخدمه لعمل كوفر لأغنية محددة أو لغناء أغنية جديدة. الملف الصوتي الشخصي مورد من الدرجة الأولى: يمكن سرده وقراءته وحذفه، ويُحفظ الصوت المصدر بشكل دائم.إذا كان منتجك يحتاج الدورة الكاملة «إنشاء صوت → إعادة استخدام طويلة الأمد → كوفر»، فاختر المسار الجديد.
تنبيه مهم: قد ينتهي صلاحية الصوت المستنسخ.
إن
voice_id/voice_task_idالناتجين عن استنساخ الصوت ليسا مورداً صالحاً للأبد؛ فقد يتوقفان عن العمل بسبب مدة الصلاحية أو حالة الحساب أو تغيّر حالة الصوت. على الجهة المتكاملة ألا تستنسخ مرة واحدة ثم تعيد استخدام معرّف صوت مخزَّن محلياً إلى الأبد.الممارسة الموصى بها:
- احفظ
voice_task_idوvoice_idوis_availableوupdated_atووقت آخر توليد ناجح.- قبل كل توليد بصوت مستنسخ، استدعِ
GET /api/voice/clone/tasks/{voice_task_id}أوPOST /api/voice/clone/tasks/{voice_task_id}/checkوأكّد أنis_available=true.- إذا أعادت نقطة النهاية أن الصوت غير متاح أو أن المهمة غير موجودة أو
selected voice is not ready، فاطلب من المستخدم إعادة الاستنساخ أو اختيار صوت آخر متاح.- لا تَعِد المستخدم النهائي بأن الصوت المستنسخ «أصل دائم»؛ اعرض في واجهة المنتج أن «الصوت قد ينتهي صلاحيته ويحتاج إلى إعادة تحقق أو إعادة استنساخ».
وصف نقطة النهاية
تُنشئ هذه المجموعة صوتاً قابلاً لإعادة الاستخدام وتولّد أغاني به. لا يحتاج المستدعي إلا إلى مفتاح API الصادر من المنصة؛ ويتولى الخادم إرسال المهمة ومزامنة الحالة والفوترة والتنزيل.
المصادقة: Authorization: Bearer YOUR_API_KEY
الفوترة:
- التحقق من الصوت، واستنساخ الصوت، وطلب الحالة، والحذف، والتنزيل: مجاني.
- مدخل الاستنساخ بخطوة واحدة في مساحة العمل: 5 يوان ثابتة لكل طلب؛ يُكمل التحقق من الصوت المصدر وملف التحقق الثاني تلقائياً، ويُرد المبلغ عند الفشل.
- المتابعة تلقائياً إلى ملف التحقق الصوتي بعد استنساخ عادي: 5 يوان ثابتة لكل طلب؛ ويُرد المبلغ عند الفشل وفق المسار الحالي.
- توليد أغنية بصوت مستنسخ: مدفوع، 1.2 يوان ثابتة لكل طلب، وكل طلب يعيد عادة مهمتي حجز مؤقت.
- عند تشغيل Max Mode (
max_mode: trueفيPOST /api/music/generate-with-voice) تُحاسَب الـ 1.2 يوان لكل طلب بمضاعف 2، أي 2.4 يوان لكل طلب؛ ويدعم توليد الصوت أيضاًvariety(من 0 إلى 4، دون رسوم إضافية)؛ وترد قواعد القيم في قسم «المعاملات المتقدمة» في نظرة عامة على الـ API الجديد.
تسلسل الاستدعاء
- استدعِ
POST /api/voice/clone/validateلرفع الصوت المصدر والحصول علىvoice_task_id. - انتظر أو استعلم
GET /api/voice/clone/tasks/{voice_task_id}حتى تحصل علىvalidate_info. - يقرأ المستخدم النص بصوت مرتفع ويسجّل ملف التحقق.
- استدعِ
POST /api/voice/clone/tasks/{voice_task_id}/generateلإرسال ملف التحقق. - استدعِ
POST /api/voice/clone/tasks/{voice_task_id}/checkأو واصل طلب المهمة حتىis_available=true. - استدعِ
POST /api/music/generate-with-voiceلتوليد أغنية بذلك الصوت. - تُعيد نقطة نهاية التوليد أولاً مهام حجز مؤقت؛ وبعد اكتمال التوليد والحصول على
song_idالحقيقي، يمكنك استخدام نقاط نهاية التنزيل للحصول على ملف واحد أو حزمة. - (اختياري) عند عدم الحاجة إلى هذا الصوت، استدعِ
DELETE /api/voice/clone/voices/{voice_task_id}لحذفه؛ والدلالة في القسم 6.
يوجد أيضاً استنساخ بخطوة واحدة: في أول صفحة لتسجيل/رفع الصوت المصدر في مساحة العمل يمكنك اختيار الإكمال بخطوة واحدة؛ وينجز النظام التحقق وإنشاء الصوت معاً، فلا تحتاج إلى تسجيل ملف تحقق ثانٍ؛ ويُحاسَب بـ 5 يوان لكل طلب ويُرد المبلغ عند الفشل.
حقول مهمة الصوت
| الحقل | النوع | الوصف |
|---|---|---|
voice_task_id |
number | معرّف مهمة الصوت داخل المنصة؛ وتستخدمه جميع نقاط النهاية التالية |
voice_id |
string | معرّف الصوت الصالح لتوليد الأغاني؛ يُعاد عند صيرورة المهمة قابلة للاستخدام |
voice_name |
string | اسم الصوت |
description |
string | وصف الصوت |
style |
string | نمط الصوت |
singer_skill_level |
string | مستوى الغناء؛ القيم الشائعة: beginner وintermediate وprofessional |
language |
string | لغة الصوت المصدر، مثل zh وen |
validate_info |
string | نص التحقق المطلوب قراءته بصوت مرتفع |
validate_status |
string | حالة مهمة التحقق |
voice_status |
string | حالة إنشاء الصوت |
is_available |
boolean | هل صار صالحاً لتوليد الأغاني |
status |
string | حالة المهمة على المنصة |
stage |
string | المرحلة الحالية |
error_code |
string | رمز الخطأ عند الفشل |
error_message |
string | سبب الفشل |
source_duration_seconds |
number | مدة الصوت المصدر بالثواني |
created_at |
number | الطابع الزمني للإنشاء |
updated_at |
number | الطابع الزمني للتحديث |
completed_at |
number | الطابع الزمني للاكتمال |
1. إرسال الصوت المصدر للتحقق
نقطة النهاية: POST /api/voice/clone/validate
معاملات الطلب
| المعامل | النوع | مطلوب | القيمة الافتراضية | الوصف |
|---|---|---|---|---|
voice_url |
string | لا | - | رابط ملف الصوت المصدر. هذا أو file_base64 |
file_base64 |
string | لا | - | الصوت بصيغة base64. هذا أو voice_url |
file_name |
string | لا | - | اسم الملف؛ يُستحسن إرساله عند استخدام file_base64 |
voice_name |
string | لا | يُنشأ تلقائياً | اسم الصوت |
description |
string | لا | - | وصف الصوت |
style |
string | لا | - | نمط الصوت |
singer_skill_level |
string | لا | beginner |
مستوى الغناء |
language |
string | لا | zh |
لغة الصوت المصدر |
vocal_start_s |
number | نعم | - | الثانية التي يبدأ عندها الغناء الصالح |
vocal_end_s |
number | نعم | - | الثانية التي ينتهي عندها الغناء الصالح |
source_duration_seconds |
number | لا | - | المدة الكلية للصوت المصدر بالثواني |
يجب أن يستوفي
vocal_end_s - vocal_start_sالحد الأدنى لطول المقطع الغنائي. ارفع تسجيلاً صوتياً واضحاً دون موسيقى مصاحبة أو ضجيج ظاهر.
مثال الطلب
curl -X POST https://www.suno-api.io/api/voice/clone/validate \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"voice_url": "https://example.com/source-voice.wav",
"voice_name": "صوتي النسائي الصيني",
"description": "صوت نسائي صيني صافٍ وطبيعي",
"style": "Mandopop",
"singer_skill_level": "intermediate",
"language": "zh",
"vocal_start_s": 1.2,
"vocal_end_s": 18.5,
"source_duration_seconds": 20
}'
مثال الاستجابة
{
"success": true,
"message": "",
"data": {
"voice": {
"voice_task_id": 123,
"voice_name": "صوتي النسائي الصيني",
"language": "zh",
"validate_status": "submitted",
"is_available": false,
"status": "validate_submitted",
"stage": "validate_submitted",
"created_at": 1780480000,
"updated_at": 1780480000
}
}
}
2. طلب مهمة الصوت
نقطة النهاية: GET /api/voice/clone/tasks/{voice_task_id}
مثال الطلب
curl https://www.suno-api.io/api/voice/clone/tasks/123 \
-H "Authorization: Bearer YOUR_API_KEY"
مثال الاستجابة
{
"success": true,
"message": "",
"data": {
"voice": {
"voice_task_id": 123,
"voice_name": "صوتي النسائي الصيني",
"validate_info": "اقرأ بصوت مرتفع نص التحقق المُعاد هنا",
"validate_status": "success",
"is_available": false,
"status": "validate_ready",
"stage": "validate_callback"
}
}
}
3. إعادة توليد نص التحقق
نقطة النهاية: POST /api/voice/clone/tasks/{voice_task_id}/regenerate
يُستدعى عندما لا يصلح نص التحقق للقراءة بصوت مرتفع أو عند الحاجة إلى إعادة التحقق.
curl -X POST https://www.suno-api.io/api/voice/clone/tasks/123/regenerate \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
4. إرسال ملف التحقق وإنشاء الصوت
نقطة النهاية: POST /api/voice/clone/tasks/{voice_task_id}/generate
معاملات الطلب
| المعامل | النوع | مطلوب | القيمة الافتراضية | الوصف |
|---|---|---|---|---|
verify_url |
string | لا | - | رابط الملف الصوتي المقروء من نص التحقق. هذا أو file_base64 |
file_base64 |
string | لا | - | ملف التحقق بصيغة base64. هذا أو verify_url |
file_name |
string | لا | - | اسم الملف؛ يُستحسن إرساله عند استخدام file_base64 |
voice_name |
string | لا | اسم المهمة | اسم الصوت |
description |
string | لا | وصف المهمة | وصف الصوت |
style |
string | لا | نمط المهمة | نمط الصوت |
singer_skill_level |
string | لا | إعداد المهمة | مستوى الغناء |
مثال الطلب
curl -X POST https://www.suno-api.io/api/voice/clone/tasks/123/generate \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"verify_url": "https://example.com/verify-voice.wav",
"voice_name": "صوتي النسائي الصيني"
}'
5. التحقق من صلاحية الصوت
نقطة النهاية: POST /api/voice/clone/tasks/{voice_task_id}/check
curl -X POST https://www.suno-api.io/api/voice/clone/tasks/123/check \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
عند صيرورة المهمة قابلة للاستخدام تكون قيمة is_available في الاستجابة true، ويُعاد voice_id.
6. حذف صوت
نقطة النهاية: DELETE /api/voice/clone/voices/{voice_task_id}
الفوترة: مجاني.
curl -X DELETE https://www.suno-api.io/api/voice/clone/voices/123 \
-H "Authorization: Bearer YOUR_API_KEY"
مثال الاستجابة
{
"success": true,
"message": "",
"data": {
"voice_task_id": 123,
"deleted": true
}
}
| الحقل | النوع | الوصف |
|---|---|---|
| voice_task_id | number | معرّف مهمة الصوت المحذوفة |
| deleted | boolean | دائماً true، أي أنَّ طلب الحذف قد قُبل |
ما يحدث بعد الحذف
- لا يمكن استخدامه لتوليد أغانٍ جديدة: استدعاء
POST /api/music/generate-with-voiceبمعرّفvoice_task_idهذا (أو بمعرّفvoice_idالخاص به) يُرفض برسالةselected voice is not ready، دون أي خصم. - الأغاني المُولَّدة به مسبقاً لا تتأثر إطلاقاً: التشغيل والتنزيل والإكمال والاستبدال وفصل المسارات تعمل كما هي.
- تختفي مهمة الصوت هذه من الاستعلامات: يُعيد
GET /api/voice/clone/tasks/{voice_task_id}القيمةrecord not found. - يُحفظ الصوت المصدر وفق سياسة الحفظ الدائم للمنصة (منذ 2026-09-23 لم يعد الحذف ينظّف العينة الصوتية التي رفعتها)، لكن هذا لا يعني إمكانية الاستعادة: المهمة القديمة انتهت، ولمواصلة استخدام الصوت نفسه يجب المرور بمسار الاستنساخ من جديد، وستحصل على
voice_task_idجديد. - الحذف المتكرر: حذف المهمة نفسها مرة أخرى يعيد
record not found(فهي في حالة محذوفة ولا يمكن العثور عليها).
7. توليد أغنية بصوت مستنسخ
نقطة النهاية: POST /api/music/generate-with-voice
الفوترة: 1.2 يوان لكل طلب.
معاملات الطلب
| المعامل | النوع | مطلوب | القيمة الافتراضية | الوصف |
|---|---|---|---|---|
voice_task_id |
number | نعم | - | معرّف مهمة صوت صارت قابلة للاستخدام |
voice_id |
string | لا | - | حقل تحقق اختياري؛ وإن أرسلته فيجب أن يطابق voice_id في المهمة |
customMode |
boolean | لا | false |
false نمط الإلهام، وtrue النمط المتقدم |
prompt |
string | نعم | - | في نمط الإلهام وصف الأغنية، وفي النمط المتقدم كلمات الأغنية. ولا يجوز أن يكون أيٌّ منهما فارغاً |
style |
string | نعم في النمط المتقدم | - | وسوم النمط؛ ولا يجوز أن تكون فارغة عند customMode=true |
title |
string | نعم في النمط المتقدم | - | عنوان الأغنية؛ ولا يجوز أن يكون فارغاً عند customMode=true |
negativeTags |
string | لا | - | النمط المستبعَد |
instrumental |
boolean | لا | false |
حقل توافق؛ ويُعالَج التوليد بالصوت المستنسخ دائماً كأغنية غنائية |
waitAudio |
boolean | لا | false |
حقل توافق؛ وتعيد هذه الواجهة دائماً مهام حجز مؤقت بشكل غير متزامن ولا تنتظر انتهاء الصوت |
model |
string | لا | suno-v6 |
نموذج توليد الأغاني العادي؛ ويمكن استخدام suno-v6 أو suno-v6-wild أو suno-v6-mini |
vocalGender |
string | لا | - | تفضيل جنس الصوت الغنائي |
lyricsMode |
string | لا | - | حقل توافق؛ ومسار إرسال الصوت المستنسخ الحالي لا يغيّر نمط الكلمات من تلقاء نفسه |
weirdnessConstraint |
number | لا | - | قوة الإبداع |
styleWeight |
number | لا | - | وزن النمط |
audioWeight |
number | لا | القيمة الافتراضية للمنصة | Audio Influence (مدى تأثير الصوت المرجعي)، والنطاق 0.0-1.0. وإن لم يُرسَل تُطبَّق القيمة الافتراضية للمنصة (ما يعادل 25% في الواجهة الرسمية)؛ و0 قيمة صالحة تعني عدم الميل إلى المصدر المرجعي إطلاقاً. ويرتبط هذا الحقل ارتباطاً وثيقاً بـ sourceClipId في السطر التالي: فعند وجود مصدر يشير إلى الصوت المرجعي، وبدون مصدر يشير إلى الصوت المستنسخ؛ ولا تملك المنصة لسوى هذا الشريط الواحد الذي يغطي الحالتين، فلا تقسّمه إلى معاملين حسب الاستخدام |
sourceClipId |
string | لا | - | معرّف الـ clip الحقيقي في مساحة العمل للأغنية المصدر. وإرساله يدخل في الكوفر بالصوت المستنسخ؛ وعدمه يعني توليداً عادياً بالصوت المستنسخ |
sourceAudioUrl |
string | لا | - | حقل عرض للمصدر؛ لا يشارك في تحديد الملكية أو الحساب، ويعتمد الخادم على سجله في قاعدة البيانات |
sourceTitle |
string | لا | - | حقل عرض للمصدر؛ لا يشارك في تحديد الملكية أو الحساب |
clientSubmissionId |
string | لا | - | حقل توافق مع Create UI؛ ولتحقيق إزالة تكرار موثوقة في واجهة العميل يجب استخدام ترويسة Idempotency-Key |
النماذج المدعومة: suno-v6 وsuno-v6-wild وsuno-v6-mini؛ والنموذج الفارغ يُعالَج كـ suno-v6. وقد أُوقفت نماذج V5/V5.5 القديمة، لكن المهام التاريخية قد تعرض أسماء النماذج القديمة.
تُفسِّر بنية الطلب المشتركة أيضاً حقول توافق Create UI مثل task وsoundType وsoundLoop وsoundBpm وsoundKey وvoiceTaskId وvoiceId، لكنها ليست معاملات عميل صالحة لهذه الواجهة: إذ يجب إرسال مهمة الصوت عبر voice_task_id، والتحقق الاختياري من الصوت عبر voice_id، ولا يقرأ توليد الموسيقى بالصوت حقول sound إطلاقاً.
كيف تُملأ معاملات التوليد
- عند
customMode=falseيحملpromptوصف الأغنية؛ وعندcustomMode=trueيحملpromptالكلمات كاملة، ويجب أيضاً ملءstyleوtitle. لا ترسل الكلمات إلى حقل الوصف في نمط الإلهام، ولا تعامل وصف الأغنية ككلمات في النمط المتقدم. weirdnessConstraintوstyleWeightنسب عشرية من0.0إلى1.0؛ ولا يمكن إرسال50أو50%. والقيمة0.5قيمة متوازنة؛ وحذفهما يعني «غير محدد»، بينما0قيمة صريحة صالحة.- يقبل
vocalGenderالقيمmوmaleوfوfemaleفقط. وinstrumentalهنا مجرد حقل توافق: فالتوليد بالصوت المستنسخ يُعالَج دائماً كأغنية غنائية. - لا يغيّر
waitAudioالسلوك هنا؛ إذ تعيد الواجهة دائماً مهام حجز مؤقت بشكل غير متزامن. وكونaudio_urlفارغاً في النتيجة الأولى أمر طبيعي: استعلم بـclient_request_idواقرأ عنوان الصوت بعد اكتمال النتيجة فقط.
معاملات الترويسة
| الترويسة | مطلوبة | الوصف |
|---|---|---|
Authorization: Bearer ... |
نعم | رمز API الخاص بالعميل |
Content-Type: application/json |
نعم | جسم الطلب بصيغة JSON |
Idempotency-Key |
لا، ويُنصح به بشدة | بحد أقصى 128 حرفاً. فمع تطابق المستخدم والرمز ونقطة النهاية والمفتاح وجسم الطلب تُحاسَب وتُنشأ المهمة مرة واحدة فقط |
سلوك Idempotency-Key:
- يكتب الطلب الأول سجل إزالة تكرار دائماً قبل الفوترة؛
- وإذا كان المفتاح نفسه مع الطلب نفسه قد اكتمل، تُعاد استجابة القبول الأولى دون خصم ثانٍ أو مهمة ثانية؛
- ويُرفض المفتاح نفسه مع جسم طلب مختلف؛
- ويعيد المفتاح نفسه وهو قيد المعالجة خطأ «قيد المعالجة» مستقراً، ولا يكشف
client_request_idآمناً إلا بعد توليده؛ - وإذا فشل الطلب الأول بمفتاح معيّن يبقى في حالة فشل، ويتطلب إعادة المحاولة مفتاحاً جديداً.
شروط الكوفر عبر sourceClipId
يتولى الخادم بالكامل الكوفر من مصدر في واجهة العميل: فالخادم يحلّ الوصول إلى الأغنية المصدر، ولا يرسل العميل أي معلومات حساب. وتحدد الاستجابة الفعلية للواجهة إمكانية ذلك.
يجب أن يكون المصدر مملوكاً لمستخدم الـ API الحالي، وأغنية منتهية في مساحة العمل لا تبدأ بـ pending:، وله صوت صالح. وتُدعم الحالات التالية: التوليد العادي، ومصادر الرفع العادي، والأغنية النهائية للرفع المعزّز؛ أما السجلات الوسيطة للرفع المعزّز فتُرفض قبل الفوترة. ولا يقبل الخادم سوى معرّف الأغنية المصدر الذي يرسله العميل، ولا يقبل أبداً معرّف حساب؛ وإذا كان المصدر غير متاح أو غير منتهٍ تُعاد رسالة خطأ قبل الفوترة.
مثال الطلب
curl -X POST https://www.suno-api.io/api/music/generate-with-voice \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"voice_task_id": 123,
"customMode": true,
"prompt": "اكتب أغنية بوب صينية عن شاطئ البحر في ليلة صيفية",
"style": "Mandopop, warm piano, emotional",
"title": "نسيم البحر في ليلة صيفية",
"negativeTags": "noise, low quality",
"instrumental": false,
"model": "suno-v6"
}'
مثال الاستجابة
{
"success": true,
"message": "",
"data": {
"client_request_id": "cu_1780480000_abcd1234",
"items": [
{
"placeholder_id": "pending:cu_1780480000_abcd1234:0",
"client_request_id": "cu_1780480000_abcd1234",
"client_request_index": 0,
"status": "submitted",
"type": "voice_generate",
"title": "نسيم البحر في ليلة صيفية",
"prompt": "اكتب أغنية بوب صينية عن شاطئ البحر في ليلة صيفية"
},
{
"placeholder_id": "pending:cu_1780480000_abcd1234:1",
"client_request_id": "cu_1780480000_abcd1234",
"client_request_index": 1,
"status": "submitted",
"type": "voice_generate",
"title": "نسيم البحر في ليلة صيفية",
"prompt": "اكتب أغنية بوب صينية عن شاطئ البحر في ليلة صيفية"
}
],
"pre_consumed_quota": 600000,
"billing_source": "wallet"
}
}
حول مهام الحجز المؤقت وsong_id النهائي
generate-with-voice واجهة توليد غير متزامنة. فالاستجابة الناجحة تعني فقط أن مهمة التوليد قد أُرسلت، وليس أن الأغنية اكتملت.
معنى الحقول المهمة في الاستجابة:
| الحقل | الوصف |
|---|---|
client_request_id |
معرّف تتبّع طلب التوليد هذا. وينتج الطلب الواحد عادة أغنيتين، وتستخدم النتيجتان client_request_id نفسه. |
items[].placeholder_id |
معرّف حجز مؤقت محلي على المنصة، غالباً بالشكل pending:{client_request_id}:{index}. وليس معرّف الأغنية النهائي. |
items[].client_request_index |
ترتيب النتيجة داخل الطلب نفسه، وغالباً يكون 0 و1. |
items[].status |
الحالة الأولية بعد الإرسال، مثل submitted. ويتبع النجاح أو الفشل لاحقاً سجل المهمة النهائي. |
تنبيه: لا يصلح placeholder_id الذي يبدأ بـ pending: كـ song_id نهائي، ولا يمكن تمريره مباشرة إلى /api/music/query أو نقاط نهاية التنزيل. واستدعاء /api/music/query بقيم pending:* فقط قد يعيد مصفوفة فارغة []، لأن الأغنية الحقيقية لم تكتمل بعد أو لأن مهمة الحجز المؤقت لم تُستبدل بعد بمعرّف الأغنية النهائي.
مثال خاطئ:
{
"song_ids": "pending:cu_1780480000_abcd1234:0"
}
التسلسل الصحيح:
- استدعِ
POST /api/music/generate-with-voiceلإرسال مهمة توليد الموسيقى بالصوت. - احفظ
client_request_idوitems[].placeholder_idوitems[].client_request_indexمن الاستجابة. - استعلم بشكل متكرر
GET /api/music/generate-with-voice/results?client_request_id=cu_xxx. - عندما تصبح لـ
items[].song_idقيمة لا تبدأ بـpending:، استدعِ/api/music/queryأو/api/music/download-fileأو/api/music/download-all.
يضيف الإصدار الحالي نقطة نهاية استعلام عامة:
GET /api/music/generate-with-voice/results?client_request_id=cu_xxx
وهي تعيد نتائج المهام لنفس client_request_id تحت المستخدم الحالي، ليتمكن العميل من البحث بنفسه عن song_id النهائي. وفي القائمة المُعادة:
song_idهو معرّف الأغنية الحقيقي؛- ويظهر
placeholder_idفقط ما دامت المهمة في حالة الحجز المؤقت؛ - ولا يمكن استخدام قيمة تبدأ بـ
pending:مع/api/music/queryأو نقاط نهاية التنزيل.
إذا حفظت فقط client_request_id أو معرّف حجز مؤقت pending:*، فاستدعِ نقطة نهاية النتائج أولاً؛ وإن لم تجد song_id الحقيقي بعد، فأرسل client_request_id إلى الدعم الفني للتعقّب.
استعلام نتائج توليد الموسيقى بالصوت
نقطة النهاية: GET /api/music/generate-with-voice/results
الفوترة: مجاني.
معاملات الاستعلام
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
client_request_id |
string | نعم | معرّف التتبّع الذي أعادته generate-with-voice |
مثال الطلب
curl -X GET "https://www.suno-api.io/api/music/generate-with-voice/results?client_request_id=cu_1780480000_abcd1234" \
-H "Authorization: Bearer YOUR_API_KEY"
مثال استجابة أثناء التوليد
{
"success": true,
"message": "",
"data": {
"client_request_id": "cu_1780480000_abcd1234",
"status": "processing",
"items": [
{
"song_id": "",
"placeholder_id": "pending:cu_1780480000_abcd1234:0",
"client_request_id": "cu_1780480000_abcd1234",
"client_request_index": 0,
"status": "processing",
"type": "voice_generate",
"title": "نسيم البحر في ليلة صيفية"
}
]
}
}
مثال استجابة بعد الاكتمال
{
"success": true,
"message": "",
"data": {
"client_request_id": "cu_1780480000_abcd1234",
"status": "completed",
"items": [
{
"song_id": "song_abc123",
"client_request_id": "cu_1780480000_abcd1234",
"client_request_index": 0,
"status": "completed",
"type": "voice_generate",
"title": "نسيم البحر في ليلة صيفية",
"audio_url": "https://...",
"image_url": "https://...",
"duration": 180.5
}
]
}
}
معنى status في المستوى الأعلى
| الحالة | الوصف |
|---|---|
not_found |
لا يوجد بعد سجل مهمة لهذا client_request_id تحت المستخدم الحالي |
processing |
لا تزال نتيجة واحدة على الأقل غير مكتملة؛ واصل الاستعلام |
completed |
اكتملت جميع النتائج؛ ويمكن الاستعلام أو التنزيل عبر song_id |
partial |
بعضها مكتمل وبعضها فشل؛ عالج song_id المكتملة أولاً |
failed |
فشلت جميع النتائج؛ راجع items[].error_message |
8. تنزيل ملف واحد
نقطة النهاية: POST /api/music/download-file
معاملات الطلب
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
song_id |
string | نعم | معرّف الأغنية |
kind |
string | نعم | نوع التنزيل: audio أو cover أو wav أو video |
مثال الطلب
curl -X POST https://www.suno-api.io/api/music/download-file \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"song_id": "song_abc123",
"kind": "audio"
}' \
--output song.mp3
الاستجابة تدفّق ملف؛ ويتبع Content-Type واسم الملف ما يعيده الخادم الخلفي.
9. تنزيل موارد الأغنية كحزمة
نقطة النهاية: POST /api/music/download-all
معاملات الطلب
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
song_id |
string | نعم | معرّف الأغنية |
مثال الطلب
curl -X POST https://www.suno-api.io/api/music/download-all \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"song_id": "song_abc123"
}' \
--output song.zip
تحتوي الحزمة عادة على الصوت والغلاف وmetadata.json؛ وإذا لم يكن نوع مورد ما قد وُلّد بعد فلن يُضاف إلى الأرشيف.
أخطاء شائعة
| message | الوصف |
|---|---|
voice audio is required |
لم يُقدَّم voice_url ولا file_base64 عند إرسال الصوت المصدر |
invalid voice task id |
معرّف مهمة الصوت في المسار غير صالح |
voice validation is not ready |
لم يتوفر بعد نص التحقق، فلا يمكن إرسال ملف التحقق |
selected voice is not ready |
الصوت المختار لا يمكنه التوليد بعد (غير جاهز، أو محذوف، أو لا ينتمي إلى الحساب الحالي) |
selected voice does not match voice task |
voice_id في الطلب لا يطابق المهمة |
voice task is required |
ينقص voice_task_id عند توليد أغنية بالصوت |
record not found |
المهمة / الأغنية غير موجودة، أو لا تنتمي إلى حساب مفتاح API الحالي، أو حُذفت بالفعل (وسيظهر الأمر نفسه عند طلب هذه المهمة بعد حذف الصوت) |
أخطاء هذه المجموعة تعيد دائماً HTTP 200: فاحكم على النتيجة من حقل
successفي الجسم (falseتعني الفشل، والسبب فيmessage) ولا تنظر إلى رمز حالة HTTP وحده. والدلالة الكاملة لحذف الصوت (هل يبقى صالحاً للاستخدام، وهل يمكن استعادته) في القسم 6.
احصل على مفتاح API
أنشئ مفتاح API من لوحة التحكم بعد التسجيل. كل عملية توليد تكلف 0.6 يوان وتعيد مقطوعتين، والتنزيلات غير محدودة، ولا حاجة إلى رقم هاتف.
احصل على مفتاح API العودة إلى النظرة العامة