公開讀取 token
公開讀取 token 是整個產品唯一免驗證的讀取介面。資料表版主發布一個儲存檢視,鑄造回應便給出一組任何人都能呼叫的網址——不需要帳號、不需要成員身分、也不需要任何範圍。正因為另一端沒有呼叫者身分,所有限制都必須在鑄造當下寫進 token 本身。
這正是鑄造請求各欄位的用途:view_id 決定要公開哪一份切片,visible_columns 再收窄投影,read_filter 則把額外的資料列政策「與」檢視原有條件疊加。最終生效的是交集:一張資料表、一個檢視、兩份白名單都同意的欄位,以及通過所有條件的資料列。附件、link、rollup、lookup 欄位一律剝除;$me 類政策則直接拒絕——匿名通道上沒有可供解析的主體。
匿名消費端接著透過 /public/module/custom_tables/read/{token_id}/… 通道讀取:分頁的 records 列表、依 id 取得的單筆資料列,以及——僅在 token 以 allow_query=true 鑄造時——可由呼叫端自行加上篩選、搜尋與排序的 query 端點。呼叫端的篩選與搜尋只會收窄已發布的資料列切片:stored predicates 與文字搜尋會「與」檢視疊加,legacy filters map 發生鍵衝突時則由檢視勝出。排序不同:若呼叫端提供 sort 或 sort_by,它會取代檢視的排序,但不會改變哪些資料列有資格出現。回傳的內容刻意極簡:每筆資料列只有 id、created_at、updated_at 與 data,外加 table_name、total 與可見的 columns。沒有 created_by、沒有 pending_approval、沒有任何位置或租戶 id,也沒有資料表的 settings、rules 或 ACL。
Query request model 是封閉集合:只有 filters、stored_filters、any_of、q、sort_by、sort_order、sort、skip 與 limit。Column reference 使用 internal col_<hex> ID;只有 response data 使用顯示名稱。它沒有 computed_filters 或 aggregate member,extra key 以 400 拒絕;空 body 使用 model defaults。Raw body cap 以 bytes 精確計算:16,384 bytes 合法,16,385 bytes 在 JSON parse 之前回 413,JSON 或 model 無效則回 400。
關於這條通道,最重要的一件事是:所有失敗都回傳同一個 404 {"detail":"Not found"}——token 不存在、已撤銷、已過期、密鑰錯誤、allow_query=false、檢視已失效、資料列被條件濾除、資料表已刪除。這種一致性是刻意設計的安全屬性,而非疏漏:它使有效的 token id 無法被列舉,資料列 id 也無法被探測是否存在。請不要撰寫依失敗原因分支的用戶端程式,因為根本讀不到原因。每個 token 另有自身的 rpm 固定視窗節流,但請注意它在驗證「之後」才執行——它限制的是可用 token 的流量,而不是攔阻他人猜測 id。
流程是「鑄造、稽核、撤銷」。請定期檢視 token 清單,因為撤銷是旗標而非刪除:已撤銷的 token 仍留在清單中並標示 revoked=true,讓你隨時能還原這張資料表曾在何時公開過什麼。
請把這份憑證當作 bearer secret 對待。secretless=false 時,secret 只顯示一次,伺服器僅保存其雜湊;secretless=true 時,網址本身就是憑證,任何拿到連結的人在你撤銷之前都能持續讀取該檢視。
/private/module/custom_tables/{scopeName}/tables/{table_id}/public-read-tokens把一張資料表的單一儲存檢視轉成免驗證的讀取網址,並可再以欄位白名單與資料列條件進一步收窄。
當看板、展場機台或合作夥伴頁面必須讀取資料表的一部分,卻不該擁有 TeamSync 帳號時使用。
- 聊天室
/private/module/custom_tables/chatroom/tables/{table_id}/public-read-tokens - 部門
/private/module/custom_tables/department/tables/{table_id}/public-read-tokens - 公司
/private/module/custom_tables/company/tables/{table_id}/public-read-tokens
範圍
| 範圍 | 是否提供 | 驗證與權限 |
|---|---|---|
| 聊天室 | 可使用 | CustomTableModeratorRequired |
| 部門 | 可使用 | CustomTableModeratorRequired |
| 公司 | 可使用 | CustomTableModeratorRequired |
參數
| 欄位 | 位置 | 型別 | 必填 | 說明 |
|---|---|---|---|---|
table_id | path | uuid | 是 | 要發布檢視的資料表 id;版主檢查僅憑這個 id 就能解析出資料表所屬範圍。 |
請求結構
PublicReadTokenMintPayload| 欄位 | 型別 | 必填 | 說明 |
|---|---|---|---|
allow_query | boolean | 否 | When false (default), only the view-config read is served; the /query endpoint answers a uniform 404. When true, callers may AND extra narrowing clauses via /query. |
name | string | null | 否 | Label shown in listings. |
read_filter | object | null | 否 | Extra row policy AND-ed onto the view. A row policy is a boolean tree over scalar predicates: a node is {"and": [node, ...]} (every child holds), {"or": [node, ...]} (at least one holds), {"not": node} (strict complement) or a predicate {"column": "col_<hex>", "op": "eq|neq|gt|gte|lt|lte|in|contains|is_null|is_not_null", "value": ...}. Groups are non-empty; a node carries exactly its kind's keys; the root may be any node (the legacy {"and": [preds]} is one such tree). Caps: depth <= 5 (a bare predicate is depth 1), <= 24 predicates, <= 100 entries per "in" list (caps bind AUTHORED policies; the server may compose wider resolved trees). Predicates reference internal column keys of stored scalar columns only. An empty/unset cell fails every value op and matches only is_null, so {"not": {col eq X}} INCLUDES blank cells while {col neq X} excludes them. Unresolvable tokens and malformed nodes always NARROW the row set (never-match under "and"/"not", dropped under "or"), never widen it. A node may also be a link_target leaf {"link": "col_<hex> of a LINK column of this table", "quantifier": "any"|"all", "target": node, "require_present": bool} — it follows the link ONE hop and evaluates "target" (any row-policy node over the LINKED table's stored scalar columns; no link node inside it: 1-hop) against the linked rows: "any" = at least one linked row matches, "all" = every linked row matches (vacuously true when none — require_present MUST be stated on "all" and must be absent on "any"). Only LIVE (not trashed) linked rows count and the linked table's SCP channel floor applies; the linked table's own row/column ACL does NOT. Tokens inside "target" resolve against the LINKED column's type ("$me" on its user column = rows assigned to me). Caps: <= 6 link leaves; a target costs one depth level and its predicates count toward the 24. A {"link", "op", "value"} membership leaf is NOT accepted — write link_target with a target {"column": "id", "op": "in", "value": [...]}. Example: {"or": [{"column": "col_a1", "op": "eq", "value": "TW"}, {"not": {"column": "col_b2", "op": "eq", "value": "$me"}}]}. Row-policy tokens on this UNAUTHENTICATED lane are the principal-FREE subset of the ACL grant read_filter grammar: "$today"/"$today+Nd"/"$today-Nd" and "$now" are allowed (they carry no principal); "$me" and "$me.department" are REJECTED at mint (no acting principal exists on a public token). |
rpm | integer | 否 | Per-token requests-per-minute throttle. |
secretless | boolean | 否 | When true, the uuid4 id itself is the capability (no Bearer secret). When false, a Bearer secret is minted and returned ONCE. |
valid_until | string (date-time) | null | 否 | Expiry (UTC); null = no expiry. Expired tokens answer the uniform 404. |
view_id | string | 是 | Id of the view to publish (must belong to this table). |
visible_columns | string[] | null | 否 | Optional per-token column allowlist ON TOP of the view's own projection (intersection governs). Internal col_<hex> or display names accepted; null = the view columns govern. Naming an attachment/link/rollup/lookup column is rejected at mint. |
回應結構
PublicReadTokenMintResponse| 欄位 | 型別 | 必填 | 說明 |
|---|---|---|---|
allow_query | boolean | 是 | Whether the /query endpoint is enabled. |
rpm | integer | 是 | Per-token throttle. |
secret | string | null | 否 | Bearer secret — shown ONCE, never retrievable again. Null for a secretless (capability-URL) token. |
secretless | boolean | 是 | Whether this token is a capability URL (no Bearer). |
table_id | string | 是 | Source table id. |
token_id | string | 是 | URL path segment: GET /public/module/custom_tables/read/{token_id}/records |
url_path | string | 是 | Ready-to-share relative path for the records endpoint. |
valid_until | string (date-time) | null | 否 | Expiry (UTC) or null. |
view_id | string | 是 | Published view id. |
範例
發布狀態檢視、隱藏其餘欄位,並設定九月到期
{
"pathParams": {
"table_id": "66666666-6666-4666-8666-666666666666"
},
"body": {
"view_id": "77777777-7777-4777-8777-777777777777",
"name": "Public order status board",
"visible_columns": [
"訂單編號",
"狀態",
"公開截止時間"
],
"read_filter": {
"and": [
{
"column": "col_9f2a1c",
"op": "gte",
"value": "$now"
}
]
},
"allow_query": true,
"rpm": 120,
"valid_until": "2026-09-01T00:00:00+08:00",
"secretless": false
}
}{
"token_id": "88888888-8888-4888-8888-888888888888",
"secret": "kQ8t2mZ0pR7wXvB4nS6yJ1hL3dF5gC9aE0uT8iO2rM4",
"url_path": "/public/module/custom_tables/read/88888888-8888-4888-8888-888888888888/records",
"table_id": "66666666-6666-4666-8666-666666666666",
"view_id": "77777777-7777-4777-8777-777777777777",
"allow_query": true,
"rpm": 120,
"secretless": false,
"valid_until": "2026-08-31T16:00:00"
}錯誤
| 狀態 | 發生條件 | 錯誤本文 |
|---|---|---|
| 400 | read_filter 不是合法的資料列政策:結構錯誤、欄位不存在、指向計算欄位,或使用了該欄位型別不接受的運算子。 | |
| 403 | 你不是這張資料表的版主。鑄造是一種「發布」行為,只有版主可以執行。 | |
| 404 | view_id 不屬於這張資料表。若 table_id 不存在,會更早在版主檢查回傳「Custom table not found」。 | |
| 409 | 資料表套用了 scoped channel 政策。公開讀者沒有任何頻道綁定,因此這類資料表永遠無法安全發布。 | |
| 422 | 檢視帶有跨表計算語法:computed_filters 非空,或 sort_by/sort 指向 link、rollup、lookup、formula 欄位。 | |
| 422 | visible_columns 指名了附件、link、rollup 或 lookup 欄位。這些型別在公開投影中一律強制隱藏,永遠不能發布。 | |
| 422 | read_filter 使用了 $me 或 $me.department。匿名通道沒有任何主體,因此在鑄造時就直接拒絕,而不是讓它默默匹配不到任何列。 | |
/private/module/custom_tables/{scopeName}/tables/{table_id}/public-read-tokens依建立時間由新到舊回傳這張資料表曾鑄造的所有公開讀取 token,含發布的檢視、白名單、資料列條件、到期時間與撤銷狀態。
用來稽核這張資料表目前有哪些內容被匿名公開,也用來找出要撤銷的 token_id。
- 聊天室
/private/module/custom_tables/chatroom/tables/{table_id}/public-read-tokens - 部門
/private/module/custom_tables/department/tables/{table_id}/public-read-tokens - 公司
/private/module/custom_tables/company/tables/{table_id}/public-read-tokens
範圍
| 範圍 | 是否提供 | 驗證與權限 |
|---|---|---|
| 聊天室 | 可使用 | CustomTableModeratorRequired |
| 部門 | 可使用 | CustomTableModeratorRequired |
| 公司 | 可使用 | CustomTableModeratorRequired |
參數
| 欄位 | 位置 | 型別 | 必填 | 說明 |
|---|---|---|---|---|
table_id | path | uuid | 是 | 要列出 token 的資料表 id。 |
回應結構
PublicReadTokenListResponse| 欄位 | 型別 | 必填 | 說明 |
|---|---|---|---|
tokens | PublicReadTokenInfo[] | 是 | 未指定 |
範例
同時稽核一個生效中與一個已撤銷的 token
{
"pathParams": {
"table_id": "66666666-6666-4666-8666-666666666666"
}
}{
"tokens": [
{
"id": "88888888-8888-4888-8888-888888888888",
"name": "Public order status board",
"table_id": "66666666-6666-4666-8666-666666666666",
"view_id": "77777777-7777-4777-8777-777777777777",
"visible_columns": [
"col_1a2b3c",
"col_4d5e6f",
"col_9f2a1c"
],
"read_filter": {
"and": [
{
"column": "col_9f2a1c",
"op": "gte",
"value": "$now"
}
]
},
"allow_query": true,
"rpm": 120,
"valid_until": "2026-08-31T16:00:00",
"revoked": false,
"created_by": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
"created_at": "2026-07-24T09:15:00",
"last_used_at": "2026-07-25T01:42:00"
},
{
"id": "99999999-9999-4999-8999-999999999999",
"name": "Trade-show kiosk",
"table_id": "66666666-6666-4666-8666-666666666666",
"view_id": "77777777-7777-4777-8777-777777777777",
"visible_columns": null,
"read_filter": null,
"allow_query": false,
"rpm": 60,
"valid_until": null,
"revoked": true,
"created_by": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
"created_at": "2026-06-02T03:00:00",
"last_used_at": null
}
]
}錯誤
| 狀態 | 發生條件 | 錯誤本文 |
|---|---|---|
| 403 | 你不是這張資料表的版主,因此無法查看它公開了哪些內容。 | |
| 404 | 沒有這個 id 的資料表(在處理函式執行前,由版主檢查拋出)。 | |
/private/module/custom_tables/{scopeName}/tables/{table_id}/public-read-tokens/{token_id}把單一公開讀取 token 標記為已撤銷,使匿名讀取通道不再服務它。
已發布的連結不再需要、疑似外流,或活動、檔期、合作對象結束時,應立即撤銷。
- 聊天室
/private/module/custom_tables/chatroom/tables/{table_id}/public-read-tokens/{token_id} - 部門
/private/module/custom_tables/department/tables/{table_id}/public-read-tokens/{token_id} - 公司
/private/module/custom_tables/company/tables/{table_id}/public-read-tokens/{token_id}
範圍
| 範圍 | 是否提供 | 驗證與權限 |
|---|---|---|
| 聊天室 | 可使用 | CustomTableModeratorRequired |
| 部門 | 可使用 | CustomTableModeratorRequired |
| 公司 | 可使用 | CustomTableModeratorRequired |
參數
| 欄位 | 位置 | 型別 | 必填 | 說明 |
|---|---|---|---|---|
table_id | path | uuid | 是 | 擁有該 token 的資料表 id;token 必須屬於它,否則回傳 404。 |
token_id | path | uuid | 是 | 鑄造時取得的 token_id(在列表端點中以 id 欄位回傳)。 |
回應結構
SuccessResponse| 欄位 | 型別 | 必填 | 說明 |
|---|---|---|---|
message | string | 否 | 未指定 |
範例
停用已發布的看板
{
"pathParams": {
"table_id": "66666666-6666-4666-8666-666666666666",
"token_id": "88888888-8888-4888-8888-888888888888"
}
}{
"message": "Public read token revoked"
}錯誤
| 狀態 | 發生條件 | 錯誤本文 |
|---|---|---|
| 403 | 你不是這張資料表的版主。 | |
| 404 | 這張資料表下沒有這個 id 的 token——不是 id 有誤,就是它屬於另一張資料表。 | |
| 404 | 沒有這個 id 的資料表(在處理函式執行前,由版主檢查拋出)。 | |
| 409 | 撤銷在鎖競爭中落敗,「沒有」發生——token 仍然存活、仍可匿名讀取。重試直到拿到 200;只有 200 才確認撤銷完成。 | |
/public/module/custom_tables/read/{token_id}/records回傳公開讀取 token 所發布的資料列(分頁),並附上資料表顯示名稱、總筆數與可見欄位清單。
在你為其鑄造 token 的看板、展場機台或合作夥伴頁面上使用——不需要帳號、不需要工作階段,也沒有範圍區段。
- 完整路由
/public/module/custom_tables/read/{token_id}/records
範圍
| 範圍 | 是否提供 | 驗證與權限 |
|---|---|---|
| 完整路由 | 可使用 | public read token — secretless (the URL id is the capability) or Authorization: Bearer <secret> |
參數
| 欄位 | 位置 | 型別 | 必填 | 說明 |
|---|---|---|---|---|
token_id | path | uuid | 是 | 鑄造時取得的 token_id。若為 secretless token,光是這個 id 就是憑證;否則還必須附上 Bearer secret。 |
skip | query | int | 否 | 略過的資料列數(位移),預設 0。 |
limit | query | int | 否 | 單頁最多回傳的資料列數,預設 50,硬上限 100——超過會回 422。 |
回應結構
PublicRecordListResponse| 欄位 | 型別 | 必填 | 說明 |
|---|---|---|---|
columns | PublicColumnInfo[] | 是 | Effective-VISIBLE columns only (name + type). Unpublished/hidden columns never appear here. |
records | PublicRecordOut[] | 是 | Page of visible records. |
table_name | string | 是 | Display name of the source table. |
total | integer | 是 | Total records matching the view (+ caller) filters. |
範例
讀取已發布的前兩列
{
"pathParams": {
"token_id": "88888888-8888-4888-8888-888888888888"
},
"query": {
"skip": "0",
"limit": "2"
}
}{
"records": [
{
"id": "bbbbbbbb-bbbb-4bbb-8bbb-bbbbbbbbbbbb",
"created_at": "2026-07-24T09:20:11",
"updated_at": "2026-07-25T01:05:00",
"data": {
"訂單編號": "ORD-1042",
"狀態": "已出貨",
"公開截止時間": "2026-08-31 16:00"
}
},
{
"id": "cccccccc-cccc-4ccc-8ccc-cccccccccccc",
"created_at": "2026-07-24T10:02:44",
"updated_at": "2026-07-24T10:02:44",
"data": {
"訂單編號": "ORD-1043",
"狀態": "備貨中",
"公開截止時間": "2026-08-31 16:00"
}
}
],
"total": 37,
"table_name": "訂單追蹤",
"columns": [
{
"name": "訂單編號",
"type": "string"
},
{
"name": "狀態",
"type": "select"
},
{
"name": "公開截止時間",
"type": "datetime"
}
]
}錯誤
| 狀態 | 發生條件 | 錯誤本文 |
|---|---|---|
| 404 | 唯一的統一失敗回應:token 不存在、已撤銷、已過期,Bearer secret 錯誤或缺漏,資料表已刪除,或檢視的篩選/排序如今指向隱藏欄位。以上全部回傳完全相同的內容。 | |
| 422 | skip 為負,或 limit 小於 1、大於 100——屬於一般的請求驗證,發生在查詢 token 之前。 | |
| 429 | token 超出自身的 rpm 額度。訊息會引用該 token 設定的速率,因此以 rpm=120 鑄造的 token 會顯示 120/min。 | |
/public/module/custom_tables/read/{token_id}/records/{record_id}依 id 回傳單一已發布的資料列,形狀與列表回應中的單一元素完全相同。
當公開看板需要詳細頁或永久連結,且已從列表端點取得資料列 id 時使用。
- 完整路由
/public/module/custom_tables/read/{token_id}/records/{record_id}
範圍
| 範圍 | 是否提供 | 驗證與權限 |
|---|---|---|
| 完整路由 | 可使用 | public read token — secretless (the URL id is the capability) or Authorization: Bearer <secret> |
參數
| 欄位 | 位置 | 型別 | 必填 | 說明 |
|---|---|---|---|---|
token_id | path | uuid | 是 | 鑄造時取得的 token_id;憑證規則與列表端點相同。 |
record_id | path | uuid | 是 | 資料列 id,即列表回應中 id 欄位的值。 |
回應結構
PublicRecordOut| 欄位 | 型別 | 必填 | 說明 |
|---|---|---|---|
created_at | string (date-time) | 是 | Record creation time (UTC). |
data | object | 是 | Visible column values, display-named. Hidden/unpublished columns are absent (stripped, not nulled). |
id | string | 是 | Record id. |
updated_at | string (date-time) | 是 | Record last-update time (UTC). |
範例
依 id 取得單一已發布資料列
{
"pathParams": {
"token_id": "88888888-8888-4888-8888-888888888888",
"record_id": "bbbbbbbb-bbbb-4bbb-8bbb-bbbbbbbbbbbb"
}
}{
"id": "bbbbbbbb-bbbb-4bbb-8bbb-bbbbbbbbbbbb",
"created_at": "2026-07-24T09:20:11",
"updated_at": "2026-07-25T01:05:00",
"data": {
"訂單編號": "ORD-1042",
"狀態": "已出貨",
"公開截止時間": "2026-08-31 16:00"
}
}錯誤
| 狀態 | 發生條件 | 錯誤本文 |
|---|---|---|
| 404 | token 不存在、已撤銷、已過期,密鑰錯誤,資料表已消失——或這筆資料列根本沒有通過檢視條件與 token 資料列政策。這些情況在設計上就無法區分。 | |
| 429 | token 超出自身的 rpm 額度。 | |
/public/module/custom_tables/read/{token_id}/query接受額外的篩選、判斷式、文字搜尋與呼叫端排序。篩選與搜尋會收窄已發布的資料列切片;若有提供,呼叫端排序會取代檢視排序。回傳形狀與列表端點相同。
當公開消費端需要自己的搜尋框、狀態篩選或排序時使用——且僅限以 allow_query=true 鑄造的 token。
- 完整路由
/public/module/custom_tables/read/{token_id}/query
範圍
| 範圍 | 是否提供 | 驗證與權限 |
|---|---|---|
| 完整路由 | 可使用 | public read token minted with allow_query=true — secretless or Authorization: Bearer <secret> |
參數
| 欄位 | 位置 | 型別 | 必填 | 說明 |
|---|---|---|---|---|
token_id | path | uuid | 是 | 鑄造時取得的 token_id。該 token 必須以 allow_query=true 鑄造,否則此端點回傳統一 404。 |
請求結構
PublicQueryRequest| 欄位 | 型別 | 必填 | 說明 |
|---|---|---|---|
any_of | StoredFilterGroup[] | null | 否 | OR-groups (predicates AND within a group, groups OR together); the whole block AND-combines with the view + other caller clauses. |
filters | object | null | 否 | Type-aware dict filters (ILIKE partial for string/text, exact otherwise). Keys are INTERNAL col_<hex> ids. AND-ed onto the view's own filters (view constraints always win on key collision — a caller can never override/widen a view filter). |
limit | integer | 否 | Max records to return (capped at 100). |
q | string | null | 否 | Global case-insensitive substring search across VISIBLE string/text columns only; AND-combined with the rest. |
skip | integer | 否 | Records to skip (offset). |
sort | SortKey[] | null | 否 | Multi-column sort (takes precedence over sort_by). Same per-key column rules as sort_by. |
sort_by | string | null | 否 | Single-column sort key — INTERNAL col_<hex> of a stored scalar column or id/created_at/updated_at. Computed/attachment/json/principal columns are rejected (400). |
sort_order | string | null | 否 | Sort direction for sort_by: 'asc' or 'desc'. |
stored_filters | StoredFilterPredicate[] | null | 否 | Typed predicates on stored/link columns of this table, AND-ed onto the view clauses. rollup/lookup/formula columns are rejected (400). |
回應結構
PublicRecordListResponse| 欄位 | 型別 | 必填 | 說明 |
|---|---|---|---|
columns | PublicColumnInfo[] | 是 | Effective-VISIBLE columns only (name + type). Unpublished/hidden columns never appear here. |
records | PublicRecordOut[] | 是 | Page of visible records. |
table_name | string | 是 | Display name of the source table. |
total | integer | 是 | Total records matching the view (+ caller) filters. |
範例
篩選已出貨訂單、搜尋訂單編號並依截止時間排序
{
"pathParams": {
"token_id": "88888888-8888-4888-8888-888888888888"
},
"body": {
"filters": {
"col_4d5e6f": "已出貨"
},
"q": "ORD-10",
"sort": [
{
"column": "col_9f2a1c",
"order": "desc"
}
],
"skip": 0,
"limit": 2
}
}{
"records": [
{
"id": "bbbbbbbb-bbbb-4bbb-8bbb-bbbbbbbbbbbb",
"created_at": "2026-07-24T09:20:11",
"updated_at": "2026-07-25T01:05:00",
"data": {
"訂單編號": "ORD-1042",
"狀態": "已出貨",
"公開截止時間": "2026-08-31 16:00"
}
}
],
"total": 1,
"table_name": "訂單追蹤",
"columns": [
{
"name": "訂單編號",
"type": "string"
},
{
"name": "狀態",
"type": "select"
},
{
"name": "公開截止時間",
"type": "datetime"
}
]
}錯誤
| 狀態 | 發生條件 | 錯誤本文 |
|---|---|---|
| 400 | 呼叫端的篩選或排序指向不存在的欄位——或存在但在此 token 上被隱藏的欄位。兩者產生完全相同的訊息,因此這個回應無法用來探測隱藏欄位。 | |
| 400 | filters 的鍵或排序目標指向 link、rollup、lookup 或 formula 欄位。排序時對應的訊息為「Cannot sort on computed column」。 | |
| 400 | 請求本文驗證失敗:出現未知的鍵(模型禁止額外欄位,因此 computed_filters 與所有聚合成員一律拒絕)、型別錯誤,或 limit 超過 100。 | |
| 404 | 與列表端點相同的統一 404,另加一個原因:該 token 是以 allow_query=false 鑄造的。停用的查詢能力回傳 404,而非 405。 | |
| 413 | 原始請求本文超過 16 KB。公開端的收窄條件都很小;這個上限甚至在查詢 token 之前就會檢查。 | |
| 429 | token 超出自身的 rpm 額度。 | |