InfiniSynapse Server API Reference
本文是 InfiniSynapse 服务端(Server)面向外部用户/SDK 的 HTTP API 参考。通过一个 API Key(Bearer Token)即可直接调用,完成多轮 AI 任务对话、数据源管理、RAG 知识库管理、文件上传与下载等操作,无需依赖前端界面。
仅需命令行集成的用户,可优先查阅《InfiniSynapse CLI API Reference》;本文面向需要直接发起 HTTP 请求的开发者。
1. 接入准备
基础信息
| 项 | 值 |
|---|---|
| 基础地址(国内) | https://app.infinisynapse.cn |
| 基础地址(海外) | https://app.infinisynapse.com |
| 全局路径前缀 | 所有接口均以 /api 开头 |
| 鉴权方式 | HTTP 头 Authorization: Bearer <API Key> |
| 默认内容类型 | application/json(文件上传为 multipart/form-data) |
国内用户请使用
.cn域名,海外用户请使用.com域名;私有化部署时替换为你自己的服务地址。下文示例统一以.cn域名书写,海外环境将其替换为.com即可。
鉴权
所有业务接口都需要在请求头携带 Bearer Token:
Authorization: Bearer <你的 API Key>
服务端从 Token 的 sub 声明中解析出用户身份(userId),所有资源(任务、数据源、知识库、文件)都按用户隔离。少数标注「公开只读」的接口无需鉴权。
语言
可选请求头 x-lang 控制服务端返回的提示文案语言,取值:zh_CN(默认)、en、ar、ja、ko、ru。
x-lang: zh_CN
统一响应结构
绝大多数接口返回统一信封:
{
"code": 200,
"message": "success",
"data": { }
}
code === 200表示成功,业务数据在data中。code为1101/1105:Token 过期或失效,需更换 API Key。- 参数校验失败返回 HTTP
422,message为第一条校验错误信息。 - 文件下载类接口直接返回二进制流(
application/octet-stream或application/zip),不走该信封。
分页约定
列表类接口(继承自通用分页参数)支持以下 Query 参数:
| 参数 | 类型 | 默认 | 说明 |
|---|---|---|---|
page | number | 1 | 页码(从 1 开始) |
pageSize | number | 10 | 每页条数(一般上限 100,数据源列表上限 10000) |
field | string | - | 排序字段,如 updated_at |
order | string | desc | 排序方向 asc / desc |
分页响应的 data 结构:
{
"items": [ ],
"meta": {
"itemCount": 10,
"totalItems": 42,
"itemsPerPage": 10,
"totalPages": 5,
"currentPage": 1
}
}
快速开始示例
curl -X GET "https://app.infinisynapse.cn/api/ai_database/list?page=1&pageSize=10&source=all" \
-H "Authorization: Bearer <你的 API Key>" \
-H "x-lang: zh_CN"
2. AI 对话与任务执行
AI 对话采用「SSE 长连接 + 消息投递」的异步模式:先订阅事件流接收实时推送,再通过消息接口发送指令。
2.1 订阅事件流(SSE)
GET /api/ai/events- 建立 Server-Sent Events 长连接,服务端主动推送消息变更、状态就绪、通知等。
Query 参数
| 参数 | 必填 | 说明 |
|---|---|---|
connId | 否 | 客户端生成的连接 ID(如 UUID);多 Tab/多连接时各用一个,便于服务端定向推送。不传则服务端自动生成 |
请求头:Authorization: Bearer <token> 必填,建议带 Accept: text/event-stream。
事件类型(每条格式为 event: <event>\ndata: <JSON>\n\n)
| event | data | 说明 |
|---|---|---|
message.add | { taskId, message } | 向任务追加一条消息 |
message.update | { taskId, message } | 更新已有消息 |
message.partial | { taskId, message } | 流式增量更新(同 ts 覆盖或追加) |
message.remove | { taskId, messageTs: number[] } | 移除指定消息 |
state.ready | { taskId } | 状态就绪,建议随后调用 /api/ai_task/tasks 全量拉取 |
notification | { type, title, message, duration? } | 全局通知 |
heartbeat | "ping" | 保活,可忽略 |
curl -N "https://app.infinisynapse.cn/api/ai/events?connId=550e8400-e29b-41d4-a716-446655440000" \
-H "Authorization: Bearer <你的 API Key>" \
-H "Accept: text/event-stream"
2.2 发送消息
POST /api/ai/message- 根据 body 的
type分发到不同逻辑。回复实时推送到 SSE 通道,本接口本身仅返回执行结果。
常用 type 及字段
| type | 必填字段 | 可选字段 | 说明 |
|---|---|---|---|
newTask | text | taskId、connId、images、files | 新建任务(会做数据源扣费校验与幂等) |
askResponse | taskId、askResponse | text、images、files | 回复 Agent 的提问,继续多轮对话;askResponse 一般为 messageResponse |
cancelTask | taskId | - | 取消运行中的任务 |
clearTask | - | taskId | 清除任务;不传 taskId 清空全部 |
optionsResponse | taskId、connId、text | - | 多选项回复 |
togglePlanActMode | chatSettings | taskId | 切换规划/执行模式 |
autoApprovalSettings | autoApprovalSettings | - | 更新自动审批配置 |
rollbackToSnapshot | taskId、snapshotTs | - | 回滚到指定快照 |
rollbackAndSendMessage | taskId、snapshotTs、text | images、files | 回滚并发送新消息 |
editFirstMessageAndResend | taskId、text | images、files | 编辑首条消息并重新执行 |
响应
- 成功通常为
{ "success": true }; newTask、回滚、编辑首条等会附带{ success: true, state, forceReplace? };- 失败可能为
{ success: false, error }或{ success: false, notification: { type, title, message } }(如扣费校验失败)。
# 新建任务
curl -X POST "https://app.infinisynapse.cn/api/ai/message" \
-H "Authorization: Bearer <你的 API Key>" \
-H "Content-Type: application/json" \
-d '{"type":"newTask","text":"分析最近一个月的销售趋势","connId":"550e8400-..."}'
# 多轮追问
curl -X POST "https://app.infinisynapse.cn/api/ai/message" \
-H "Authorization: Bearer <你的 API Key>" \
-H "Content-Type: application/json" \
-d '{"type":"askResponse","taskId":"task-001","askResponse":"messageResponse","text":"再按地区拆分"}'
2.3 其他对话辅助接口
| 接口 | 方法 | 说明 |
|---|---|---|
/api/ai/state?taskId= | GET | 获取指定任务(或全局)的完整前端状态:apiConfiguration、当前任务、消息列表、自动审批、对话模式、todo 等 |
/api/ai/settings | POST | 更新 API 配置、自定义说明、自动审批设置;传 taskId 时同时更新该任务的模型 |
/api/ai/configuration | GET | 获取当前用户保存的 apiConfiguration |
/api/ai/models | GET | 按当前 API 配置请求 OpenAI 兼容 /models,返回可用模型 ID 数组 |
/api/ai/ping | GET | 轻量心跳,返回 { ok: true },用于探测连接存活 |
3. 任务管理
控制器前缀:/api/ai_task。
3.1 任务查询
| 接口 | 方法 | 参数 | 说明 |
|---|---|---|---|
/api/ai_task/list | GET | 分页参数 + task_name、category_name、category_id、is_in_rag、virtual_echart_category(均可选,模糊匹配) | 分页获取任务列表 |
/api/ai_task/tasks?taskId= | GET | taskId(必填) | 获取任务完整数据(taskInfo + messages + isRunning) |
/api/ai_task/getTaskInfo/:id | GET | 路径 id | 获取任务元信息(不创建运行实例) |
/api/ai_task/showTaskWithId/:id | GET | 路径 id | 获取任务详情 |
/api/ai_task/getUiMessageById?id= | GET | id(任务 ID) | 获取任务的 UI 消息列表(已瘦身) |
/api/ai_task/messagePayload?taskId=&messageTs= | GET | taskId、messageTs | 获取单条消息的完整 text(未瘦身) |
/api/ai_task/getTaskWorkspace/:id | GET | 路径 id | 获取任务工作目录及文件列表 { cwd, files } |
3.2 任务操作
删除任务
POST /api/ai_task/deleteTaskWithId
{ "ids": ["task-001", "task-002"] }
取消任务
POST /api/ai_task/cancelTask?taskId=task-001(taskId作为 Query 参数)
重新运行 SQL 任务
POST /api/ai_task/rerunSqlTask
{ "id": "task-001", "chat_index": 0 }
运行提取的 SQL
POST /api/ai_task/runExtractSql
{
"variables": { "startDate": "2024-01-01", "endDate": "2024-12-31" },
"register_tables": "orders,users",
"databases": "main_db",
"sqls": "SELECT * FROM orders WHERE created_at BETWEEN :startDate AND :endDate"
}
3.3 任务与 RAG
| 接口 | 方法 | 请求体/参数 | 说明 |
|---|---|---|---|
/api/ai_task/saveToRag | POST | { taskId, action },action 为 save/remove | 保存或移除任务到 RAG |
/api/ai_task/isSavedToRag?taskId= | GET | taskId | 返回布尔值,任务是否已保存到 RAG |
3.4 任务分类
| 接口 | 方法 | 请求体/参数 | 说明 |
|---|---|---|---|
/api/ai_task/category/add | POST | { category_name } | 添加分类 |
/api/ai_task/category/update | POST | { id, category_name } | 更新分类 |
/api/ai_task/category/delete | POST | { ids: [] } | 删除分类 |
/api/ai_task/category/list | GET | 分页参数 + category_name | 分页获取分类 |
/api/ai_task/category/getAllCategories | GET | - | 获取全部分类 |
/api/ai_task/getCatetoryById/:id | GET | 路径 id | 分类详情 |
/api/ai_task/getCatetoryByTaskId/:id | GET | 路径 id(任务 ID) | 获取任务关联分类 |
/api/ai_task/updateCategoryByTaskId | POST | { id, category_ids: [] } | 更新任务关联分类 |
3.5 任务文件
| 接口 | 方法 | 请求体/参数 | 说明 |
|---|---|---|---|
/api/ai_task/previewFile | POST | { taskId, fileName } | 预览文件内容,返回 { content, fileType } |
/api/ai_task/downloadZip?taskId= | GET | taskId | 下载整个任务目录为 ZIP(返回二进制流) |
3.6 任务分享(公开只读,无需鉴权)
| 接口 | 方法 | 说明 |
|---|---|---|
/api/ai_task/setShare | POST | { taskId, isPublic } 设置任务公开/私有(需所有者鉴权) |
/api/ai_task/shareStatus?taskId= | GET | 查询分享状态(需所有者鉴权) |
/api/ai_task/publicTask?taskId= | GET | 公开只读获取任务数据 |
/api/ai_task/publicMessagePayload?taskId=&messageTs= | GET | 公开只读获取单条消息完整内容 |
/api/ai_task/publicTaskFileTree/:taskId | GET | 公开只读获取文件树 |
/api/ai_task/publicPreviewFile | POST | 公开只读预览文件 |
/api/ai_task/publicDownloadTaskFile/:taskId?path= | GET | 公开只读下载文件 |
/api/ai_task/publicDownloadZip?taskId= | GET | 公开只读下载任务 ZIP |
4. 数据源管理
控制器前缀:/api/ai_database。支持的数据库类型:mysql、postgres、sqlite、sqlserver、clickhouse、snowflake、doris、starrocks、gbase、kingbase、dm、supabase、deltalake、file(测试连接还支持 mongodb、elasticsearch)。
4.1 列表查询
GET /api/ai_database/list
Query 参数:分页参数 + 以下可选项
| 参数 | 说明 |
|---|---|
name | 数据库名称(模糊) |
type | 数据库类型 |
enabled | 是否启用:1 / 0 |
source | 来源:local / remote / subscribed / all(默认 all) |
subscribeSource | 订阅来源:created / subscribed / all(默认 created) |
4.2 增删改
| 接口 | 方法 | 请求体 | 说明 |
|---|---|---|---|
/api/ai_database/add | POST | DatabaseAddDto | 创建数据库连接 |
/api/ai_database/update | POST | DatabaseEditDto(含 id) | 更新数据库配置 |
/api/ai_database/delete | POST | { ids: [] } | 批量删除 |
/api/ai_database/enabled | POST | { ids: number[], enabled } | 批量启用/禁用 |
add 请求体示例:
{
"name": "production_db",
"type": "mysql",
"config": "{\"mysql_host\":\"127.0.0.1\",\"mysql_port\":3306,\"mysql_username\":\"root\",\"mysql_password\":\"***\",\"mysql_database\":\"sales\"}",
"enabled": 1,
"description": "生产环境数据库",
"nickname": "销售数据源"
}
注意:数据库
name不能以remote_或subscribe_开头。
4.3 连接测试与查询
| 接口 | 方法 | 请求体/参数 | 说明 |
|---|---|---|---|
/api/ai_database/testConnection | POST | { type, config } | 测试连接,返回 { success, message, latencyMs } |
/api/ai_database/getDatabaseById/:id | GET | 路径 id | 按 ID 查询详情 |
/api/ai_database/getDatabaseByName/:name | GET | 路径 name | 按名称查询详情 |
4.4 文件与知识库绑定
| 接口 | 方法 | 请求体/参数 | 说明 |
|---|---|---|---|
/api/ai_database/upload/:databaseId | POST | multipart/form-data,字段 file(≤1GB) | 上传数据文件到指定数据库 |
/api/ai_database/bindRags | POST | { databaseId, ragIds: [] } | 设置数据库关联的知识库 |
/api/ai_database/getBindRags/:databaseId | GET | 路径 databaseId | 获取数据库绑定的知识库列表 |
5. RAG 知识库管理
控制器前缀:/api/ai_rag_sdk。
5.1 查询
| 接口 | 方法 | 参数 | 说明 |
|---|---|---|---|
/api/ai_rag_sdk | GET | 分页参数 + keyword、enabled、source、subscribeSource | 分页获取知识库列表 |
/api/ai_rag_sdk/all | GET | - | 获取全量知识库(不分页) |
/api/ai_rag_sdk/:id | GET | 路径 id | 知识库详情 |
5.2 增删改
| 接口 | 方法 | 请求体 | 说明 |
|---|---|---|---|
/api/ai_rag_sdk/create | POST | RagSdkCreateDto | 创建知识库 |
/api/ai_rag_sdk/update/:id | POST | RagSdkUpdateDto | 更新知识库 |
/api/ai_rag_sdk/delete | POST | { ids: [] } | 批量删除 |
/api/ai_rag_sdk/enabled | POST | { ids: [], enabled } | 批量启用/禁用 |
create 请求体示例:
{
"name": "sales_kb",
"nickname": "销售知识库",
"description": "销售相关文档",
"ragDocFilterRelevance": "0.5",
"requiredExts": [".pdf", ".docx", ".txt"],
"docDir": "/path/to/docs",
"enabled": 1,
"database_ids": ["uuid-1", "uuid-2"]
}
5.3 数据库绑定
| 接口 | 方法 | 请求体/参数 | 说明 |
|---|---|---|---|
/api/ai_rag_sdk/bindDatabases | POST | { ragId, databaseIds: [] } | 设置知识库关联的数据库 |
/api/ai_rag_sdk/getBindDatabases/:ragId | GET | 路径 ragId | 获取知识库绑定的数据库列表 |
5.4 文件操作(支持 file / oss / s3)
| 接口 | 方法 | 请求体 | 说明 |
|---|---|---|---|
/api/ai_rag_sdk/fileTree | POST | ListDirectoryDto | 列出目录文件树 |
/api/ai_rag_sdk/download | POST | DownloadFileDto | 下载文件(返回二进制流) |
/api/ai_rag_sdk/deleteRemoteFile | POST | DeleteRemoteFileDto | 删除远程文件(仅 OSS/S3) |
fileTree 请求体示例(远程 OSS):
{
"file_system": "oss",
"directory": "/docs",
"endpoint": "https://oss-cn-hangzhou.aliyuncs.com",
"access_key_id": "***",
"access_key_secret": "***",
"filter": "both"
}
6. 文件上传
上传相关接口注册在根路径下(即 /api/...)。除任务上传外,普通上传以「目录」组织。
| 接口 | 方法 | 参数 | 说明 |
|---|---|---|---|
/api/upload/:directory | POST | multipart/form-data 字段 file(≤1GB) | 上传文件到指定目录,返回 { filename } |
/api/taskUpload/:taskId | POST | file + Query subdir、naming(original/hash) | 上传文件到任务工作目录,返回 { filename, assetId, logicalPath, name, size } |
/api/createDirectory | POST | CreateDirectoryDto | 创建目录 |
/api/deleteDirectory | DELETE | DeleteDirectoryDto | 删除目录 |
/api/directories | GET | - | 获取目录列表 |
/api/fileTree?keyword= | GET | keyword(可选) | 获取文件树结构 |
/api/taskFileTree/:taskId | GET | 路径 taskId | 获取任务工作目录文件树 |
/api/uploadConfig | GET | - | 获取上传限制配置 { maxFileSizeMB, maxFileSizeBytes, chat } |
curl -X POST "https://app.infinisynapse.cn/api/upload/my-folder" \
-H "Authorization: Bearer <你的 API Key>" \
-F "file=@./data.csv"
7. 文件存储与下载
控制器前缀:/api/storage。
| 接口 | 方法 | 参数 | 说明 |
|---|---|---|---|
/api/storage/delete | POST | { ids: [] } | 删除文件 |
/api/storage/download/:id | GET | 路径 id(格式 目录/文件名,需 URL 编码) | 下载文件(返回二进制流) |
/api/storage/downloadTaskFile/:taskId?path= | GET | 路径 taskId + Query path(文件相对路径,需 URL 编码) | 下载任务工作目录中的文件 |
curl "https://app.infinisynapse.cn/api/storage/downloadTaskFile/task-001?path=data%2Fresult.csv" \
-H "Authorization: Bearer <你的 API Key>" \
-o result.csv
8. 错误处理
| 现象 | 处理建议 |
|---|---|
code 为 1101 / 1105 | Token 过期或失效,更换 API Key 后重试 |
HTTP 422 | 请求参数校验失败,message 为具体原因 |
HTTP 400 | 业务校验失败(如文件超限、命名非法、无文件上传等) |
HTTP 404 | 资源/文件不存在或无权访问 |
| SSE 无数据 | 检查 Authorization 头与网络,确认已先建立 /api/ai/events 连接再发消息 |
9. 典型调用流程
- 建立 SSE 连接:
GET /api/ai/events?connId=<uuid>。 - 准备资源:
GET /api/ai_database/list、GET /api/ai_rag_sdk,按需POST /api/ai_database/enabled、POST /api/ai_rag_sdk/enabled启用。 - 新建任务:
POST /api/ai/message(type=newTask),从 SSE 接收实时回复。 - 多轮追问:
POST /api/ai/message(type=askResponse)。 - 查看结果:
GET /api/ai_task/getTaskWorkspace/:id列出产物,POST /api/ai_task/previewFile预览,GET /api/storage/downloadTaskFile/:taskId?path=下载。