API 参考

卡片数据 API

内置卡片的数据

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

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

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

内置卡片的数据

GET/api/card-types

列出卡片类型

发现此环境已发布目录中的内置卡片,与供应的底层合并。刷新和架构验证在后台进行;此路由从不调用边缘存储桶。每条目列出其当前副本、所属层级及该层级允许的布局,以及所有提供的主要内容。

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

参数

名称发送必需?描述
ScreenRig-Projectheader可选已弃用一个版本。必须与 JWT 项目授权保持一致;添加弃用和警告头。无令牌交换。
请求模板和响应
shell · 请求模板
curl --request GET --header 'Authorization: Bearer [SCREENRIG_TOKEN]' 'https://api.screenrig.ai/api/card-types'

响应

状态含义正文和头部
200内置卡片目录,按 ID 排序CardCatalogue(application/json)
默认

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

问题 (application/problem+json)
GET/api/card-types/{id}

获取卡片类型

当前主版本中用于放置项 params 和卡片数据文档的自包含 JSON Schema,以及 feed schema、层级、允许的布局和一个示例放置项。标记为 dynamic 的 params 在放置项绑定 data 键时取自数据文档。

字符串类型的参数可以包含 {screen.name}、{screen.timezone} 和 {screen.field.NAME},location 参数也可以是字符串 {screen.location};后端会为每个屏幕展开它们。发布前请替换示例内容值。未知的 id 会返回 card_not_found(404)。

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

参数

名称发送必需?描述
ScreenRig-Projectheader可选已弃用一个版本。必须与 JWT 项目授权保持一致;添加弃用和警告头。无令牌交换。
id路径必填
请求模板和响应
shell · 请求模板
curl --request GET --header 'Authorization: Bearer [SCREENRIG_TOKEN]' 'https://api.screenrig.ai/api/card-types/RESOURCE_ID'

响应

状态含义正文和头部
200卡片属性架构和放置示例CardDetails(application/json)
404

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

问题 (application/problem+json)
默认

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

问题 (application/problem+json)
GET/api/cards

列出卡片

身份验证
projectBearer 或 dashboardSession
请求主体
无
操作 ID
listCards

参数

名称发送必需?描述
项目查询可选
after查询可选
请求模板和响应
shell · 请求模板
curl --request GET --header 'Authorization: Bearer [SCREENRIG_TOKEN]' --cookie cookies.txt --cookie-jar cookies.txt 'https://api.screenrig.ai/api/cards'

响应

状态含义正文和头部
200卡片资源对象(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/cards

创建卡片

身份验证
projectBearer
请求主体
CardCreate
操作 ID
createCard

请求主体字段

字段描述
类型(必填,字符串)
major(可选,整数)最小值:1
参数(必填,对象)
data(可选,对象)
请求模板和响应
shell · 请求模板
curl --request POST --header 'Authorization: Bearer [SCREENRIG_TOKEN]' --header 'Content-Type: application/json' --data '@request.json' 'https://api.screenrig.ai/api/cards'

响应

状态含义正文和头部
201卡片资源CardInstance(application/json)
429

稳定的 rate_limited 问题。仅在权威 Retry-After 间隔后重试。固定窗口拒绝还包括适用的 RateLimit-Policy 和 RateLimit 成员;并发和字节预算拒绝省略这些可选披露。

问题 (application/problem+json);头部:Retry-After,RateLimit-Policy,RateLimit
默认

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

问题 (application/problem+json)
GET/api/cards/{id}

获取卡片

全局卡片 UID,或已弃用的目录类型段。后者会添加指向 /api/card-types. 的 Deprecation 和 Warning 头。

身份验证
projectBearer 或 dashboardSession
请求主体
无
操作 ID
getCard

参数

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

响应

状态含义正文和头部
200卡片资源inline(application/json)
默认

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

问题 (application/problem+json)
PATCH/api/cards/{id}

补丁卡

If-Match 可选比较卡元数据版本(非数据版本);省略则更新当前版本。Idempotency-Key 绑定方法、UID、参数和 If-Match,持续 24 小时。重试重放记录结果,包括删除后的 204;输入变更返回 idempotency_mismatch。过期 If-Match 返回 revision_conflict(412)。

键的作用域限定于卡UID。

身份验证
projectBearer
请求主体
object
操作 ID
patchCard

参数

名称发送必需?描述
id路径必填
Idempotency-Keyheader必填
If-Matchheader可选可选正资源修订。省略则写入当前资源;提供的过期修订为 revision_conflict。

请求主体字段

字段描述
参数(必填,对象)
请求模板和响应
shell · 请求模板
curl --request PATCH --header 'Authorization: Bearer [SCREENRIG_TOKEN]' --header 'Idempotency-Key: REQUEST_ID' --header 'Content-Type: application/json' --data '@request.json' 'https://api.screenrig.ai/api/cards/RESOURCE_ID'

响应

状态含义正文和头部
200卡片资源CardInstance(application/json)
默认

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

问题 (application/problem+json)
删除/api/cards/{id}

删除卡片

If-Match 可选比较卡元数据版本(非数据版本);省略则更新当前版本。Idempotency-Key 绑定方法、UID、参数和 If-Match,持续 24 小时。重试重放记录结果,包括删除后的 204;输入变更返回 idempotency_mismatch。过期 If-Match 返回 revision_conflict(412)。

键的作用域限定于卡UID。

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

参数

名称发送必需?描述
id路径必填
Idempotency-Keyheader必填
If-Matchheader可选可选正资源修订。省略则写入当前资源;提供的过期修订为 revision_conflict。
请求模板和响应
shell · 请求模板
curl --request DELETE --header 'Authorization: Bearer [SCREENRIG_TOKEN]' --header 'Idempotency-Key: REQUEST_ID' 'https://api.screenrig.ai/api/cards/RESOURCE_ID'

响应

状态含义正文和头部
204已删除无正文
默认

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

问题 (application/problem+json)
GET/api/cards/{id}/data

获取实例数据

身份验证
projectBearer 或 dashboardSession
请求主体
无
操作 ID
getInstanceData

参数

名称发送必需?描述
id路径必填
请求模板和响应
shell · 请求模板
curl --request GET --header 'Authorization: Bearer [SCREENRIG_TOKEN]' --cookie cookies.txt --cookie-jar cookies.txt 'https://api.screenrig.ai/api/cards/RESOURCE_ID/data'

响应

状态含义正文和头部
200卡片资源CardDataEntry(application/json)
默认

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

问题 (application/problem+json)
PUT/api/cards/{id}/data

放置实例数据

身份验证
projectBearer
请求主体
object
操作 ID
putInstanceData

参数

名称发送必需?描述
id路径必填
If-Matchheader可选
Idempotency-Keyheader可选

请求主体字段

字段描述
document(必填,对象)
请求模板和响应
shell · 请求模板
curl --request PUT --header 'Authorization: Bearer [SCREENRIG_TOKEN]' --header 'Content-Type: application/json' --data '@request.json' 'https://api.screenrig.ai/api/cards/RESOURCE_ID/data'

响应

状态含义正文和头部
200卡片资源CardDataEntry(application/json)
429

稳定的 rate_limited 问题。仅在权威 Retry-After 间隔后重试。固定窗口拒绝还包括适用的 RateLimit-Policy 和 RateLimit 成员;并发和字节预算拒绝省略这些可选披露。

问题 (application/problem+json);头部:Retry-After,RateLimit-Policy,RateLimit
默认

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

问题 (application/problem+json)
GET/api/cards/{id}/kv-webhooks

列出卡片 Webhook

列出卡片的传入 webhook,最旧的在前(最多 20 个)。此处永远不会返回密钥。

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

参数

名称发送必需?描述
id路径必填
请求模板和响应
shell · 请求模板
curl --request GET --header 'Authorization: Bearer [SCREENRIG_TOKEN]' 'https://api.screenrig.ai/api/cards/RESOURCE_ID/kv-webhooks'

响应

状态含义正文和头部
200卡片的 webhook。CardKVWebhook列表(application/json)
404card_not_found — 此项目中没有该卡片。问题 (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/cards/{id}/kv-webhooks

创建卡片 Webhook

创建一个写入此卡片数据文档的 webhook:外部系统把 JSON 或表单请求体发送到它的 url(POST /api/cards/{id}/kv-webhooks/{webhook_id}/write)。

没有映射时,请求中的对象就是文档;映射模板根据请求体构建文档,并在保存时检查。signing true 还要求带有 ScreenRig-Signature 头。verify 让服务商自己的签名(GitHub、Stripe、Shopify、Slack、Linear、Vercel、Asana 或任何 HMAC 发送方)代替密钥来验证一个请求,密钥仍可并行使用;它不能与 signing 同时使用,其密钥加密封存,绝不会返回,只返回一个提示。handshake 指定 url 所响应的服务商握手(Microsoft Graph、monday.com、Trello 或 Azure Event Grid;verify slack 和 asana 会响应它们自己的握手)。

密钥和签名密钥只会出现在此响应中(以及 rotate-secret 和开启签名的更新中):请立即将它们保存到发送方系统。每张卡片最多有 20 个 webhook(kv_webhook_limit_reached)。追加 kv_webhook.created。

使用相同 Idempotency-Key 的完全相同的重试,会在二十四小时内返回相同的响应,包括密钥。

身份验证
projectBearer
请求主体
CardKVWebhookCreate
操作 ID
createCardKVWebhook

参数

名称发送必需?描述
id路径必填
Idempotency-Keyheader可选省略以进行新操作。提供并重用密钥以去重重试;CLI 自动管理密钥。

请求主体字段

字段描述
描述(可选,字符串)maxLength:200
key_template(可选,字符串)

可选的卡片数据键模板,包含 {screen.field.NAME}。在按键模式下,映射或提交的正文生成 {documents:[{fields:{NAME:VALUE},document:{...}}]};每项输出用自身字段填充模板。键必须唯一、有效,且位于卡片实例和数据源的命名空间之外。开始写入前,每项输出都会按其所属卡片进行检查。

更新时使用空字符串可恢复单文档模式。

mapping(可选,内联)模板,最大 64 KiB,保存时检查。
signing(可选,布尔值)default: false
verify(可选,WebhookVerifyWrite)

用服务商自己的签名代替密钥来验证请求的服务商,因为这些服务商无法发送我们的密钥。

每个服务商的请求头和方案都是其自身的,且固定不变:github 发送 X-Hub-Signature-256、sha256= 和请求体的十六进制 HMAC-SHA256;stripe 发送 Stripe-Signature,t=<unix seconds>,v1=<hex HMAC-SHA256 of "<t>.<body>">(轮换密钥期间有多个 v1,t 在五分钟内);shopify 发送 X-Shopify-Hmac-Sha256,即请求体的 base64 HMAC-SHA256;slack 发送 X-Slack-Signature、v0= 和 "v0:<X-Slack-Request-Timestamp>:<body>" 的十六进制 HMAC-SHA256(五分钟内);linear 发送 Linear-Signature,即请求体的十六进制 HMAC-SHA256,并且请求体的 webhookTimestamp 成员(Unix 毫秒)必须在一分钟内;vercel 发送 x-vercel-signature,即请求体的十六进制 HMAC-SHA1;asana 发送 X-Hook-Signature,即以 Asana 握手的 X-Hook-Secret 为密钥的请求体十六进制 HMAC-SHA256;generic_hmac 是任何在您指定的请求头中用 HMAC-SHA256 签名的发送方。

带有效签名的请求无需密钥即可被接受,密钥仍可并行使用。verify 不能与 signing 同时使用。请求按其到达时的请求体判定,在消耗任何速率额度之前。Slack 和 Asana 也会响应它们的握手(见 WebhookHandshake)。

handshake(可选,WebhookHandshake)

URL 所响应的服务商握手,适用于这里没有签名方案的服务商。microsoft_graph 对带有 validationToken 查询参数的 POST,把解码后的令牌以 text/plain 原样返回。monday 对 {"challenge": "..."} 的 JSON POST,返回相同的 JSON。trello 以 200 响应其 HEAD 检查。azure_event_grid 对 SubscriptionValidationEvent(aeg-event-type: SubscriptionValidation),以 {"validationResponse": "<validationCode>"} 响应。verify.vendor slack 响应 Slack 签名的 url_verification 质询,verify.vendor asana 响应 Asana 的 X-Hook-Secret 握手,并保留该密钥用于验证其事件。

握手只会针对为该服务商设置的 webhook 响应,不写入任何内容,从不计费,也不消耗速率额度,并以结果 handshake 记录在投递日志中。已停用的 webhook 不响应任何握手。允许:“microsoft_graph”、“monday”、“trello”、“azure_event_grid”

请求模板和响应
shell · 请求模板
curl --request POST --header 'Authorization: Bearer [SCREENRIG_TOKEN]' --header 'Content-Type: application/json' --data '@request.json' 'https://api.screenrig.ai/api/cards/RESOURCE_ID/kv-webhooks'

响应

状态含义正文和头部
201已创建,包含其 URL、密钥,以及(若启用签名)签名密钥。CardKVWebhookWithSecrets(application/json);头部:Cache-Control
400invalid_request,包括无法编译的映射(errors[0].field 指出其中的位置)。问题 (application/problem+json)
404card_not_found — 此项目中没有该卡片。问题 (application/problem+json)
409kv_webhook_limit_reached 或 idempotency_mismatch。问题 (application/problem+json)
默认

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

问题 (application/problem+json)
PATCH/api/cards/{id}/kv-webhooks/{webhook_id}

更新卡片 Webhook

更改 description、mapping(null 会移除它)、enabled、signing、verify(null 会移除它;不带密钥时,若服务商相同则保留已存储的密钥)和 handshake(null 会移除它)。开启 signing 会返回一次新的 signing_secret;false 将其关闭。已停用的 webhook 对每个请求的响应都像密钥错误一样。追加 kv_webhook.updated。

身份验证
projectBearer
请求主体
CardKVWebhookUpdate
操作 ID
updateCardKVWebhook

参数

名称发送必需?描述
id路径必填
webhook_id路径必填某个应用的键值 webhook 的 ID。
Idempotency-Keyheader可选省略以进行新操作。提供并重用密钥以去重重试;CLI 自动管理密钥。

请求主体字段

字段描述
描述(可选,字符串)maxLength:200
key_template(可选,字符串)

可选的卡片数据键模板,包含 {screen.field.NAME}。在按键模式下,映射或提交的正文生成 {documents:[{fields:{NAME:VALUE},document:{...}}]};每项输出用自身字段填充模板。键必须唯一、有效,且位于卡片实例和数据源的命名空间之外。开始写入前,每项输出都会按其所属卡片进行检查。

更新时使用空字符串可恢复单文档模式。

mapping(可选,内联)替换模板;null 表示移除。
启用(可选,布尔值)
signing(可选,布尔值)
verify(可选,内联)

替换服务商验证;null 会移除它,连同其密钥一起移除。不带密钥时,若服务商相同则保留已存储的密钥,因此可以单独更改请求头或时间窗口;不同的服务商需要它自己的密钥。asana 验证只有在被移除后重新设置,才会接受新的握手。

handshake(可选,内联)设置 URL 所响应的握手;null 会移除它。
请求模板和响应
shell · 请求模板
curl --request PATCH --header 'Authorization: Bearer [SCREENRIG_TOKEN]' --header 'Content-Type: application/json' --data '@request.json' 'https://api.screenrig.ai/api/cards/RESOURCE_ID/kv-webhooks/WEBHOOK_ID'

响应

状态含义正文和头部
200webhook;当此请求开启签名时包含 signing_secret。CardKVWebhookWithSecrets(application/json);头部:Cache-Control
400invalid_request,包括无法编译的映射。问题 (application/problem+json)
404card_not_found,或 not_found — 此卡片上没有该 webhook。问题 (application/problem+json)
409idempotency_mismatch.问题 (application/problem+json)
默认

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

问题 (application/problem+json)
删除/api/cards/{id}/kv-webhooks/{webhook_id}

删除卡片 Webhook

删除 webhook。其 URL 立即停止工作,卡片保留其文档。追加 kv_webhook.deleted。

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

参数

名称发送必需?描述
id路径必填
webhook_id路径必填某个应用的键值 webhook 的 ID。
Idempotency-Keyheader可选省略以进行新操作。提供并重用密钥以去重重试;CLI 自动管理密钥。
请求模板和响应
shell · 请求模板
curl --request DELETE --header 'Authorization: Bearer [SCREENRIG_TOKEN]' 'https://api.screenrig.ai/api/cards/RESOURCE_ID/kv-webhooks/WEBHOOK_ID'

响应

状态含义正文和头部
204已删除。无正文
404card_not_found,或 not_found — 此卡片上没有该 webhook。问题 (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/cards/{id}/kv-webhooks/{webhook_id}/rotate-secret

轮换卡片 Webhook 密钥

替换 webhook 的密钥并仅返回一次新密钥;若 signing 为 true,则改为替换签名密钥。旧密钥立即失效。追加 kv_webhook.secret_rotated。

身份验证
projectBearer
请求主体
CardKVWebhookRotate
操作 ID
rotateCardKVWebhookSecret

参数

名称发送必需?描述
id路径必填
webhook_id路径必填某个应用的键值 webhook 的 ID。
Idempotency-Keyheader可选省略以进行新操作。提供并重用密钥以去重重试;CLI 自动管理密钥。

请求主体字段

字段描述
signing(可选,布尔值)default: false
请求模板和响应
shell · 请求模板
curl --request POST --header 'Authorization: Bearer [SCREENRIG_TOKEN]' --header 'Content-Type: application/json' --data '@request.json' 'https://api.screenrig.ai/api/cards/RESOURCE_ID/kv-webhooks/WEBHOOK_ID/rotate-secret'

响应

状态含义正文和头部
200带有新密钥或新签名密钥的 webhook。CardKVWebhookWithSecrets(application/json);头部:Cache-Control
400invalid_request — 对不签名的 webhook 指定了 signing true。问题 (application/problem+json)
404card_not_found,或 not_found — 此卡片上没有该 webhook。问题 (application/problem+json)
默认

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

问题 (application/problem+json)
GET/api/cards/{id}/kv-webhooks/{webhook_id}/deliveries

列出卡片 Webhook 投递记录

webhook 的投递日志,最新的在前,最多 100 条,保留七天。

每个指向此 webhook 的请求是一行记录,包含时间、结果(written、unchanged、refused、invalid 或 handshake)、原因(credentials、signature、signature_missing、signature_invalid、timestamp_missing、timestamp_stale、secret_pending、handshake_invalid、disabled、body、mapping、card_data_invalid、rate_limited、payment_required、internal)、简短的详情(如失败的卡片数据路径)、响应的状态、请求体大小,以及 multipart 请求所带文件部分的数量(被忽略)。

不存储任何请求体、请求头或凭据。项目在这里查看一个请求为什么得到所有拒绝共用的那个 404。

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

参数

名称发送必需?描述
id路径必填
webhook_id路径必填某个应用的键值 webhook 的 ID。
限制查询可选
请求模板和响应
shell · 请求模板
curl --request GET --header 'Authorization: Bearer [SCREENRIG_TOKEN]' 'https://api.screenrig.ai/api/cards/RESOURCE_ID/kv-webhooks/WEBHOOK_ID/deliveries'

响应

状态含义正文和头部
200投递记录。KVWebhookDelivery列表(application/json)
404card_not_found,或 not_found — 此卡片上没有该 webhook。问题 (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/cards/{id}/kv-webhooks/{webhook_id}/write

接收卡片 Webhook

外部系统向其发送卡片数据文档的 URL。使用 webhook 自身的密钥在 Authorization 标头中认证:Bearer <secret>,或以 webhook ID 为用户名的 HTTP Basic。

当 webhook 创建时带有 verify,该服务商自己请求头中的有效签名(见 WebhookVerifyWrite)会代替密钥来验证这个请求,密钥仍可并行使用。

当 webhook 启用签名时,还需要 ScreenRig-Signature: t=<unix seconds>,v1=<hex HMAC-SHA256 of "<t>.<raw body>" under the signing secret>,并且 t 必须在服务器时钟的五分钟以内。

未知的卡片或 webhook、错误或缺失的密钥或签名、过期的时间戳、已停用的 webhook 以及每个 GET,都得到同样的 404 not_found;项目在投递日志中查看原因。

为服务商握手设置的 webhook 会最先响应它,在要求任何凭据之前,响应的是属于该握手的请求:Slack 的 url_verification 质询(已签名,以质询值响应)、Microsoft Graph 的 validationToken(以 text/plain 原样返回)、Asana 的 X-Hook-Secret(原样返回,并作为其事件的签名密钥加密封存保存)、monday.com 的 challenge、Azure Event Grid 的 SubscriptionValidationEvent(以其 validationResponse 响应)和 Trello 的 HEAD 检查(此 url 的 head 操作)。

握手不写入卡片数据,从不计费,也不消耗速率额度,并以结果 handshake 记录在投递日志中。

请求体最大 1 MiB,为 JSON、application/x-www-form-urlencoded(重复的名称是数组)或 multipart/form-data(每个文本字段是 body.<field>,重复的名称是数组,文件部分被忽略并计入投递日志)。没有映射时,对象就是文档;有映射时,模板根据 body 和 query 构建文档。

文档按卡片的数据检查(card_data_invalid 会指出路径),与当前文档相同的文档不会写入(状态为 unchanged)。被接受的请求计为一次计费的 API 请求,并追加卡片数据事件。Idempotency-Key(8 到 200 个字符)会在二十四小时内对发送方的重试去重。

每个 webhook 每分钟最多 120 个请求;每个请求也计入组织和卡片的写入速率(PUT /api/card-data/{key})。

身份验证
kvWebhookBearer 或 kvWebhookBasic
请求主体
object
操作 ID
receiveCardKVWebhook

参数

名称发送必需?描述
id路径必填
webhook_id路径必填某个应用的键值 webhook 的 ID。
Idempotency-Keyheader可选省略以进行新操作。提供并重用密钥以去重重试;CLI 自动管理密钥。
ScreenRig-Signatureheader可选t=<unix seconds>,v1=<hex HMAC-SHA256 over "<t>.<raw body>">;webhook 签名时必填。
请求模板和响应
shell · 请求模板
curl --request POST --header 'Content-Type: application/json' --data '@request.json' 'https://api.screenrig.ai/api/cards/RESOURCE_ID/kv-webhooks/WEBHOOK_ID/write'

响应

状态含义正文和头部
200卡片的文档是否发生变化,或对服务商握手的响应。CardKVWebhookWriteResult(application/json);头部:RateLimit-Policy,RateLimit,Cache-Control
400invalid_request — 请求体过大、为空、不是 JSON 或表单,或映射在其上失败。问题 (application/problem+json)
402payment_required — 项目已被删除。发送绝不会因项目余额而被拒绝。问题 (application/problem+json)
404not_found — 对每个被拒绝的发送和每个 GET 的唯一响应。问题 (application/problem+json)
409idempotency_mismatch,或 card_data_invalid — 卡片拒绝了该文档;errors[0].field 指出路径。问题 (application/problem+json)
429

稳定的 rate_limited 问题。仅在权威 Retry-After 间隔后重试。固定窗口拒绝还包括适用的 RateLimit-Policy 和 RateLimit 成员;并发和字节预算拒绝省略这些可选披露。

问题 (application/problem+json);头部:Retry-After,RateLimit-Policy,RateLimit
默认

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

问题 (application/problem+json)
HEAD/api/cards/{id}/kv-webhooks/{webhook_id}/write

Head Card KVWebhook

Trello 对新 webhook 所做的检查。对握手为 trello 的 webhook,它以 200 响应且没有请求体;对其他所有 webhook、地址和请求,则只有同一个 404 not_found,因此链接预览器什么也了解不到。它不写入任何内容,从不计费,也不消耗速率额度;已响应的检查会以结果 handshake 出现在投递日志中。

每个 GET 都响应 404,且不读取任何内容。

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

参数

名称发送必需?描述
id路径必填
webhook_id路径必填某个应用的键值 webhook 的 ID。
请求模板和响应
shell · 请求模板
curl --request HEAD 'https://api.screenrig.ai/api/cards/RESOURCE_ID/kv-webhooks/WEBHOOK_ID/write'

响应

状态含义正文和头部
200webhook 响应 Trello 的握手。无正文;头部:Cache-Control
404not_found —— 对所有其他请求的唯一响应。问题 (application/problem+json)
默认

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

问题 (application/problem+json)
GET/api/card-data

列出卡片数据

列出项目的卡片数据文档,最多 200 个,按键升序排列。next_cursor 是最后返回的键;作为 after 传回以获取下一页,无更多时为 null。卡片数据文档保存卡片位置的动态属性(菜单部分、跑马灯项目、KPI 瓷砖);位置的数据键名即为其中之一。

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

参数

名称发送必需?描述
ScreenRig-Projectheader可选已弃用一个版本。必须与 JWT 项目授权保持一致;添加弃用和警告头。无令牌交换。
after查询可选
请求模板和响应
shell · 请求模板
curl --request GET --header 'Authorization: Bearer [SCREENRIG_TOKEN]' 'https://api.screenrig.ai/api/card-data'

响应

状态含义正文和头部
200卡片数据文档CardDataList(application/json)
默认

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

问题 (application/problem+json)
GET/api/card-data/{key}

获取卡片数据

返回文档及其修订版本。ETag 是修订版本,用于下一次写入的 If-Match。

身份验证
projectBearer 或 dashboardSession
请求主体
无
操作 ID
getCardData

参数

名称发送必需?描述
ScreenRig-Projectheader可选已弃用一个版本。必须与 JWT 项目授权保持一致;添加弃用和警告头。无令牌交换。
key路径必填卡片数据键。不得以 feed: 开头。
请求模板和响应
shell · 请求模板
curl --request GET --header 'Authorization: Bearer [SCREENRIG_TOKEN]' --cookie cookies.txt --cookie-jar cookies.txt 'https://api.screenrig.ai/api/card-data/KEY'

响应

状态含义正文和头部
200卡片数据文档CardDataEntry(application/json)
默认

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

问题 (application/problem+json)
PUT/api/card-data/{key}

放置卡片数据

创建或替换卡片数据文档。当项目播放列表中的卡片位置绑定该键时,文档必须仅包含每个绑定卡片的动态属性并通过验证;否则写入被拒,返回 card_data_invalid 并指明卡片及属性路径,且无更改。无绑定位置的键接受任意 JSON 对象。

以 media: 开头的每个字符串都是媒体引用,格式为 media:<id>,供卡片绘制(照片);在任何键上必须命名该项目中准备好的、已批准的图像,每个文档最多 256 个不同媒体,否则写入时拒绝,错误名为 card_media_invalid,包含属性路径和 media_id。

读取密钥内容的屏幕随后可从 GET /media/{media_id}. 获取这些媒体。显示读取密钥的投放位的屏幕接收 screen.card_data_changed 并在原位重新获取;项目日志记录带有 card_data_entry 资源的 kv.updated,该资源永远不会到达播放器。

限制、配额、计量、修订和幂等性由应用的键值存储管理。

智能体和 webhook 的写入也有频率限制,按套餐对每个组织限制(Standard 和 Plus 每分钟 60 次,Education 和 Premium 600 次,Enterprise 3,000 次),所有套餐中每个键均限制为每分钟 60 次;超出限制的写入会被 rate_limited 和 Retry-After 拒绝,且不计量。

身份验证
projectBearer
请求主体
CardDataWrite
操作 ID
putCardData

参数

名称发送必需?描述
ScreenRig-Projectheader可选已弃用一个版本。必须与 JWT 项目授权保持一致;添加弃用和警告头。无令牌交换。
key路径必填卡片数据键。不得以 feed: 开头。
If-Matchheader可选可选正资源修订。省略则创建或覆盖键;提供的过期修订为 revision_conflict。
Idempotency-Keyheader可选省略以进行新操作。提供并重用密钥以去重重试;CLI 自动管理密钥。

请求主体字段

字段描述
document(必填,对象)

卡片数据文档:最大 1 MiB 的 JSON 对象。当卡片位置绑定密钥时,仅持有该卡的动态属性。以 media: 开头的字符串为媒体引用,media:<id>,指本项目中已准备好且已批准的图像。

expires_at(可选,字符串)绝对过期;省略数据永不过期。格式:“date-time”
ttl_seconds(可选,整数)

自首次提交的写入起算的 TTL。与 expires_at 互斥。重试会保留原来的过期时间。两者都省略则清除过期时间。

请按写入方的计划确定它:当卡片的文档在有屏幕显示该卡片期间过期且没有写入来续期时,卡片会变为空白,并由 card_data_stale 通知条件告知项目,因此停止运行的作业会被发现。minimum: 1 maximum: 31536000

请求模板和响应
shell · 请求模板
curl --request PUT --header 'Authorization: Bearer [SCREENRIG_TOKEN]' --header 'Content-Type: application/json' --data '@request.json' 'https://api.screenrig.ai/api/card-data/KEY'

响应

状态含义正文和头部
200卡片数据文档CardDataEntry(application/json)
429

稳定的 rate_limited 问题。仅在权威 Retry-After 间隔后重试。固定窗口拒绝还包括适用的 RateLimit-Policy 和 RateLimit 成员;并发和字节预算拒绝省略这些可选披露。

问题 (application/problem+json);头部:Retry-After,RateLimit-Policy,RateLimit
默认

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

问题 (application/problem+json)
删除/api/card-data/{key}

删除卡片数据

删除卡片数据文档。绑定到该键的卡片在屏幕上隐藏,直到再次写入文档。

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

参数

名称发送必需?描述
ScreenRig-Projectheader可选已弃用一个版本。必须与 JWT 项目授权保持一致;添加弃用和警告头。无令牌交换。
key路径必填卡片数据键。不得以 feed: 开头。
If-Matchheader可选可选正资源修订。省略则写入当前资源;提供的过期修订为 revision_conflict。
Idempotency-Keyheader可选省略以进行新操作。提供并重用密钥以去重重试;CLI 自动管理密钥。
请求模板和响应
shell · 请求模板
curl --request DELETE --header 'Authorization: Bearer [SCREENRIG_TOKEN]' 'https://api.screenrig.ai/api/card-data/KEY'

响应

状态含义正文和头部
204已删除无正文
默认

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

问题 (application/problem+json)
GET/api/feeds/{family}

获取信息流

读取共享的第三方订阅文档:内置卡片位置使用相同参数读取的文档(docs/feeds.md)。

查询参数会规范化为卡片的 feed 键,由 ScreenRig-Feed-Key 头命名:weather、airquality 和 alerts 取 lat 和 lon(舍入到 0.25 度的单元格);earthquakes 取 lat、lon、radius_km(10 到 20000,默认 500)、min_magnitude(0 到 9,默认 2.5)和 hours(1 到 168,默认 24);cyclones 取 basins(逗号分隔的 at、ep、cp、wp;默认全部),以及可选的 lat、lon 和 radius_km(该地点附近的风暴);tides 取 station(NOAA 潮汐预测站 ID,如 9414290)或 lat 和 lon(100 公里内最近的站点,否则为 invalid_request);launches 无参数(全球后续发射);rates 取 base(欧洲央行参考货币,默认 EUR);crypto 取 symbols(CoinGecko 的 ID 或代码,逗号分隔,最多 20 个)和 currency(默认 usd);headlines 取 url(http 或 https 的 RSS 或 Atom URL);cap(screenrig.cap/v1)与某个屏幕匹配的 CAP 警报:url(可重复,最多 5 个 CAP 警报或 ATOM/RSS 索引 URL)、public(同时读取覆盖 lat 和 lon 的公开 feed;没有 url 时为默认)、lat 和 lon、geocode(可重复的 NAME:VALUE 区域代码)、min_severity、max_severity、min_urgency、min_certainty、event、exclude_event、sender、status(默认 Actual)、scope(默认 Public)、language(可重复,按偏好顺序)和 area_unknown(hide 或 show);drugalerts(screenrig.drugalerts/v1)某个国家近期的召回报告:country(us、ca 或 gb,必填)和 category(默认为 drug,或 food);respiratory(screenrig.respiratory/v1)某个地点每周的流感、COVID-19 和 RSV 活动:country(us 或 gb,必填)和 region(美国的州、属地或 DC,按名称或邮政编码,或英格兰或 UKHSA 的某个地区;为空则表示全国);almanac(screenrig.almanac/v1)today 卡片所用日期的纪念日、On This Day 事件、日月信息:country(ISO 3166-1 alpha-2 代码,用于其公共假日)、language(On This Day 版本:ar、bs、cs、de、en、es、fr、it、pt、ru、sv、tr、uk 或 zh;默认 en)、可选的 lat 和 lon(舍入到 0.1 度的单元格,用于太阳)和 date(固定的某一天;默认今天前后几天);outdoorsafety(screenrig.outdoorsafety/v1)outdoor-safety 卡片所用的高温信息,即由 lat 和 lon(天气的 0.25 度单元格)得出的湿球黑球温度估计值;它不报告雷电;departures(screenrig.departures/v1)某个开放数据提供商一到四个站点的下几班发车:provider(tfl、entur 或 digitransit)和 stops(逗号分隔的 ID,最多 4 个:TfL 的 StopPoint ID、Entur 的 NSR 站点或站台 ID、Digitransit 的 gtfsIds),按发车顺序合并为一个看板,每分钟轮询一次;bikeshare(screenrig.bikeshare/v1)距 lat 和 lon(舍入到 0.001 度的单元格,约 100 米)最近的 GBFS 共享单车站点,每个都带有到该单元格的距离,来自 system(一个已列出的系统 ID),不提供时来自覆盖该地点的最近的已列出系统(没有系统覆盖时,system 为 invalid_request)。

请求从不调用提供者。200 表示文档(架构、fetchedAt、归属及其家族字段,按卡片合同定义);其 ETag 是字节的 sha256,If-None-Match 返回 304;Cache-Control max-age 直到下一次计划获取。202 表示尚无文档:读取注册需求,feed 工作线程约一分钟内获取密钥(Retry-After)。

API 读取会缓存密钥 24 小时。组织跨其所有项目每天最多注册 50 个新密钥(超过返回 rate_limited)。无源的家族在此部署返回 not_found。

身份验证
projectBearer 或 dashboardSession
请求主体
无
操作 ID
getFeed

参数

名称发送必需?描述
ScreenRig-Projectheader可选已弃用一个版本。必须与 JWT 项目授权保持一致;添加弃用和警告头。无令牌交换。
family路径必填订阅系列。
lat查询可选
lon查询可选
radius_km查询可选
min_magnitude查询可选地震:最低震级。
小时查询可选地震:小时窗口。
basins查询可选cyclones:逗号分隔的 at、ep、cp、wp。
station查询可选tides:NOAA 潮汐预测站 ID,如 9414290。不提供时,由 lat 和 lon 选取 100 公里内最近的站点。
base查询可选
符号查询可选
货币查询可选
url查询可选headlines:订阅源 URL。限制:最多重复 5 次。
public查询可选
地理编码查询可选cap:NAME:VALUE,可重复(UGC:WAC033)。
min_severity查询可选
max_severity查询可选
min_urgency查询可选
min_certainty查询可选
事件查询可选cap:可重复;* 匹配任意字符序列。
exclude_event查询可选
sender查询可选
状态查询可选
scope查询可选
language查询可选
area_unknown查询可选
country查询可选drugalerts:us、ca 或 gb。respiratory:us 或 gb。两者都必填。almanac:文档列出其公共假日的 ISO 3166-1 alpha-2 国家。
category查询可选drugalerts:drug(默认)或 food。
region查询可选respiratory:美国的州、属地或 DC,按名称或邮政编码,或英格兰或 UKHSA 的某个地区;为空则表示全国。
date查询可选almanac:固定的某一天,而不是今天前后几天。
provider查询可选departures:这些站点的公共交通提供商。
stops查询可选departures:一到四个站点 ID,逗号分隔(TfL 940GZZLUOXC、Entur NSR:StopPlace:337 或 NSR:Quay:568、Digitransit HSL:1040129)。
system查询可选bikeshare:一个已列出的 GBFS 系统 ID;不提供时,为覆盖 lat 和 lon 的最近的已列出系统。
If-None-Matchheader可选
请求模板和响应
shell · 请求模板
curl --request GET --header 'Authorization: Bearer [SCREENRIG_TOKEN]' --cookie cookies.txt --cookie-jar cookies.txt 'https://api.screenrig.ai/api/feeds/FAMILY'

响应

状态含义正文和头部
200Feed 文档FeedDocument(application/json);头部:ETag,ScreenRig-Feed-Key
202尚无文档;提要工作者将在下一次运行时获取密钥。FeedPending(application/json);头部:Retry-After,ScreenRig-Feed-Key
304文档与 If-None-Match 匹配。无正文
默认

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

问题 (application/problem+json)