僅在使用時載入搜尋。在下方瀏覽所有類別。

分析與洞察

搜尋 Threads

在該連線具備確切權限時,執行有界官方關鍵字或標籤搜尋。排序結果並不完整,也不代表應用程式已獲公開核准。

POST /analytics-api/threads-reads/keyword-search

契約檢閱日期: · sha256:11debf801a5e6096

概覽

在該連線具備確切權限時,執行有界官方關鍵字或標籤搜尋。排序結果並不完整,也不代表應用程式已獲公開核准。

成功 HTTP 回應可能表示請求已接受,並非已完成。背景工作請儲存回傳 ID,持續檢查同一操作直到完成。已排程或已接受的貼文,只有平台確認後才算已發布;用戶端逾時無法證明結果。

驗證與權限

接受的憑證類別
user_session, delegated_oauth, personal_access_token
委派能力
agent:operate
最低工作空間角色
viewer
存取範圍
此使用者有權存取的資源
需要所有工作空間同意
否
變更狀態
否
操作完成時
bounded official data or explicit unavailable; granted scopes do not establish public App Review approval

權杖只能使用其擁有者持有的權利。每次請求會檢查工作空間成員資格、資源擁有權、所選工作空間及已授予能力。core 與 full 設定檔只變更顯示的工具,不會授予存取權。

請求欄位

「必填」是指在其父物件及所選分支內必填。必填子欄位不會使選填父物件變成必填。下列規則與欄位名稱均複製自契約。

請求欄位
欄位 / 分支類型 / 必填約束
$object在父物件中必填
  • additionalProperties: false
workspace_idstring在父物件中必填
  • format: "uuid"
  • pattern: "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
social_account_idstring在父物件中必填
  • format: "uuid"
  • pattern: "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
sinceinteger選填/項目
  • minimum: 1688540400
  • maximum: 9007199254740991
untilinteger選填/項目
  • minimum: 1688540400
  • maximum: 9007199254740991
qstring在父物件中必填
  • minLength: 1
  • maxLength: 200
search_typestring選填/項目
  • enum: ["TOP","RECENT"]
  • default: "TOP"
search_modestring選填/項目
  • enum: ["KEYWORD","TAG"]
  • default: "KEYWORD"
media_typestring選填/項目
  • enum: ["TEXT","IMAGE","VIDEO"]
author_usernamestring選填/項目
  • pattern: "^[A-Za-z0-9._]{1,30}$"
limitinteger選填/項目
  • minimum: 1
  • maximum: 100
  • default: 25
完整 JSON Schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "workspace_id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "social_account_id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "since": {
      "type": "integer",
      "minimum": 1688540400,
      "maximum": 9007199254740991
    },
    "until": {
      "type": "integer",
      "minimum": 1688540400,
      "maximum": 9007199254740991
    },
    "q": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "search_type": {
      "default": "TOP",
      "type": "string",
      "enum": [
        "TOP",
        "RECENT"
      ]
    },
    "search_mode": {
      "default": "KEYWORD",
      "type": "string",
      "enum": [
        "KEYWORD",
        "TAG"
      ]
    },
    "media_type": {
      "type": "string",
      "enum": [
        "TEXT",
        "IMAGE",
        "VIDEO"
      ]
    },
    "author_username": {
      "type": "string",
      "pattern": "^[A-Za-z0-9._]{1,30}$"
    },
    "limit": {
      "default": 25,
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    }
  },
  "required": [
    "workspace_id",
    "social_account_id",
    "q"
  ],
  "additionalProperties": false
}

回應與完成

成功 HTTP 狀態:200。操作完成時: bounded official data or explicit unavailable; granted scopes do not establish public App Review approval.

成功 HTTP 回應可能表示請求已接受,並非已完成。背景工作請儲存回傳 ID,持續檢查同一操作直到完成。已排程或已接受的貼文,只有平台確認後才算已發布;用戶端逾時無法證明結果。

「必填」是指在其父物件及所選分支內必填。必填子欄位不會使選填父物件變成必填。下列規則與欄位名稱均複製自契約。

回應與完成
欄位 / 分支類型 / 必填約束
$object在父物件中必填—
contract_versionstring在父物件中必填
  • const: "threads-reads/v1"
operationstring在父物件中必填
  • const: "keyword_search"
sourcestring在父物件中必填
  • const: "official_threads_api"
workspace_idstring在父物件中必填
  • format: "uuid"
  • pattern: "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
social_account_idstring在父物件中必填
  • format: "uuid"
  • pattern: "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
provider_account_idstring在父物件中必填
  • pattern: "^\\d{2,20}$"
provider_app_identitystring | null在父物件中必填—
provider_app_identityanyOf 1string在父物件中必填
  • minLength: 1
  • maxLength: 100
provider_app_identityanyOf 2null在父物件中必填—
oauth_snapshot_idstring | null在父物件中必填—
oauth_snapshot_idanyOf 1string在父物件中必填
  • format: "uuid"
  • pattern: "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
oauth_snapshot_idanyOf 2null在父物件中必填—
fetched_atstring在父物件中必填
  • format: "date-time"
  • pattern: "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
statusstring在父物件中必填
  • enum: ["available","partial","unavailable"]
unavailable_reasonstring | null在父物件中必填—
unavailable_reasonanyOf 1string在父物件中必填
  • enum: ["grant_inventory_unknown","missing_permissions","issuing_app_unknown","credential_unavailable","credential_expired","account_unhealthy","provider_denied","provider_rate_limited","provider_unavailable","provider_response_invalid"]
unavailable_reasonanyOf 2null在父物件中必填—
accessobject在父物件中必填—
access.required_permissionsarray在父物件中必填
  • maxItems: 4
access.required_permissions[]string選填/項目
  • pattern: "^[a-z][a-z0-9_]{0,99}$"
access.missing_permissionsarray在父物件中必填
  • maxItems: 4
access.missing_permissions[]string選填/項目
  • pattern: "^[a-z][a-z0-9_]{0,99}$"
access.permission_statestring在父物件中必填
  • enum: ["granted","missing","unknown"]
access.grant_evidencestring在父物件中必填
  • enum: ["exact","unknown"]
access.app_accessstring在父物件中必填
  • const: "unverified"
dataarray在父物件中必填
  • maxItems: 100
data[]object選填/項目—
data[].idstring在父物件中必填
  • pattern: "^\\d{2,20}$"
data[].textstring | null在父物件中必填—
data[].textanyOf 1string在父物件中必填
  • maxLength: 30000
data[].textanyOf 2null在父物件中必填—
data[].usernamestring | null在父物件中必填—
data[].usernameanyOf 1string在父物件中必填
  • pattern: "^[A-Za-z0-9._]{1,30}$"
data[].usernameanyOf 2null在父物件中必填—
data[].permalinkstring | null在父物件中必填—
data[].permalinkanyOf 1string在父物件中必填
  • format: "uri"
data[].permalinkanyOf 2null在父物件中必填—
data[].timestampstring | null在父物件中必填—
data[].timestampanyOf 1string在父物件中必填
  • format: "date-time"
  • pattern: "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
data[].timestampanyOf 2null在父物件中必填—
data[].media_typestring | null在父物件中必填—
data[].media_typeanyOf 1string在父物件中必填
  • enum: ["TEXT","TEXT_POST","IMAGE","VIDEO","CAROUSEL_ALBUM","AUDIO","REPOST_FACADE"]
data[].media_typeanyOf 2null在父物件中必填—
data[].is_replyboolean | null在父物件中必填—
data[].is_quote_postboolean | null在父物件中必填—
data[].has_repliesboolean | null在父物件中必填—
data[].root_post_idstring | null選填/項目—
data[].root_post_idanyOf 1string選填/項目
  • pattern: "^\\d{2,20}$"
data[].root_post_idanyOf 2null選填/項目—
data[].replied_to_idstring | null選填/項目—
data[].replied_to_idanyOf 1string選填/項目
  • pattern: "^\\d{2,20}$"
data[].replied_to_idanyOf 2null選填/項目—
profileobject | null在父物件中必填—
profileanyOf 1object在父物件中必填—
profile.usernameanyOf 1string在父物件中必填
  • pattern: "^[A-Za-z0-9._]{1,30}$"
profile.nameanyOf 1string | null在父物件中必填—
profile.nameanyOf 1 / anyOf 1string在父物件中必填
  • maxLength: 200
profile.nameanyOf 1 / anyOf 2null在父物件中必填—
profile.biographyanyOf 1string | null在父物件中必填—
profile.biographyanyOf 1 / anyOf 1string在父物件中必填
  • maxLength: 2000
profile.biographyanyOf 1 / anyOf 2null在父物件中必填—
profile.is_verifiedanyOf 1boolean | null在父物件中必填—
profile.follower_countanyOf 1integer | null在父物件中必填—
profile.follower_countanyOf 1 / anyOf 1integer在父物件中必填
  • minimum: 0
  • maximum: 9007199254740991
profile.follower_countanyOf 1 / anyOf 2null在父物件中必填—
profileanyOf 2null在父物件中必填—
locationsarray選填/項目
  • maxItems: 100
locations[]object選填/項目—
locations[].idstring在父物件中必填
  • pattern: "^\\d{2,20}$"
locations[].namestring | null在父物件中必填—
locations[].nameanyOf 1string在父物件中必填
  • maxLength: 200
locations[].nameanyOf 2null在父物件中必填—
locations[].addressstring | null在父物件中必填—
locations[].addressanyOf 1string在父物件中必填
  • maxLength: 500
locations[].addressanyOf 2null在父物件中必填—
locations[].citystring | null在父物件中必填—
locations[].cityanyOf 1string在父物件中必填
  • maxLength: 200
locations[].cityanyOf 2null在父物件中必填—
locations[].countrystring | null在父物件中必填—
locations[].countryanyOf 1string在父物件中必填
  • maxLength: 200
locations[].countryanyOf 2null在父物件中必填—
locations[].postal_codestring | null在父物件中必填—
locations[].postal_codeanyOf 1string在父物件中必填
  • maxLength: 100
locations[].postal_codeanyOf 2null在父物件中必填—
root_post_idstring選填/項目
  • pattern: "^\\d{2,20}$"
target_usernamestring選填/項目
  • pattern: "^[A-Za-z0-9._]{1,30}$"
coverageobject在父物件中必填—
coverage.completeboolean在父物件中必填
  • const: false
coverage.next_cursorstring | null在父物件中必填—
coverage.next_cursoranyOf 1string在父物件中必填
  • minLength: 1
  • maxLength: 4096
coverage.next_cursoranyOf 2null在父物件中必填—
coverage.omitted_rowsinteger在父物件中必填
  • minimum: 0
  • maximum: 9007199254740991
coverage.reasonsarray在父物件中必填
  • maxItems: 8
coverage.reasons[]string選填/項目
  • maxLength: 400
quotaarray在父物件中必填
  • maxItems: 1
quota[]object選填/項目—
quota[].providerstring在父物件中必填
  • const: "meta"
quota[].usageobject在父物件中必填—
quota[].usage.call_countnumber選填/項目—
quota[].usage.total_cputimenumber選填/項目—
quota[].usage.total_timenumber選填/項目—
quota[].usage.estimated_time_to_regain_accessnumber選填/項目—
quota[].sourcesarray在父物件中必填
  • maxItems: 2
quota[].sources[]string選填/項目
  • enum: ["x-app-usage","x-business-use-case-usage"]
完整 JSON Schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "contract_version": {
      "type": "string",
      "const": "threads-reads/v1"
    },
    "operation": {
      "type": "string",
      "const": "keyword_search"
    },
    "source": {
      "type": "string",
      "const": "official_threads_api"
    },
    "workspace_id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "social_account_id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "provider_account_id": {
      "type": "string",
      "pattern": "^\\d{2,20}$"
    },
    "provider_app_identity": {
      "anyOf": [
        {
          "type": "string",
          "minLength": 1,
          "maxLength": 100
        },
        {
          "type": "null"
        }
      ]
    },
    "oauth_snapshot_id": {
      "anyOf": [
        {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
        },
        {
          "type": "null"
        }
      ]
    },
    "fetched_at": {
      "type": "string",
      "format": "date-time",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
    },
    "status": {
      "type": "string",
      "enum": [
        "available",
        "partial",
        "unavailable"
      ]
    },
    "unavailable_reason": {
      "anyOf": [
        {
          "type": "string",
          "enum": [
            "grant_inventory_unknown",
            "missing_permissions",
            "issuing_app_unknown",
            "credential_unavailable",
            "credential_expired",
            "account_unhealthy",
            "provider_denied",
            "provider_rate_limited",
            "provider_unavailable",
            "provider_response_invalid"
          ]
        },
        {
          "type": "null"
        }
      ]
    },
    "access": {
      "type": "object",
      "properties": {
        "required_permissions": {
          "maxItems": 4,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[a-z][a-z0-9_]{0,99}$"
          }
        },
        "missing_permissions": {
          "maxItems": 4,
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^[a-z][a-z0-9_]{0,99}$"
          }
        },
        "permission_state": {
          "type": "string",
          "enum": [
            "granted",
            "missing",
            "unknown"
          ]
        },
        "grant_evidence": {
          "type": "string",
          "enum": [
            "exact",
            "unknown"
          ]
        },
        "app_access": {
          "type": "string",
          "const": "unverified"
        }
      },
      "required": [
        "required_permissions",
        "missing_permissions",
        "permission_state",
        "grant_evidence",
        "app_access"
      ]
    },
    "data": {
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^\\d{2,20}$"
          },
          "text": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 30000
              },
              {
                "type": "null"
              }
            ]
          },
          "username": {
            "anyOf": [
              {
                "type": "string",
                "pattern": "^[A-Za-z0-9._]{1,30}$"
              },
              {
                "type": "null"
              }
            ]
          },
          "permalink": {
            "anyOf": [
              {
                "type": "string",
                "format": "uri"
              },
              {
                "type": "null"
              }
            ]
          },
          "timestamp": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time",
                "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
              },
              {
                "type": "null"
              }
            ]
          },
          "media_type": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "TEXT",
                  "TEXT_POST",
                  "IMAGE",
                  "VIDEO",
                  "CAROUSEL_ALBUM",
                  "AUDIO",
                  "REPOST_FACADE"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "is_reply": {
            "type": [
              "boolean",
              "null"
            ]
          },
          "is_quote_post": {
            "type": [
              "boolean",
              "null"
            ]
          },
          "has_replies": {
            "type": [
              "boolean",
              "null"
            ]
          },
          "root_post_id": {
            "anyOf": [
              {
                "type": "string",
                "pattern": "^\\d{2,20}$"
              },
              {
                "type": "null"
              }
            ]
          },
          "replied_to_id": {
            "anyOf": [
              {
                "type": "string",
                "pattern": "^\\d{2,20}$"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "id",
          "text",
          "username",
          "permalink",
          "timestamp",
          "media_type",
          "is_reply",
          "is_quote_post",
          "has_replies"
        ]
      }
    },
    "profile": {
      "anyOf": [
        {
          "type": "object",
          "properties": {
            "username": {
              "type": "string",
              "pattern": "^[A-Za-z0-9._]{1,30}$"
            },
            "name": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 200
                },
                {
                  "type": "null"
                }
              ]
            },
            "biography": {
              "anyOf": [
                {
                  "type": "string",
                  "maxLength": 2000
                },
                {
                  "type": "null"
                }
              ]
            },
            "is_verified": {
              "type": [
                "boolean",
                "null"
              ]
            },
            "follower_count": {
              "anyOf": [
                {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "username",
            "name",
            "biography",
            "is_verified",
            "follower_count"
          ]
        },
        {
          "type": "null"
        }
      ]
    },
    "locations": {
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^\\d{2,20}$"
          },
          "name": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 200
              },
              {
                "type": "null"
              }
            ]
          },
          "address": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 500
              },
              {
                "type": "null"
              }
            ]
          },
          "city": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 200
              },
              {
                "type": "null"
              }
            ]
          },
          "country": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 200
              },
              {
                "type": "null"
              }
            ]
          },
          "postal_code": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 100
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "id",
          "name",
          "address",
          "city",
          "country",
          "postal_code"
        ]
      }
    },
    "root_post_id": {
      "type": "string",
      "pattern": "^\\d{2,20}$"
    },
    "target_username": {
      "type": "string",
      "pattern": "^[A-Za-z0-9._]{1,30}$"
    },
    "coverage": {
      "type": "object",
      "properties": {
        "complete": {
          "type": "boolean",
          "const": false
        },
        "next_cursor": {
          "anyOf": [
            {
              "type": "string",
              "minLength": 1,
              "maxLength": 4096
            },
            {
              "type": "null"
            }
          ]
        },
        "omitted_rows": {
          "type": "integer",
          "minimum": 0,
          "maximum": 9007199254740991
        },
        "reasons": {
          "maxItems": 8,
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 400
          }
        }
      },
      "required": [
        "complete",
        "next_cursor",
        "omitted_rows",
        "reasons"
      ]
    },
    "quota": {
      "maxItems": 1,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "provider": {
            "type": "string",
            "const": "meta"
          },
          "usage": {
            "type": "object",
            "properties": {
              "call_count": {
                "type": "number"
              },
              "total_cputime": {
                "type": "number"
              },
              "total_time": {
                "type": "number"
              },
              "estimated_time_to_regain_access": {
                "type": "number"
              }
            }
          },
          "sources": {
            "maxItems": 2,
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "x-app-usage",
                "x-business-use-case-usage"
              ]
            }
          }
        },
        "required": [
          "provider",
          "usage",
          "sources"
        ]
      }
    }
  },
  "required": [
    "contract_version",
    "operation",
    "source",
    "workspace_id",
    "social_account_id",
    "provider_account_id",
    "provider_app_identity",
    "oauth_snapshot_id",
    "fetched_at",
    "status",
    "unavailable_reason",
    "access",
    "data",
    "profile",
    "coverage",
    "quota"
  ]
}

錯誤與安全重試

檢查 HTTP 狀態和回應內容。400 驗證錯誤可能包含 ZodError;處理常式錯誤使用 error、message 和 code 欄位。保留 request_id 或 x-request-id 以便診斷,但不要保留憑證。先解決 401/403 存取錯誤再重試,並在收到 429 時遵循 Retry-After。如寫入結果不確定或回傳 5xx,先讀取現有結果。僅在支援時重複使用冪等鍵;重試行為因操作而異,並不保證恰好傳送一次。

故障排查指南

範例

這些範例使用已依結構描述檢查的虛構值。請將 ID 替換為您有權使用的 ID、將媒體替換為已就緒素材,並將日期替換為已確認的發布時間。提交寫入前,請檢查帳號資格。本頁不會傳送 API 請求。

在伺服器上將 SOSOAPI_ACCESS_TOKEN 設為此操作接受的憑證,且不要放入瀏覽器程式碼。AI 代理程式請使用 sosoapi auth login 透過瀏覽器登入,並由 CLI 更新憑證。

request.json

{
  "workspace_id": "11111111-1111-4111-8111-111111111111",
  "social_account_id": "22222222-2222-4222-8222-222222222222",
  "q": "fictional example",
  "search_type": "RECENT",
  "search_mode": "KEYWORD",
  "limit": 25
}

cURL

curl --request POST \
  "https://gqeshlawtcexsapabaui.supabase.co/functions/v1/analytics-api/threads-reads/keyword-search" \
  -H "Authorization: Bearer $SOSOAPI_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  --data-binary @request.json

JavaScript

// Server-side JavaScript. Do not print tokens or credential-bearing responses.
const token = process.env.SOSOAPI_ACCESS_TOKEN;
if (!token) throw new Error("Set an accepted credential for this operation");
const response = await fetch("https://gqeshlawtcexsapabaui.supabase.co/functions/v1/analytics-api/threads-reads/keyword-search", {
  method: "POST",
  headers: { "Content-Type": "application/json", Authorization: "Bearer " + token },
  body: JSON.stringify({
  "workspace_id": "11111111-1111-4111-8111-111111111111",
  "social_account_id": "22222222-2222-4222-8222-222222222222",
  "q": "fictional example",
  "search_type": "RECENT",
  "search_mode": "KEYWORD",
  "limit": 25
})
});
const result = await response.json();
// Check response.ok, the operation-specific body and completion state before continuing.

CLI

npx sosoapi api post /analytics-api/threads-reads/keyword-search < request.json

合成回應範例

{
  "workspace_id": "11111111-1111-4111-8111-111111111111",
  "social_account_id": "22222222-2222-4222-8222-222222222222",
  "contract_version": "threads-reads/v1",
  "operation": "keyword_search",
  "source": "official_threads_api",
  "provider_account_id": "12345",
  "provider_app_identity": null,
  "oauth_snapshot_id": null,
  "fetched_at": "2099-01-15T09:00:00Z",
  "status": "unavailable",
  "unavailable_reason": "issuing_app_unknown",
  "access": {
    "required_permissions": [
      "threads_basic",
      "threads_keyword_search"
    ],
    "missing_permissions": [],
    "permission_state": "unknown",
    "grant_evidence": "unknown",
    "app_access": "unverified"
  },
  "data": [],
  "profile": null,
  "quota": [],
  "coverage": {
    "complete": false,
    "next_cursor": null,
    "omitted_rows": 0,
    "reasons": [
      "Fictional documentation example: no provider request was made and no account data was read.",
      "App access and any pending permission review remain unverified; this is not successful provider or public-access evidence."
    ]
  }
}

MCP: sosoapi_search_threads