N°. 002 — SNAPSHOT API / 2026.05

自动化
产品截图。
为 SEO 与文档。

Felo Snapshot 把"打开产品页面 → 等加载 → 关弹层 → 截图 → 归档"这件事压缩成一次接口调用。 用 X-API-Key 调起 POST /tasks,Agent 在隔离浏览器里自动出图, 给 SEO 文章、功能文档、营销素材输出可复跑、可版本化的标准截图。

申请 API key 内测 查看 Swagger 文档 适用于 SEO 配图 · 功能文档 · 营销素材 · 发版回归
USE CASES
SEO · 文档· 营销
RUNTIME
Playwright· 隔离浏览器
AUTH
X-API-Key
OUTPUT
PNG · MD · ZIP
WORKFLOW · 01 — 03
三步,让产品截图
跟上每一次发版。
01 · LIST
列出要出图的页面
把 SEO 文章所需的产品页、功能文档页、Dashboard 集中成一份 URL 清单,存进 Project。
02 · TASK
发起截图任务
POST /tasks 带上截图说明(尺寸、区域、状态),Agent 自动处理加载、弹层、登录身份。
03 · PUBLISH
拉回图片发布
artifact-manifest.json 读出文件语义,直接填进 CMS、帮助中心或营销页。
CAPABILITIES

为产品页面出图,
打磨过的
每一个环节。

项目、站点知识、任务调度、隔离浏览器、产物下载——把一条“自动出图”流水线收敛为一套接口,开箱即用。

01
可重复的标准截图
同一份 URL 清单 + 指令,任意时间重跑都能拿到可对齐的输出,适合 SEO 文章、文档页随版本刷新。
02
加载、弹层、身份都交给 Agent
Agent 自动等 loading、关闭 cookie·设置·语言弹层后再发起截图,不需为每个产品页单独调脚本。
03
任意尺寸 · 区域截图
指定首屏、全页、Hero、某个模块或账号登录后的 Dashboard,输出区别不同分辨率的 PNG。
04
身份隔离 · 登录后页面
为需要登录的产品页提供独立凭证存储,运行时注入、不长存;Dashboard、控制台页面也可靠出图。
05
语义化产物清单
每份任务返回 artifact-manifest.json,带上文件用途、尺寸、描述,可直接填入 CMS 的 alt 与 caption。
06
批量 · 可调度 · 可回归
同一 key 下多 project 并行跑;每次发版后拉一轮全量重截图,走 CI 或定时任务都可以。
SCENARIOS

应用场景。

任何需要“重复为产品页面出图”的场景都适用。这是最常见的四类。

01
SEO 配图 · 博客与落地页量产
批量产出产品页、功能页、对比页的首屏 / 区域截图,补齐 SEO 文章里“正文配图”。Agent 顺便输出可用于 alt 与 caption 的语义描述。
02
功能文档 · 帮助中心随版本出图
产品发版后一键重截所有文档页面。接口可提交同一份 URL 清单与指令,拿到与历史版本排版一致的新图,避免页面与截图不同步。
03
营销素材 · 多语言·多尺寸批量出图
运营提交 URL 与尺寸表,Agent 自动等动画加载完、关闭弹层、切换语言后截图,输出可直接投放的素材包。
04
发版回归 · 页面变更守望
路由 CI 调用接口,每个环境出一套首屏截图与页面 Markdown,用于发版后的 UI / 文案 / SEO 变动检查。
QUICKSTART

四个动作,
从 URL 清单到一包截图。

所有业务接口都带 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;
}
REFERENCE

接口表,
四组按功能划分。

Project、站点、Task 和 Task 产物接口都支持 X-API-Key。API key 管理接口(创建/删除 key 本身)只允许通过已登录账号的 Bearer 鉴权访问。

projects
Project 增删改
POST
/projects
创建 Project
GET
/projects
列出 Project
GET
/projects/{project_id}
获取 Project
PATCH
/projects/{project_id}
更新名称或描述
DELETE
/projects/{project_id}
删除 Project
sites
站点维护
GET
/projects/{project_id}/sites
列出项目下的站点
POST
/projects/{project_id}/sites
创建站点
GET
/sites/{site_id}/knowledge
读取站点知识
PUT
/sites/{site_id}/knowledge
手动写入站点知识
POST
/sites/{site_id}/builds
触发知识构建任务
tasks
Task 操作
POST
/tasks
创建任务,multipart/form-data
GET
/tasks
列出任务,可用 project_id 过滤
GET
/tasks/{task_id}
获取任务状态
POST
/tasks/{task_id}/cancel
取消任务
POST
/tasks/{task_id}/retry
重试失败 / 取消的任务
GET
/tasks/{task_id}/logs
读取任务日志
artifacts
产物获取
GET
/tasks/{task_id}/artifact-files
列出产物文件树
GET
/tasks/{task_id}/artifact-files/content
读取文本 / Markdown 内容
GET
/tasks/{task_id}/artifact-files/download
下载单个文件
GET
/tasks/{task_id}/artifact-files/resource
以内联资源方式读取(图片预览)
GET
/tasks/{task_id}/artifacts
下载全部产物 ZIP / 签名 URL
ARTIFACT

每个任务都附带
一份语义化清单。

成功的 Task 在产物目录写入固定的 artifact-manifest.json, 把每个文件的路径、类型、用途和尺寸结构化交回。建议接入方优先读取该文件,再决定要下载哪些产物。

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。

  • summary本次任务产出的整体概要,便于接入系统作为元数据存档。
  • files[].path相对 tasks/{task_id}/output/ 的路径,可直接传给 artifact-files。
  • files[].label面向人和对接系统的稳定序号,例如「图片 1」「文档 1」。
  • files[].typeimage / markdown / text / json / binary 之一。
  • files[].title / descriptionagent 给出的语义说明,判断截图对象和页面状态。
  • size / sha256 / mime下载校验与缓存使用,由后端在任务收尾时补齐。
ACCESS · INVITE

API key 当前以
内测申请方式发放。

请通过邮件说明调用场景与预计用量;团队完成内测开通后,会发放 API key 与调用额度。完整 key 只在创建时返回一次,数据库只保存哈希。

STEP 01 · CONTACT
发送邮件至 ren.chen@felo.ai,说明 调用场景预计用量、回调或产物下载方式。
STEP 02 · ENABLE
团队完成内测开通后,为你的服务端集成分配 API key 和调用额度。完整 key 形如 iak_xxxxxxxx…xxxxxxx,仅返回一次。
STEP 03 · AUTHORIZE
在 Swagger UI 点击 Authorize → APIKeyHeader 填入完整 key,之后所有 Project / Site / Task / Artifact 接口都会自动带上 X-API-Key
STEP 04 · BUILD
创建或复用 Project,按需维护站点 URL 与站点知识;调用 POST /tasks 发起任务,并轮询 GET /tasks/{task_id}
STEP 05 · CONSUME
任务完成后,读取 artifact-manifest.json 拿到文件路径与语义说明,再调用 artifact-files 或 artifacts 接口下载产物。
SECURITY
API key 适合后端任务、自动化截图和批量集成。 请勿在浏览器端、移动端或公开仓库中暴露 key;脚本只从环境变量读取,不要把真实 key 写入命令行、源码或报告文件。

让产品截图
跟上每一次发版。

申请 API key 内测 打开 Swagger 查看 ReDoc ren.chen@felo.ai · 邮件中请附调用场景说明