# 删除片段
> 删掉歌曲中指定的一段区间，异步任务
> 删除后前后会自动接上
> 与「裁剪」的区别：裁剪保留区间，删除去掉区间
`POST /v1/music/generations/removeSection`
## 认证
- `Authorization` (string / 必填) — 所有接口均使用 Bearer Token 进行认证。 获取 API Key：[访问控制台](https://api.oairoute.com/keys) 创建。 请求时在请求头中添加： ```http Authorization: Bearer YOUR_OAIRoute_KEY ```
## 引用源音轨
- `task_id` (string / 必填) — 源音轨所属任务的 task_id。缺失或在提交时无法解析源音轨，直接返回 400。
- `audio_index` (integer / 可选) — 引用任务结果 `data.result.music[]` 中的第几首，默认 `1`，从 1 开始计数。 一次生成通常返回 2 首，也就是索引 1 和 2。
## 删除区间
- `start_s` (number / 必填) — 删除起点的秒数，必须大于等于 0，支持小数。
- `end_s` (number / 必填) — 删除终点的秒数。必须大于 `start_s`，且不能超过已知的源音轨时长。支持小数。
- `model` (string / 可选) — 音频模型，当前只支持 `suno`。
> **Note:** 
> 该端点没有版本维度。即使传入 `version`，也会被丢弃，且不影响计费。
## 响应
- `code` (integer) — 响应状态码。
- `data[].status` (string) — 任务状态。提交成功时为 `submitted`；轮询时可能为 `pending`、`processing`、`completed`、`failed`。
- `data[].task_id` (string) — 任务唯一标识，用于轮询 `GET /v1/music/tasks/{task_id}`。
## 取结果
轮询间隔 3 到 5 秒，典型耗时 30 到 120 秒。`progress` 是 0 到 100 的整数，不一定按固定节点变化。终态为 `completed` 或 `failed`。
完成后从 `data.result.music[]` 取处理后的 `audio_url`。失败时 `data.error.message` 给出原因，预扣额度自动退回。
## 用途
| 场景 | 做法 |
|---|---|
| 去掉一段不好听的间奏 | 标出间奏的起止秒数 |
| 删除口误或杂音 | 标出问题片段 |
| 缩短整体时长 | 删掉重复段落 |
> **Note:** 
> 删除后前后直接拼接，接缝可能不自然。如果接缝处能听出突兀，可以改用「段落替换」，用新内容填补这段区间而不是直接删掉。
## 错误码
| HTTP | 说明 |
|---|---|
| 400 | 请求参数无效 |
| 401 | 身份验证失败，请检查您的API密钥 |
| 402 | 账户余额不足，请充值后再试 |
| 429 | 请求过于频繁，请稍后再试 |
更多状态码与重试建议见[错误码与限流](../../../support/errors.html)，常见报错的排查步骤见[常见问题](../../../support/faq.html)。
## 使用示例
提交一个任务并拿到 `task_id`：
> **Note:** 
> 提交成功只表示任务已受理。真正的产物要拿返回的 `task_id` 去任务查询接口轮询，`status` 变成 `completed` 之后才有结果。
**删除片段{Remove section}::cURL**
```
curl -X POST https://api.oairoute.com/v1/music/generations/removeSection \
  -H 'Authorization: Bearer YOUR_OAIRoute_KEY' \
  -H 'Content-Type: application/json' \
  --data '{
    "model": "suno",
    "task_id": "task_01K8SGYNNNVBQTXNR4MM964S7K",
    "audio_index": 1,
    "start_s": 45,
    "end_s": 62.5
  }'
```
**删除片段{Remove section}::Python**
```
import requests
res = requests.post(
    "https://api.oairoute.com/v1/music/generations/removeSection",
    headers={
        "Authorization": "Bearer YOUR_OAIRoute_KEY",
        "Content-Type": "application/json",
    },
    json={
        "model": "suno",
        "task_id": "task_01K8SGYNNNVBQTXNR4MM964S7K",
        "audio_index": 1,
        "start_s": 45,
        "end_s": 62.5,
    },
)
print(res.json()["data"][0]["task_id"])
```
**删除片段{Remove section}::JavaScript**
```
const url = "https://api.oairoute.com/v1/music/generations/removeSection";
const options = {
  method: "POST",
  headers: {
    "Authorization": "Bearer YOUR_OAIRoute_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    "model": "suno",
    "task_id": "task_01K8SGYNNNVBQTXNR4MM964S7K",
    "audio_index": 1,
    "start_s": 45,
    "end_s": 62.5
  }),
};
fetch(url, options)
  .then((res) => res.json())
  .then((json) => console.log(json))
  .catch((err) => console.error(err));
```
**200 删除片段{Remove section}**
```
{
  "code": 200,
  "data": [
    { "status": "submitted", "task_id": "task_01K8E11M0HP1GJWBJYZMKX1XS1" }
  ]
}
```
