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 → 发送请求 → 获取响应。

💡 模型选择提示:
示例中的 deepseek-chat 为 DeepSeek-V3.2 快速版,默认免费开放。
如需其他模型(Gemini、Claude、GLM 等),参考模型列表替换 model 参数即可。

请求参数

参数类型必填说明
modelstring模型 ID,如 deepseek-chatclaude-opus-4-6
messagesarray对话消息数组,每项含 role(system/user/assistant)和 content
max_tokensinteger生成的最大 token 数。默认:模型默认值
temperaturenumber采样温度 0-2。越高越随机。默认:1
top_pnumber核采样,仅考虑概率累加到 p 的 token。默认:1
streamboolean是否流式输出(SSE)。默认:false
stopstring/array停止词,遇到即终止生成。最多 4 个
frequency_penaltynumber-2.0~2.0,正值降低重复。默认:0
presence_penaltynumber-2.0~2.0,正值增加新话题。默认:0
ninteger生成回复数量。默认:1
response_formatobject响应格式,{"type":"json_object"} 启用 JSON 模式
seedinteger随机种子,相同 prompt 输出更稳定
logprobsboolean是否返回 token 对数概率。默认:false
top_logprobsinteger返回概率最高 N 个 token,配合 logprobs 使用
toolsarray函数调用工具定义(需模型支持)
tool_choicestring/object工具调用策略:auto/none/required
userstring终端用户标识,用于监控

响应格式(非流式)

字段类型说明
idstring请求唯一标识
objectstring固定 chat.completion
createdintegerUnix 时间戳
modelstring实际使用的模型 ID
choicesarray回复列表:indexmessage(role+content)、finish_reason
usageobjectToken 用量:prompt_tokenscompletion_tokenstotal_tokens

流式响应(SSE)

设置 "stream":true 后返回 text/event-stream,每个 data: 行是一个 JSON chunk:

字段类型说明
idstring请求 ID
objectstringchat.completion.chunk
choices[0].delta.contentstring增量文本片段
choices[0].finish_reasonstring/null最后 chunk 为 stop/length
usageobject/null仅最后 chunk(部分模型)

图片生成

📢 说明:图片生成为异步处理,提交后返回任务 ID,需轮询查询结果。本平台已封装同步模式,POST 后自动等待完成返回图片 URL(最长等待 300s,超时返回 202 + 任务 ID)。

接口地址

POST /v1/images/generations

请求参数

参数类型必填说明
modelstring✅ 必填 模型名称
jimeng-seedream46 — 即梦 Seedream 4.6,字节跳动图片生成模型
promptstring✅ 必填图片生成提示词,清晰描述内容和风格。即梦模型最长 800 字符
qualitystring选填 画质档位,映射为即梦 scale(文本影响程度),默认 medium
low — 低画质,scale=25
medium — 中画质,scale=50(默认)
high — 高画质,scale=75
ratiostring选填 宽高比,默认 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
resolutionstring选填 分辨率,默认 2k。与 size 二选一,使用 resolution 必须同时传 ratio
1k — 1K 分辨率
2k — 2K 分辨率(默认)
4k — 4K 分辨率
⚠️ 即梦 4K 推荐比例:1:1 / 16:9 / 4:3 / 3:2 / 21:9
sizestring选填 直接指定尺寸(传后 resolution 和 ratio 可不传)。若同时传以 size 为准
即梦推荐值:1024x1024 / 2048x2048 / 2560x1440 / 2304x1728 / 4096x4096
📐 尺寸规则 • 宽高乘积 1,048,576 ~ 16,777,216(1024² ~ 4096²)
• 宽高比限制 min_ratio=1/3, max_ratio=3
image_urlsarray选填 参考图片 URL 数组,用于指导生成风格(图生图模式)
最多 14 张,建议控制在 6 张以内
ninteger选填 生成数量。n=1 强制单图;n>1 组图模式(即梦模型由 AI 判断张数)

响应参数

字段类型说明
data[0].urlstring生成的图片 URL
createdinteger任务创建时间戳
successboolean请求是否成功

📞 调用示例(不带参数 — 使用默认值)

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_urlapi_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

请求参数

参数位置必填说明
AuthorizationHeaderBearer 认证,格式 Bearer…_KEY

响应格式

字段类型说明
objectstring固定 list
dataarray模型列表,每项含 idobject("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

请求参数

无需认证,无需请求体。

响应格式

字段类型说明
healthobject模型健康状态映射,key 为模型 ID,value 含 available + latencyMs
capabilitiesobject模型能力标签映射
labelsobject能力标签中文名称
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 创建任务

请求参数

参数类型必填说明
audioFile音频文件(WAV/MP3),数字人口型驱动源
videoFile视频素材(MP4),数字人背景画面
template_nameString分身模板名,默认"不使用分身"
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:" 避免反向代理超时。