API REFERENCE · PRISM PRO

本地 API 文档:用脚本管理浏览器环境。

Prism Pro 的本地自动化 API 只在本机 127.0.0.1 上监听,使用每次启动时生成的访问令牌。任何能发送 HTTP 请求的语言都可以用它单个或批量创建环境,再查询、启动和关闭环境。

更新于 · 依据 Prism 0.3.22 客户端源码整理

概览

本地 API 是 Prism Pro 功能,适合用自己的脚本批量管理环境:按业务数据创建环境,按顺序启动、检查状态,用完后关闭。它只管理环境本身,不读取 Cookie、密码、代理凭据和网页内容,也不提供 Puppeteer / Playwright 调试端点。需要让 AI 读取网页、点击和填写表单时,请使用 MCP。

本地 API 基本信息
项目说明
地址http://127.0.0.1:<port>,端口每次启动时随机分配,只接受这台电脑上的请求
认证请求头 Authorization: Bearer <token>;令牌在启动 API 时显示一次,停止后作废
数据格式JSON(UTF-8);成功响应的结果放在 result 字段中
请求体只有创建接口接受 JSON 请求体,最大 96 KiB
速率每 60 秒最多 120 个请求,与 MCP 共用
超时每个请求最多等待 60 秒
适用版本Prism Pro,macOS 与 Windows 客户端相同;创建接口需要 0.3.22 或更高版本

快速开始

  1. 启动本地 API

    在 Prism 左侧打开“自动化 API”,点击“启动本地 API”。这个功能需要 Prism Pro。

  2. 复制地址和令牌

    窗口会显示“API 地址”和“本次访问令牌”。令牌只在启动成功时显示一次,请立即复制;之后需要新令牌时,停止并重新启动 API。

  3. 发送第一个请求

    在终端中设置两个变量,检查服务状态并列出环境。返回 "state": "running" 说明地址和令牌可用。

PRISM_API='http://127.0.0.1:43123'   # the API address shown in Prism
PRISM_TOKEN='<token>'                # the token shown in Prism

curl -H "Authorization: Bearer $PRISM_TOKEN" "$PRISM_API/v1/status"
curl -H "Authorization: Bearer $PRISM_TOKEN" "$PRISM_API/v1/profiles"

Windows PowerShell 中的 curl 是另一个命令的别名,请输入 curl.exe,或使用 PowerShell 自带的 Invoke-RestMethod:

$api = 'http://127.0.0.1:43123'
$headers = @{ Authorization = 'Bearer <token>' }
(Invoke-RestMethod -Uri "$api/v1/profiles" -Headers $headers).result | Format-Table serialNumber, name, status

请求规则

API 只接受这台电脑上由脚本或程序发出的请求。不满足下列规则的请求不会执行,并返回下表中的错误:

请求规则与对应错误
规则HTTP错误
用 127.0.0.1 访问,不要用 localhost:请求头 Host 必须与 API 地址完全一致403invalid_host
每个请求都带 Authorization: Bearer <token>401unauthorized
不带浏览器的 Origin 请求头,因此网页和浏览器扩展里的 JavaScript 无法调用403browser_origin_not_allowed
网址不带查询参数(?…)400query_not_allowed
只使用下文列出的路径和方法404not_found
只有创建接口接受请求体;启动、关闭等其他请求连 {} 也不能发送400body_not_allowed
创建接口使用 Content-Type: application/json,请求体是 JSON 对象400json_body_required / invalid_json_body
请求体不超过 96 KiB413request_too_large
每 60 秒最多 120 个请求,失败的请求和 MCP 请求也计入429rate_limited

Prism 按收到的顺序逐个处理本地 API 和 MCP 请求。启动环境要检测代理、打开浏览器,通常需要几秒,这期间后续请求会排队。请等上一个请求返回后再发下一个。

接口一览

本地 API 接口
方法路径作用
GET/v1/status检查服务是否可用
GET/v1/profiles列出全部环境(不含回收站)
GET/v1/profiles/{id}/status查询一个环境
POST/v1/profiles/{id}/start启动环境
POST/v1/profiles/{id}/close关闭环境,保留数据
POST/v1/profiles创建一个环境(0.3.22 起)
POST/v1/profiles/batch一次创建 1–50 个环境(0.3.22 起)

{id} 是环境 ID,可以从 GET /v1/profiles 的结果中取得。成功响应的 HTTP 状态都是 200;除 GET /v1/status 外,结果放在 result 字段中。API 不提供修改和删除环境的接口。

环境对象

环境列表、环境状态、启动和关闭都返回同样的环境对象:

环境对象字段
字段类型说明
id字符串环境 ID,用于其他接口
serialNumber整数界面上的环境编号,删除后不会复用
name字符串环境名称
group字符串分组,未分组时为空字符串
tags字符串数组标签
status字符串closed 已关闭、starting 启动中、running 运行中、stopping 关闭中、orphaned 有遗留进程、error 出错
lastOpenedAt字符串最近一次打开的时间(ISO 8601,UTC);从未打开过的环境没有这个字段
{
  "result": {
    "id": "8f0c2b9e-4d6a-4f51-9a7e-2f1c3d5b6a70",
    "serialNumber": 12,
    "name": "Shop A",
    "group": "Project A",
    "tags": ["automation"],
    "status": "running",
    "lastOpenedAt": "2026-10-02T08:30:00.000Z"
  }
}

接口不返回代理地址和凭据、指纹参数、Cookie、密码、网站数据或扩展数据。

查询、启动与关闭

GET /v1/status

返回服务状态,用来确认地址和令牌可用。这是唯一不放在 result 中的响应:

{
  "state": "running",
  "transport": "loopback",
  "protocolVersion": 1
}

GET /v1/profiles

返回环境对象数组,最近修改的环境排在前面。回收站中的环境不会出现。

GET /v1/profiles/{id}/status

返回一个环境的当前状态。环境不存在或已移入回收站时返回 404 PROFILE_NOT_FOUND。

POST /v1/profiles/{id}/start

  • 与在界面中点击“打开”相同:检查内核和 Pro 内核授权,检测代理与出口变化,然后打开浏览器窗口。成功后返回状态为 running 的环境对象。
  • 环境已经在运行时,直接返回当前状态,不会重复打开。
  • 一个启动请求返回后,Prism 才处理下一个请求。批量启动时逐个调用即可;同时运行多少个环境取决于电脑的内存和 CPU。
  • 没有对应内核、代理检测未通过、代理出口 IP 有变化(策略为 block)或有遗留进程时,启动失败并返回 502,error.message 说明原因。
  • 界面中需要你确认才能继续的情况,通过 API 会直接失败,例如代理出口的地理位置数据互相矛盾。遇到这类错误,可以在 Prism 界面中打开该环境,或把网络身份改为 manual。
  • 调用过启动接口的环境(包括调用时已经在运行的)会被记录下来,在“自动化 API”窗口点击“紧急停止”时一并关闭。“停止 API”以及 MCP 窗口中的停止和紧急停止只会停止 API,这些环境保持打开。

POST /v1/profiles/{id}/close

关闭浏览器窗口,保留环境数据,返回状态为 closed 的环境对象;环境没有运行时也直接返回 closed。如果浏览器 8 秒内没有退出、仍占用数据目录,返回状态为 orphaned,再调用一次关闭会结束遗留进程。

PROFILE_ID='8f0c2b9e-4d6a-4f51-9a7e-2f1c3d5b6a70'   # an id from GET /v1/profiles
curl -X POST -H "Authorization: Bearer $PRISM_TOKEN" "$PRISM_API/v1/profiles/$PROFILE_ID/start"
curl -X POST -H "Authorization: Bearer $PRISM_TOKEN" "$PRISM_API/v1/profiles/$PROFILE_ID/close"

创建环境

创建接口把环境保存为关闭状态,不会打开浏览器。所有字段都可以省略:省略的字段使用与界面“新建环境”相同的默认值,每个环境都会生成新的指纹种子。未知字段会被拒绝。

创建一个环境

curl -X POST "$PRISM_API/v1/profiles" \
  -H "Authorization: Bearer $PRISM_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: shop-b-001" \
  -d '{
    "name": "Shop B",
    "group": "Project A",
    "tags": ["automation"],
    "startUrls": ["https://example.com/"],
    "proxy": { "protocol": "socks5", "host": "203.0.113.10", "port": 1080, "username": "user", "password": "pass" }
  }'

成功后返回新环境:

{
  "result": {
    "id": "3b1f7a52-9c4e-4d2b-8f60-1a2b3c4d5e6f",
    "serialNumber": 13,
    "name": "Shop B",
    "group": "Project A",
    "tags": ["automation"],
    "status": "closed"
  }
}

批量创建

POST /v1/profiles/batch 的请求体是 profiles 数组,一次 1–50 个;每个元素的写法与单个创建相同,只是 requestKey 要写在顶层或请求头中。Prism 先校验全部配置,任何一个有误都不会创建,错误信息会指出是哪个环境的哪个字段(profiles[1] 表示第二个,从 0 开始计数)。结果按输入顺序返回:

{
  "requestKey": "shops-batch-001",
  "profiles": [
    { "name": "Shop C", "group": "Project A" },
    { "name": "Shop D", "group": "Project A", "fingerprint": { "platform": "windows" } }
  ]
}
{
  "result": {
    "profiles": [
      { "id": "…", "serialNumber": 14, "name": "Shop C", "group": "Project A", "tags": [], "status": "closed" },
      { "id": "…", "serialNumber": 15, "name": "Shop D", "group": "Project A", "tags": [], "status": "closed" }
    ],
    "count": 2
  }
}

环境字段

创建环境的字段
字段说明省略时
name名称,1–60 个字符“API”加数字,例如 API 8:数字为当前环境数量加 1,批量时依次递增,可能与已有名称重复
group分组,最多 40 个字符不分组
tags标签数组,最多 20 个,每个最多 30 个字符无
note备注,最多 500 个字符无
color标记颜色,#RRGGBB按顺序轮换
startUrls启动页数组,最多 50 个;只支持 http / https,不能包含账号密码,没写协议时按 https 处理Prism 官网
proxy代理,见下表直连
fingerprint指纹选项,见下表与界面新建相同
extensionIds已安装扩展的 Prism 内部 ID,最多 50 个。在“浏览器扩展”窗口中,扩展路径 …/<ID>/extension 里的文件夹名就是这个 ID,它不是 Chrome 应用商店的扩展 ID不启用扩展
kernelVersion固定使用某个内核版本,四段数字,例如 144.0.7559.132;启动时需要已安装该版本跟随默认内核
requestKey请求标识,用于安全重试,见“重试与去重”无

代理字段

代理字段(proxy)
字段说明
protocol必填:direct、http、https 或 socks5
host主机名或 IP,不含协议、端口和账号;不是 direct 时必填
port1–65535 的整数;不是 direct 时必填
username、password可选。密码加密保存在这台电脑上,任何接口都不会返回

指纹字段

指纹字段(fingerprint)
字段说明省略时
platformmacos 或 windows跟随硬件模板;没有指定模板时为这台电脑的系统
hardwareProfileId硬件模板,见下表。系统版本、CPU 核心数和屏幕尺寸由模板决定对应系统的“种子独立”模板
seed指纹种子,0–4294967295 的整数;种子和其他指纹设置都相同时,得到相同的指纹随机生成
brandChrome 或 EdgeChrome
brandVersion浏览器版本号。一般留空,使用内核版本;填写时主版本必须与启动所用内核一致,否则无法启动跟随内核
language界面语言,例如 en-US这台电脑的系统语言
acceptLanguagesAccept-Language 请求头按语言自动生成
timezoneIANA 时区,例如 America/New_York这台电脑的时区
networkIdentityModeproxy:启动前检测代理出口,时区和地理位置跟随出口,能识别出口国家时语言也跟随;manual:固定使用填写的值proxy
proxyExitPolicy代理出口 IP 与上次检测不同时:block 让这次启动失败,再次启动即视为确认,所以脚本不要自动重试这个错误;warn 只提示block
webrtcPolicyproxy_only 防泄漏;public_only 仅公网接口;default 系统默认proxy_only

硬件模板

硬件模板 ID
ID系统说明
macos-seeded-applemacOS种子独立的 Apple GPU,适合多环境;macOS 默认
macos-hostmacOS本机硬件,只能在 Mac 上使用
macos-m1macOSApple M1 · 8GB
macos-m3-promacOSApple M3 Pro · 18GB
macos-m4-promacOSApple M4 Pro · 24GB
windows-seeded-nvidiaWindows种子独立的 NVIDIA GPU,适合多环境;Windows 默认
windows-hostWindows本机硬件,只能在 Windows 电脑上使用
windows-10-rtx3060WindowsWindows 10 · RTX 3060 · 16GB
windows-11-rtx4060WindowsWindows 11 · RTX 4060 · 16GB
windows-11-rtx4070WindowsWindows 11 · RTX 4070 · 32GB

模板与 platform 不一致时请求会被拒绝。窗口位置与大小、Cookie、扩展数据等无法通过 API 设置,创建后可以在 Prism 界面中修改。

重试与去重

网络中断或请求超时时,你可能不知道环境是否已经创建。为每次创建提供一个请求标识,重试就不会重复创建:

  • 在请求头 Idempotency-Key 或请求体 requestKey 中提供 8–128 个字符的标识,可用英文字母、数字和 . _ : -。两处都填时必须相同。
  • 24 小时内用相同的标识和相同的内容重试,返回第一次创建的环境(HTTP 200),Prism 重启后依然有效。
  • 标识相同但内容不同时返回 409 IDEMPOTENCY_CONFLICT。第一次创建的环境已被删除(包括移入回收站)时返回 409 IDEMPOTENCY_RESULT_GONE,不会悄悄重建;需要重新创建时请换一个标识。
  • 超过 24 小时后,同一个标识视为新请求。
  • 24 小时内最多保留 1000 个带标识的请求,这个上限与 MCP 创建共用(MCP 每次创建都会占用一个),达到上限时返回 429 IDEMPOTENCY_CAPACITY,旧记录过期后恢复。
  • 标识和请求内容只以加密摘要保存在这台电脑上,不保存代理密码原文。

建议用业务数据生成标识,例如表格行号或订单号:shop-b-001。

错误处理

请求在入口被拒绝时(见“请求规则”),error 是一个字符串,例如 {"error":"unauthorized"}。Prism 处理请求时出错,error 是一个对象:

{
  "error": {
    "code": "INVALID_PROFILE_INPUT",
    "message": "Invalid profile creation request; see details",
    "retryable": false,
    "details": [
      { "path": "profiles[1].proxy.port", "message": "Too big: expected number to be <=65535" }
    ]
  }
}

程序请根据 HTTP 状态和 code 判断;message 是给人看的说明,部分为中文,措辞可能随版本调整。retryable 为 true 时可以稍后原样重试。details 只出现在创建参数错误中,最多 20 项,不会回显提交的值。

HTTP 状态与错误码
HTTP错误含义建议处理
400INVALID_PROFILE_INPUT创建参数有误,details 列出字段和原因按 details 修正后重新提交
400query_not_allowed、body_not_allowed、json_body_required、invalid_json_body请求格式不符合规则对照“请求规则”修正
401unauthorized令牌错误或已失效在 Prism 中重新启动 API,使用新令牌
403invalid_host、browser_origin_not_allowed地址或请求来源不被接受使用 127.0.0.1,从脚本而不是网页中调用
403PRO_REQUIREDPro 授权已失效,或固定内核需要 Pro续期或重新激活 Pro
404not_found路径或方法不存在核对“接口一览”
404PROFILE_NOT_FOUND环境不存在或已移入回收站重新获取环境列表
409IDEMPOTENCY_CONFLICT、IDEMPOTENCY_RESULT_GONE请求标识冲突,或原来创建的环境已删除换一个请求标识
413request_too_large请求体超过 96 KiB分成多个批次
429rate_limited、IDEMPOTENCY_CAPACITY请求太频繁,或 24 小时内的请求标识达到 1000 个稍后再试
502MCP_REQUEST_FAILED 等其他执行失败,例如内核缺失、代理检测未通过、有遗留进程根据 message 处理
504BROKER_TIMEOUTPrism 60 秒内没有答复,操作可能仍在进行先查询状态;创建请求用同一个标识重试

MCP_REQUEST_FAILED 是 Prism 内部沿用的通用错误名,本地 API 也使用它。

代码示例

把示例中的地址和令牌换成 Prism 窗口中显示的值。示例会创建环境,并启动、关闭新建的环境。

Python

需要 requests(pip install requests):

import requests

API = "http://127.0.0.1:43123"   # the API address shown in Prism
TOKEN = "<token>"                # the token shown in Prism

session = requests.Session()
session.headers["Authorization"] = f"Bearer {TOKEN}"

def call(method, path, **kwargs):
    response = session.request(method, API + path, timeout=70, **kwargs)
    body = response.json()
    if not response.ok:
        raise RuntimeError(f"{response.status_code}: {body['error']}")
    return body.get("result", body)

created = call("POST", "/v1/profiles/batch",
               headers={"Idempotency-Key": "shops-batch-002"},
               json={"profiles": [{"name": "Shop C"}, {"name": "Shop D"}]})
for profile in created["profiles"]:
    print("created", profile["serialNumber"], profile["id"])

profiles = call("GET", "/v1/profiles")
for profile in profiles:
    print(profile["serialNumber"], profile["name"], profile["status"])

first = created["profiles"][0]["id"]
print(call("POST", f"/v1/profiles/{first}/start")["status"])   # running
print(call("POST", f"/v1/profiles/{first}/close")["status"])   # closed

Node.js

Node.js 18 起自带 fetch,无需安装依赖:

// prism.mjs — run with: node prism.mjs (Node.js 18 or later)
const API = 'http://127.0.0.1:43123' // the API address shown in Prism
const TOKEN = '<token>'              // the token shown in Prism

async function call(method, path, body, headers = {}) {
  const response = await fetch(API + path, {
    method,
    headers: { Authorization: `Bearer ${TOKEN}`, ...(body ? { 'Content-Type': 'application/json' } : {}), ...headers },
    body: body ? JSON.stringify(body) : undefined,
    signal: AbortSignal.timeout(70_000),
  })
  const data = await response.json()
  if (!response.ok) throw new Error(`${response.status}: ${JSON.stringify(data.error)}`)
  return data.result ?? data
}

const profile = await call('POST', '/v1/profiles', {
  name: 'Shop E',
  fingerprint: { language: 'en-US', timezone: 'America/New_York', networkIdentityMode: 'manual' },
}, { 'Idempotency-Key': 'shop-e-001' })
console.log('created', profile.serialNumber, profile.id)

console.log((await call('POST', `/v1/profiles/${profile.id}/start`)).status) // running
console.log((await call('POST', `/v1/profiles/${profile.id}/close`)).status) // closed

与 MCP 的关系

本地 API 面向你自己写的脚本;AI 客户端请通过 MCP 连接 Prism。MCP 使用独立的令牌和权限,只有在“本地 AI · MCP”中允许的环境对 AI 可见,AI 不能调用本地 API。两者共用同一个本地服务和每 60 秒 120 个请求的额度;停止 MCP 或紧急停止 MCP 时,本地 API 也会停止。

AI 也可以用 MCP 工具 prism_create_profile 和 prism_create_profiles 创建环境,参数与本页相同。这需要你在“本地 AI · MCP”中打开“允许 AI 创建环境”(默认关闭);新环境能否被 AI 控制,取决于你设置的环境授权方式。MCP 与本地 API 的请求标识分开计算,但共用 24 小时内 1000 个的记录上限。

安全建议

  • 令牌相当于这台电脑上管理环境的钥匙:不要写进代码仓库、日志或聊天记录。怀疑泄露时停止并重新启动 API,旧令牌立即失效。
  • API 只监听 127.0.0.1,局域网和互联网上的其他设备无法直接访问。Host 校验主要用来挡住浏览器和误用,不能代替访问控制;不要用端口转发或反向代理把它暴露出去。
  • 这台电脑上的其他程序拿到令牌后同样可以调用 API。只在可信的电脑上启用,用完点击“停止 API”。
  • “自动化 API”窗口中的“紧急停止”会停止 API,并关闭本次通过 API 启动、仍在运行的环境。
  • Prism 执行的每个请求都会写入本机审计日志 vault/logs/automation-audit.jsonl(在 Prism 数据目录中),记录时间、动作、结果、请求 ID、环境 ID 和失败原因,不记录令牌、请求内容和网页内容。被请求规则拒绝的请求和 GET /v1/status 不会记录。

常见问题

可以在网页或浏览器扩展里调用吗?
不可以。浏览器发出的请求会带 Origin 请求头,API 会拒绝。请在终端、脚本或本地程序中调用。
为什么用 localhost 会返回 403?
API 要求 Host 请求头与 API 地址中的 127.0.0.1 和端口完全一致,localhost 会被拒绝。请把地址中的主机名写成 127.0.0.1。
“自动化 API”窗口显示运行中,却没有令牌怎么办?
开启 MCP 后,Prism 会自动启动 API 与 MCP 共用的本地服务,此时窗口只显示地址。令牌只在点击“启动本地 API”成功时显示一次:先点击“停止 API”,再点击“启动本地 API”,即可得到新令牌。停止期间 MCP 连接也会中断。
重启 Prism 后还能用原来的令牌吗?
不能。每次启动 API 都会生成新的端口和令牌;停止 API 或退出 Prism 后,旧令牌失效。
能用 API 修改或删除环境吗?
不能。API 可以创建、查询、启动和关闭环境;修改配置和删除请在 Prism 界面中操作。
能连接 Puppeteer、Playwright 或 Selenium 吗?
不能。API 不提供调试端口或 WebDriver 地址。需要页面级操作时,可以通过 MCP 让 AI 客户端完成。
可以一次启动很多环境吗?
可以逐个调用启动接口。Prism 依次处理请求,一个环境启动完成后再处理下一个;同时运行的数量取决于电脑的内存和 CPU。
Windows 也能用吗?
可以。macOS 与 Windows 版 Prism Pro 都提供本地 API,接口相同。在 Windows PowerShell 中请使用 curl.exe 或 Invoke-RestMethod。