01
发起第一次对话
从模型市场复制一个 chat 类型的模型标识,然后发送下面的请求。接口同步返回模型文本、Token 用量和实际费用。
cURL
curl -X POST https://restapi.scalingtensor.com/api/chat/completion \
-H "Content-Type: application/json" \
-H "apiKey: YOUR_API_KEY" \
-d '{
"model": "openai/gpt-4o-mini",
"messages": [
{"role": "user", "content": "Hello!"}
]
}'02
基础约定
请求地址
生产环境的 API 根地址如下。所有请求与响应均使用 JSON,媒体生成接口目前也只接受 JSON URL,不支持二进制文件上传。
BASE URL
https://restapi.scalingtensor.com身份验证
除模型列表外,调用对话和媒体接口时必须通过 apiKey 请求头传入控制台创建的密钥。请勿使用 Authorization 或将密钥暴露在浏览器代码中。
HEADERS
Content-Type: application/json
apiKey: YOUR_API_KEY统一响应
所有接口均返回统一外层结构。只有 code 为 0 时表示业务请求成功;HTTP 请求成功并不等同于业务成功。time 和 Long 类型标识可能以字符串形式返回。
JSON
{
"code": 0,
"data": { ... },
"msg": "成功",
"time": "1788483942311",
"requestId": "trace-id",
"success": true
}03
API Reference
POST
/api/chat/completion创建对话补全
对话接口是同步接口。messages 会原样交给当前模型适配器;当前控制器只接受 model 和 messages 两个顶层字段。
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
model | string | 是 | 已启用 chat 模型的 slug |
messages | object[] | 是 | 消息数组;通常每项包含 role 和 content |
cURL
curl -X POST https://restapi.scalingtensor.com/api/chat/completion \
-H "Content-Type: application/json" \
-H "apiKey: YOUR_API_KEY" \
-d '{
"model": "openai/gpt-4o-mini",
"messages": [
{"role": "user", "content": "Hello!"}
]
}'响应 data
| 字段 | 类型 | 说明 |
|---|---|---|
content | string | 模型生成的文本 |
tokensIn | integer | 实际输入 Token 数 |
tokensOut | integer | 实际输出 Token 数 |
costMicros | int64/string | 实际费用,单位为微美元(1 美元 = 1,000,000 微美元) |
JSON
{
"code": 0,
"data": {
"content": "Hello! How can I help?",
"tokensIn": 8,
"tokensOut": 7,
"costMicros": "6"
},
"msg": "成功"
}POST
/api/media/generate提交媒体生成任务
媒体生成是异步接口。提交成功后保存 jobId,并使用结果接口轮询。params 会根据模型转发给对应供应商,因此具体字段取决于所选模型。
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
model | string | 是 | 已启用 media 模型的 slug |
params | object | 是 | 模型参数对象;不可为 null |
cURL
curl -X POST https://restapi.scalingtensor.com/api/media/generate \
-H "Content-Type: application/json" \
-H "apiKey: YOUR_API_KEY" \
-d '{
"model": "sonilo/text-to-music",
"params": {
"prompt": "Warm ambient music for a product demo",
"duration": 30,
"variants_num": 1
}
}'响应 data
| 字段 | 类型 | 说明 |
|---|---|---|
jobId | int64/string | ScalingTensor 任务 ID;查询结果时使用 |
status | string | 初始状态,通常为 pending |
JSON
{
"code": 0,
"data": { "jobId": "724958320123", "status": "pending" },
"msg": "成功"
}GET
/api/media/result查询媒体任务结果
使用提交接口返回的 jobId 轮询。只能查询由同一个 API 密钥所属用户创建的任务。建议间隔 2–5 秒,直到状态变为 completed 或 failed。
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
apiKey | header | 是 | 创建任务时所用账户的有效 API 密钥 |
jobId | query / int64 | 是 | 提交媒体任务时返回的 jobId |
cURL
curl "https://restapi.scalingtensor.com/api/media/result?jobId=724958320123" \
-H "apiKey: YOUR_API_KEY"任务状态
| 字段 | 说明 |
|---|---|
pending | 任务排队或处理中,继续轮询 |
completed | 任务完成,resultData 包含供应商结果和输出 URL |
failed | 任务失败,停止轮询;已预扣的固定费用会按服务逻辑退款 |
JSON
{
"code": 0,
"data": {
"status": "completed",
"resultData": {
"status": "completed",
"output_url": "https://.../result.mp3"
}
},
"msg": "成功"
}04
常用媒体模型参数
通用媒体模型的 params 由对应供应商定义。模型列表 priceConfig.api_reference_url 存在时,应以该模型参考文档为准。以下参数是后端对 Sonilo 模型执行的明确校验。
| 模型 | params 字段与约束 |
|---|---|
sonilo/text-to-music | prompt(1–2000 字符)、duration(整数 5–360 秒);可选 segments、output_format、variants_num(1–10) |
sonilo/text-to-sfx | prompt(1–2000 字符)、duration(整数 1–180 秒);audio_format 可选 wav/mp3/aac/flac |
sonilo/video-to-music | video_url(可公开访问的直接 HTTP(S) 视频 URL);可选 prompt、segments、preserve_speech、isolate_vocals、output_format、ducking、variants_num、stems、prompt_influence、lyrics |
sonilo/video-to-sfx | video_url;可选 prompt(最多 2000 字符)、audio_format、segments(1–30 个连续分段,每项含 start、end、prompt) |
sonilo/dubbing | video_url;可选 languages(不重复的语言代码数组)、ducking(boolean) |
video_url 必须是可公开访问、无重定向的直接 HTTP(S) 地址,并包含可读取的视频。JSON 接口不支持 video 二进制上传。
05
错误处理
业务错误仍使用统一响应结构返回。客户端应先检查 code,再读取 data。常见错误码如下。
| code | 说明 |
|---|---|
0 | 成功 |
3 | 请求过于频繁 |
5 | 内部服务器错误 |
1000 | 通用业务错误 |
1001 | 参数错误 |
1003 | 模型或任务不存在,或任务不属于当前用户 |
1008 | API 密钥无效或已撤销 |
1009 | 钱包余额不足 |
1012 | 视频太大,无法分析 |
1013 | 无法获取有效视频时长 |
安全与重试建议
- API 密钥只保存在服务端或安全的密钥管理系统中。
- 聊天请求失败后是否重试应由业务决定,避免产生重复费用。
- 媒体提交成功后不要重复提交;保存 jobId 并轮询结果。
- 仅对限流、网络故障和服务端错误使用指数退避。