概览与快速开始
Favonis API 让你的程序把工作交给 Favonis:发出一句话即新建一个任务,Favonis 在云端电脑上规划并完成调研、数据分析、写文档和幻灯片、写代码这类多步骤的工作,再把结果和交付的文件交还给程序。每个任务都是 Favonis 里的一段工作对话,在应用的侧边栏中同样看得到,随时能打开查看过程、接着对话。Claude Code、Cursor 等 AI 工具也能通过 MCP 新建任务、查看结果和读取文件的文字内容。
能做什么
- 新建任务、查看状态和等待结果,向进行中的任务补充说明,让暂停的任务继续
- 上传附件,下载或读取任务交付的文件
- 列出项目和项目里的文件,在已有项目中接着工作
- 任务停下时通过 Webhook 接收推送,不必反复查询
- 在支持 MCP 的 AI 工具中新建和查看任务、读取文件的文字内容,见 MCP
通过 API 发起的任务和在应用里一样按实际用量扣除积分,套餐和价格见定价。使用前请阅读《Favonis API 使用规则》。
基本信息
| 项目 | 内容 |
|---|---|
| REST | https://api.favonis.com/v1 |
| MCP | https://api.favonis.com/mcp |
| 鉴权 | 请求头 Authorization: Bearer fvk_...,见认证与密钥 |
| 数据格式 | 请求体和返回都是 UTF-8 编码的 JSON,时间是 RFC 3339 格式的字符串 |
| OpenAPI | https://api.favonis.com/v1/openapi.json,无需密钥;全部接口见 API 参考 |
API 只供服务端调用,不开放跨域访问。请不要在网页前端调用 API,也不要把密钥写进前端代码。
快速开始
1. 创建 API 密钥
在 Favonis 中打开 设置 → 开发者 → API 密钥,新建一个密钥。密钥以 fvk_ 开头,只显示一次,请立即复制保存。创建前需要完成实名认证,步骤见如何创建和管理 API 密钥?
把密钥放进环境变量,下面的示例都从这里读取:
export FAVONIS_API_KEY="fvk_..."
2. 新建任务
通过 API 发起的任务无人值守:Favonis 不会中途提问,遇到不确定的地方按合理的假设完成,所以 prompt 要写完整。
curl https://api.favonis.com/v1/tasks \
-H "Authorization: Bearer $FAVONIS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"prompt": "整理国内主要固态电池厂商公开的产能规划,交付一份 Excel 表格"}'
请求立即返回任务对象,这时 status 是 running:
{
"id": "0196a3f2-5c1e-7d48-b2a9-6e0f41c8d375",
"url": "https://ai.favonis.com/app/0196a3f2-5c1e-7d48-b2a9-6e0f41c8d375",
"title": "",
"status": "running",
"project_id": "0196a3f2-5b90-7a11-8c3d-91e2f7a04b62",
"created_at": "2026-11-06T09:12:03Z",
"updated_at": "2026-11-06T09:12:03Z",
"result": { "text": "", "files": [], "points": 0 }
}
url 在 Favonis 中打开这个任务,可以实时查看它正在做什么。
3. 等待结果
带上 wait 参数查看任务:任务仍在运行时,请求最多等待 25 秒,任务停下后立即返回。重复这一步,直到 status 不再是 running。
curl "https://api.favonis.com/v1/tasks/$TASK_ID?wait=25" \
-H "Authorization: Bearer $FAVONIS_API_KEY"
完成后 status 变为 completed,result.text 是回复的最后一段正文,result.files 列出这一轮交付的文件:
{
"id": "0196a3f2-5c1e-7d48-b2a9-6e0f41c8d375",
"status": "completed",
"title": "国内固态电池厂商产能规划",
"result": {
"text": "已整理 12 家厂商公开的产能规划,表格按投产年份排序……",
"files": [
{
"id": "0196a3f9-1d27-7e05-a8c4-3b6f2d91e0a8",
"version_id": "0196a3f9-1d28-7c90-9f13-5a7e04b6c2d1",
"path": "固态电池产能规划.xlsx",
"name": "固态电池产能规划.xlsx",
"size": 48213,
"mime": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
}
],
"points": 1280
}
}
用 GET /v1/files/{id} 取得文件的下载地址,见文件与项目。任务也可能停在 paused,例如空间的积分用完时,各状态的含义和处理方式见任务。
完整示例
下面两段程序完成同一件事:新建任务,等待它停下,再打印回复和交付文件的下载地址。查看任务时,HTTP 客户端的超时要长于 wait 的秒数。
Python
import os
import requests
API = "https://api.favonis.com/v1"
session = requests.Session()
session.headers["Authorization"] = f"Bearer {os.environ['FAVONIS_API_KEY']}"
def call(method, path, **kwargs):
response = session.request(method, f"{API}{path}", timeout=60, **kwargs)
if not response.ok:
raise RuntimeError(f"{response.status_code} {response.json().get('code')}")
return response.json()
task = call("POST", "/tasks", json={"prompt": "整理国内主要固态电池厂商公开的产能规划,交付一份 Excel 表格"})
while task["status"] == "running":
task = call("GET", f"/tasks/{task['id']}", params={"wait": 25})
result = task.get("result") or {}
print(task["status"], result.get("text"))
for file in result.get("files") or []:
print(file["name"], call("GET", f"/files/{file['id']}")["download_url"])
Node.js
const API = "https://api.favonis.com/v1";
const headers = {
Authorization: `Bearer ${process.env.FAVONIS_API_KEY}`,
"Content-Type": "application/json",
};
async function call(method, path, body) {
const response = await fetch(`${API}${path}`, {
method,
headers,
body: body && JSON.stringify(body),
signal: AbortSignal.timeout(60_000),
});
const data = await response.json();
if (!response.ok) throw new Error(`${response.status} ${data.code}`);
return data;
}
let task = await call("POST", "/tasks", {
prompt: "整理国内主要固态电池厂商公开的产能规划,交付一份 Excel 表格",
});
while (task.status === "running") {
task = await call("GET", `/tasks/${task.id}?wait=25`);
}
console.log(task.status, task.result?.text);
for (const file of task.result?.files ?? []) {
const { download_url } = await call("GET", `/files/${file.id}`);
console.log(file.name, download_url);
}
示例需要 Node.js 18 及以上版本,保存为 .mjs 文件运行。正式接入时,建议在新建任务时带上幂等键,并改用 Webhook 接收结果。

