{"openapi":"3.1.0","info":{"title":"APIstable API","version":"1.0.0-preview","description":"Public /api/v1 protocol. Valid API keys have the same account-scoped access. Read the selected model documentation for its ID, supported inputs, result format and availability before submitting. No client submission idempotency or max_credits. Availability, pricing, file retention and callback formats follow the selected model contract. Unconfigured operations return 503."},"servers":[{"url":"https://apistable.ai"}],"paths":{"/api/v1/files/upload":{"post":{"operationId":"file_upload","summary":"Upload media: upload","security":[{"bearerAuth":[]}],"description":"Uploaded files expire after 24 hours. Account-scoped immutable object versions. Stream/URL maximum 500 MiB; Base64 decoded maximum 10 MiB.","requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","required":["file"],"additionalProperties":false,"properties":{"file":{"type":"string","format":"binary"},"uploadPath":{"type":"string","default":"files"},"fileName":{"type":"string"}}}}}},"responses":{"200":{"description":"Uploaded","content":{"application/json":{"schema":{"type":"object","required":["success","code","msg","data"],"properties":{"success":{"const":true},"code":{"const":200},"msg":{"type":"string"},"data":{"type":"object","required":["fileName","filePath","downloadUrl","fileSize","mimeType","uploadedAt","expiresAt"],"properties":{"fileName":{"type":"string"},"filePath":{"type":"string"},"downloadUrl":{"type":"string","format":"uri"},"fileSize":{"type":"integer"},"mimeType":{"type":"string"},"uploadedAt":{"type":"string","format":"date-time"},"expiresAt":{"type":"string","format":"date-time"}}}}}}}},"401":{"description":"40101: Invalid API key."},"503":{"description":"Operation or provider unavailable"}}}},"/api/v1/files/upload_url":{"post":{"operationId":"file_upload_url","summary":"Upload media: upload_url","security":[{"bearerAuth":[]}],"description":"Uploaded files expire after 24 hours. Account-scoped immutable object versions. Stream/URL maximum 500 MiB; Base64 decoded maximum 10 MiB.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["fileUrl"],"additionalProperties":false,"properties":{"fileUrl":{"type":"string"},"uploadPath":{"type":"string","default":"files"},"fileName":{"type":"string"}}}}}},"responses":{"200":{"description":"Uploaded","content":{"application/json":{"schema":{"type":"object","required":["success","code","msg","data"],"properties":{"success":{"const":true},"code":{"const":200},"msg":{"type":"string"},"data":{"type":"object","required":["fileName","filePath","downloadUrl","fileSize","mimeType","uploadedAt","expiresAt"],"properties":{"fileName":{"type":"string"},"filePath":{"type":"string"},"downloadUrl":{"type":"string","format":"uri"},"fileSize":{"type":"integer"},"mimeType":{"type":"string"},"uploadedAt":{"type":"string","format":"date-time"},"expiresAt":{"type":"string","format":"date-time"}}}}}}}},"401":{"description":"40101: Invalid API key."},"503":{"description":"Operation or provider unavailable"}}}},"/api/v1/files/upload_base64":{"post":{"operationId":"file_upload_base64","summary":"Upload media: upload_base64","security":[{"bearerAuth":[]}],"description":"Uploaded files expire after 24 hours. Account-scoped immutable object versions. Stream/URL maximum 500 MiB; Base64 decoded maximum 10 MiB.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["base64Data"],"additionalProperties":false,"properties":{"base64Data":{"type":"string"},"uploadPath":{"type":"string","default":"files"},"fileName":{"type":"string"}}}}}},"responses":{"200":{"description":"Uploaded","content":{"application/json":{"schema":{"type":"object","required":["success","code","msg","data"],"properties":{"success":{"const":true},"code":{"const":200},"msg":{"type":"string"},"data":{"type":"object","required":["fileName","filePath","downloadUrl","fileSize","mimeType","uploadedAt","expiresAt"],"properties":{"fileName":{"type":"string"},"filePath":{"type":"string"},"downloadUrl":{"type":"string","format":"uri"},"fileSize":{"type":"integer"},"mimeType":{"type":"string"},"uploadedAt":{"type":"string","format":"date-time"},"expiresAt":{"type":"string","format":"date-time"}}}}}}}},"401":{"description":"40101: Invalid API key."},"503":{"description":"Operation or provider unavailable"}}}},"/api/v1/voices/verification_phrase":{"post":{"operationId":"voiceVerificationPhrase","summary":"Get or regenerate a verification phrase","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"voice_upload_task_id":{"type":"string","minLength":1,"maxLength":200,"description":"APIstable resource ID; never a supplier ID."},"language":{"default":"en","type":"string","enum":["en","zh","es","fr","pt","de","ja","ko","hi","ru"]}},"required":["voice_upload_task_id"],"additionalProperties":false}}}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["code","msg","data"],"properties":{"code":{"const":200},"msg":{"type":"string"},"data":{"type":"object","properties":{"phrase_id":{"type":"string"},"phrase_text":{"type":"string"},"language":{"type":"string"},"expires_at":{"type":"null"}}}}}}}},"400":{"description":"40002: Invalid input."},"401":{"description":"40101: Invalid API key."},"404":{"description":"40401: Resource not found in this account."},"409":{"description":"40901: Resource provider-account mismatch."},"410":{"description":"41001: Resource expired."},"502":{"description":"50201: Malformed provider response."},"503":{"description":"Operation or provider unavailable"}}}},"/api/v1/voices/{voice_id}":{"get":{"operationId":"voiceAvailability","summary":"Check Voice availability","security":[{"bearerAuth":[]}],"parameters":[{"name":"voice_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["code","msg","data"],"properties":{"code":{"const":200},"msg":{"type":"string"},"data":{"type":"object","properties":{"voice_id":{"type":"string"},"available":{"type":"boolean"},"reason":{"type":["string","null"]}}}}}}}},"400":{"description":"40002: Invalid input."},"401":{"description":"40101: Invalid API key."},"404":{"description":"40401: Resource not found in this account."},"409":{"description":"40901: Resource provider-account mismatch."},"410":{"description":"41001: Resource expired."},"502":{"description":"50201: Malformed provider response."},"503":{"description":"Operation or provider unavailable"}}}},"/api/v1/tasks/create_task":{"post":{"operationId":"createTask","summary":"Create a media task","security":[{"bearerAuth":[]}],"description":"Validates nested input against the selected model schema. Disabled operations return 503 without creating a task. Every acceptance creates a new task, so resubmission can duplicate work and charges. output_count and fallback belong inside input only when supported by the model.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskRequest"}}}},"responses":{"200":{"description":"Accepted task. Poll the common task endpoint or use callback_url.","content":{"application/json":{"schema":{"type":"object","required":["code","msg","data"],"additionalProperties":false,"properties":{"code":{"const":200},"msg":{"const":"success"},"data":{"type":"object","required":["task_id"],"additionalProperties":false,"properties":{"task_id":{"type":"string"}}}}}}}},"400":{"description":"40001 invalid JSON, 40002 invalid input/callback, 40003 unsupported parameter.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"40201: Insufficient credits (live acceptance).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"40401: Unknown model or resource not found in this account.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"40901: Resource belongs to a different provider account.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"41001: Source audio or temporary resource has expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"41301: Request too large.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"42201: Requested capability combination is not enabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"42901: Rate/concurrency limit (live acceptance).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"50301: Service/provider unavailable. No live submission or charge.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/tasks/{task_id}":{"get":{"operationId":"getTask","summary":"Query task result","security":[{"bearerAuth":[]}],"description":"Reads only tasks belonging to the key account. Partial success is succeeded. Queue/fallback/reconciliation map to processing. Only final total credits are exposed. Only input requires JSON.parse; result is an object or null. No supplier attempts or reservation fields.","parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Task query succeeded; generation can still have failed.","content":{"application/json":{"schema":{"type":"object","required":["code","msg","data"],"additionalProperties":false,"properties":{"code":{"const":200},"msg":{"const":"success"},"data":{"$ref":"#/components/schemas/Task"}}},"example":{"code":200,"msg":"success","data":{"task_id":"task_example","model":"prism-image-2","status":"succeeded","message":"","created_at":"2026-11-01T08:30:00Z","completed_at":"2026-11-01T08:31:20Z","duration":80000,"charged_credits":80,"input":"{\"prompt\":\"A red fox\",\"output_count\":3,\"fallback\":true}","result":{"urls":["https://cdn.example.com/a.png","https://cdn.example.com/b.png"]}}}}}},"401":{"description":"Invalid or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"40402: Task not found in this account.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"50301: Service/provider unavailable. No live submission or charge.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/balance":{"get":{"operationId":"getBalance","summary":"Read available Credits","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Current available Credits; no detailed reservation fields.","content":{"application/json":{"schema":{"type":"object","required":["code","msg","data"],"additionalProperties":false,"properties":{"code":{"const":200},"msg":{"const":"success"},"data":{"type":"object","required":["available_credits"],"properties":{"available_credits":{"type":"number","minimum":0}}}}}}}},"401":{"description":"Invalid or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"50301: Service/provider unavailable. No live submission or charge.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/chat/completions":{"post":{"operationId":"createChatCompletion","summary":"LLM integration placeholder","security":[{"bearerAuth":[]}],"description":"No live LLM or SSE is implemented. Authenticates and returns 503. Future compatibility must be documented per model; this envelope does not promise full OpenAI compatibility.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["model","messages"],"properties":{"model":{"type":"string"},"messages":{"type":"array","items":{"type":"object"}},"stream":{"type":"boolean","default":false}}}}}},"responses":{"401":{"description":"Invalid or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"50301: Service/provider unavailable. No live submission or charge.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"webhooks":{"taskCompleted":{"post":{"description":"Delivery to callback_url. Song success uses SongResult directly; other terminal results use the task envelope. Account-specific HMAC authentication and event ID are in X-APIstable-* headers. Delivery failure never regenerates or charges again.","requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/SongResult"},{"type":"object","required":["code","msg","data"],"additionalProperties":false,"properties":{"code":{"const":200},"msg":{"const":"success"},"data":{"$ref":"#/components/schemas/Task"}}}]}}}},"responses":{"200":{"description":"Receiver acknowledged notification."}}}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"Every valid key can submit and query its own account. Revoked keys are rejected."}},"schemas":{"SongResult":{"type":"object","required":["code","msg","data"],"properties":{"code":{"const":200},"msg":{"type":"string"},"data":{"type":"object","required":["callbackType","task_id","data"],"properties":{"callbackType":{"const":"complete"},"task_id":{"type":"string"},"data":{"type":"array","items":{"type":"object","required":["id","audio_url","stream_audio_url","image_url","prompt","lyrics","model_name","title","createTime","duration","tags","source_audio_url","source_image_url","source_stream_audio_url"],"properties":{"id":{"type":"string"},"audio_url":{"type":"string"},"stream_audio_url":{"type":["string","null"]},"image_url":{"type":["string","null"]},"prompt":{"type":"string"},"lyrics":{"type":["string","null"]},"model_name":{"type":["string","null"]},"title":{"type":["string","null"]},"createTime":{"type":["integer","null"]},"duration":{"type":["number","null"]},"tags":{"type":["string","null"]},"source_audio_url":{"type":"string"},"source_image_url":{"type":["string","null"]},"source_stream_audio_url":{"type":["string","null"]}}}}}}}},"suno_upload_input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"upload_url":{"type":"string","format":"uri","description":"Public HTTPS audio URL on port 443, without URL credentials. Use MP3/WAV/FLAC/OGG/M4A/AAC with a readable audio track. See the operation size limit."},"copyright_audio":{"default":false,"type":"boolean","description":"PayAPI upload extension, default false; enabling may incur additional supplier cost."}},"required":["upload_url"],"additionalProperties":false},"suno_upload_result":{"type":"object","required":["code","msg","data"],"properties":{"code":{"const":200},"msg":{"type":"string"},"data":{"type":"object","required":["callbackType","task_id","data"],"properties":{"callbackType":{"const":"complete"},"task_id":{"type":"string"},"data":{"type":"array","items":{"type":"object","required":["id","audio_url","stream_audio_url","image_url","prompt","lyrics","model_name","title","createTime","duration","tags","source_audio_url","source_image_url","source_stream_audio_url"],"properties":{"id":{"type":"string"},"audio_url":{"type":"string"},"stream_audio_url":{"type":["string","null"]},"image_url":{"type":["string","null"]},"prompt":{"type":"string"},"lyrics":{"type":["string","null"]},"model_name":{"type":["string","null"]},"title":{"type":["string","null"]},"createTime":{"type":["integer","null"]},"duration":{"type":["number","null"]},"tags":{"type":["string","null"]},"source_audio_url":{"type":"string"},"source_image_url":{"type":["string","null"]},"source_stream_audio_url":{"type":["string","null"]}}}}}}}},"suno_generate_input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"lyrics":{"type":"string","maxLength":5000,"description":"Up to 5000 characters. Custom mode uses this instead of prompt when present; simple mode uses it alongside prompt and counts non-empty lyrics as one attachment."},"prompt":{"type":"string","maxLength":5000,"description":"Simple mode: description up to 3000 characters, used alongside lyrics. Custom mode: fallback lyrics up to 5000 characters, used only when lyrics is omitted."},"style":{"type":"string","maxLength":1000,"description":"Musical style, up to 1000 characters. Counts as one attachment in simple generation."},"negative_tags":{"type":"string","maxLength":1000,"description":"Styles to exclude; required for adding instrumental backing or vocals."},"vocal_gender":{"type":"string","enum":["m","f"],"description":"m or f. A vocal tendency, not a guaranteed voice identity. When generating music, requires custom mode."},"style_weight":{"type":"number","minimum":0,"maximum":1,"description":"Style influence, 0–1 with at most two decimal places. When generating music, requires custom mode."},"weirdness_constraint":{"type":"number","minimum":0,"maximum":1,"description":"Creativity constraint, 0–1 with at most two decimal places. When generating music, requires custom mode."},"audio_weight":{"type":"number","minimum":0,"maximum":1,"description":"Audio influence, 0–1 with at most two decimal places. Generation requires custom, non-instrumental mode."},"variety":{"type":"integer","minimum":0,"maximum":4,"description":"Variety: integer 0–4, default 1 in custom generation."},"persona_id":{"type":"string","minLength":1,"maxLength":200,"description":"APIstable Voice or Persona ID; provider root and artist mapping remain server-side."},"persona_model":{"type":"string","enum":["style_persona","voice_persona"],"description":"style_persona or voice_persona; must match the resource's actual origin."},"max_mode":{"default":false,"type":"boolean","description":"PayAPI extension. Max mode may increase supplier cost. APIstable credit deduction is currently disabled."},"model":{"type":"string","enum":["V6","V6_MINI","V6_WILD"],"description":"Suno version: V6, V6_MINI or V6_WILD. Extension must match the generated source model."},"custom_mode":{"type":"boolean","description":"Custom mode uses title, lyrics and style. Simple mode uses a prompt plus reference attachments."},"instrumental":{"type":"boolean","description":"Generate instrumental music. Instrumental extensions omit prompt, lyrics and vocal_gender."},"title":{"type":"string","maxLength":80,"description":"Title. Generate/cover: up to 80 characters; extend and other operations: up to 100. Required for custom generation."},"duration":{"type":"number","minimum":10,"maximum":360,"description":"Requested duration, 10–360 seconds; custom generation only. Omit for automatic duration."},"image_urls":{"maxItems":5,"type":"array","items":{"type":"string","format":"uri"},"description":"Simple mode only. Up to 5 public JPEG/PNG/WebP/BMP URLs, at most 10 MiB each."},"video_urls":{"maxItems":1,"type":"array","items":{"type":"string","format":"uri"},"description":"Simple mode only. One public MP4/MOV/WebM URL, at most 100 MiB and 241 seconds."},"audio_urls":{"maxItems":10,"type":"array","items":{"type":"string","format":"uri"},"description":"Simple mode reference audio URLs. Each 6–1800 seconds, at most 500 MiB. Total attachments including style and lyrics must be 1–10."}},"required":["model","custom_mode","instrumental"],"additionalProperties":false},"suno_generate_result":{"type":"object","required":["code","msg","data"],"properties":{"code":{"const":200},"msg":{"type":"string"},"data":{"type":"object","required":["callbackType","task_id","data"],"properties":{"callbackType":{"const":"complete"},"task_id":{"type":"string"},"data":{"type":"array","items":{"type":"object","required":["id","audio_url","stream_audio_url","image_url","prompt","lyrics","model_name","title","createTime","duration","tags","source_audio_url","source_image_url","source_stream_audio_url"],"properties":{"id":{"type":"string"},"audio_url":{"type":"string"},"stream_audio_url":{"type":["string","null"]},"image_url":{"type":["string","null"]},"prompt":{"type":"string"},"lyrics":{"type":["string","null"]},"model_name":{"type":["string","null"]},"title":{"type":["string","null"]},"createTime":{"type":["integer","null"]},"duration":{"type":["number","null"]},"tags":{"type":["string","null"]},"source_audio_url":{"type":"string"},"source_image_url":{"type":["string","null"]},"source_stream_audio_url":{"type":["string","null"]}}}}}}}},"suno_extend_input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"lyrics":{"type":"string","maxLength":5000,"description":"Lyrics, up to 5000 characters; used instead of prompt when present."},"prompt":{"type":"string","maxLength":5000,"description":"Fallback lyrics, up to 5000 characters; used only when lyrics is omitted."},"style":{"type":"string","maxLength":1000,"description":"Musical style, up to 1000 characters. Counts as one attachment in simple generation."},"negative_tags":{"type":"string","maxLength":1000,"description":"Styles to exclude; required for adding instrumental backing or vocals."},"vocal_gender":{"type":"string","enum":["m","f"],"description":"m or f. A vocal tendency, not a guaranteed voice identity. When generating music, requires custom mode."},"style_weight":{"type":"number","minimum":0,"maximum":1,"description":"Style influence, 0–1 with at most two decimal places. When generating music, requires custom mode."},"weirdness_constraint":{"type":"number","minimum":0,"maximum":1,"description":"Creativity constraint, 0–1 with at most two decimal places. When generating music, requires custom mode."},"audio_weight":{"type":"number","minimum":0,"maximum":1,"description":"Audio influence, 0–1 with at most two decimal places. Generation requires custom, non-instrumental mode."},"variety":{"type":"integer","minimum":0,"maximum":4,"description":"Variety: integer 0–4, default 1 in custom generation."},"persona_id":{"type":"string","minLength":1,"maxLength":200,"description":"APIstable Voice or Persona ID; provider root and artist mapping remain server-side."},"persona_model":{"type":"string","enum":["style_persona","voice_persona"],"description":"style_persona or voice_persona; must match the resource's actual origin."},"max_mode":{"default":false,"type":"boolean","description":"PayAPI extension. Max mode may increase supplier cost. APIstable credit deduction is currently disabled."},"model":{"type":"string","enum":["V6","V6_MINI","V6_WILD"],"description":"Suno version: V6, V6_MINI or V6_WILD. Extension must match the generated source model."},"audio_id":{"type":"string","minLength":1,"maxLength":200,"description":"APIstable song ID belonging to your account. Cover/extend accept this ID only, without a source task_id or external URL."},"instrumental":{"type":"boolean","description":"Generate instrumental music. Instrumental extensions omit prompt, lyrics and vocal_gender."},"title":{"type":"string","maxLength":100,"description":"Title. Generate/cover: up to 80 characters; extend and other operations: up to 100. Required for custom generation."},"continue_at":{"type":"number","minimum":0,"description":"Extension start in seconds, at most two decimal places; greater than zero and strictly less than source duration."},"source_lyrics":{"type":"string","maxLength":5000,"description":"Source lyrics used to align an extension, separate from the new lyrics. Defaults to the stored source lyrics when omitted."},"result_mode":{"default":"full_song","type":"string","enum":["full_song","segment"],"description":"Extension/replacement: full_song (default) or segment. Added stem: mixed (default) or stem. Full/mixed results wait for assembly."}},"required":["model","audio_id"],"additionalProperties":false},"suno_extend_result":{"type":"object","required":["code","msg","data"],"properties":{"code":{"const":200},"msg":{"type":"string"},"data":{"type":"object","required":["callbackType","task_id","data"],"properties":{"callbackType":{"const":"complete"},"task_id":{"type":"string"},"data":{"type":"array","items":{"type":"object","required":["id","audio_url","stream_audio_url","image_url","prompt","lyrics","model_name","title","createTime","duration","tags","source_audio_url","source_image_url","source_stream_audio_url"],"properties":{"id":{"type":"string"},"audio_url":{"type":"string"},"stream_audio_url":{"type":["string","null"]},"image_url":{"type":["string","null"]},"prompt":{"type":"string"},"lyrics":{"type":["string","null"]},"model_name":{"type":["string","null"]},"title":{"type":["string","null"]},"createTime":{"type":["integer","null"]},"duration":{"type":["number","null"]},"tags":{"type":["string","null"]},"source_audio_url":{"type":"string"},"source_image_url":{"type":["string","null"]},"source_stream_audio_url":{"type":["string","null"]}}}}}}}},"suno_cover_input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"lyrics":{"type":"string","maxLength":5000,"description":"Lyrics, up to 5000 characters; used instead of prompt when present."},"prompt":{"type":"string","maxLength":5000,"description":"Fallback lyrics, up to 5000 characters; used only when lyrics is omitted."},"style":{"type":"string","maxLength":1000,"description":"Musical style, up to 1000 characters. Counts as one attachment in simple generation."},"negative_tags":{"type":"string","maxLength":1000,"description":"Styles to exclude; required for adding instrumental backing or vocals."},"vocal_gender":{"type":"string","enum":["m","f"],"description":"m or f. A vocal tendency, not a guaranteed voice identity. When generating music, requires custom mode."},"style_weight":{"type":"number","minimum":0,"maximum":1,"description":"Style influence, 0–1 with at most two decimal places. When generating music, requires custom mode."},"weirdness_constraint":{"type":"number","minimum":0,"maximum":1,"description":"Creativity constraint, 0–1 with at most two decimal places. When generating music, requires custom mode."},"audio_weight":{"type":"number","minimum":0,"maximum":1,"description":"Audio influence, 0–1 with at most two decimal places. Generation requires custom, non-instrumental mode."},"variety":{"type":"integer","minimum":0,"maximum":4,"description":"Variety: integer 0–4, default 1 in custom generation."},"persona_id":{"type":"string","minLength":1,"maxLength":200,"description":"APIstable Voice or Persona ID; provider root and artist mapping remain server-side."},"persona_model":{"type":"string","enum":["style_persona","voice_persona"],"description":"style_persona or voice_persona; must match the resource's actual origin."},"max_mode":{"default":false,"type":"boolean","description":"PayAPI extension. Max mode may increase supplier cost. APIstable credit deduction is currently disabled."},"model":{"type":"string","enum":["V6","V6_MINI","V6_WILD"],"description":"Suno version: V6, V6_MINI or V6_WILD. Extension must match the generated source model."},"instrumental":{"type":"boolean","description":"Generate instrumental music. Instrumental extensions omit prompt, lyrics and vocal_gender."},"audio_id":{"type":"string","minLength":1,"maxLength":200,"description":"APIstable song ID belonging to your account. Cover/extend accept this ID only, without a source task_id or external URL."},"title":{"type":"string","maxLength":80,"description":"Title. Generate/cover: up to 80 characters; extend and other operations: up to 100. Required for custom generation."}},"required":["model","instrumental","audio_id"],"additionalProperties":false},"suno_cover_result":{"type":"object","required":["code","msg","data"],"properties":{"code":{"const":200},"msg":{"type":"string"},"data":{"type":"object","required":["callbackType","task_id","data"],"properties":{"callbackType":{"const":"complete"},"task_id":{"type":"string"},"data":{"type":"array","items":{"type":"object","required":["id","audio_url","stream_audio_url","image_url","prompt","lyrics","model_name","title","createTime","duration","tags","source_audio_url","source_image_url","source_stream_audio_url"],"properties":{"id":{"type":"string"},"audio_url":{"type":"string"},"stream_audio_url":{"type":["string","null"]},"image_url":{"type":["string","null"]},"prompt":{"type":"string"},"lyrics":{"type":["string","null"]},"model_name":{"type":["string","null"]},"title":{"type":["string","null"]},"createTime":{"type":["integer","null"]},"duration":{"type":["number","null"]},"tags":{"type":["string","null"]},"source_audio_url":{"type":"string"},"source_image_url":{"type":["string","null"]},"source_stream_audio_url":{"type":["string","null"]}}}}}}}},"suno_replace_section_input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"vocal_gender":{"type":"string","enum":["m","f"],"description":"m or f. A vocal tendency, not a guaranteed voice identity. When generating music, requires custom mode."},"style_weight":{"type":"number","minimum":0,"maximum":1,"description":"Style influence, 0–1 with at most two decimal places. When generating music, requires custom mode."},"weirdness_constraint":{"type":"number","minimum":0,"maximum":1,"description":"Creativity constraint, 0–1 with at most two decimal places. When generating music, requires custom mode."},"audio_weight":{"type":"number","minimum":0,"maximum":1,"description":"Audio influence, 0–1 with at most two decimal places. Generation requires custom, non-instrumental mode."},"variety":{"type":"integer","minimum":0,"maximum":4,"description":"Variety: integer 0–4, default 1 in custom generation."},"persona_id":{"type":"string","minLength":1,"maxLength":200,"description":"APIstable Voice or Persona ID; provider root and artist mapping remain server-side."},"persona_model":{"type":"string","enum":["style_persona","voice_persona"],"description":"style_persona or voice_persona; must match the resource's actual origin."},"audio_id":{"type":"string","minLength":1,"maxLength":200,"description":"APIstable song ID belonging to your account. Cover/extend accept this ID only, without a source task_id or external URL."},"prompt":{"type":"string","maxLength":5000,"description":"Required replacement prompt, up to 5000 characters. lyrics does not replace this field."},"tags":{"type":"string","maxLength":1000,"description":"Musical style for this operation, up to 1000 characters."},"title":{"type":"string","minLength":1,"maxLength":100,"description":"Title. Generate/cover: up to 80 characters; extend and other operations: up to 100. Required for custom generation."},"infill_start_s":{"type":"number","minimum":0,"description":"Replacement start in seconds, at most two decimal places."},"infill_end_s":{"type":"number","minimum":0,"description":"Replacement end in seconds, at most two decimal places, within the source. Replace 10–120 seconds and no more than half the source duration."},"full_lyrics":{"type":"string","maxLength":5000,"description":"Full song lyrics with the replacement in its intended position."},"lyrics":{"type":"string","maxLength":5000,"description":"Optional lyrics for the replacement segment, up to 5000 characters; defaults to prompt. Does not replace full_lyrics or the main prompt."},"negative_tags":{"type":"string","maxLength":1000,"description":"Styles to exclude; required for adding instrumental backing or vocals."},"result_mode":{"default":"full_song","type":"string","enum":["full_song","segment"],"description":"Extension/replacement: full_song (default) or segment. Added stem: mixed (default) or stem. Full/mixed results wait for assembly."}},"required":["audio_id","prompt","tags","title","infill_start_s","infill_end_s","full_lyrics"],"additionalProperties":false},"suno_replace_section_result":{"type":"object","required":["code","msg","data"],"properties":{"code":{"const":200},"msg":{"type":"string"},"data":{"type":"object","required":["callbackType","task_id","data"],"properties":{"callbackType":{"const":"complete"},"task_id":{"type":"string"},"data":{"type":"array","items":{"type":"object","required":["id","audio_url","stream_audio_url","image_url","prompt","lyrics","model_name","title","createTime","duration","tags","source_audio_url","source_image_url","source_stream_audio_url"],"properties":{"id":{"type":"string"},"audio_url":{"type":"string"},"stream_audio_url":{"type":["string","null"]},"image_url":{"type":["string","null"]},"prompt":{"type":"string"},"lyrics":{"type":["string","null"]},"model_name":{"type":["string","null"]},"title":{"type":["string","null"]},"createTime":{"type":["integer","null"]},"duration":{"type":["number","null"]},"tags":{"type":["string","null"]},"source_audio_url":{"type":"string"},"source_image_url":{"type":["string","null"]},"source_stream_audio_url":{"type":["string","null"]}}}}}}}},"suno_add_instrumental_input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"vocal_gender":{"type":"string","enum":["m","f"],"description":"m or f. A vocal tendency, not a guaranteed voice identity. When generating music, requires custom mode."},"style_weight":{"type":"number","minimum":0,"maximum":1,"description":"Style influence, 0–1 with at most two decimal places. When generating music, requires custom mode."},"weirdness_constraint":{"type":"number","minimum":0,"maximum":1,"description":"Creativity constraint, 0–1 with at most two decimal places. When generating music, requires custom mode."},"audio_weight":{"type":"number","minimum":0,"maximum":1,"description":"Audio influence, 0–1 with at most two decimal places. Generation requires custom, non-instrumental mode."},"variety":{"type":"integer","minimum":0,"maximum":4,"description":"Variety: integer 0–4, default 1 in custom generation."},"upload_url":{"type":"string","format":"uri","description":"Public HTTPS audio URL on port 443, without URL credentials. Use MP3/WAV/FLAC/OGG/M4A/AAC with a readable audio track. See the operation size limit."},"title":{"type":"string","minLength":1,"maxLength":100,"description":"Title. Generate/cover: up to 80 characters; extend and other operations: up to 100. Required for custom generation."},"negative_tags":{"type":"string","maxLength":1000,"description":"Styles to exclude; required for adding instrumental backing or vocals."},"tags":{"type":"string","maxLength":1000,"description":"Musical style for this operation, up to 1000 characters."},"lyrics":{"type":"string","maxLength":5000,"description":"Lyrics, up to 5000 characters. See the operation for how this interacts with prompt."},"model":{"default":"V6","type":"string","enum":["V6","V6_MINI","V6_WILD"],"description":"Suno version: V6, V6_MINI or V6_WILD. Extension must match the generated source model."}},"required":["upload_url","title","negative_tags","tags"],"additionalProperties":false},"suno_add_instrumental_result":{"type":"object","required":["code","msg","data"],"properties":{"code":{"const":200},"msg":{"type":"string"},"data":{"type":"object","required":["callbackType","task_id","data"],"properties":{"callbackType":{"const":"complete"},"task_id":{"type":"string"},"data":{"type":"array","items":{"type":"object","required":["id","audio_url","stream_audio_url","image_url","prompt","lyrics","model_name","title","createTime","duration","tags","source_audio_url","source_image_url","source_stream_audio_url"],"properties":{"id":{"type":"string"},"audio_url":{"type":"string"},"stream_audio_url":{"type":["string","null"]},"image_url":{"type":["string","null"]},"prompt":{"type":"string"},"lyrics":{"type":["string","null"]},"model_name":{"type":["string","null"]},"title":{"type":["string","null"]},"createTime":{"type":["integer","null"]},"duration":{"type":["number","null"]},"tags":{"type":["string","null"]},"source_audio_url":{"type":"string"},"source_image_url":{"type":["string","null"]},"source_stream_audio_url":{"type":["string","null"]}}}}}}}},"suno_add_vocals_input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"vocal_gender":{"type":"string","enum":["m","f"],"description":"m or f. A vocal tendency, not a guaranteed voice identity. When generating music, requires custom mode."},"style_weight":{"type":"number","minimum":0,"maximum":1,"description":"Style influence, 0–1 with at most two decimal places. When generating music, requires custom mode."},"weirdness_constraint":{"type":"number","minimum":0,"maximum":1,"description":"Creativity constraint, 0–1 with at most two decimal places. When generating music, requires custom mode."},"audio_weight":{"type":"number","minimum":0,"maximum":1,"description":"Audio influence, 0–1 with at most two decimal places. Generation requires custom, non-instrumental mode."},"variety":{"type":"integer","minimum":0,"maximum":4,"description":"Variety: integer 0–4, default 1 in custom generation."},"upload_url":{"type":"string","format":"uri","description":"Public HTTPS audio URL on port 443, without URL credentials. Use MP3/WAV/FLAC/OGG/M4A/AAC with a readable audio track. See the operation size limit."},"title":{"type":"string","minLength":1,"maxLength":100,"description":"Title. Generate/cover: up to 80 characters; extend and other operations: up to 100. Required for custom generation."},"negative_tags":{"type":"string","maxLength":1000,"description":"Styles to exclude; required for adding instrumental backing or vocals."},"style":{"type":"string","maxLength":1000,"description":"Musical style, up to 1000 characters. Counts as one attachment in simple generation."},"lyrics":{"type":"string","maxLength":5000,"description":"Lyrics, up to 5000 characters; used instead of prompt when present."},"prompt":{"type":"string","maxLength":5000,"description":"Fallback lyrics, up to 5000 characters; used only when lyrics is omitted."},"model":{"default":"V6","type":"string","enum":["V6","V6_MINI","V6_WILD"],"description":"Suno version: V6, V6_MINI or V6_WILD. Extension must match the generated source model."}},"required":["upload_url","title","negative_tags","style"],"additionalProperties":false},"suno_add_vocals_result":{"type":"object","required":["code","msg","data"],"properties":{"code":{"const":200},"msg":{"type":"string"},"data":{"type":"object","required":["callbackType","task_id","data"],"properties":{"callbackType":{"const":"complete"},"task_id":{"type":"string"},"data":{"type":"array","items":{"type":"object","required":["id","audio_url","stream_audio_url","image_url","prompt","lyrics","model_name","title","createTime","duration","tags","source_audio_url","source_image_url","source_stream_audio_url"],"properties":{"id":{"type":"string"},"audio_url":{"type":"string"},"stream_audio_url":{"type":["string","null"]},"image_url":{"type":["string","null"]},"prompt":{"type":"string"},"lyrics":{"type":["string","null"]},"model_name":{"type":["string","null"]},"title":{"type":["string","null"]},"createTime":{"type":["integer","null"]},"duration":{"type":["number","null"]},"tags":{"type":["string","null"]},"source_audio_url":{"type":"string"},"source_image_url":{"type":["string","null"]},"source_stream_audio_url":{"type":["string","null"]}}}}}}}},"suno_add_stem_input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"audio_id":{"type":"string","minLength":1,"maxLength":200,"description":"APIstable song ID belonging to your account. Cover/extend accept this ID only, without a source task_id or external URL."},"stem_prompt":{"type":"string","minLength":1,"maxLength":1000,"description":"PayAPI extension: describe the instrument or backing stem to add."},"model":{"default":"V6","type":"string","enum":["V6","V6_MINI","V6_WILD"],"description":"Suno version: V6, V6_MINI or V6_WILD. Extension must match the generated source model."},"title":{"type":"string","maxLength":100,"description":"Title. Generate/cover: up to 80 characters; extend and other operations: up to 100. Required for custom generation."},"result_mode":{"default":"mixed","type":"string","enum":["stem","mixed"],"description":"Extension/replacement: full_song (default) or segment. Added stem: mixed (default) or stem. Full/mixed results wait for assembly."}},"required":["audio_id","stem_prompt"],"additionalProperties":false},"suno_add_stem_result":{"type":"object","required":["code","msg","data"],"properties":{"code":{"const":200},"msg":{"type":"string"},"data":{"type":"object","required":["callbackType","task_id","data"],"properties":{"callbackType":{"const":"complete"},"task_id":{"type":"string"},"data":{"type":"array","items":{"type":"object","required":["id","audio_url","stream_audio_url","image_url","prompt","lyrics","model_name","title","createTime","duration","tags","source_audio_url","source_image_url","source_stream_audio_url"],"properties":{"id":{"type":"string"},"audio_url":{"type":"string"},"stream_audio_url":{"type":["string","null"]},"image_url":{"type":["string","null"]},"prompt":{"type":"string"},"lyrics":{"type":["string","null"]},"model_name":{"type":["string","null"]},"title":{"type":["string","null"]},"createTime":{"type":["integer","null"]},"duration":{"type":["number","null"]},"tags":{"type":["string","null"]},"source_audio_url":{"type":"string"},"source_image_url":{"type":["string","null"]},"source_stream_audio_url":{"type":["string","null"]}}}}}}}},"suno_lyrics_timestamps_input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"audio_id":{"type":"string","minLength":1,"maxLength":200,"description":"APIstable song ID belonging to your account. Cover/extend accept this ID only, without a source task_id or external URL."},"lyrics":{"type":"string","maxLength":5000,"description":"Lyrics, up to 5000 characters. See the operation for how this interacts with prompt."}},"required":["audio_id"],"additionalProperties":false},"suno_lyrics_timestamps_result":{"type":"object","required":["state","alignment"],"properties":{"state":{"type":"string"},"alignment":{"type":"array","items":{"type":"object","properties":{"word":{"type":"string"},"success":{"type":"boolean"},"start_s":{"type":"number"},"end_s":{"type":"number"},"p_align":{"type":"number"}},"additionalProperties":true}}},"additionalProperties":true},"suno_voice_upload_input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"voice_url":{"type":"string","format":"uri","description":"Public HTTPS original voice recording: MP3/WAV/FLAC/OGG/M4A/AAC, up to 500 MiB, with a positive duration."},"vocal_start_s":{"type":"number","minimum":0,"description":"Selected vocal start in seconds, at most two decimal places. Use the original recording for Voice upload and the prepared vocal timeline for song Persona."},"vocal_end_s":{"type":"number","minimum":0,"description":"Selected vocal end in seconds, at most two decimal places; after start and within the audio. Song Voice Persona requires a 10–30 second range."},"name":{"type":"string","maxLength":100,"description":"Voice or Persona display name."},"description":{"type":"string","maxLength":1000,"description":"Voice or Persona description."}},"required":["voice_url","vocal_start_s","vocal_end_s"],"additionalProperties":false},"suno_voice_upload_result":{"type":"object","required":["voice_upload_task_id","ready"],"properties":{"voice_upload_task_id":{"type":"string"},"ready":{"const":true}},"additionalProperties":false},"suno_voice_create_input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"voice_upload_task_id":{"type":"string","minLength":1,"maxLength":200,"description":"APIstable task ID returned by suno_voice_upload, bound to the same account."},"phrase_id":{"type":"string","minLength":1,"maxLength":200,"description":"APIstable verification phrase ID, bound to the selected voice upload."},"upload_url":{"type":"string","format":"uri","description":"Public HTTPS audio URL on port 443, without URL credentials. Use MP3/WAV/FLAC/OGG/M4A/AAC with a readable audio track. See the operation size limit."},"name":{"type":"string","maxLength":100,"description":"Voice or Persona display name."},"description":{"type":"string","maxLength":1000,"description":"Voice or Persona description."}},"required":["voice_upload_task_id","phrase_id","upload_url"],"additionalProperties":false},"suno_voice_create_result":{"type":"object","required":["voice_id","name","description","available"],"properties":{"voice_id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"available":{"type":"boolean"}},"additionalProperties":false},"suno_export_wav_input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"audio_id":{"type":"string","minLength":1,"maxLength":200,"description":"APIstable song ID belonging to your account. Cover/extend accept this ID only, without a source task_id or external URL."}},"required":["audio_id"],"additionalProperties":false},"suno_export_wav_result":{"type":"object","required":["audio_id","download_url","expires_at"],"properties":{"audio_id":{"type":"string"},"download_url":{"type":"string"},"expires_at":{"type":"string"}},"additionalProperties":false},"suno_export_mp3_input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"audio_id":{"type":"string","minLength":1,"maxLength":200,"description":"APIstable song ID belonging to your account. Cover/extend accept this ID only, without a source task_id or external URL."}},"required":["audio_id"],"additionalProperties":false},"suno_export_mp3_result":{"type":"object","required":["audio_id","download_url","expires_at"],"properties":{"audio_id":{"type":"string"},"download_url":{"type":"string"},"expires_at":{"type":"string"}},"additionalProperties":false},"suno_export_midi_input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"audio_id":{"type":"string","minLength":1,"maxLength":200,"description":"APIstable song ID belonging to your account. Cover/extend accept this ID only, without a source task_id or external URL."}},"required":["audio_id"],"additionalProperties":false},"suno_export_midi_result":{"type":"object","required":["audio_id","download_url","expires_at"],"properties":{"audio_id":{"type":"string"},"download_url":{"type":"string"},"expires_at":{"type":"string"}},"additionalProperties":false},"suno_separate_vocals_input":{"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"separate_vocal","description":"separate_vocal (2 tracks), split_stem (4/6), or native split_stem_advanced."},"upload_url":{"type":"string","format":"uri","description":"Public HTTPS audio URL on port 443, without URL credentials. Use MP3/WAV/FLAC/OGG/M4A/AAC with a readable audio track. See the operation size limit."},"output_format":{"default":"wav","type":"string","enum":["mp3","wav","flac","ogg","m4a","aac"],"description":"Toolbox output: mp3, wav (default), flac, ogg, m4a or aac. Not accepted for native stem extraction."}},"required":["type","upload_url"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"split_stem","description":"separate_vocal (2 tracks), split_stem (4/6), or native split_stem_advanced."},"upload_url":{"type":"string","format":"uri","description":"Public HTTPS audio URL on port 443, without URL credentials. Use MP3/WAV/FLAC/OGG/M4A/AAC with a readable audio track. See the operation size limit."},"stem_mode":{"anyOf":[{"type":"number","const":4},{"type":"number","const":6}],"description":"Toolbox separation: 4 or 6 stems. Vocal remover fixes this to 2 internally."},"output_format":{"default":"wav","type":"string","enum":["mp3","wav","flac","ogg","m4a","aac"],"description":"Toolbox output: mp3, wav (default), flac, ogg, m4a or aac. Not accepted for native stem extraction."}},"required":["type","upload_url","stem_mode"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"split_stem_advanced","description":"separate_vocal (2 tracks), split_stem (4/6), or native split_stem_advanced."},"audio_id":{"type":"string","minLength":1,"maxLength":200,"description":"APIstable song ID belonging to your account. Cover/extend accept this ID only, without a source task_id or external URL."},"stem_name":{"type":"string","minLength":1,"maxLength":100,"description":"Native extraction name. Only Piano is documented and enabled; omit for twelve-stem separation."}},"required":["type","audio_id"],"additionalProperties":false}]},"suno_separate_vocals_result":{"type":"object","required":["stems"],"properties":{"stems":{"type":"array","items":{"type":"object","properties":{"stem_name":{"type":["string","null"]},"download_url":{"type":"string"},"expires_at":{"type":"string"}}}}},"additionalProperties":false},"suno_persona_prepare_input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"audio_id":{"type":"string","minLength":1,"maxLength":200,"description":"APIstable song ID belonging to your account. Cover/extend accept this ID only, without a source task_id or external URL."}},"required":["audio_id"],"additionalProperties":false},"suno_persona_prepare_result":{"type":"object","required":["prepared_audio_id","audio_url","waveform","expires_at"],"properties":{"prepared_audio_id":{"type":"string"},"audio_url":{"type":"string"},"waveform":{},"expires_at":{"type":"string"}},"additionalProperties":false},"suno_persona_create_input":{"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"type":"object","properties":{"persona_model":{"type":"string","const":"style_persona","description":"style_persona or voice_persona; must match the resource's actual origin."},"audio_id":{"type":"string","minLength":1,"maxLength":200,"description":"APIstable song ID belonging to your account. Cover/extend accept this ID only, without a source task_id or external URL."},"source_audio_ids":{"minItems":1,"type":"array","items":{"type":"string","minLength":1,"maxLength":200,"description":"APIstable resource ID; never a supplier ID."},"description":"Optional APIstable IDs of original generated songs used as Persona references. Defaults to the source song; uploaded songs are rejected."},"image_url":{"type":"string","format":"uri","description":"Optional public HTTPS cover image: JPEG/PNG/WebP/BMP, up to 10 MiB."},"name":{"type":"string","minLength":1,"maxLength":100,"description":"Voice or Persona display name."},"description":{"type":"string","maxLength":1000,"description":"Voice or Persona description."}},"required":["persona_model","audio_id","name"],"additionalProperties":false},{"type":"object","properties":{"persona_model":{"type":"string","const":"voice_persona","description":"style_persona or voice_persona; must match the resource's actual origin."},"prepared_audio_id":{"type":"string","minLength":1,"maxLength":200,"description":"APIstable prepared vocal ID from suno_persona_prepare."},"name":{"type":"string","minLength":1,"maxLength":100,"description":"Voice or Persona display name."},"description":{"type":"string","maxLength":1000,"description":"Voice or Persona description."},"vocal_start_s":{"type":"number","minimum":0,"description":"Selected vocal start in seconds, at most two decimal places. Use the original recording for Voice upload and the prepared vocal timeline for song Persona."},"vocal_end_s":{"type":"number","minimum":0,"description":"Selected vocal end in seconds, at most two decimal places; after start and within the audio. Song Voice Persona requires a 10–30 second range."},"user_input_styles":{"type":"string","maxLength":1000,"description":"Optional style description for a generated Voice Persona."}},"required":["persona_model","prepared_audio_id","name","vocal_start_s","vocal_end_s"],"additionalProperties":false}]},"suno_persona_create_result":{"type":"object","required":["persona_id","persona_model","name","description"],"properties":{"persona_id":{"type":"string"},"persona_model":{"enum":["style_persona","voice_persona"]},"name":{"type":"string"},"description":{"type":"string"}},"additionalProperties":false},"Error":{"type":"object","required":["code","msg","data"],"properties":{"code":{"type":"integer"},"msg":{"type":"string"},"data":{"type":"null"}}},"TaskRequest":{"allOf":[{"if":{"properties":{"model":{"const":"suno_upload"}},"required":["model"]},"then":{"properties":{"input":{"$ref":"#/components/schemas/suno_upload_input"}}}},{"if":{"properties":{"model":{"const":"suno_generate"}},"required":["model"]},"then":{"properties":{"input":{"$ref":"#/components/schemas/suno_generate_input"}}}},{"if":{"properties":{"model":{"const":"suno_extend"}},"required":["model"]},"then":{"properties":{"input":{"$ref":"#/components/schemas/suno_extend_input"}}}},{"if":{"properties":{"model":{"const":"suno_cover"}},"required":["model"]},"then":{"properties":{"input":{"$ref":"#/components/schemas/suno_cover_input"}}}},{"if":{"properties":{"model":{"const":"suno_replace_section"}},"required":["model"]},"then":{"properties":{"input":{"$ref":"#/components/schemas/suno_replace_section_input"}}}},{"if":{"properties":{"model":{"const":"suno_add_instrumental"}},"required":["model"]},"then":{"properties":{"input":{"$ref":"#/components/schemas/suno_add_instrumental_input"}}}},{"if":{"properties":{"model":{"const":"suno_add_vocals"}},"required":["model"]},"then":{"properties":{"input":{"$ref":"#/components/schemas/suno_add_vocals_input"}}}},{"if":{"properties":{"model":{"const":"suno_add_stem"}},"required":["model"]},"then":{"properties":{"input":{"$ref":"#/components/schemas/suno_add_stem_input"}}}},{"if":{"properties":{"model":{"const":"suno_lyrics_timestamps"}},"required":["model"]},"then":{"properties":{"input":{"$ref":"#/components/schemas/suno_lyrics_timestamps_input"}}}},{"if":{"properties":{"model":{"const":"suno_voice_upload"}},"required":["model"]},"then":{"properties":{"input":{"$ref":"#/components/schemas/suno_voice_upload_input"}}}},{"if":{"properties":{"model":{"const":"suno_voice_create"}},"required":["model"]},"then":{"properties":{"input":{"$ref":"#/components/schemas/suno_voice_create_input"}}}},{"if":{"properties":{"model":{"const":"suno_export_wav"}},"required":["model"]},"then":{"properties":{"input":{"$ref":"#/components/schemas/suno_export_wav_input"}}}},{"if":{"properties":{"model":{"const":"suno_export_mp3"}},"required":["model"]},"then":{"properties":{"input":{"$ref":"#/components/schemas/suno_export_mp3_input"}}}},{"if":{"properties":{"model":{"const":"suno_export_midi"}},"required":["model"]},"then":{"properties":{"input":{"$ref":"#/components/schemas/suno_export_midi_input"}}}},{"if":{"properties":{"model":{"const":"suno_separate_vocals"}},"required":["model"]},"then":{"properties":{"input":{"$ref":"#/components/schemas/suno_separate_vocals_input"}}}},{"if":{"properties":{"model":{"const":"suno_persona_prepare"}},"required":["model"]},"then":{"properties":{"input":{"$ref":"#/components/schemas/suno_persona_prepare_input"}}}},{"if":{"properties":{"model":{"const":"suno_persona_create"}},"required":["model"]},"then":{"properties":{"input":{"$ref":"#/components/schemas/suno_persona_create_input"}}}}],"type":"object","required":["model","input"],"additionalProperties":false,"properties":{"model":{"type":"string","example":"prism-image-2"},"input":{"type":"object","additionalProperties":true,"description":"Validate against the selected model input_schema. output_count/fallback are optional model-specific input fields; never top-level.","example":{"prompt":"A red fox","output_count":3,"fallback":true}},"callback_url":{"type":"string","format":"uri","description":"Optional public HTTPS endpoint for signed completion callbacks; no redirects or private IPs."}}},"Task":{"type":"object","additionalProperties":false,"required":["task_id","model","status","created_at","completed_at","duration","charged_credits","message","input","result"],"properties":{"task_id":{"type":"string"},"model":{"type":"string"},"status":{"type":"string","enum":["processing","succeeded","failed"]},"created_at":{"type":"string","format":"date-time"},"completed_at":{"type":["string","null"],"format":"date-time"},"duration":{"type":["integer","null"],"minimum":0,"description":"Total elapsed milliseconds; null while processing."},"charged_credits":{"type":["number","null"],"minimum":0,"description":"Final charged Credits; null until completion."},"message":{"type":"string","description":"Supplier error text for a failed task; empty on success/processing."},"input":{"type":"string","contentMediaType":"application/json","description":"JSON-serialized accepted model input."},"result":{"type":["object","null"],"additionalProperties":true,"description":"Structured model-specific result; null while processing or failed."}}}}}}