API 参考

OAuth API

OAuth 登录、令牌和撤销

HTTP 参考。 由后端契约生成。浏览以下端点或下载 OpenAPI。

此分组有 10 个操作,由 api/openapi.yaml 生成。可按路径、操作或认证筛选。每个端点都会列出其输入;展开后可查看请求模板和响应代码。模板需要您自己的值和符合架构的请求体。

用你的值替换大写占位符。对于JSON请求,请保存符合request.json模式的请求体。Cookie示例使用经过身份验证会话的本地Cookie存储。

OAuth 登录、令牌和撤销

POST/oauth/token

Oauth 令牌

代理 JWT 的 OAuth 2.0 令牌端点(RFC 6749 §3.2)。grant_type refresh_token 轮换不透明刷新凭证(RFC 9700):每次使用返回一对新凭证;request_id(16 到 200 字符)使得在凭证和授权仍有效且后继仍是当前时,完全重试返回相同响应,无需超时重试。

任何对已废止刷新令牌的其他重用都会撤销整个系列(invalid_grant)。被移除的选定成员或项目返回invalid_scope,error_description以"project_selection_inactive:"开头;刷新凭证不被消耗。

通过 GET /api/projects 发现实时成员资格,将其与先前同意的选择交集,并使用 projects= 和新的 request_id 重试。永远不要因此选择错误结束刷新系列。

请求的权限范围缩小独立适用于每个项目和身份权限;明确指定范围但无身份则排除身份权限。grant_type urn:ietf:params:oauth:grant-type:token-exchange(RFC 8693)且 subject_token_type 为 urn:screenrig:token-type:identity-credential 或 urn:screenrig:token-type:project-token 时,返回 unsupported_token_type:旧凭证已废弃,安装程序需使用 screenrig login 重新登录。resource(RFC 8707)为 https://api.<domain>/api 或无;projects 选择最多 64 个已同意的项目 ID。

省略仅在集合适合时选择全部;否则客户端必须选择子集。project_id 在兼容性发布期间选择一个。连接应用的授权仅含单一资源 https://api.<domain>/mcp,刷新时可能省略。

客户端分为公开客户端(仅 client_id)或连接应用,其元数据声明 private_key_jwt 通过 client_assertion_type urn:ietf:params:oauth:client-assertion-type:jwt-bearer 和 client_assertion(iss 和 sub 为其 client_id,aud 为发行者或此端点的字符串,exp 在 iat 后 5 分钟内,jti 唯一使用,kid 指定其密钥之一;支持 EdDSA、ES256 或 RS256)进行认证。grant_type authorization_code 在 60 秒内使用精确 redirect_uri 和 PKCE code_verifier 兑换连接应用的代码;resource 必须为空或授权的那个;第二次兑换会撤销该代码创建的授权。grant_type client_credentials 是服务客户端:通过客户端断言(其注册密钥之一)或 HTTP Basic(client_secret_basic;请求体中的密钥被拒绝)认证,获得 15 分钟的服务令牌,适用于其项目、受众 api 或(资源 https://api.<domain>/mcp)mcp,权限在其能力和访问级别内,无刷新令牌;每客户端每小时限 600 次。

错误为 RFC 6749 JSON {error, error_description},带 Cache-Control no-store;服务器未发出时返回 temporarily_unavailable (503)。

速率限制返回 429 rate_limited,带 Retry-After:本端点及撤销端点每客户端地址每小时 1200 次,每授权每小时 60 次刷新,每旧凭证每小时 30 次交换。grant_type urn:ietf:params:oauth:grant-type:device_code(RFC 8628 §3.4)轮询设备登录:等待授权时返回 authorization_pending,轮询过快返回 slow_down(间隔增加 5 秒),拒绝时返回 access_denied,10 分钟后返回 expired_token,然后返回令牌响应。

新安装接收一对令牌;使用现有安装的访问令牌启动的登录将批准项目添加到该授权,并仅接收访问令牌,不旋转刷新令牌。再次轮询相同 device_code 返回相同响应,直到授权首次旋转或 10 分钟后返回 invalid_grant。

仅限 POST,表单编码,无查询字符串。

身份验证
无
请求主体
object
操作 ID
oauthToken

请求主体字段

字段描述
grant_type(必填,字符串)允许:“authorization_code”、“client_credentials”、“refresh_token”、“urn:ietf:params:oauth:grant-type:token-exchange”、“urn:ietf:params:oauth:grant-type:device_code”
client_id(可选,字符串)
client_assertion_type(可选,字符串)允许值:“urn:ietf:params:oauth:client-assertion-type:jwt-bearer”
client_assertion(可选,字符串)
code(可选,字符串)
redirect_uri(可选,字符串)
code_verifier(可选,字符串)minLength:43 maxLength:128
refresh_token(可选,字符串)
device_code(可选,字符串)
request_id(可选,字符串)minLength:16 maxLength:200
subject_token(可选,字符串)
subject_token_type(可选,字符串)允许值:“urn:screenrig:token-type:identity-credential”、“urn:screenrig:token-type:project-token”
scope(可选,字符串)
资源(可选,字符串)格式:“uri”
projects(可选,字符串)以空格或逗号分隔的项目 ID;省略则表示所有已同意的项目,最多到配置上限(默认 64)。不能与 project_id 一起使用。
project_id(可选,字符串)
请求模板和响应
shell · 请求模板
curl --request POST --header 'Content-Type: application/x-www-form-urlencoded' --data-binary '@request.bin' 'https://api.screenrig.ai/oauth/token'

响应

状态含义正文和头部
200令牌响应(RFC 6749 §5.1)。OAuthTokenResponse(application/json)
默认RFC 6749 §5.2 错误。OAuthError(application/json)
POST/oauth/device_authorization

Oauth 设备授权

RFC 8628 §3.1 设备授权针对 `screenrig login`。scope 为 access:manage(默认)、access:propose 或 access:read;project_id 建议用户批准的项目;name、agent_type、platform 和 version 描述安装,由设备报告并显示给审批者;install_source(可选)说明其安装来源,并保存在批准所创建的智能体上。

无 Authorization 时启动新安装。使用 Authorization: Bearer 和带有身份范围的智能体访问令牌请求将项目添加到该安装的授权,或将只读项目提升为管理权限。

该人员在 verification_uri(或访问 verification_uri_complete)输入 user_code 并在仪表板批准;设备每隔若干秒使用 device_code 轮询令牌端点。

速率限制返回 429 rate_limited,带 Retry-After:每客户端地址每小时 10 次,每小时全局 600 次,端点后为每地址每小时 1200 次。错误为 RFC 6749 JSON,带 Cache-Control no-store;服务器未发出时返回 temporarily_unavailable(503)。仅支持 POST,表单编码,无查询字符串。

身份验证
无
请求主体
object
操作 ID
oauthDeviceAuthorization

请求主体字段

字段描述
client_id(必填,字符串)
scope(可选,字符串)允许:“access:manage”、“access:propose”、“access:read”
project_id(可选,字符串)maxLength:200
名称(可选,字符串)maxLength:80
agent_type(可选,字符串)maxLength:32
平台(可选,字符串)maxLength:80
version(可选,字符串)maxLength:40
install_source(可选,字符串)

可选,集成的安装来源:主机,以及斜杠之后的市场(claude/screenrig, codex/screenrig, grok/screenrig),或单独的主机,例如 npm。缺失或格式错误的值会被忽略,且绝不会导致请求失败。pattern: "^[a-z][a-z0-9-]{0,31}(/[a-z0-9][a-z0-9._-]{0,63})?$"

请求模板和响应
shell · 请求模板
curl --request POST --header 'Content-Type: application/x-www-form-urlencoded' --data-binary '@request.bin' 'https://api.screenrig.ai/oauth/device_authorization'

响应

状态含义正文和头部
200设备授权响应(RFC 8628 §3.2)。对象(application/json)
默认RFC 6749 §5.2 错误。OAuthError(application/json)
GET/oauth/authorize

Oauth 授权

连接应用的 OAuth 2.0 授权端点(MCP 客户端)。client_id 是客户端 ID 元数据文档 URL(https,端口 443,无重定向,最大 64 KiB 和 5 秒,仅限公共地址)或注册的客户端 ID。

请求按以下顺序验证:客户端、精确的 redirect_uri(指向 127.0.0.1、[::1] 或 localhost 的 http 回环重定向在任意端口都匹配)、response_type code、带 code_challenge_method S256 的 code_challenge、resource(https://api.<domain>/mcp、受保护资源元数据指明此服务器的其他 MCP 资源,或省略),然后是 scope(access:read(默认)、access:propose、access:manage 和能力名称)。

未知客户端或redirect_uri返回HTML错误页面且不重定向;之后的错误会重定向到redirect_uri,带有error、error_description、state和iss(RFC 9207)。

成功响应 303 到仪表板同意页面,用户选择项目、访问级别(默认只读,提议或管理)和权限;批准后重定向带有代码、状态和发行者。每个客户端地址每分钟限 30 次请求。

身份验证
无
请求主体
无
操作 ID
oauthAuthorize

参数

名称发送必需?描述
client_id查询必填
redirect_uri查询必填
response_type查询必填
code_challenge查询必填
code_challenge_method查询必填
状态查询可选
资源查询可选
scope查询可选
请求模板和响应
shell · 请求模板
curl --request GET 'https://api.screenrig.ai/oauth/authorize?client_id=CLIENT_ID&redirect_uri=REDIRECT_URI&response_type=RESPONSE_TYPE&code_challenge=CODE_CHALLENGE&code_challenge_method=CODE_CHALLENGE_METHOD'

响应

状态含义正文和头部
303到同意页面,或带错误、状态和 iss 返回客户端的 redirect_uri。无正文
400未知客户端或 redirect_uri 的 HTML 错误页;绝不重定向。字符串(text/html)
429该地址授权请求过多。无正文
POST/oauth/revoke

Oauth 撤销

RFC 7009 撤销。向客户端发放的不透明刷新凭证(或先前版本的刷新 JWT)或代理访问 JWT,撤销其授权;授权的访问令牌将在数秒内被拒绝。未知、过期或外来令牌也返回 200。仅支持 POST,表单编码。

身份验证
无
请求主体
object
操作 ID
oauthRevoke

请求主体字段

字段描述
client_id(可选,字符串)
client_assertion_type(可选,字符串)允许值:“urn:ietf:params:oauth:client-assertion-type:jwt-bearer”
client_assertion(可选,字符串)
令牌(必填,字符串)
token_type_hint(可选,字符串)
请求模板和响应
shell · 请求模板
curl --request POST --header 'Content-Type: application/x-www-form-urlencoded' --data-binary '@request.bin' 'https://api.screenrig.ai/oauth/revoke'

响应

状态含义正文和头部
200已撤销,或无可撤销内容。无正文
默认RFC 6749 §5.2 错误。OAuthError(application/json)
GET/.well-known/oauth-authorization-server

Oauth 授权服务器元数据

RFC 8414 代理授权服务器的授权服务器元数据。

身份验证
无
请求主体
无
操作 ID
oauthAuthorizationServerMetadata
请求模板和响应
shell · 请求模板
curl --request GET 'https://api.screenrig.ai/.well-known/oauth-authorization-server'

响应

状态含义正文和头部
200元数据文档。对象(application/json)
GET/.well-known/oauth-protected-resource/mcp

Oauth 受保护资源 MCP

RFC 9728 /mcp 的受保护资源元数据,由每个 /mcp 401 的 resource_metadata 命名。

身份验证
无
请求主体
无
操作 ID
oauthProtectedResourceMCP
请求模板和响应
shell · 请求模板
curl --request GET 'https://api.screenrig.ai/.well-known/oauth-protected-resource/mcp'

响应

状态含义正文和头部
200元数据文档。对象(application/json)
GET/.well-known/oauth-protected-resource/api

Oauth 受保护资源 API

RFC 9728 /api 的受保护资源元数据。

身份验证
无
请求主体
无
操作 ID
oauthProtectedResourceAPI
请求模板和响应
shell · 请求模板
curl --request GET 'https://api.screenrig.ai/.well-known/oauth-protected-resource/api'

响应

状态含义正文和头部
200元数据文档。对象(application/json)
GET/api/oauth/authorizations/{id}

获取仪表板 OAuth 授权

待处理的连接应用授权,用于同意页面:客户端名称和域名按其元数据声明(不获取徽标),是否为注册客户端,重定向主机,以及请求的访问级别和功能。未知、过期或已处理的授权返回 not_found。

身份验证
dashboardSession
请求主体
无
操作 ID
getDashboardOAuthAuthorization

参数

名称发送必需?描述
id路径必填
请求模板和响应
shell · 请求模板
curl --request GET --cookie cookies.txt --cookie-jar cookies.txt 'https://screenrig.ai/api/oauth/authorizations/RESOURCE_ID'

响应

状态含义正文和头部
200授权。OAuthAuthorization(application/json)
默认

稳定的 RFC 9457 问题响应。421 server_draining 携带 1 秒的 Retry-After,500 not_ready 或 dependency_unavailable 携带 5 秒,500 manifest_degraded 携带 60 秒,除非处理程序设置了更具体的值。

问题 (application/problem+json)
POST/api/oauth/authorizations/{id}/approve

批准仪表板 OAuth 授权

在新证明(类型 oauth_authorization_approval,主题为授权 ID)后批准某人项目的已连接应用:创建应用的智能体身份(类型 mcp_client,负责人为该人)、其成员身份及所选访问权限(读或管理;省略则保持请求级别,默认读)和能力(请求的子集),并响应 redirect_uri,携带 code、state 和 iss,页面据此导航。

该代码有效期为 60 秒。限定屏幕范围的成员不能连接智能体、签发凭据或管理项目的人员:outside_screen_scope(请询问项目所有者)。

身份验证
dashboardSession
请求主体
控制台智能体操作
操作 ID
approveDashboardOAuthAuthorization

参数

名称发送必需?描述
id路径必填

请求主体字段

字段描述
project_id(必填,字符串)minLength:1
proof(可选,DashboardProof)
功能(可选,数组)

仅在代理连接和已连接应用批准时可选。省略表示批准完整请求集;连接能力的非空子集缩小授予的凭证;其他均为 invalid_request。

user_code(可选,字符串)

批准设备登录(流程设备)时必需:人员确认与终端匹配的代码。不匹配为agent_connection_code_mismatch;第五次使登录过期(agent_connection_expired)。否则忽略。maxLength:32

access(可选,字符串)

设备登录或连接应用批准的访问级别(只读、提议或管理);省略则保持请求级别。忽略其他连接。无法批准审核的人员不得批准管理权限(403 approver_required)。允许值:“read”、“propose”、“manage”。

请求模板和响应
shell · 请求模板
curl --request POST --cookie cookies.txt --cookie-jar cookies.txt --header 'Content-Type: application/json' --data '@request.json' 'https://screenrig.ai/api/oauth/authorizations/RESOURCE_ID/approve'

响应

状态含义正文和头部
200重定向回应用程序。OAuthAuthorizationRedirect(application/json)
403

outside_screen_scope - 调用方限定于屏幕,且请求所指明或涉及的屏幕、屏幕文件夹、选择器或受众超出了这些屏幕(docs/screen-scope.md)。范围之外的 ID 和不存在的 ID 得到相同的答复;errors[0].screen_scope 携带调用方的范围,写入会被整体拒绝,绝不会被缩小范围。

问题 (application/problem+json)
默认

稳定的 RFC 9457 问题响应。421 server_draining 携带 1 秒的 Retry-After,500 not_ready 或 dependency_unavailable 携带 5 秒,500 manifest_degraded 携带 60 秒,除非处理程序设置了更具体的值。

问题 (application/problem+json)
POST/api/oauth/authorizations/{id}/deny

拒绝 Dashboard OAuth 授权

在新的证明后拒绝已连接的应用(kind oauth_authorization_denial),并返回页面要跳转的 redirect_uri,其中携带 error=access_denied、state 和 iss。限定屏幕范围的成员不能连接智能体、签发凭据或管理项目的人员:outside_screen_scope(请询问项目所有者)。

身份验证
dashboardSession
请求主体
控制台智能体操作
操作 ID
denyDashboardOAuthAuthorization

参数

名称发送必需?描述
id路径必填

请求主体字段

字段描述
project_id(必填,字符串)minLength:1
proof(可选,DashboardProof)
功能(可选,数组)

仅在代理连接和已连接应用批准时可选。省略表示批准完整请求集;连接能力的非空子集缩小授予的凭证;其他均为 invalid_request。

user_code(可选,字符串)

批准设备登录(流程设备)时必需:人员确认与终端匹配的代码。不匹配为agent_connection_code_mismatch;第五次使登录过期(agent_connection_expired)。否则忽略。maxLength:32

access(可选,字符串)

设备登录或连接应用批准的访问级别(只读、提议或管理);省略则保持请求级别。忽略其他连接。无法批准审核的人员不得批准管理权限(403 approver_required)。允许值:“read”、“propose”、“manage”。

请求模板和响应
shell · 请求模板
curl --request POST --cookie cookies.txt --cookie-jar cookies.txt --header 'Content-Type: application/json' --data '@request.json' 'https://screenrig.ai/api/oauth/authorizations/RESOURCE_ID/deny'

响应

状态含义正文和头部
200重定向回应用程序。OAuthAuthorizationRedirect(application/json)
403

outside_screen_scope - 调用方限定于屏幕,且请求所指明或涉及的屏幕、屏幕文件夹、选择器或受众超出了这些屏幕(docs/screen-scope.md)。范围之外的 ID 和不存在的 ID 得到相同的答复;errors[0].screen_scope 携带调用方的范围,写入会被整体拒绝,绝不会被缩小范围。

问题 (application/problem+json)
默认

稳定的 RFC 9457 问题响应。421 server_draining 携带 1 秒的 Retry-After,500 not_ready 或 dependency_unavailable 携带 5 秒,500 manifest_degraded 携带 60 秒,除非处理程序设置了更具体的值。

问题 (application/problem+json)