API 参考
AY-Robots 的 REST API 位于 https://www.ay-robots.com/api 之下,双向都使用 JSON 进行通信。本页记录了身份验证方式、响应约定,以及每一个接口,并为您最可能以编程方式调用的路由提供完整的参数文档。
最后更新 2026-08-09
身份验证
除非在“公开”部分中列出,否则每个接口都需要身份验证。API 接受两种凭据形式,两者的传递方式相同:既可以作为仪表盘本身已经发送的会话 cookie,也可以作为带有 Bearer 令牌的 Authorization 请求头。
| 方式 | 工作原理 | 适用场景 |
|---|---|---|
| 浏览器会话 | 您已登录账户的 Supabase 会话令牌,以 cookie 或 Bearer 令牌的形式发送 | 仪表盘本身,以及在已认证的浏览器环境中进行的快速实验 |
| API 密钥 | 带有 ayr_live_ 前缀的密钥,在 /dashboard/settings 中创建,以 Bearer 令牌形式发送 | 脚本、服务器、CI,以及任何不能依赖浏览器登录的场景 |
| MCP | 位于 https://www.ay-robots.com/api/mcp 的托管 MCP 服务器(Streamable HTTP) | 使用 Model Context Protocol 的 LLM 代理和工具 |
curl https://www.ay-robots.com/api/sessions \
-H 'Authorization: Bearer ayr_live_your_key_here'API 密钥在 /dashboard/settings 中创建和撤销。请像对待密码一样对待它们:将其保存在服务端,轮换时先创建替换密钥,再撤销旧密钥。如果您使用桌面 CLI,还可以通过命令 ay-robots mcp 将平台暴露为本地 MCP 服务器。
响应均为 JSON 格式。错误采用统一的结构:一个 JSON 对象,包含一个 error 字段,内容为人类可读的信息,并配以相应的 4xx 或 5xx 状态码。成功的响应会直接返回资源;少数接口会将列表包装在一个具名字段中,下方的示例会在相关之处展示这一点。
身份验证接口
账户和个人资料相关的基础接口。它们主要供仪表盘本身使用,但任何有效凭据都可以调用它们。
/api/auth/profileBearer 会话令牌或 API 密钥返回已认证用户的个人资料。
/api/auth/profileBearer 会话令牌或 API 密钥更新个人资料字段,例如显示名称和通知偏好设置。
/api/auth/syncBearer 会话令牌将 Supabase 身份验证用户与平台用户记录进行同步。
/api/auth/check-onboardingBearer 会话令牌报告已认证用户是否已完成入驻流程。
/api/auth/avatarBearer 会话令牌为已认证用户上传新的头像图片。
客户接口
机器人所有者需要管理的一切:已注册的机器人、客户个人资料、数据集、发票,以及仪表盘统计数据。
/api/client/robotsBearer 会话令牌或 API 密钥(客户角色)列出已认证客户注册的机器人,按最新排序,最多 50 条。时间戳采用 ISO 8601 格式;在机器人首次连接之前,last_online 和 last_heartbeat 均为 null。
curl https://www.ay-robots.com/api/client/robots \
-H 'Authorization: Bearer ayr_live_your_key_here'[
{
"id": "1f9f4c1e-7f2a-4b7e-9a45-0f4d2b6c8a11",
"name": "Lab SO-100",
"robot_type": "SO-100",
"status": "AVAILABLE",
"control_url": "wss://robots.example.com/so100/control",
"stream_url": "https://robots.example.com/so100/stream",
"hardware_id": "board:local:usb-1",
"last_online": "2026-08-09T10:12:00.000Z",
"last_heartbeat": "2026-08-09T10:12:00.000Z",
"total_hours": 12.5,
"tags": ["lab"],
"notes": null,
"created_at": "2026-07-01T09:00:00.000Z"
}
]/api/client/robotsBearer 会话令牌或 API 密钥(客户角色)注册一台新机器人并返回其 id。一个电机板硬件 id 只能属于一台机器人,发生冲突时会以状态码 409 拒绝。
/api/client/profileBearer 会话令牌或 API 密钥(客户角色)返回已认证用户的客户个人资料。
/api/client/profileBearer 会话令牌或 API 密钥(客户角色)更新客户个人资料字段。
/api/client/datasetsBearer 会话令牌或 API 密钥(客户角色)列出该客户的云端数据集,包含回合数和文件大小。
/api/client/invoicesBearer 会话令牌或 API 密钥(客户角色)列出该客户的月度发票。
/api/client/statsBearer 会话令牌或 API 密钥(客户角色)返回客户仪表盘的使用统计数据。
操作员接口
操作员一侧的接口:个人资料与可用状态、认证、排班,以及收益统计数据。
/api/operator/profileBearer 会话令牌或 API 密钥(操作员角色)返回已认证用户的操作员个人资料。
/api/operator/profileBearer 会话令牌或 API 密钥(操作员角色)创建或更新操作员个人资料。
/api/operator/available-robotsBearer 会话令牌或 API 密钥(操作员角色)列出当前可用且与该操作员认证相匹配的机器人。
/api/operator/certificationsBearer 会话令牌或 API 密钥(操作员角色)列出该操作员的认证申请及其状态。
/api/operator/certificationsBearer 会话令牌或 API 密钥(操作员角色)为某个机器人型号申请认证。
/api/operator/scheduleBearer 会话令牌或 API 密钥(操作员角色)返回该操作员的每周可用时间安排。
/api/operator/scheduleBearer 会话令牌或 API 密钥(操作员角色)更新每周可用时间安排。
/api/operator/availabilityBearer 会话令牌或 API 密钥(操作员角色)返回该操作员当前的可用状态。
/api/operator/statsBearer 会话令牌或 API 密钥(操作员角色)返回操作员仪表盘的收益和会话统计数据。
会话
会话是平台的核心资源:一个会话代表操作员与机器人之间一次连续的遥操作过程。会话状态会依次经过 PENDING、ACTIVE、PAUSED、COMPLETED 和 CANCELLED。
/api/sessionsBearer 会话令牌或 API 密钥列出已认证用户的会话。操作员看到的是自己操作过的会话,客户看到的是自己机器人上发生的会话。两种视图的字段集略有不同:客户视图包含 episodes_collected 和 data_collected_mb,操作员视图包含 operator_earnings_cents。
| Name | In | Type | Description |
|---|---|---|---|
| status | query | string | 可选。按会话状态筛选,例如 ACTIVE 或 COMPLETED。省略则列出全部。 |
| limit | query | number | 可选。分页大小,默认 50,最大 100。 |
| offset | query | number | 可选。分页偏移量,默认 0。 |
curl 'https://www.ay-robots.com/api/sessions?status=COMPLETED&limit=10' \
-H 'Authorization: Bearer ayr_live_your_key_here'{
"sessions": [
{
"id": "6b0d2c9a-53f1-4f6e-8f1a-2c9d4e7b5a30",
"status": "COMPLETED",
"started_at": "2026-08-08T14:00:12.000Z",
"ended_at": "2026-08-08T14:47:31.000Z",
"duration_minutes": 47,
"client_charge_cents": 1175,
"episodes_collected": 23,
"data_collected_mb": 210.4,
"rating": 5,
"created_at": "2026-08-08T13:59:58.000Z",
"robot_id": "1f9f4c1e-7f2a-4b7e-9a45-0f4d2b6c8a11",
"robot_name": "Lab SO-100",
"robot_type": "SO-100",
"operator_name": "Jane D."
}
]
}/api/sessionsBearer 会话令牌或 API 密钥(操作员角色)在一台可用的机器人上启动一次遥操作会话。需要操作员角色:客户无法启动会话。一名操作员同一时间最多只能持有一个 ACTIVE 或 PAUSED 会话,且该机器人当前状态必须为 AVAILABLE。立即启动时,机器人会切换为 IN_SESSION,并通知客户。
| Name | In | Type | Description |
|---|---|---|---|
| robotId | body | string | 必需。要操作的机器人 id。该机器人必须处于 AVAILABLE 状态。 |
| operatorId | body | string | 可选。显式指定操作员 id,默认为已认证的操作员。 |
| scheduledFor | body | string (ISO 8601) | 可选。将会话安排在未来某个时间,而不是立即启动。 |
curl -X POST https://www.ay-robots.com/api/sessions \
-H 'Authorization: Bearer ayr_live_your_key_here' \
-H 'Content-Type: application/json' \
-d '{"robotId": "1f9f4c1e-7f2a-4b7e-9a45-0f4d2b6c8a11"}'{
"sessionId": "6b0d2c9a-53f1-4f6e-8f1a-2c9d4e7b5a30",
"status": "ACTIVE"
}/api/sessions/[id]Bearer 会话令牌或 API 密钥返回单个会话及其详细信息。
/api/sessions/[id]Bearer 会话令牌或 API 密钥更新会话生命周期:暂停、恢复、结束及相关操作。
/api/sessions/[id]/extendBearer 会话令牌或 API 密钥(客户,会话所有者)申请延长会话。只有拥有该会话的客户可以调用此接口,且会话必须处于 ACTIVE 状态。该请求会作为一条会话事件被记录,操作员会收到通知,延长操作本身在操作员响应后才会生效。
| Name | In | Type | Description |
|---|---|---|---|
| id | path | string | 会话 id。 |
| additionalMinutes | body | number | 申请延长的时长,以分钟为单位。 |
curl -X POST https://www.ay-robots.com/api/sessions/6b0d2c9a-53f1-4f6e-8f1a-2c9d4e7b5a30/extend \
-H 'Authorization: Bearer ayr_live_your_key_here' \
-H 'Content-Type: application/json' \
-d '{"additionalMinutes": 30}'{
"message": "Extension request sent to operator"
}/api/sessions/[id]/messagesBearer 会话令牌或 API 密钥列出某个会话的聊天消息。
/api/sessions/[id]/messagesBearer 会话令牌或 API 密钥在会话中发送一条聊天消息。
/api/sessions/[id]/rateBearer 会话令牌或 API 密钥(客户)为一次已完成的会话打分,评分范围为 1 到 5 星,可附带可选的评论。
/api/sessions/exportBearer 会话令牌或 API 密钥导出会话数据。
支付
所有资金流转都通过 Stripe 进行。客户账单使用带有已保存支付方式的 Stripe 客户对象;操作员收益结算使用 Stripe Connect。平台本身从不存储银行卡或银行账户数据。
/api/stripe/customerBearer 会话令牌(客户角色)创建或返回用于客户账单的 Stripe 客户对象。
/api/stripe/connectBearer 会话令牌(操作员角色)返回该操作员 Stripe Connect 账户的状态。
/api/stripe/connectBearer 会话令牌(操作员角色)启动用于操作员收益结算的 Stripe Connect 入驻流程。
/api/stripe/setup-intentBearer 会话令牌(客户角色)创建一个用于保存支付方式的 Stripe SetupIntent。
/api/stripe/portalBearer 会话令牌(客户角色)创建一个 Stripe 账单门户会话,用于管理支付方式和发票。
/api/stripe/payoutBearer 会话令牌(操作员角色)返回已认证操作员的收益结算信息。
/api/stripe/payoutBearer 会话令牌(操作员角色)申请提取已累积的收益。最低收益结算金额为 10.00 EUR。
/api/stripe/webhookStripe Webhook 签名接收 Stripe 的 Webhook 事件。由 Stripe 调用,而非由 API 客户端调用。
公开接口
这些接口不需要身份验证。可以安全地从监控系统、营销页面或状态探测中调用它们。
/api/healthAPI 及其数据库连接的健康检查。两者均正常时返回 200;如果数据库检查失败,会以相同的结构返回,status 和 db 设为 error,HTTP 状态码为 503。
curl https://www.ay-robots.com/api/health{
"status": "ok",
"db": "ok",
"timestamp": "2026-08-09T10:12:00.000Z"
}/api/robots/[id]返回某个受支持机器人型号的公开信息。
/api/public/pricing返回当前的公开定价套餐。
/api/contact提交一条联系表单消息。消息会先被存储,然后通过邮件送达,因此临时的邮件故障不会导致消息丢失:在这种情况下,响应会报告 stored 为 true、delivered 为 false,送达会在运维层面重试。
| Name | In | Type | Description |
|---|---|---|---|
| name | body | string | 必需。您的姓名。 |
| body | string | 必需。用于回复的有效邮箱地址。 | |
| category | body | string | 必需。取值为以下之一:General Inquiry、Bug Report、Feature Request、Sales & Pricing、Partnership、Career/Jobs、Technical Support、Billing & Payments、Press & Media、Other。 |
| subject | body | string | 必需。简短的主题行。 |
| message | body | string | 必需。消息正文。 |
curl -X POST https://www.ay-robots.com/api/contact \
-H 'Content-Type: application/json' \
-d '{
"name": "Jane Doe",
"email": "jane@example.com",
"category": "Technical Support",
"subject": "SO-100 pairing question",
"message": "My arm shows as offline after pairing."
}'{
"success": true,
"message": "Message sent successfully",
"id": "b1f2c3d4-0000-0000-0000-000000000000",
"stored": true,
"delivered": true
}/api/robot-request为平台尚不支持的机器人型号申请支持。
/api/stats返回平台的公开统计数据。