跳至主要內容
API 參考
API 參考

Suno 分離音訊音軌

將音軌拆分為人聲和伴奏分軌,最多支持拆分為 12 種樂器分軌。

01

概覽

使用音頻音軌分離端點配合所需輸入。使用返回的任務 ID 來檢索其狀態,或提供 callback_url 以接收以下記錄的推送通知。

快速入門

  1. 建立 API 金鑰並將其設定為 RUNAPI_API_KEY。
  2. 傳送主體符合請求 Schema 的 POST 請求。
  3. 儲存返回的任務 ID,然後輪詢直至達到終止狀態,或處理下方說明的回呼。

端點

POST /api/v1/suno/separate_audio_stems
基礎 URL
https://runapi.ai
API 版本
v1
身份驗證
Authorization: Bearer YOUR_API_TOKEN
02

支援的模型

開啟模型頁面以查看當前定價、速率限制及商業用途詳情。

03

請求結構

JSON 內容

僅傳送已記錄的欄位。提供後,callback_url 將接收以下記錄的任務交付。

請求主體5 個欄位
audio_idstring
必填

來源任務中的音頻 ID。

callback_urlstring
選填

用於非同步通知的 Webhook URL。

stem_namestring
選填

進階分離的目標音軌。當 type 為 split_stem_advanced 時為必填項。

允許值: Lead Vocal, Drum Kit, Kick, Snare, Risers, Bass, Backing Vocals, Piano, Electric Guitar, Percussion, String Section, Synth, Acoustic Guitar, Sound Effects, Synth Pad, Synth Bass, Guitar, Brass Section, Organ, Electronic Drum Kit, Lead Electric Guitar, Synth Keys, Rhythm Electric Guitar, Electric Piano, Upright Bass, Keyboards, Distorted Electric Guitar, Synth Strings, Synth Lead, Woodwinds, Rhythm Acoustic Guitar, Flute, Harp, Tambourine, Trumpet, Arpeggiator, Accordion, Fiddle, Pedal Steel Guitar, Synth Voice, Violin, Digital Piano, Synth Brass, Mandolin, Choir, Banjo, Bells, Clarinet, Tenor Saxophone, Trombone, Shaker, French Horn, Glockenspiel, Electric Bass, Cello, Timpani, Harmonica, Marimba, Vibraphone, Lap Steel Guitar, Saxophone, Orchestra, Horns, Cymbals, Hand Clap, Oboe, Celesta, Congas, Drone, Alto Saxophone, Double Bass, Ukulele, Harpsichord, Baritone Saxophone, Xylophone, Tuba, Bass Guitar, Whistle, Lead Guitar, Rhodes, 808, Bongos, Bassoon, Cowbell, Viola, Sitar, Steel Drums, Piccolo, Theremin, Bagpipes, Hi-Hat, Music Box, Melodica, Tabla, Koto, Djembe, Taiko, Didgeridoo
task_idstring
必填

來源任務 ID。

typestring
選填

音軌分離模式。

允許值: separate_vocal, split_stem, split_stem_advanced 預設值: separate_vocal

條件規則

當所有列出的條件均符合時,這些要求方才適用。

  1. 當 type = split_stem_advanced
    必填
    stem_name
    不接受
04

建立接受

HTTP 202

POST /api/v1/suno/separate_audio_stems

回應結構
JSON
{
  "properties": {
    "id": {
      "type": "string"
    },
    "status": {
      "enum": [
        "processing"
      ],
      "type": "string"
    },
    "task_replayed": {
      "type": "boolean"
    }
  },
  "required": [
    "id",
    "status"
  ],
  "type": "object",
  "unevaluatedProperties": false
}

回應範例

JSON
{
  "id": "tsk_reference_demo",
  "status": "processing"
}
05

輪詢處理中

HTTP 200

GET /api/v1/suno/separate_audio_stems/:id

回應結構
JSON
{
  "properties": {
    "id": {
      "type": "string"
    },
    "separated_audios": {
      "properties": {
        "backing_vocals_url": {
          "type": "string",
          "x-runapi-generated-media": true
        },
        "bass_url": {
          "type": "string",
          "x-runapi-generated-media": true
        },
        "brass_url": {
          "type": "string",
          "x-runapi-generated-media": true
        },
        "drums_url": {
          "type": "string",
          "x-runapi-generated-media": true
        },
        "fx_url": {
          "type": "string",
          "x-runapi-generated-media": true
        },
        "guitar_url": {
          "type": "string",
          "x-runapi-generated-media": true
        },
        "instrumental_url": {
          "type": "string",
          "x-runapi-generated-media": true
        },
        "keyboard_url": {
          "type": "string",
          "x-runapi-generated-media": true
        },
        "pairs": {
          "items": {
            "properties": {
              "extracted_audio": {
                "properties": {
                  "audio_url": {
                    "type": "string",
                    "x-runapi-generated-media": true
                  },
                  "duration_seconds": {
                    "type": "number"
                  },
                  "id": {
                    "type": "string"
                  }
                },
                "required": [
                  "id",
                  "duration_seconds",
                  "audio_url"
                ],
                "type": "object",
                "unevaluatedProperties": false
              },
              "remaining_audio": {
                "properties": {
                  "audio_url": {
                    "type": "string",
                    "x-runapi-generated-media": true
                  },
                  "duration_seconds": {
                    "type": "number"
                  },
                  "id": {
                    "type": "string"
                  }
                },
                "required": [
                  "id",
                  "duration_seconds",
                  "audio_url"
                ],
                "type": "object",
                "unevaluatedProperties": false
              },
              "stem_name": {
                "type": "string"
              }
            },
            "required": [
              "stem_name",
              "extracted_audio",
              "remaining_audio"
            ],
            "type": "object",
            "unevaluatedProperties": false
          },
          "type": "array"
        },
        "percussion_url": {
          "type": "string",
          "x-runapi-generated-media": true
        },
        "piano_url": {
          "type": "string",
          "x-runapi-generated-media": true
        },
        "strings_url": {
          "type": "string",
          "x-runapi-generated-media": true
        },
        "synth_url": {
          "type": "string",
          "x-runapi-generated-media": true
        },
        "vocal_url": {
          "type": "string",
          "x-runapi-generated-media": true
        },
        "woodwinds_url": {
          "type": "string",
          "x-runapi-generated-media": true
        }
      },
      "type": "object",
      "unevaluatedProperties": false
    },
    "status": {
      "enum": [
        "processing"
      ],
      "type": "string"
    }
  },
  "required": [
    "id",
    "status"
  ],
  "type": "object",
  "unevaluatedProperties": false
}

回應範例

JSON
{
  "id": "tsk_reference_demo",
  "status": "processing"
}
06

輪詢已完成

HTTP 200

GET /api/v1/suno/separate_audio_stems/:id

回應結構
JSON
{
  "properties": {
    "id": {
      "type": "string"
    },
    "separated_audios": {
      "properties": {
        "backing_vocals_url": {
          "type": "string",
          "x-runapi-generated-media": true
        },
        "bass_url": {
          "type": "string",
          "x-runapi-generated-media": true
        },
        "brass_url": {
          "type": "string",
          "x-runapi-generated-media": true
        },
        "drums_url": {
          "type": "string",
          "x-runapi-generated-media": true
        },
        "fx_url": {
          "type": "string",
          "x-runapi-generated-media": true
        },
        "guitar_url": {
          "type": "string",
          "x-runapi-generated-media": true
        },
        "instrumental_url": {
          "type": "string",
          "x-runapi-generated-media": true
        },
        "keyboard_url": {
          "type": "string",
          "x-runapi-generated-media": true
        },
        "pairs": {
          "items": {
            "properties": {
              "extracted_audio": {
                "properties": {
                  "audio_url": {
                    "type": "string",
                    "x-runapi-generated-media": true
                  },
                  "duration_seconds": {
                    "type": "number"
                  },
                  "id": {
                    "type": "string"
                  }
                },
                "required": [
                  "id",
                  "duration_seconds",
                  "audio_url"
                ],
                "type": "object",
                "unevaluatedProperties": false
              },
              "remaining_audio": {
                "properties": {
                  "audio_url": {
                    "type": "string",
                    "x-runapi-generated-media": true
                  },
                  "duration_seconds": {
                    "type": "number"
                  },
                  "id": {
                    "type": "string"
                  }
                },
                "required": [
                  "id",
                  "duration_seconds",
                  "audio_url"
                ],
                "type": "object",
                "unevaluatedProperties": false
              },
              "stem_name": {
                "type": "string"
              }
            },
            "required": [
              "stem_name",
              "extracted_audio",
              "remaining_audio"
            ],
            "type": "object",
            "unevaluatedProperties": false
          },
          "type": "array"
        },
        "percussion_url": {
          "type": "string",
          "x-runapi-generated-media": true
        },
        "piano_url": {
          "type": "string",
          "x-runapi-generated-media": true
        },
        "strings_url": {
          "type": "string",
          "x-runapi-generated-media": true
        },
        "synth_url": {
          "type": "string",
          "x-runapi-generated-media": true
        },
        "vocal_url": {
          "type": "string",
          "x-runapi-generated-media": true
        },
        "woodwinds_url": {
          "type": "string",
          "x-runapi-generated-media": true
        }
      },
      "type": "object",
      "unevaluatedProperties": false
    },
    "status": {
      "enum": [
        "completed"
      ],
      "type": "string"
    },
    "usage": {
      "properties": {
        "cost": {
          "type": "number"
        }
      },
      "required": [
        "cost"
      ],
      "type": "object",
      "unevaluatedProperties": false
    }
  },
  "required": [
    "id",
    "status",
    "separated_audios",
    "usage"
  ],
  "type": "object",
  "unevaluatedProperties": false
}

回應範例

JSON
{
  "id": "tsk_reference_demo",
  "separated_audios": {
    "instrumental_url": "https://file.runapi.ai/reference-instrumental.mp3",
    "vocal_url": "https://file.runapi.ai/reference-vocals.mp3"
  },
  "status": "completed",
  "usage": {
    "cost": 0.05
  }
}
07

輪詢失敗

HTTP 200

GET /api/v1/suno/separate_audio_stems/:id

回應結構
JSON
{
  "properties": {
    "error": {
      "type": "string"
    },
    "id": {
      "type": "string"
    },
    "status": {
      "enum": [
        "failed"
      ],
      "type": "string"
    }
  },
  "required": [
    "id",
    "status",
    "error"
  ],
  "type": "object",
  "unevaluatedProperties": false
}

回應範例

JSON
{
  "error": "Task processing failed.",
  "id": "tsk_reference_demo",
  "status": "failed"
}
08

客戶回呼:已完成

HTTP 200

POST callback_url

回應結構
JSON
{
  "properties": {
    "id": {
      "type": "string"
    },
    "separated_audios": {
      "properties": {
        "backing_vocals_url": {
          "type": "string",
          "x-runapi-generated-media": true
        },
        "bass_url": {
          "type": "string",
          "x-runapi-generated-media": true
        },
        "brass_url": {
          "type": "string",
          "x-runapi-generated-media": true
        },
        "drums_url": {
          "type": "string",
          "x-runapi-generated-media": true
        },
        "fx_url": {
          "type": "string",
          "x-runapi-generated-media": true
        },
        "guitar_url": {
          "type": "string",
          "x-runapi-generated-media": true
        },
        "instrumental_url": {
          "type": "string",
          "x-runapi-generated-media": true
        },
        "keyboard_url": {
          "type": "string",
          "x-runapi-generated-media": true
        },
        "pairs": {
          "items": {
            "properties": {
              "extracted_audio": {
                "properties": {
                  "audio_url": {
                    "type": "string",
                    "x-runapi-generated-media": true
                  },
                  "duration_seconds": {
                    "type": "number"
                  },
                  "id": {
                    "type": "string"
                  }
                },
                "required": [
                  "id",
                  "duration_seconds",
                  "audio_url"
                ],
                "type": "object",
                "unevaluatedProperties": false
              },
              "remaining_audio": {
                "properties": {
                  "audio_url": {
                    "type": "string",
                    "x-runapi-generated-media": true
                  },
                  "duration_seconds": {
                    "type": "number"
                  },
                  "id": {
                    "type": "string"
                  }
                },
                "required": [
                  "id",
                  "duration_seconds",
                  "audio_url"
                ],
                "type": "object",
                "unevaluatedProperties": false
              },
              "stem_name": {
                "type": "string"
              }
            },
            "required": [
              "stem_name",
              "extracted_audio",
              "remaining_audio"
            ],
            "type": "object",
            "unevaluatedProperties": false
          },
          "type": "array"
        },
        "percussion_url": {
          "type": "string",
          "x-runapi-generated-media": true
        },
        "piano_url": {
          "type": "string",
          "x-runapi-generated-media": true
        },
        "strings_url": {
          "type": "string",
          "x-runapi-generated-media": true
        },
        "synth_url": {
          "type": "string",
          "x-runapi-generated-media": true
        },
        "vocal_url": {
          "type": "string",
          "x-runapi-generated-media": true
        },
        "woodwinds_url": {
          "type": "string",
          "x-runapi-generated-media": true
        }
      },
      "type": "object",
      "unevaluatedProperties": false
    },
    "status": {
      "enum": [
        "completed"
      ],
      "type": "string"
    },
    "usage": {
      "properties": {
        "cost": {
          "type": "number"
        }
      },
      "required": [
        "cost"
      ],
      "type": "object",
      "unevaluatedProperties": false
    }
  },
  "required": [
    "id",
    "status",
    "separated_audios",
    "usage"
  ],
  "type": "object",
  "unevaluatedProperties": false
}

回應範例

JSON
{
  "id": "tsk_reference_demo",
  "separated_audios": {
    "instrumental_url": "https://file.runapi.ai/reference-instrumental.mp3",
    "vocal_url": "https://file.runapi.ai/reference-vocals.mp3"
  },
  "status": "completed",
  "usage": {
    "cost": 0.05
  }
}
09

客戶回呼:已失敗

HTTP 200

POST callback_url

回應結構
JSON
{
  "properties": {
    "error": {
      "oneOf": [
        {
          "type": "string"
        },
        {
          "properties": {
            "code": {
              "type": "string"
            },
            "limit_cents": {
              "type": "integer"
            },
            "message": {
              "type": "string"
            },
            "reset_at": {
              "format": "date-time",
              "type": [
                "string",
                "null"
              ]
            },
            "used_cents": {
              "type": "integer"
            },
            "window": {
              "enum": [
                "1h",
                "1d",
                "7d",
                "daily",
                "weekly",
                "monthly",
                "lifetime"
              ],
              "type": "string"
            }
          },
          "required": [
            "code",
            "message"
          ],
          "type": "object",
          "unevaluatedProperties": false
        }
      ]
    },
    "id": {
      "type": "string"
    },
    "status": {
      "enum": [
        "failed"
      ],
      "type": "string"
    }
  },
  "required": [
    "id",
    "status",
    "error"
  ],
  "type": "object",
  "unevaluatedProperties": false
}

回應範例

JSON
{
  "error": {
    "code": "generation_failed",
    "message": "Task processing failed."
  },
  "id": "tsk_reference_demo",
  "status": "failed"
}
10

錯誤

HTTP 401

POST /api/v1/suno/separate_audio_stems

回應結構
JSON
{
  "properties": {
    "error": {
      "description": "人類可讀的錯誤訊息。",
      "type": "string"
    }
  },
  "required": [
    "error"
  ],
  "type": "object",
  "unevaluatedProperties": false
}

回應範例

JSON
{
  "error": "Authentication required"
}
11

錯誤

HTTP 401

GET /api/v1/suno/separate_audio_stems/:id

回應結構
JSON
{
  "properties": {
    "error": {
      "description": "人類可讀的錯誤訊息。",
      "type": "string"
    }
  },
  "required": [
    "error"
  ],
  "type": "object",
  "unevaluatedProperties": false
}

回應範例

JSON
{
  "error": "Authentication required"
}
12

錯誤

HTTP 400

POST /api/v1/suno/separate_audio_stems

回應結構
JSON
{
  "oneOf": [
    {
      "properties": {
        "error": {
          "description": "人類可讀的錯誤訊息。",
          "type": "string"
        }
      },
      "required": [
        "error"
      ],
      "type": "object",
      "unevaluatedProperties": false
    },
    {
      "properties": {
        "error": {
          "description": "人類可讀的驗證摘要。",
          "type": "string"
        },
        "errors": {
          "additionalProperties": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "description": "以公開請求欄位為鍵的驗證訊息,每個欄位對應一組人類可讀的字串陣列。",
          "type": "object"
        }
      },
      "required": [
        "error",
        "errors"
      ],
      "type": "object",
      "unevaluatedProperties": false
    }
  ]
}

回應範例

JSON
{
  "error": "Validation failed",
  "errors": {
    "task_id": [
      "is required"
    ]
  }
}
13

錯誤

HTTP 402

POST /api/v1/suno/separate_audio_stems

回應結構
JSON
{
  "properties": {
    "error": {
      "description": "人類可讀的錯誤訊息。",
      "type": "string"
    }
  },
  "required": [
    "error"
  ],
  "type": "object",
  "unevaluatedProperties": false
}

回應範例

JSON
{
  "error": "Insufficient balance"
}
14

錯誤

HTTP 429

POST /api/v1/suno/separate_audio_stems

回應結構
JSON
{
  "properties": {
    "error": {
      "description": "人類可讀的錯誤訊息。",
      "type": "string"
    }
  },
  "required": [
    "error"
  ],
  "type": "object",
  "unevaluatedProperties": false
}

回應範例

JSON
{
  "error": "API key credit limit exceeded"
}
15

錯誤

HTTP 409

POST /api/v1/suno/separate_audio_stems

回應結構
JSON
{
  "properties": {
    "error": {
      "description": "人類可讀的錯誤訊息。",
      "type": "string"
    }
  },
  "required": [
    "error"
  ],
  "type": "object",
  "unevaluatedProperties": false
}

回應範例

JSON
{
  "error": "The request uses features that are not supported for the selected model"
}
16

錯誤

HTTP 429

POST /api/v1/suno/separate_audio_stems

回應結構
JSON
{
  "properties": {
    "error": {
      "description": "人類可讀的錯誤訊息。",
      "type": "string"
    }
  },
  "required": [
    "error"
  ],
  "type": "object",
  "unevaluatedProperties": false
}

回應範例

JSON
{
  "error": "Rate limit reached. Please retry later."
}
17

錯誤

HTTP 503

POST /api/v1/suno/separate_audio_stems

回應結構
JSON
{
  "properties": {
    "error": {
      "description": "人類可讀的錯誤訊息。",
      "type": "string"
    }
  },
  "required": [
    "error"
  ],
  "type": "object",
  "unevaluatedProperties": false
}

回應範例

JSON
{
  "error": "Service under maintenance, please try again later"
}
18

錯誤

HTTP 504

POST /api/v1/suno/separate_audio_stems

回應結構
JSON
{
  "properties": {
    "error": {
      "description": "人類可讀的錯誤訊息。",
      "type": "string"
    }
  },
  "required": [
    "error"
  ],
  "type": "object",
  "unevaluatedProperties": false
}

回應範例

JSON
{
  "error": "The request timed out"
}
19

錯誤

HTTP 404

GET /api/v1/suno/separate_audio_stems/:id

回應結構
JSON
{
  "properties": {
    "error": {
      "description": "人類可讀的錯誤訊息。",
      "type": "string"
    }
  },
  "required": [
    "error"
  ],
  "type": "object",
  "unevaluatedProperties": false
}

回應範例

JSON
{
  "error": "Task with id 'tsk_reference_demo' not found"
}
20

已生成的程式碼範例

直接使用 cURL,或為您的語言安裝 SDK。每個範例均提交本參考中所示的已驗證請求。

安裝

Shell
pip install runapi-suno
PYTHON
import os
from runapi.suno import SunoClient

client = SunoClient(api_key=os.environ["RUNAPI_API_KEY"])
task = client.separate_audio_stems.create(
  task_id="tsk_source_music",
  audio_id="audio_reference",
  type="separate_vocal"
)