API 概览
e5eAi API 提供兼容 OpenAI 接口格式的大模型调用服务,支持 GPT、Claude、DeepSeek、GLM、Kimi、Gemini、Qwen 等数十种主流 AI 模型。通过标准 HTTP 请求即可接入语言模型、图片理解、图片生成、视频生成、代码生成等能力。
Base URL
所有 API 请求的基础地址:https://open.e5e.cn/v1
语言模型
Chat Completions,支持流式/非流式,兼容 OpenAI SDK
图片理解
Vision 多模态,支持图片 URL 和 Base64 输入
图片生成
文生图,支持多种图片生成模型
视频生成
文生视频 / 图生视频,异步任务 + 状态查询
代码生成
Codex 专用接口,编程与代码推理
海量模型
30+ 模型,覆盖文本/视觉/视频/代码全场景
快速接入
三步完成接入:获取 API Key → 发送请求 → 获取响应。
💡 模型选择提示:
示例中的
如需其他模型(Gemini、Claude、GLM 等),参考模型列表替换
示例中的
deepseek-chat 为 DeepSeek-V3.2 快速版,默认免费开放。如需其他模型(Gemini、Claude、GLM 等),参考模型列表替换
model 参数即可。
请求参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| model | string | 是 | 模型 ID,如 deepseek-chat、claude-opus-4-6 等 |
| messages | array | 是 | 对话消息数组,每项含 role(system/user/assistant)和 content |
| max_tokens | integer | 否 | 生成的最大 token 数。默认:模型默认值 |
| temperature | number | 否 | 采样温度 0-2。越高越随机。默认:1 |
| top_p | number | 否 | 核采样,仅考虑概率累加到 p 的 token。默认:1 |
| stream | boolean | 否 | 是否流式输出(SSE)。默认:false |
| stop | string/array | 否 | 停止词,遇到即终止生成。最多 4 个 |
| frequency_penalty | number | 否 | -2.0~2.0,正值降低重复。默认:0 |
| presence_penalty | number | 否 | -2.0~2.0,正值增加新话题。默认:0 |
| n | integer | 否 | 生成回复数量。默认:1 |
| response_format | object | 否 | 响应格式,{"type":"json_object"} 启用 JSON 模式 |
| seed | integer | 否 | 随机种子,相同 prompt 输出更稳定 |
| logprobs | boolean | 否 | 是否返回 token 对数概率。默认:false |
| top_logprobs | integer | 否 | 返回概率最高 N 个 token,配合 logprobs 使用 |
| tools | array | 否 | 函数调用工具定义(需模型支持) |
| tool_choice | string/object | 否 | 工具调用策略:auto/none/required |
| user | string | 否 | 终端用户标识,用于监控 |
响应格式(非流式)
| 字段 | 类型 | 说明 |
|---|---|---|
| id | string | 请求唯一标识 |
| object | string | 固定 chat.completion |
| created | integer | Unix 时间戳 |
| model | string | 实际使用的模型 ID |
| choices | array | 回复列表:index、message(role+content)、finish_reason |
| usage | object | Token 用量:prompt_tokens、completion_tokens、total_tokens |
流式响应(SSE)
设置 "stream":true 后返回 text/event-stream,每个 data: 行是一个 JSON chunk:
| 字段 | 类型 | 说明 |
|---|---|---|
| id | string | 请求 ID |
| object | string | chat.completion.chunk |
| choices[0].delta.content | string | 增量文本片段 |
| choices[0].finish_reason | string/null | 最后 chunk 为 stop/length |
| usage | object/null | 仅最后 chunk(部分模型) |
图片生成
📢 说明:图片生成为异步处理,提交后返回任务 ID,需轮询查询结果。本平台已封装同步模式,POST 后自动等待完成返回图片 URL(最长等待 300s,超时返回 202 + 任务 ID)。
接口地址
POST /v1/images/generations请求参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
model | string | ✅ 必填 |
模型名称jimeng-seedream46 — 即梦 Seedream 4.6,字节跳动图片生成模型
|
prompt | string | ✅ 必填 | 图片生成提示词,清晰描述内容和风格。即梦模型最长 800 字符 |
quality | string | 选填 |
画质档位,映射为即梦 scale(文本影响程度),默认 mediumlow — 低画质,scale=25medium — 中画质,scale=50(默认)high — 高画质,scale=75
|
ratio | string | 选填 |
宽高比,默认 1:1。使用 resolution 时必须传入可选: 1:1 / 16:9 / 9:16 / 4:3 / 3:4 / 3:2 / 2:3 / 5:4 / 4:5 / 2:1 / 1:2 / 21:9 / 9:21
|
resolution | string | 选填 |
分辨率,默认 2k。与 size 二选一,使用 resolution 必须同时传 ratio1k — 1K 分辨率2k — 2K 分辨率(默认)4k — 4K 分辨率⚠️ 即梦 4K 推荐比例: 1:1 / 16:9 / 4:3 / 3:2 / 21:9
|
size | string | 选填 |
直接指定尺寸(传后 resolution 和 ratio 可不传)。若同时传以 size 为准 即梦推荐值: 1024x1024 / 2048x2048 / 2560x1440 / 2304x1728 / 4096x4096📐 尺寸规则• 宽高乘积 1,048,576 ~ 16,777,216(1024² ~ 4096²)• 宽高比限制 min_ratio=1/3, max_ratio=3 |
image_urls | array | 选填 |
参考图片 URL 数组,用于指导生成风格(图生图模式) 最多 14 张,建议控制在 6 张以内 |
n | integer | 选填 | 生成数量。n=1 强制单图;n>1 组图模式(即梦模型由 AI 判断张数) |
响应参数
| 字段 | 类型 | 说明 |
|---|---|---|
data[0].url | string | 生成的图片 URL |
created | integer | 任务创建时间戳 |
success | boolean | 请求是否成功 |
📞 调用示例(不带参数 — 使用默认值)
curl https://open.e5e.cn/v1/images/generations \
-H "Content-Type: application/json" \
-H "Authorization: Bearer your-api-key" \
-d '{"model":"jimeng-seedream46","prompt":"一只可爱的橘猫坐在窗台上看日落,油画风格"}'
📞 调用示例(完整参数 — 高画质 2K 宽屏)
curl https://open.e5e.cn/v1/images/generations \
-H "Content-Type: application/json" \
-H "Authorization: Bearer your-api-key" \
-d '{"model":"jimeng-seedream46","prompt":"一只可爱的橘猫坐在窗台上看日落,油画风格","quality":"high","resolution":"2k","ratio":"16:9"}'
📞 调用示例(直接使用 size)
curl https://open.e5e.cn/v1/images/generations \
-H "Content-Type: application/json" \
-H "Authorization: Bearer your-api-key" \
-d '{"model":"jimeng-seedream46","prompt":"一只可爱的橘猫坐在窗台上看日落,油画风格","quality":"high","size":"2048x1152"}'
curl https://open.e5e.cn/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_KEY" \
-d '{
"model": "deepseek-chat",
"messages": [{"role": "user", "content": "你好,介绍一下你自己"}]
}'
# 安装: pip install openai
from openai import OpenAI
# 初始化客户端
client = OpenAI(
base_url="https://open.e5e.cn/v1",
api_key="YOUR_API_KEY",
)
# 调用接口
response = client.chat.completions.create(
model="deepseek-chat",
messages=[
{"role": "user", "content": "你好"}
],
)
print(response.choices[0].message.content)
const resp = await fetch("https://open.e5e.cn/v1/chat/completions", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Authorization": "Bearer YOUR_API_KEY"
},
body: JSON.stringify({
model: "deepseek-chat",
messages: [{ role: "user", content: "你好" }]
})
});
const data = await resp.json();
console.log(data.choices[0].message.content);
package main
import (
"bytes"
"encoding/json"
"fmt"
"net/http"
)
func main() {
body, _ := json.Marshal(map[string]interface{}{
"model": "deepseek-chat",
"messages": []map[string]string{
{"role": "user", "content": "你好"},
},
})
req, _ := http.NewRequest("POST", "https://open.e5e.cn/v1/chat/completions", bytes.NewReader(body))
req.Header.Set("Content-Type", "application/json")
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
var result map[string]interface{}
json.NewDecoder(resp.Body).Decode(&result)
choices := result["choices"].([]interface{})
msg := choices[0].(map[string]interface{})["message"]
fmt.Println(msg.(map[string]interface{})["content"])
}
using System.Net.Http.Headers;
using System.Text;
using System.Text.Json;
var client = new HttpClient();
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "YOUR_API_KEY");
var payload = new { model = "deepseek-chat", messages = new[] { new { role = "user", content = "你好" } } };
var content = new StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json");
var response = await client.PostAsync("https://open.e5e.cn/v1/chat/completions", content);
var result = await response.Content.ReadAsStringAsync();
var json = JsonSerializer.Deserialize<JsonElement>(result);
Console.WriteLine(json.GetProperty("choices")[0].GetProperty("message").GetProperty("content").GetString());
<?php
$ch = curl_init("https://open.e5e.cn/v1/chat/completions");
curl_setopt_array($ch, [
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"Authorization: Bearer YOUR_API_KEY"
],
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => json_encode([
"model" => "deepseek-chat",
"messages" => [["role" => "user", "content" => "你好"]]
]),
CURLOPT_RETURNTRANSFER => true,
]);
$result = json_decode(curl_exec($ch), true);
echo $result["choices"][0]["message"]["content"];
curl_close($ch);
curl https://open.e5e.cn/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_KEY" \
-d '{"model":"deepseek-chat","messages":[{"role":"user","content":"你好,介绍一下你自己"}],"stream":true}' \
--no-buffer
# 安装: pip install openai
from openai import OpenAI
# 初始化客户端
client = OpenAI(
base_url="https://open.e5e.cn/v1",
api_key="YOUR_API_KEY",
)
# 调用接口(stream=True 进行流式响应)
stream = client.chat.completions.create(
model="deepseek-chat",
messages=[
{"role": "user", "content": "你好,介绍一下你自己"}
],
stream=True,
)
# 流式打印输出
for chunk in stream:
if chunk.choices and chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content)
const resp = await fetch("https://open.e5e.cn/v1/chat/completions", {
method: "POST",
headers: { "Content-Type": "application/json", "Authorization": "Bearer YOUR_API_KEY" },
body: JSON.stringify({ model: "deepseek-chat", messages: [{ role: "user", content: "你好,介绍一下你自己" }], stream: true })
});
const reader = resp.body.getReader();
const decoder = new TextDecoder();
let buf = "";
while (true) {
const { done, value } = await reader.read();
if (done) break;
buf += decoder.decode(value, { stream: true });
const lines = buf.split("\n");
buf = lines.pop() || "";
for (const line of lines) {
if (line.startsWith("data: ")) {
const data = line.slice(6);
if (data === "[DONE]") break;
const chunk = JSON.parse(data);
const text = chunk.choices?.[0]?.delta?.content;
if (text) process.stdout.write(text);
}
}
}
package main
import (
"bufio"
"bytes"
"encoding/json"
"fmt"
"net/http"
"strings"
)
func main() {
body, _ := json.Marshal(map[string]interface{}{
"model": "deepseek-chat", "messages": []map[string]string{
{"role": "user", "content": "你好,介绍一下你自己"},
}, "stream": true,
})
req, _ := http.NewRequest("POST", "https://open.e5e.cn/v1/chat/completions", bytes.NewReader(body))
req.Header.Set("Content-Type", "application/json")
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
scanner := bufio.NewScanner(resp.Body)
for scanner.Scan() {
line := scanner.Text()
if strings.HasPrefix(line, "data: ") {
data := line[6:]
if data == "[DONE]" { break }
var chunk map[string]interface{}
json.Unmarshal([]byte(data), &chunk)
choices := chunk["choices"].([]interface{})
delta := choices[0].(map[string]interface{})["delta"].(map[string]interface{})
if content, ok := delta["content"].(string); ok {
fmt.Print(content)
}
}
}
}
using System.Net.Http.Headers;
using System.Text;
using System.Text.Json;
var client = new HttpClient();
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "YOUR_API_KEY");
var payload = new { model = "deepseek-chat", messages = new[] { new { role = "user", content = "你好,介绍一下你自己" } }, stream = true };
var content = new StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json");
var request = new HttpRequestMessage(HttpMethod.Post, "https://open.e5e.cn/v1/chat/completions") { Content = content };
var response = await client.SendAsync(request, HttpCompletionOption.ResponseHeadersRead);
using var stream = await response.Content.ReadAsStreamAsync();
using var reader = new StreamReader(stream);
while (!reader.EndOfStream) {
var line = await reader.ReadLineAsync();
if (line?.StartsWith("data: ") == true) {
var data = line[6..];
if (data == "[DONE]") break;
var chunk = JsonSerializer.Deserialize<JsonElement>(data);
var delta = chunk.GetProperty("choices")[0].GetProperty("delta");
if (delta.TryGetProperty("content", out var c))
Console.Write(c.GetString());
}
}
<?php
$data = json_encode(["model" => "deepseek-chat", "messages" => [["role" => "user", "content" => "你好,介绍一下你自己"]], "stream" => true]);
$ch = curl_init("https://open.e5e.cn/v1/chat/completions");
curl_setopt_array($ch, [
CURLOPT_HTTPHEADER => ["Content-Type: application/json", "Authorization: Bearer YOUR_API_KEY"],
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $data,
CURLOPT_RETURNTRANSFER => true,
]);
$resp = curl_exec($ch);
$lines = explode("\n", trim($resp));
foreach ($lines as $line) {
if (str_starts_with($line, "data: ")) {
$json = substr($line, 6);
if ($json === "[DONE]") break;
$chunk = json_decode($json, true);
echo $chunk["choices"][0]["delta"]["content"] ?? "";
}
}
curl_close($ch);
✅ OpenAI SDK 兼容
可直接使用 OpenAI 官方 Python/Node.js SDK,只需修改 base_url 和 api_key。
# 安装: pip install openai
from openai import OpenAI
# 初始化客户端
client = OpenAI(
base_url="https://open.e5e.cn/v1",
api_key="YOUR_API_KEY",
)
# 调用接口
response = client.chat.completions.create(
model="deepseek-chat",
messages=[
{"role": "user", "content": "你好"}
],
)
print(response.choices[0].message.content)
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://open.e5e.cn/v1",
apiKey: "YOUR_API_KEY"
});
const response = await client.chat.completions.create({
model: "deepseek-chat",
messages: [{ role: "user", content: "你好" }]
});
console.log(response.choices[0].message.content);
鉴权方式
所有 API 请求需要在 HTTP Header 中携带有效的 API Key 进行身份认证。
认证方式
在所有请求的 Header 中添加:Authorization: Bearer YOUR_API_KEY
获取 API Key
登录 e5eAi 控制台,前往 API 令牌 页面创建和管理密钥。每个账户可创建多个 Key,支持分别设置权限等级和调用限额。
⚠️ 安全提示
请勿在客户端代码或公共仓库中暴露 API Key。建议通过环境变量或后端服务转发请求。Key 泄露可能导致余额被盗用。
模型列表
获取当前可用的所有模型及其信息。
接口地址
GET https://open.e5e.cn/v1/models请求参数
| 参数 | 位置 | 必填 | 说明 |
|---|---|---|---|
| Authorization | Header | 是 | Bearer 认证,格式 Bearer…_KEY |
响应格式
| 字段 | 类型 | 说明 |
|---|---|---|
| object | string | 固定 list |
| data | array | 模型列表,每项含 id、object("model")、owned_by |
GET
/v1/models
获取可用模型列表
返回所有已发布且非维护状态的模型,包含模型 ID、所属厂商、能力标签等信息。
curl https://open.e5e.cn/v1/models \
-H "Authorization: Bearer YOUR_API_KEY"
from openai import OpenAI
# 初始化客户端
client = OpenAI(
base_url="https://open.e5e.cn/v1",
api_key="YOUR_API_KEY",
)
# 列出所有模型
for m in client.models.list().data:
print(f"{m.id:35s} {m.owned_by}")
const resp = await fetch("https://open.e5e.cn/v1/models", {
headers: { "Authorization": "Bearer YOUR_API_KEY" }
});
const data = await resp.json();
data.data.forEach(m => console.log(m.id, m.owned_by));
package main
import (
"encoding/json"
"fmt"
"net/http"
)
func main() {
req, _ := http.NewRequest("GET", "https://open.e5e.cn/v1/models", nil)
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
var result map[string]interface{}
json.NewDecoder(resp.Body).Decode(&result)
for _, m := range result["data"].([]interface{}) {
model := m.(map[string]interface{})
fmt.Println(model["id"], model["owned_by"])
}
}
using System.Net.Http.Headers;
using System.Text.Json;
var client = new HttpClient();
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "YOUR_API_KEY");
var response = await client.GetAsync("https://open.e5e.cn/v1/models");
var json = JsonSerializer.Deserialize<JsonElement>(await response.Content.ReadAsStringAsync());
foreach (var m in json.GetProperty("data").EnumerateArray())
Console.WriteLine($"{m.GetProperty("id").GetString()} {m.GetProperty("owned_by").GetString()}");
<?php
$ch = curl_init("https://open.e5e.cn/v1/models");
curl_setopt_array($ch, [
CURLOPT_HTTPHEADER => ["Authorization: Bearer YOUR_API_KEY"],
CURLOPT_RETURNTRANSFER => true,
]);
$result = json_decode(curl_exec($ch), true);
foreach ($result["data"] as $m) echo $m["id"] . " " . $m["owned_by"] . "\n";
curl_close($ch);
响应示例
{
"object": "list",
"data": [
{ "id": "deepseek-chat", "object": "model", "owned_by": "openai" },
{ "id": "gpt-5.4-mini", "object": "model", "owned_by": "openai" },
{ "id": "gpt-5.3-codex", "object": "model", "owned_by": "openai" },
{ "id": "claude-opus-4-7", "object": "model", "owned_by": "anthropic" },
{ "id": "claude-sonnet-4-6", "object": "model", "owned_by": "anthropic" },
{ "id": "DeepSeek-V3.2", "object": "model", "owned_by": "deepseek" },
{ "id": "DeepSeek-R1-0528", "object": "model", "owned_by": "deepseek" },
{ "id": "GLM-5.1", "object": "model", "owned_by": "zhipu" },
{ "id": "Kimi-K2.5", "object": "model", "owned_by": "moonshot" },
{ "id": "gemini-3.1-pro-preview", "object": "model", "owned_by": "google" }
]
}
健康检查
查看各模型的可用状态和延迟数据。
接口地址
GET https://open.e5e.cn/api/models/health请求参数
无需认证,无需请求体。
响应格式
| 字段 | 类型 | 说明 |
|---|---|---|
| health | object | 模型健康状态映射,key 为模型 ID,value 含 available + latencyMs |
| capabilities | object | 模型能力标签映射 |
| labels | object | 能力标签中文名称 |
GET
/api/models/health
模型健康状态
curl https://open.e5e.cn/api/models/health
import requests
resp = requests.get("https://open.e5e.cn/api/models/health")
data = resp.json()
for model, info in data.get("health", {}).items():
avail = "✅" if info.get("available") else "❌"
print(f"{model}: {avail} ({info.get('latencyMs', '?')}ms)")
const resp = await fetch("https://open.e5e.cn/api/models/health");
const data = await resp.json();
for (const [model, info] of Object.entries(data.health || {})) {
const avail = info.available ? "✅" : "❌";
console.log(model + ": " + avail + " (" + (info.latencyMs || "?") + "ms)");
}
package main
import (
"encoding/json"
"fmt"
"net/http"
)
func main() {
resp, _ := http.Get("https://open.e5e.cn/api/models/health")
defer resp.Body.Close()
var result map[string]interface{}
json.NewDecoder(resp.Body).Decode(&result)
health := result["health"].(map[string]interface{})
for model, info := range health {
m := info.(map[string]interface{})
avail := "❌"
if m["available"].(bool) { avail = "✅" }
fmt.Printf("%s: %s (%vms)\n", model, avail, m["latencyMs"])
}
}
using System.Text.Json;
var client = new HttpClient();
var response = await client.GetAsync("https://open.e5e.cn/api/models/health");
var json = JsonSerializer.Deserialize<JsonElement>(await response.Content.ReadAsStringAsync());
foreach (var entry in json.GetProperty("health").EnumerateObject()) {
var info = entry.Value;
var avail = info.GetProperty("available").GetBoolean() ? "✅" : "❌";
Console.WriteLine(entry.Name + ": " + avail + " (" + info.GetProperty("latencyMs") + "ms)");
}
<?php
$ch = curl_init("https://open.e5e.cn/api/models/health");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = json_decode(curl_exec($ch), true);
foreach ($result["health"] as $model => $info) {
$avail = $info["available"] ? "✅" : "❌";
echo $model . ": " . $avail . " (" . $info["latencyMs"] . "ms)\n";
}
curl_close($ch);
响应示例
{
"health": {
"deepseek-chat": { "available": true, "latencyMs": 2449, "lastChecked": 1715367049000 },
"DeepSeek-V3.2": { "available": true, "latencyMs": 1804, "lastChecked": 1715367049000 }
}
}
e5eTalk 数字人视频生成
上传音频和视频素材,AI 自动生成对口型数字人视频。异步任务模式:提交即返回 taskId,轮询获取视频。
定价
| 类型 | 单价 | 说明 |
|---|---|---|
| 输入 | ¥0 | 音频 + 视频素材上传免费 |
| 输出 | ¥0.05 / 秒 | 按生成视频时长计费,¥3.00/60秒 |
| Token 折算 | 1秒 = 1000 tokens | 用于用量统计 |
POST
/v1/e5etalk/generate
创建任务
请求参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| audio | File | 是 | 音频文件(WAV/MP3),数字人口型驱动源 |
| video | File | 是 | 视频素材(MP4),数字人背景画面 |
| template_name | String | 否 | 分身模板名,默认"不使用分身" |
GET
/v1/e5etalk/generate/{taskId}
查询结果
响应说明
| 状态 | Content-Type | 返回内容 |
|---|---|---|
| 处理中 | application/json | {"status":"processing"} |
| 失败 | application/json | {"status":"error","error":{"message":"..."}} |
| 完成 | video/mp4 | 视频二进制流 + 响应头 X-Video-Duration X-Tokens X-Cost |
代码示例
import requests, time
BASE = "https://open.e5e.cn/v1/e5etalk/generate"
HEADERS = {"Authorization": "***"}
# 1. 创建任务
with open("speech.wav", "rb") as a, open("bg.mp4", "rb") as v:
r = requests.post(BASE, files={"audio":a,"video":v},
data={"template_name":"不使用分身"}, headers=HEADERS)
task = r.json()
print(f"任务: {task['id']}")
# 2. 轮询
while True:
r = requests.get(f"{BASE}/{task['id']}", headers=HEADERS)
if r.headers.get("Content-Type") == "video/mp4":
with open("output.mp4","wb") as f: f.write(r.content)
print(f"完成! {r.headers['X-Video-Duration']}s 扣费 {r.headers['X-Cost']}")
break
if r.json().get("status") == "error":
print("失败:", r.json()["error"]["message"]); break
time.sleep(5)
# 1. 创建任务
curl -X POST "https://open.e5e.cn/v1/e5etalk/generate" -H "Expect:" -H "Authorization: Bearer ***" -F "audio=@speech.wav" -F "video=@bg.mp4" -F "template_name=不使用分身"
# 2. 轮询结果
curl -H "Authorization: Bearer ***" "https://open.e5e.cn/v1/e5etalk/generate/{taskId}" -o output.mp4
💡 提示:任务在内存中保存最多 10 分钟,完成后一次性返回视频并清除。cURL 必须加 -H "Expect:" 避免反向代理超时。