# Lyria 3.5 音乐延伸
> 用 Lyria 3.5 做续写，异步任务
> 与普通延伸共用端点，靠 `version` 区分
> 产出新的 clip_id，后续操作要用新值
`POST /v1/music/generations/extendFlowMusic`
## 认证
- `Authorization` (string / 必填) — 所有接口均使用 Bearer Token 进行认证。 获取 API Key：[访问控制台](https://api.oairoute.com/keys) 创建。 请求时在请求头中添加： ```http Authorization: Bearer YOUR_OAIRoute_KEY ```
## 请求参数
- `model` (string / 必填) — 固定传 `flowmusic`，大小写不敏感。 **不要改成 `lyria-3.5` 之类的写法**——`lyria-3.5` 是版本，不是模型名。
- `version` (string / 必填) — 固定传 `lyria-3.5`。
- `clip_id` (string / 必填) — 源 clip 标识，取自成功任务的 `result.music[].clip_id`。 也可以由上传音频接口换取。
- `extend_from_s` (number / 必填) — 续写起点，单位秒。**不得超过源 clip 时长**。
- `extend_s` (number / 必填) — 续写时长，单位秒。**上限 164**。
- `instruction` (string / 必填) — 续写编辑指令，例如「延续主歌旋律，加入弦乐」。
- `title` (string / 可选) — 续写后的标题。
- `seed` (string / 可选) — 随机种子，用于复现。
## 两个上限
| 字段 | 上限 | 说明 |
|---|---|---|
| `extend_from_s` | 源 clip 的实际时长 | 上界不固定，取决于源音频多长 |
| `extend_s` | 164 秒 | 固定上限 |
第一个上限动态变化，所以要先查一次源任务拿到 `duration_seconds`，再决定起点。
> **Note:** 
> `duration_seconds` 是字符串。比较大小前先转数值，否则字符串比较会给出错误结论。
## 提交响应
- `code` (integer) — 状态码，成功为 200。
- `data[].status` (string) — 初始为 `submitted`。
- `data[].task_id` (string) — 任务标识，用于查询进度与结果。
## 查询结果
- `data.id` (string) — 任务 ID。
- `data.status` (string) — 任务状态（如 `completed`）。
- `data.progress` (integer) — 进度百分比。
- `data.created` (integer) — 创建时间戳。
- `data.completed` (integer) — 完成时间戳。
- `data.actual_time` (integer) — 实际耗时。
- `data.cost` (number) — 费用。
- `data.credits_cost` (number) — 积分消耗。
- `result` (object) — 结果对象。
### result.music[] 元素
- `clip_id` (string) — **新生成的** clip 标识。后续操作使用此值，不是原来的。
- `title` (string) — 曲目标题。
- `duration_seconds` (string) — 时长，字符串形式。
- `create_time` (string) — 创建时间，ISO 8601 格式。
- `lyrics` (string) — 歌词文本。
- `lyrics_id` (string) — 歌词标识。
- `lyrics_timing_markers` (array) — 时间轴标记数组。
- `audio_url` (string) — 音频地址，m4a。
- `wav_url` (string) — WAV 格式地址。
- `image_url` (string) — 封面图地址。
## 错误
| HTTP | code |
|---|---|
| 400 | `invalid_request`（如缺少 `clip_id`） |
| 429 | `rate_limit_error` |
- `error.message` (string) — 错误描述。
- `error.type` (string) — 错误类型。
- `error.param` (string) — 出错参数。
- `error.code` (string) — 错误码：`invalid_request`、`quota_not_enough`、`rate_limit_error`。
统一为 `error` 对象，常见 HTTP 状态：
更多状态码与重试建议见[错误码与限流](../../../support/errors.html)，常见报错的排查步骤见[常见问题](../../../support/faq.html)。
## 使用示例
提交一个任务并拿到 `task_id`：
> **Note:** 
> 提交成功只表示任务已受理。真正的产物要拿返回的 `task_id` 去任务查询接口轮询，`status` 变成 `completed` 之后才有结果。
**Lyria 3.5 音乐延伸{Lyria 3.5 extend music}::cURL**
```
curl -X POST https://api.oairoute.com/v1/music/generations/extendFlowMusic \
  -H 'Authorization: Bearer YOUR_OAIRoute_KEY' \
  -H 'Content-Type: application/json' \
  --data '{
    "model": "flowmusic",
    "version": "lyria-3.5",
    "clip_id": "c_01KA",
    "extend_from_s": 120,
    "extend_s": 60,
    "instruction": "延续主歌，加入弦乐铺底"
  }'
```
**Lyria 3.5 音乐延伸{Lyria 3.5 extend music}::Python**
```
import requests
res = requests.post(
    "https://api.oairoute.com/v1/music/generations/extendFlowMusic",
    headers={
        "Authorization": "Bearer YOUR_OAIRoute_KEY",
        "Content-Type": "application/json",
    },
    json={
        "model": "flowmusic",
        "version": "lyria-3.5",
        "clip_id": "c_01KA",
        "extend_from_s": 120,
        "extend_s": 60,
        "instruction": "延续主歌，加入弦乐铺底",
    },
)
print(res.json()["data"][0]["task_id"])
```
**Lyria 3.5 音乐延伸{Lyria 3.5 extend music}::JavaScript**
```
const url = "https://api.oairoute.com/v1/music/generations/extendFlowMusic";
const options = {
  method: "POST",
  headers: {
    "Authorization": "Bearer YOUR_OAIRoute_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    "model": "flowmusic",
    "version": "lyria-3.5",
    "clip_id": "c_01KA",
    "extend_from_s": 120,
    "extend_s": 60,
    "instruction": "延续主歌，加入弦乐铺底"
  }),
};
fetch(url, options)
  .then((res) => res.json())
  .then((json) => console.log(json))
  .catch((err) => console.error(err));
```
**200 Lyria 3.5 音乐延伸{Lyria 3.5 extend music}**
```
{
  "code": 200,
  "data": {
    "id": "task_01K8F55M0HP1GJWBJYZMKX1XS1",
    "status": "completed",
    "progress": 100,
    "actual_time": 96,
    "cost": 0.036,
    "credits_cost": 0.36,
    "result": {
      "music": [
        {
          "clip_id": "c_01KB",
          "title": "窗边（延伸）",
          "duration_seconds": "179.95733333",
          "audio_url": "https://cdn.oairoute.com/m/c_01KB.m4a"
        }
      ]
    }
  }
}
```
