Skip to Content
API 參考公開讀取權杖

公開讀取 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 發生鍵衝突時則由檢視勝出。排序不同:若呼叫端提供 sortsort_by,它會取代檢視的排序,但不會改變哪些資料列有資格出現。回傳的內容刻意極簡:每筆資料列只有 idcreated_atupdated_atdata,外加 table_nametotal 與可見的 columns。沒有 created_by、沒有 pending_approval、沒有任何位置或租戶 id,也沒有資料表的 settings、rules 或 ACL。

Query request model 是封閉集合:只有 filtersstored_filtersany_ofqsort_bysort_ordersortskiplimit。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 時,網址本身就是憑證,任何拿到連結的人在你撤銷之前都能持續讀取該檢視。

POST
路由範本/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_idpathuuid要發布檢視的資料表 id;版主檢查僅憑這個 id 就能解析出資料表所屬範圍。

請求結構

PublicReadTokenMintPayload
欄位型別必填說明
allow_querybooleanWhen 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.
namestring | nullLabel shown in listings.
read_filterobject | nullExtra 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).
rpmintegerPer-token requests-per-minute throttle.
secretlessbooleanWhen true, the uuid4 id itself is the capability (no Bearer secret). When false, a Bearer secret is minted and returned ONCE.
valid_untilstring (date-time) | nullExpiry (UTC); null = no expiry. Expired tokens answer the uniform 404.
view_idstringId of the view to publish (must belong to this table).
visible_columnsstring[] | nullOptional 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_querybooleanWhether the /query endpoint is enabled.
rpmintegerPer-token throttle.
secretstring | nullBearer secret — shown ONCE, never retrievable again. Null for a secretless (capability-URL) token.
secretlessbooleanWhether this token is a capability URL (no Bearer).
table_idstringSource table id.
token_idstringURL path segment: GET /public/module/custom_tables/read/{token_id}/records
url_pathstringReady-to-share relative path for the records endpoint.
valid_untilstring (date-time) | nullExpiry (UTC) or null.
view_idstringPublished 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
  }
}
回應200
{
  "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"
}

錯誤

狀態發生條件錯誤本文
400read_filter 不是合法的資料列政策:結構錯誤、欄位不存在、指向計算欄位,或使用了該欄位型別不接受的運算子。
{
  "detail": "row policy and[0] references unknown column '狀態' (use the internal col_<hex> key)"
}
403你不是這張資料表的版主。鑄造是一種「發布」行為,只有版主可以執行。
{
  "detail": "Insufficient permissions. Required: table moderator, chatroom creator, or management rights."
}
404view_id 不屬於這張資料表。若 table_id 不存在,會更早在版主檢查回傳「Custom table not found」。
{
  "detail": "View not found"
}
409資料表套用了 scoped channel 政策。公開讀者沒有任何頻道綁定,因此這類資料表永遠無法安全發布。
{
  "detail": "Cannot publish a table governed by a scoped channel policy"
}
422檢視帶有跨表計算語法:computed_filters 非空,或 sort_by/sort 指向 link、rollup、lookup、formula 欄位。
{
  "detail": "View uses cross-table computed filters/sort and cannot be published for public read"
}
422visible_columns 指名了附件、link、rollup 或 lookup 欄位。這些型別在公開投影中一律強制隱藏,永遠不能發布。
{
  "detail": "visible_columns may not publish column '合約附件' (attachment/link/rollup/lookup columns are never public)"
}
422read_filter 使用了 $me 或 $me.department。匿名通道沒有任何主體,因此在鑄造時就直接拒絕,而不是讓它默默匹配不到任何列。
{
  "detail": "read_filter may not reference $me / $me.department on a public token (no principal exists); $today is allowed"
}
GET
路由範本/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_idpathuuid要列出 token 的資料表 id。

回應結構

PublicReadTokenListResponse
欄位型別必填說明
tokensPublicReadTokenInfo[]未指定

範例

同時稽核一個生效中與一個已撤銷的 token

請求
{
  "pathParams": {
    "table_id": "66666666-6666-4666-8666-666666666666"
  }
}
回應200
{
  "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你不是這張資料表的版主,因此無法查看它公開了哪些內容。
{
  "detail": "Insufficient permissions. Required: table moderator, chatroom creator, or management rights."
}
404沒有這個 id 的資料表(在處理函式執行前,由版主檢查拋出)。
{
  "detail": "Custom table not found"
}
DELETE
路由範本/private/module/custom_tables/{scopeName}/tables/{table_id}/public-read-tokens/{token_id}

撤銷公開讀取 token

用途

把單一公開讀取 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_idpathuuid擁有該 token 的資料表 id;token 必須屬於它,否則回傳 404。
token_idpathuuid鑄造時取得的 token_id(在列表端點中以 id 欄位回傳)。

回應結構

SuccessResponse
欄位型別必填說明
messagestring未指定

範例

停用已發布的看板

請求
{
  "pathParams": {
    "table_id": "66666666-6666-4666-8666-666666666666",
    "token_id": "88888888-8888-4888-8888-888888888888"
  }
}
回應200
{
  "message": "Public read token revoked"
}

錯誤

狀態發生條件錯誤本文
403你不是這張資料表的版主。
{
  "detail": "Insufficient permissions. Required: table moderator, chatroom creator, or management rights."
}
404這張資料表下沒有這個 id 的 token——不是 id 有誤,就是它屬於另一張資料表。
{
  "detail": "Token not found"
}
404沒有這個 id 的資料表(在處理函式執行前,由版主檢查拋出)。
{
  "detail": "Custom table not found"
}
409撤銷在鎖競爭中落敗,「沒有」發生——token 仍然存活、仍可匿名讀取。重試直到拿到 200;只有 200 才確認撤銷完成。
{
  "detail": "Concurrent write conflict (lock); please retry the request."
}
GET
路由範本/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_idpathuuid鑄造時取得的 token_id。若為 secretless token,光是這個 id 就是憑證;否則還必須附上 Bearer secret。
skipqueryint略過的資料列數(位移),預設 0。
limitqueryint單頁最多回傳的資料列數,預設 50,硬上限 100——超過會回 422。

回應結構

PublicRecordListResponse
欄位型別必填說明
columnsPublicColumnInfo[]Effective-VISIBLE columns only (name + type). Unpublished/hidden columns never appear here.
recordsPublicRecordOut[]Page of visible records.
table_namestringDisplay name of the source table.
totalintegerTotal records matching the view (+ caller) filters.

範例

讀取已發布的前兩列

請求
{
  "pathParams": {
    "token_id": "88888888-8888-4888-8888-888888888888"
  },
  "query": {
    "skip": "0",
    "limit": "2"
  }
}
回應200
{
  "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 錯誤或缺漏,資料表已刪除,或檢視的篩選/排序如今指向隱藏欄位。以上全部回傳完全相同的內容。
{
  "detail": "Not found"
}
422skip 為負,或 limit 小於 1、大於 100——屬於一般的請求驗證,發生在查詢 token 之前。
{
  "detail": [
    {
      "loc": [
        "query",
        "limit"
      ],
      "msg": "Input should be less than or equal to 100",
      "type": "less_than_equal"
    }
  ]
}
429token 超出自身的 rpm 額度。訊息會引用該 token 設定的速率,因此以 rpm=120 鑄造的 token 會顯示 120/min。
{
  "detail": "rate limit exceeded (120/min per token)"
}
GET
路由範本/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_idpathuuid鑄造時取得的 token_id;憑證規則與列表端點相同。
record_idpathuuid資料列 id,即列表回應中 id 欄位的值。

回應結構

PublicRecordOut
欄位型別必填說明
created_atstring (date-time)Record creation time (UTC).
dataobjectVisible column values, display-named. Hidden/unpublished columns are absent (stripped, not nulled).
idstringRecord id.
updated_atstring (date-time)Record last-update time (UTC).

範例

依 id 取得單一已發布資料列

請求
{
  "pathParams": {
    "token_id": "88888888-8888-4888-8888-888888888888",
    "record_id": "bbbbbbbb-bbbb-4bbb-8bbb-bbbbbbbbbbbb"
  }
}
回應200
{
  "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"
  }
}

錯誤

狀態發生條件錯誤本文
404token 不存在、已撤銷、已過期,密鑰錯誤,資料表已消失——或這筆資料列根本沒有通過檢視條件與 token 資料列政策。這些情況在設計上就無法區分。
{
  "detail": "Not found"
}
429token 超出自身的 rpm 額度。
{
  "detail": "rate limit exceeded (120/min per token)"
}
POST
路由範本/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_idpathuuid鑄造時取得的 token_id。該 token 必須以 allow_query=true 鑄造,否則此端點回傳統一 404。

請求結構

PublicQueryRequest
欄位型別必填說明
any_ofStoredFilterGroup[] | nullOR-groups (predicates AND within a group, groups OR together); the whole block AND-combines with the view + other caller clauses.
filtersobject | nullType-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).
limitintegerMax records to return (capped at 100).
qstring | nullGlobal case-insensitive substring search across VISIBLE string/text columns only; AND-combined with the rest.
skipintegerRecords to skip (offset).
sortSortKey[] | nullMulti-column sort (takes precedence over sort_by). Same per-key column rules as sort_by.
sort_bystring | nullSingle-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_orderstring | nullSort direction for sort_by: 'asc' or 'desc'.
stored_filtersStoredFilterPredicate[] | nullTyped predicates on stored/link columns of this table, AND-ed onto the view clauses. rollup/lookup/formula columns are rejected (400).

回應結構

PublicRecordListResponse
欄位型別必填說明
columnsPublicColumnInfo[]Effective-VISIBLE columns only (name + type). Unpublished/hidden columns never appear here.
recordsPublicRecordOut[]Page of visible records.
table_namestringDisplay name of the source table.
totalintegerTotal 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
  }
}
回應200
{
  "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 上被隱藏的欄位。兩者產生完全相同的訊息,因此這個回應無法用來探測隱藏欄位。
{
  "detail": "Column 'col_7e3d21' does not exist in table schema"
}
400filters 的鍵或排序目標指向 link、rollup、lookup 或 formula 欄位。排序時對應的訊息為「Cannot sort on computed column」。
{
  "detail": "Cannot filter on computed column 'col_5b8c40'"
}
400請求本文驗證失敗:出現未知的鍵(模型禁止額外欄位,因此 computed_filters 與所有聚合成員一律拒絕)、型別錯誤,或 limit 超過 100。
{
  "detail": "invalid body: 1 validation error for PublicQueryRequest\ncomputed_filters\n  Extra inputs are not permitted"
}
404與列表端點相同的統一 404,另加一個原因:該 token 是以 allow_query=false 鑄造的。停用的查詢能力回傳 404,而非 405。
{
  "detail": "Not found"
}
413原始請求本文超過 16 KB。公開端的收窄條件都很小;這個上限甚至在查詢 token 之前就會檢查。
{
  "detail": "body exceeds 16384 bytes"
}
429token 超出自身的 rpm 額度。
{
  "detail": "rate limit exceeded (120/min per token)"
}
Last updated on