Felo Snapshot 把"打开产品页面 → 等加载 → 关弹层 → 截图 → 归档"这件事压缩成一次接口调用。
用 X-API-Key 调起 POST /tasks,Agent 在隔离浏览器里自动出图,
给 SEO 文章、功能文档、营销素材输出可复跑、可版本化的标准截图。
项目、站点知识、任务调度、隔离浏览器、产物下载——把一条“自动出图”流水线收敛为一套接口,开箱即用。
任何需要“重复为产品页面出图”的场景都适用。这是最常见的四类。
所有业务接口都带 X-API-Key 请求头。下面是最小可运行的调用链路;切换标签查看不同语言。
# 1 · 创建任务(multipart/form-data) curl -X POST "$IMAGE_AGENT_API_BASE/tasks" \ -H "X-API-Key: $IMAGE_AGENT_API_KEY" \ -F "instruction=打开 https://example.com 并截取首页首屏" \ -F "model=claude-sonnet-4-6" # 2 · 轮询任务状态 curl "$IMAGE_AGENT_API_BASE/tasks/$TASK_ID" \ -H "X-API-Key: $IMAGE_AGENT_API_KEY" # 3 · 读取产物清单 curl "$IMAGE_AGENT_API_BASE/tasks/$TASK_ID/artifact-files/content?path=artifact-manifest.json" \ -H "X-API-Key: $IMAGE_AGENT_API_KEY" # 4 · 下载单个截图 curl -o homepage.png \ "$IMAGE_AGENT_API_BASE/tasks/$TASK_ID/artifact-files/download?path=screenshots/homepage.png" \ -H "X-API-Key: $IMAGE_AGENT_API_KEY"
# pip install httpx import os, time, httpx base = os.environ["IMAGE_AGENT_API_BASE"] headers = {"X-API-Key": os.environ["IMAGE_AGENT_API_KEY"]} # 1 · 提交任务 r = httpx.post( f"{base}/tasks", headers=headers, data={ "instruction": "打开 https://example.com 并截取首页首屏", "model": "claude-sonnet-4-6", }, ).raise_for_status() task_id = r.json()["id"] # 2 · 轮询直到 succeeded while True: status = httpx.get(f"{base}/tasks/{task_id}", headers=headers).json()["status"] if status in ("succeeded", "failed", "cancelled"): break time.sleep(2) # 3 · 读取产物清单 + 下载截图 manifest = httpx.get( f"{base}/tasks/{task_id}/artifact-files/content", params={"path": "artifact-manifest.json"}, headers=headers, ).json()
// node 20+ / npm i undici import { fetch, FormData } from "undici"; const base = process.env.IMAGE_AGENT_API_BASE; const headers = { "X-API-Key": process.env.IMAGE_AGENT_API_KEY }; // 1 · 提交任务 const form = new FormData(); form.set("instruction", "打开 https://example.com 并截取首页首屏"); form.set("model", "claude-sonnet-4-6"); const created = await (await fetch(`${base}/tasks`, { method: "POST", headers, body: form, })).json(); // 2 · 轮询任务,到达终态再读取产物清单 let status = "queued"; while (!["succeeded", "failed", "cancelled"].includes(status)) { await new Promise(r => setTimeout(r, 2000)); status = (await (await fetch(`${base}/tasks/${created.id}`, { headers })).json()).status; }
Project、站点、Task 和 Task 产物接口都支持 X-API-Key。API key 管理接口(创建/删除 key 本身)只允许通过已登录账号的 Bearer 鉴权访问。
成功的 Task 在产物目录写入固定的 artifact-manifest.json, 把每个文件的路径、类型、用途和尺寸结构化交回。建议接入方优先读取该文件,再决定要下载哪些产物。
schema 固定,便于下游系统按字段判断文件用途。
{
"schema": "image-agent.artifact-manifest",
"schema_version": "1.0",
"task_id": "task_id",
"summary": "本次产出的整体概要",
"files": [
{
"path": "screenshots/homepage.png",
"label": "图片 1",
"type": "image",
"title": "首页首屏截图",
"description": "图片 1 是 example.com 首页首屏截图...",
"mime_type": "image/png",
"size_bytes": 123456,
"sha256": "<hex>",
"width": 1440,
"height": 900
}
]
}
语义字段是接口方判断文件用途的主要依据,下游可直接拼成下载 URL。
请通过邮件说明调用场景与预计用量;团队完成内测开通后,会发放 API key 与调用额度。完整 key 只在创建时返回一次,数据库只保存哈希。
iak_xxxxxxxx…xxxxxxx,仅返回一次。
X-API-Key。
POST /tasks 发起任务,并轮询 GET /tasks/{task_id}。
artifact-manifest.json 拿到文件路径与语义说明,再调用 artifact-files 或 artifacts 接口下载产物。