{
  "openapi": "3.1.0",
  "info": {
    "title": "okdata API",
    "version": "0.1.0",
    "summary": "Public social data from 8 platforms, paid per call.",
    "description": "35 endpoints on Douyin, Xiaohongshu (RedNote), WeChat Official Accounts, Bilibili, Weibo, TikTok, X (Twitter), YouTube. One envelope, one error format, prices in US dollars per call or per item. Failed calls are never charged. Price book 1.",
    "contact": {
      "name": "okdata",
      "url": "https://okdata.online"
    }
  },
  "servers": [
    {
      "url": "https://api.okdata.online"
    }
  ],
  "security": [
    {
      "bearerAuth": []
    }
  ],
  "externalDocs": {
    "description": "Quickstart",
    "url": "https://okdata.online/docs/quickstart/"
  },
  "tags": [
    {
      "name": "douyin",
      "description": "Douyin. China’s TikTok: videos, accounts, comments and the hot search board."
    },
    {
      "name": "xiaohongshu",
      "description": "Xiaohongshu (RedNote). Lifestyle notes, creators and what people search for."
    },
    {
      "name": "wechat_mp",
      "description": "WeChat Official Accounts. Official Account articles and history, without a QR login."
    },
    {
      "name": "bilibili",
      "description": "Bilibili. Videos, comments and the popular board."
    },
    {
      "name": "weibo",
      "description": "Weibo. Posts, accounts and the hot search list."
    },
    {
      "name": "tiktok",
      "description": "TikTok. Videos, accounts and comments worldwide."
    },
    {
      "name": "x",
      "description": "X (Twitter). Posts, accounts, search and trends."
    },
    {
      "name": "youtube",
      "description": "YouTube. Videos, comments and transcripts."
    },
    {
      "name": "catalog",
      "description": "Free routes: the catalog, status and call lookups."
    }
  ],
  "paths": {
    "/v1/douyin/videos/search": {
      "get": {
        "operationId": "douyin_videos_search",
        "summary": "Douyin video search",
        "description": "Videos matching keywords, with likes, comments, shares and the author.\n\nPrice: $0.02 per call. 1,000 items take about 50 calls: $1.00. Failed calls are not charged.",
        "tags": [
          "douyin"
        ],
        "parameters": [
          {
            "name": "query",
            "in": "query",
            "required": true,
            "description": "Keywords, as a person would type them into the platform search box.",
            "schema": {
              "type": "string",
              "description": "Keywords, as a person would type them into the platform search box.",
              "examples": [
                "露营装备"
              ]
            }
          },
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "description": "Result order.",
            "schema": {
              "type": "string",
              "description": "Result order.",
              "enum": [
                "relevance",
                "latest",
                "most_liked"
              ],
              "default": "relevance"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Opaque cursor from page.next_cursor of the previous call. Each page is a separate call.",
            "schema": {
              "type": "string",
              "description": "Opaque cursor from page.next_cursor of the previous call. Each page is a separate call."
            }
          },
          {
            "name": "view",
            "in": "query",
            "required": false,
            "description": "How much of each object comes back. full adds platform-specific fields under ext.",
            "schema": {
              "type": "string",
              "description": "How much of each object comes back. full adds platform-specific fields under ext.",
              "enum": [
                "compact",
                "standard",
                "full"
              ],
              "default": "standard"
            }
          },
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "description": "Comma-separated fields to keep, to save tokens.",
            "schema": {
              "type": "string",
              "description": "Comma-separated fields to keep, to save tokens.",
              "examples": [
                "id,text,metrics.likes"
              ]
            }
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "A page of post objects.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PostListResponse"
                },
                "example": {
                  "code": "ok",
                  "request_id": "0f6c2a8e-4b1d-4e0a-9a51-3c7d2b9e1f20",
                  "data": {
                    "items": [
                      {
                        "id": "7436185237401447690",
                        "url": "https://www.douyin.com/video/7436185237401447690",
                        "type": "video",
                        "title": null,
                        "text": "两晚山里露营，装备清单都在这了 #露营 #户外装备",
                        "lang": "zh",
                        "published_at": "2026-11-02T09:30:00Z",
                        "author": {
                          "id": "MS4wLjABAAAAq8Xw2mKpT0",
                          "username": "qingzhuang_tubu",
                          "name": "轻装徒步",
                          "avatar_url": "https://cdn.example.com/avatar/trailkit.jpg",
                          "followers": 182300,
                          "verified": true
                        },
                        "metrics": {
                          "views": null,
                          "likes": 48200,
                          "comments": 1312,
                          "shares": 2210,
                          "favorites": 9650,
                          "reposts": null
                        },
                        "images": null,
                        "hashtags": [
                          "露营",
                          "户外装备"
                        ]
                      }
                    ]
                  },
                  "page": {
                    "next_cursor": "eyJvIjoyMH0",
                    "has_more": true
                  },
                  "warnings": [],
                  "meta": {
                    "capability": "douyin.videos.search",
                    "billing": {
                      "amount": "0.02",
                      "currency": "USD",
                      "balance_after": "9.98"
                    },
                    "unavailable": {
                      "metrics.views": "platform",
                      "metrics.reposts": "platform"
                    },
                    "cached": false,
                    "replayed": false,
                    "fetched_at": "2026-11-11T08:00:00Z"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/E400"
          },
          "401": {
            "$ref": "#/components/responses/E401"
          },
          "402": {
            "$ref": "#/components/responses/E402"
          },
          "404": {
            "$ref": "#/components/responses/E404"
          },
          "429": {
            "$ref": "#/components/responses/E429"
          },
          "502": {
            "$ref": "#/components/responses/E502"
          },
          "503": {
            "$ref": "#/components/responses/E503"
          },
          "504": {
            "$ref": "#/components/responses/E504"
          }
        },
        "externalDocs": {
          "url": "https://okdata.online/apis/douyin/videos/search/"
        },
        "x-price": {
          "unit": "call",
          "amount": "0.02",
          "max_per_call": "0.02",
          "currency": "USD"
        },
        "x-status": "beta"
      }
    },
    "/v1/douyin/videos/get": {
      "get": {
        "operationId": "douyin_videos_get",
        "summary": "Douyin video detail",
        "description": "One video by ID or share link: text, metrics, author, music and hashtags. Give id or url.\n\nPrice: $0.002 per call. 1,000 calls cost $2.00. Failed calls are not charged.",
        "tags": [
          "douyin"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "query",
            "required": false,
            "description": "The video ID. Give id or url.",
            "schema": {
              "type": "string",
              "description": "The video ID. Give id or url.",
              "examples": [
                "7301234567890123456"
              ]
            }
          },
          {
            "name": "url",
            "in": "query",
            "required": false,
            "description": "A share link or page URL; the ID is read from it.",
            "schema": {
              "type": "string",
              "description": "A share link or page URL; the ID is read from it.",
              "examples": [
                "https://v.douyin.com/xxxxxx/"
              ]
            }
          },
          {
            "name": "view",
            "in": "query",
            "required": false,
            "description": "How much of each object comes back. full adds platform-specific fields under ext.",
            "schema": {
              "type": "string",
              "description": "How much of each object comes back. full adds platform-specific fields under ext.",
              "enum": [
                "compact",
                "standard",
                "full"
              ],
              "default": "standard"
            }
          },
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "description": "Comma-separated fields to keep, to save tokens.",
            "schema": {
              "type": "string",
              "description": "Comma-separated fields to keep, to save tokens.",
              "examples": [
                "id,text,metrics.likes"
              ]
            }
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "One post object.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PostResponse"
                },
                "example": {
                  "code": "ok",
                  "request_id": "0f6c2a8e-4b1d-4e0a-9a51-3c7d2b9e1f20",
                  "data": {
                    "item": {
                      "id": "7436185237401447690",
                      "url": "https://www.douyin.com/video/7436185237401447690",
                      "type": "video",
                      "title": null,
                      "text": "两晚山里露营，装备清单都在这了 #露营 #户外装备",
                      "lang": "zh",
                      "published_at": "2026-11-02T09:30:00Z",
                      "author": {
                        "id": "MS4wLjABAAAAq8Xw2mKpT0",
                        "username": "qingzhuang_tubu",
                        "name": "轻装徒步",
                        "avatar_url": "https://cdn.example.com/avatar/trailkit.jpg",
                        "followers": 182300,
                        "verified": true
                      },
                      "metrics": {
                        "views": null,
                        "likes": 48200,
                        "comments": 1312,
                        "shares": 2210,
                        "favorites": 9650,
                        "reposts": null
                      },
                      "images": null,
                      "hashtags": [
                        "露营",
                        "户外装备"
                      ]
                    }
                  },
                  "warnings": [],
                  "meta": {
                    "capability": "douyin.videos.get",
                    "billing": {
                      "amount": "0.002",
                      "currency": "USD",
                      "balance_after": "9.998"
                    },
                    "unavailable": {
                      "metrics.views": "platform",
                      "metrics.reposts": "platform"
                    },
                    "cached": false,
                    "replayed": false,
                    "fetched_at": "2026-11-11T08:00:00Z"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/E400"
          },
          "401": {
            "$ref": "#/components/responses/E401"
          },
          "402": {
            "$ref": "#/components/responses/E402"
          },
          "404": {
            "$ref": "#/components/responses/E404"
          },
          "429": {
            "$ref": "#/components/responses/E429"
          },
          "502": {
            "$ref": "#/components/responses/E502"
          },
          "503": {
            "$ref": "#/components/responses/E503"
          },
          "504": {
            "$ref": "#/components/responses/E504"
          }
        },
        "externalDocs": {
          "url": "https://okdata.online/apis/douyin/videos/get/"
        },
        "x-price": {
          "unit": "call",
          "amount": "0.002",
          "max_per_call": "0.002",
          "currency": "USD"
        },
        "x-status": "beta"
      }
    },
    "/v1/douyin/videos/comments/list": {
      "get": {
        "operationId": "douyin_videos_comments_list",
        "summary": "Douyin video comments",
        "description": "Top-level comments on a video, newest or hottest first.\n\nPrice: $0.002 per call. 1,000 items take about 50 calls: $0.10. Failed calls are not charged.",
        "tags": [
          "douyin"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "query",
            "required": true,
            "description": "The video ID. Give id or url.",
            "schema": {
              "type": "string",
              "description": "The video ID. Give id or url.",
              "examples": [
                "7301234567890123456"
              ]
            }
          },
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "description": "Result order.",
            "schema": {
              "type": "string",
              "description": "Result order.",
              "enum": [
                "hot",
                "latest"
              ],
              "default": "hot"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Opaque cursor from page.next_cursor of the previous call. Each page is a separate call.",
            "schema": {
              "type": "string",
              "description": "Opaque cursor from page.next_cursor of the previous call. Each page is a separate call."
            }
          },
          {
            "name": "view",
            "in": "query",
            "required": false,
            "description": "How much of each object comes back. full adds platform-specific fields under ext.",
            "schema": {
              "type": "string",
              "description": "How much of each object comes back. full adds platform-specific fields under ext.",
              "enum": [
                "compact",
                "standard",
                "full"
              ],
              "default": "standard"
            }
          },
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "description": "Comma-separated fields to keep, to save tokens.",
            "schema": {
              "type": "string",
              "description": "Comma-separated fields to keep, to save tokens.",
              "examples": [
                "id,text,metrics.likes"
              ]
            }
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "A page of comment objects.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CommentListResponse"
                },
                "example": {
                  "code": "ok",
                  "request_id": "0f6c2a8e-4b1d-4e0a-9a51-3c7d2b9e1f20",
                  "data": {
                    "items": [
                      {
                        "id": "7302000000000000001",
                        "post_id": "7301234567890123456",
                        "parent_id": null,
                        "text": "这个帐篷收起来好小，求链接",
                        "published_at": "2026-11-02T11:04:00Z",
                        "author": {
                          "id": "MS4wLjABAAAAq8Xw2mKpT0",
                          "username": "qingzhuang_tubu",
                          "name": "轻装徒步",
                          "avatar_url": "https://cdn.example.com/avatar/trailkit.jpg",
                          "followers": 182300,
                          "verified": true
                        },
                        "likes": 214,
                        "replies": 9,
                        "ip_location": "浙江"
                      }
                    ]
                  },
                  "page": {
                    "next_cursor": "eyJvIjoyMH0",
                    "has_more": true
                  },
                  "warnings": [],
                  "meta": {
                    "capability": "douyin.videos.comments.list",
                    "billing": {
                      "amount": "0.002",
                      "currency": "USD",
                      "balance_after": "9.998"
                    },
                    "unavailable": {},
                    "cached": false,
                    "replayed": false,
                    "fetched_at": "2026-11-11T08:00:00Z"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/E400"
          },
          "401": {
            "$ref": "#/components/responses/E401"
          },
          "402": {
            "$ref": "#/components/responses/E402"
          },
          "404": {
            "$ref": "#/components/responses/E404"
          },
          "429": {
            "$ref": "#/components/responses/E429"
          },
          "502": {
            "$ref": "#/components/responses/E502"
          },
          "503": {
            "$ref": "#/components/responses/E503"
          },
          "504": {
            "$ref": "#/components/responses/E504"
          }
        },
        "externalDocs": {
          "url": "https://okdata.online/apis/douyin/videos/comments/list/"
        },
        "x-price": {
          "unit": "call",
          "amount": "0.002",
          "max_per_call": "0.002",
          "currency": "USD"
        },
        "x-status": "beta"
      }
    },
    "/v1/douyin/users/get": {
      "get": {
        "operationId": "douyin_users_get",
        "summary": "Douyin account profile",
        "description": "Followers, total likes, video count, bio and verification of an account. Give id or url.\n\nPrice: $0.002 per call. 1,000 calls cost $2.00. Failed calls are not charged.",
        "tags": [
          "douyin"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "query",
            "required": false,
            "description": "The account ID (sec_uid / user id as the platform uses it).",
            "schema": {
              "type": "string",
              "description": "The account ID (sec_uid / user id as the platform uses it).",
              "examples": [
                "MS4wLjABAAAA..."
              ]
            }
          },
          {
            "name": "url",
            "in": "query",
            "required": false,
            "description": "A share link or page URL; the ID is read from it.",
            "schema": {
              "type": "string",
              "description": "A share link or page URL; the ID is read from it.",
              "examples": [
                "https://www.douyin.com/user/MS4wLjABAAAA..."
              ]
            }
          },
          {
            "name": "view",
            "in": "query",
            "required": false,
            "description": "How much of each object comes back. full adds platform-specific fields under ext.",
            "schema": {
              "type": "string",
              "description": "How much of each object comes back. full adds platform-specific fields under ext.",
              "enum": [
                "compact",
                "standard",
                "full"
              ],
              "default": "standard"
            }
          },
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "description": "Comma-separated fields to keep, to save tokens.",
            "schema": {
              "type": "string",
              "description": "Comma-separated fields to keep, to save tokens.",
              "examples": [
                "id,text,metrics.likes"
              ]
            }
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "One account object.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AccountResponse"
                },
                "example": {
                  "code": "ok",
                  "request_id": "0f6c2a8e-4b1d-4e0a-9a51-3c7d2b9e1f20",
                  "data": {
                    "item": {
                      "id": "MS4wLjABAAAAq8Xw2mKpT0",
                      "url": "https://www.douyin.com/user/MS4wLjABAAAAq8Xw2mKpT0",
                      "username": "qingzhuang_tubu",
                      "name": "轻装徒步",
                      "bio": "轻装，走远路。周更露营和徒步装备。",
                      "avatar_url": "https://cdn.example.com/avatar/trailkit.jpg",
                      "verified": true,
                      "followers": 182300,
                      "following": 312,
                      "posts": 486,
                      "likes": 2310000
                    }
                  },
                  "warnings": [],
                  "meta": {
                    "capability": "douyin.users.get",
                    "billing": {
                      "amount": "0.002",
                      "currency": "USD",
                      "balance_after": "9.998"
                    },
                    "unavailable": {},
                    "cached": false,
                    "replayed": false,
                    "fetched_at": "2026-11-11T08:00:00Z"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/E400"
          },
          "401": {
            "$ref": "#/components/responses/E401"
          },
          "402": {
            "$ref": "#/components/responses/E402"
          },
          "404": {
            "$ref": "#/components/responses/E404"
          },
          "429": {
            "$ref": "#/components/responses/E429"
          },
          "502": {
            "$ref": "#/components/responses/E502"
          },
          "503": {
            "$ref": "#/components/responses/E503"
          },
          "504": {
            "$ref": "#/components/responses/E504"
          }
        },
        "externalDocs": {
          "url": "https://okdata.online/apis/douyin/users/get/"
        },
        "x-price": {
          "unit": "call",
          "amount": "0.002",
          "max_per_call": "0.002",
          "currency": "USD"
        },
        "x-status": "beta"
      }
    },
    "/v1/douyin/users/videos/list": {
      "get": {
        "operationId": "douyin_users_videos_list",
        "summary": "Douyin account videos",
        "description": "An account's videos, newest first, with metrics.\n\nPrice: $0.002 per call. 1,000 items take about 50 calls: $0.10. Failed calls are not charged.",
        "tags": [
          "douyin"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "query",
            "required": true,
            "description": "The account ID (sec_uid / user id as the platform uses it).",
            "schema": {
              "type": "string",
              "description": "The account ID (sec_uid / user id as the platform uses it).",
              "examples": [
                "MS4wLjABAAAA..."
              ]
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Opaque cursor from page.next_cursor of the previous call. Each page is a separate call.",
            "schema": {
              "type": "string",
              "description": "Opaque cursor from page.next_cursor of the previous call. Each page is a separate call."
            }
          },
          {
            "name": "view",
            "in": "query",
            "required": false,
            "description": "How much of each object comes back. full adds platform-specific fields under ext.",
            "schema": {
              "type": "string",
              "description": "How much of each object comes back. full adds platform-specific fields under ext.",
              "enum": [
                "compact",
                "standard",
                "full"
              ],
              "default": "standard"
            }
          },
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "description": "Comma-separated fields to keep, to save tokens.",
            "schema": {
              "type": "string",
              "description": "Comma-separated fields to keep, to save tokens.",
              "examples": [
                "id,text,metrics.likes"
              ]
            }
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "A page of post objects.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PostListResponse"
                },
                "example": {
                  "code": "ok",
                  "request_id": "0f6c2a8e-4b1d-4e0a-9a51-3c7d2b9e1f20",
                  "data": {
                    "items": [
                      {
                        "id": "7436185237401447690",
                        "url": "https://www.douyin.com/video/7436185237401447690",
                        "type": "video",
                        "title": null,
                        "text": "两晚山里露营，装备清单都在这了 #露营 #户外装备",
                        "lang": "zh",
                        "published_at": "2026-11-02T09:30:00Z",
                        "author": {
                          "id": "MS4wLjABAAAAq8Xw2mKpT0",
                          "username": "qingzhuang_tubu",
                          "name": "轻装徒步",
                          "avatar_url": "https://cdn.example.com/avatar/trailkit.jpg",
                          "followers": 182300,
                          "verified": true
                        },
                        "metrics": {
                          "views": null,
                          "likes": 48200,
                          "comments": 1312,
                          "shares": 2210,
                          "favorites": 9650,
                          "reposts": null
                        },
                        "images": null,
                        "hashtags": [
                          "露营",
                          "户外装备"
                        ]
                      }
                    ]
                  },
                  "page": {
                    "next_cursor": "eyJvIjoyMH0",
                    "has_more": true
                  },
                  "warnings": [],
                  "meta": {
                    "capability": "douyin.users.videos.list",
                    "billing": {
                      "amount": "0.002",
                      "currency": "USD",
                      "balance_after": "9.998"
                    },
                    "unavailable": {
                      "metrics.views": "platform",
                      "metrics.reposts": "platform"
                    },
                    "cached": false,
                    "replayed": false,
                    "fetched_at": "2026-11-11T08:00:00Z"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/E400"
          },
          "401": {
            "$ref": "#/components/responses/E401"
          },
          "402": {
            "$ref": "#/components/responses/E402"
          },
          "404": {
            "$ref": "#/components/responses/E404"
          },
          "429": {
            "$ref": "#/components/responses/E429"
          },
          "502": {
            "$ref": "#/components/responses/E502"
          },
          "503": {
            "$ref": "#/components/responses/E503"
          },
          "504": {
            "$ref": "#/components/responses/E504"
          }
        },
        "externalDocs": {
          "url": "https://okdata.online/apis/douyin/users/videos/list/"
        },
        "x-price": {
          "unit": "call",
          "amount": "0.002",
          "max_per_call": "0.002",
          "currency": "USD"
        },
        "x-status": "beta"
      }
    },
    "/v1/douyin/trends/list": {
      "get": {
        "operationId": "douyin_trends_list",
        "summary": "Douyin hot search board",
        "description": "The current hot search list with rank and heat.\n\nPrice: $0.002 per call. 1,000 items take about 20 calls: $0.04. Failed calls are not charged.",
        "tags": [
          "douyin"
        ],
        "parameters": [
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Opaque cursor from page.next_cursor of the previous call. Each page is a separate call.",
            "schema": {
              "type": "string",
              "description": "Opaque cursor from page.next_cursor of the previous call. Each page is a separate call."
            }
          },
          {
            "name": "view",
            "in": "query",
            "required": false,
            "description": "How much of each object comes back. full adds platform-specific fields under ext.",
            "schema": {
              "type": "string",
              "description": "How much of each object comes back. full adds platform-specific fields under ext.",
              "enum": [
                "compact",
                "standard",
                "full"
              ],
              "default": "standard"
            }
          },
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "description": "Comma-separated fields to keep, to save tokens.",
            "schema": {
              "type": "string",
              "description": "Comma-separated fields to keep, to save tokens.",
              "examples": [
                "id,text,metrics.likes"
              ]
            }
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "A page of trend objects.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TrendListResponse"
                },
                "example": {
                  "code": "ok",
                  "request_id": "0f6c2a8e-4b1d-4e0a-9a51-3c7d2b9e1f20",
                  "data": {
                    "items": [
                      {
                        "rank": 1,
                        "name": "初雪",
                        "heat": 11820450,
                        "url": "https://www.douyin.com/hot/2163450"
                      }
                    ]
                  },
                  "page": {
                    "next_cursor": "eyJvIjoyMH0",
                    "has_more": true
                  },
                  "warnings": [],
                  "meta": {
                    "capability": "douyin.trends.list",
                    "billing": {
                      "amount": "0.002",
                      "currency": "USD",
                      "balance_after": "9.998"
                    },
                    "unavailable": {},
                    "cached": false,
                    "replayed": false,
                    "fetched_at": "2026-11-11T08:00:00Z"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/E400"
          },
          "401": {
            "$ref": "#/components/responses/E401"
          },
          "402": {
            "$ref": "#/components/responses/E402"
          },
          "404": {
            "$ref": "#/components/responses/E404"
          },
          "429": {
            "$ref": "#/components/responses/E429"
          },
          "502": {
            "$ref": "#/components/responses/E502"
          },
          "503": {
            "$ref": "#/components/responses/E503"
          },
          "504": {
            "$ref": "#/components/responses/E504"
          }
        },
        "externalDocs": {
          "url": "https://okdata.online/apis/douyin/trends/list/"
        },
        "x-price": {
          "unit": "call",
          "amount": "0.002",
          "max_per_call": "0.002",
          "currency": "USD"
        },
        "x-status": "beta"
      }
    },
    "/v1/xiaohongshu/notes/search": {
      "get": {
        "operationId": "xiaohongshu_notes_search",
        "summary": "Xiaohongshu note search",
        "description": "Notes matching keywords, newest or most popular first, with images and the author.\n\nPrice: $0.02 per call. 1,000 items take about 50 calls: $1.00. Failed calls are not charged.",
        "tags": [
          "xiaohongshu"
        ],
        "parameters": [
          {
            "name": "query",
            "in": "query",
            "required": true,
            "description": "Keywords, as a person would type them into the platform search box.",
            "schema": {
              "type": "string",
              "description": "Keywords, as a person would type them into the platform search box.",
              "examples": [
                "防晒霜 推荐"
              ]
            }
          },
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "description": "Result order.",
            "schema": {
              "type": "string",
              "description": "Result order.",
              "enum": [
                "general",
                "latest",
                "popular"
              ],
              "default": "general"
            }
          },
          {
            "name": "type",
            "in": "query",
            "required": false,
            "description": "Note type.",
            "schema": {
              "type": "string",
              "description": "Note type.",
              "enum": [
                "all",
                "video",
                "image"
              ],
              "default": "all"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Opaque cursor from page.next_cursor of the previous call. Each page is a separate call.",
            "schema": {
              "type": "string",
              "description": "Opaque cursor from page.next_cursor of the previous call. Each page is a separate call."
            }
          },
          {
            "name": "view",
            "in": "query",
            "required": false,
            "description": "How much of each object comes back. full adds platform-specific fields under ext.",
            "schema": {
              "type": "string",
              "description": "How much of each object comes back. full adds platform-specific fields under ext.",
              "enum": [
                "compact",
                "standard",
                "full"
              ],
              "default": "standard"
            }
          },
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "description": "Comma-separated fields to keep, to save tokens.",
            "schema": {
              "type": "string",
              "description": "Comma-separated fields to keep, to save tokens.",
              "examples": [
                "id,text,metrics.likes"
              ]
            }
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "A page of post objects.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PostListResponse"
                },
                "example": {
                  "code": "ok",
                  "request_id": "0f6c2a8e-4b1d-4e0a-9a51-3c7d2b9e1f20",
                  "data": {
                    "items": [
                      {
                        "id": "6731f0a2000000001b02c3d4",
                        "url": "https://www.xiaohongshu.com/explore/6731f0a2000000001b02c3d4",
                        "type": "image",
                        "title": "油皮夏天防晒怎么选｜实测 6 款",
                        "text": "连续两周通勤实测，按清爽度和防晒力排了个序，第 3 款意外好用。",
                        "lang": "zh",
                        "published_at": "2026-11-02T09:30:00Z",
                        "author": {
                          "id": "5f1234567890abcdef123456",
                          "username": null,
                          "name": "通勤护肤笔记",
                          "avatar_url": "https://cdn.example.com/avatar/trailkit.jpg",
                          "followers": 46200,
                          "verified": true
                        },
                        "metrics": {
                          "views": null,
                          "likes": 48200,
                          "comments": 1312,
                          "shares": 2210,
                          "favorites": 9650,
                          "reposts": null
                        },
                        "images": [
                          "https://sns-img.example.com/6731f0a2/1.jpg",
                          "https://sns-img.example.com/6731f0a2/2.jpg"
                        ],
                        "hashtags": [
                          "防晒",
                          "油皮"
                        ]
                      }
                    ]
                  },
                  "page": {
                    "next_cursor": "eyJvIjoyMH0",
                    "has_more": true
                  },
                  "warnings": [],
                  "meta": {
                    "capability": "xiaohongshu.notes.search",
                    "billing": {
                      "amount": "0.02",
                      "currency": "USD",
                      "balance_after": "9.98"
                    },
                    "unavailable": {
                      "metrics.views": "platform",
                      "metrics.reposts": "platform"
                    },
                    "cached": false,
                    "replayed": false,
                    "fetched_at": "2026-11-11T08:00:00Z"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/E400"
          },
          "401": {
            "$ref": "#/components/responses/E401"
          },
          "402": {
            "$ref": "#/components/responses/E402"
          },
          "404": {
            "$ref": "#/components/responses/E404"
          },
          "429": {
            "$ref": "#/components/responses/E429"
          },
          "502": {
            "$ref": "#/components/responses/E502"
          },
          "503": {
            "$ref": "#/components/responses/E503"
          },
          "504": {
            "$ref": "#/components/responses/E504"
          }
        },
        "externalDocs": {
          "url": "https://okdata.online/apis/xiaohongshu/notes/search/"
        },
        "x-price": {
          "unit": "call",
          "amount": "0.02",
          "max_per_call": "0.02",
          "currency": "USD"
        },
        "x-status": "beta"
      }
    },
    "/v1/xiaohongshu/notes/get": {
      "get": {
        "operationId": "xiaohongshu_notes_get",
        "summary": "Xiaohongshu note detail",
        "description": "Full text, all images or the video, likes, saves and comments count of one note. Give id or url.\n\nPrice: $0.02 per call. 1,000 calls cost $20.00. Failed calls are not charged.",
        "tags": [
          "xiaohongshu"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "query",
            "required": false,
            "description": "The note ID. Give id or url.",
            "schema": {
              "type": "string",
              "description": "The note ID. Give id or url.",
              "examples": [
                "6650a1b2000000001e00abcd"
              ]
            }
          },
          {
            "name": "url",
            "in": "query",
            "required": false,
            "description": "A share link or page URL; the ID is read from it.",
            "schema": {
              "type": "string",
              "description": "A share link or page URL; the ID is read from it.",
              "examples": [
                "https://www.xiaohongshu.com/explore/6650a1b2000000001e00abcd"
              ]
            }
          },
          {
            "name": "view",
            "in": "query",
            "required": false,
            "description": "How much of each object comes back. full adds platform-specific fields under ext.",
            "schema": {
              "type": "string",
              "description": "How much of each object comes back. full adds platform-specific fields under ext.",
              "enum": [
                "compact",
                "standard",
                "full"
              ],
              "default": "standard"
            }
          },
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "description": "Comma-separated fields to keep, to save tokens.",
            "schema": {
              "type": "string",
              "description": "Comma-separated fields to keep, to save tokens.",
              "examples": [
                "id,text,metrics.likes"
              ]
            }
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "One post object.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PostResponse"
                },
                "example": {
                  "code": "ok",
                  "request_id": "0f6c2a8e-4b1d-4e0a-9a51-3c7d2b9e1f20",
                  "data": {
                    "item": {
                      "id": "6731f0a2000000001b02c3d4",
                      "url": "https://www.xiaohongshu.com/explore/6731f0a2000000001b02c3d4",
                      "type": "image",
                      "title": "油皮夏天防晒怎么选｜实测 6 款",
                      "text": "连续两周通勤实测，按清爽度和防晒力排了个序，第 3 款意外好用。",
                      "lang": "zh",
                      "published_at": "2026-11-02T09:30:00Z",
                      "author": {
                        "id": "5f1234567890abcdef123456",
                        "username": null,
                        "name": "通勤护肤笔记",
                        "avatar_url": "https://cdn.example.com/avatar/trailkit.jpg",
                        "followers": 46200,
                        "verified": true
                      },
                      "metrics": {
                        "views": null,
                        "likes": 48200,
                        "comments": 1312,
                        "shares": 2210,
                        "favorites": 9650,
                        "reposts": null
                      },
                      "images": [
                        "https://sns-img.example.com/6731f0a2/1.jpg",
                        "https://sns-img.example.com/6731f0a2/2.jpg"
                      ],
                      "hashtags": [
                        "防晒",
                        "油皮"
                      ]
                    }
                  },
                  "warnings": [],
                  "meta": {
                    "capability": "xiaohongshu.notes.get",
                    "billing": {
                      "amount": "0.02",
                      "currency": "USD",
                      "balance_after": "9.98"
                    },
                    "unavailable": {
                      "metrics.views": "platform",
                      "metrics.reposts": "platform"
                    },
                    "cached": false,
                    "replayed": false,
                    "fetched_at": "2026-11-11T08:00:00Z"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/E400"
          },
          "401": {
            "$ref": "#/components/responses/E401"
          },
          "402": {
            "$ref": "#/components/responses/E402"
          },
          "404": {
            "$ref": "#/components/responses/E404"
          },
          "429": {
            "$ref": "#/components/responses/E429"
          },
          "502": {
            "$ref": "#/components/responses/E502"
          },
          "503": {
            "$ref": "#/components/responses/E503"
          },
          "504": {
            "$ref": "#/components/responses/E504"
          }
        },
        "externalDocs": {
          "url": "https://okdata.online/apis/xiaohongshu/notes/get/"
        },
        "x-price": {
          "unit": "call",
          "amount": "0.02",
          "max_per_call": "0.02",
          "currency": "USD"
        },
        "x-status": "beta"
      }
    },
    "/v1/xiaohongshu/notes/comments/list": {
      "get": {
        "operationId": "xiaohongshu_notes_comments_list",
        "summary": "Xiaohongshu note comments",
        "description": "Comments on a note with likes and reply counts.\n\nPrice: $0.02 per call. 1,000 items take about 100 calls: $2.00. Failed calls are not charged.",
        "tags": [
          "xiaohongshu"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "query",
            "required": true,
            "description": "The note ID. Give id or url.",
            "schema": {
              "type": "string",
              "description": "The note ID. Give id or url.",
              "examples": [
                "6650a1b2000000001e00abcd"
              ]
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Opaque cursor from page.next_cursor of the previous call. Each page is a separate call.",
            "schema": {
              "type": "string",
              "description": "Opaque cursor from page.next_cursor of the previous call. Each page is a separate call."
            }
          },
          {
            "name": "view",
            "in": "query",
            "required": false,
            "description": "How much of each object comes back. full adds platform-specific fields under ext.",
            "schema": {
              "type": "string",
              "description": "How much of each object comes back. full adds platform-specific fields under ext.",
              "enum": [
                "compact",
                "standard",
                "full"
              ],
              "default": "standard"
            }
          },
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "description": "Comma-separated fields to keep, to save tokens.",
            "schema": {
              "type": "string",
              "description": "Comma-separated fields to keep, to save tokens.",
              "examples": [
                "id,text,metrics.likes"
              ]
            }
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "A page of comment objects.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CommentListResponse"
                },
                "example": {
                  "code": "ok",
                  "request_id": "0f6c2a8e-4b1d-4e0a-9a51-3c7d2b9e1f20",
                  "data": {
                    "items": [
                      {
                        "id": "7302000000000000001",
                        "post_id": "7301234567890123456",
                        "parent_id": null,
                        "text": "这个帐篷收起来好小，求链接",
                        "published_at": "2026-11-02T11:04:00Z",
                        "author": {
                          "id": "5f1234567890abcdef123456",
                          "username": null,
                          "name": "通勤护肤笔记",
                          "avatar_url": "https://cdn.example.com/avatar/trailkit.jpg",
                          "followers": 46200,
                          "verified": true
                        },
                        "likes": 214,
                        "replies": 9,
                        "ip_location": "浙江"
                      }
                    ]
                  },
                  "page": {
                    "next_cursor": "eyJvIjoyMH0",
                    "has_more": true
                  },
                  "warnings": [],
                  "meta": {
                    "capability": "xiaohongshu.notes.comments.list",
                    "billing": {
                      "amount": "0.02",
                      "currency": "USD",
                      "balance_after": "9.98"
                    },
                    "unavailable": {},
                    "cached": false,
                    "replayed": false,
                    "fetched_at": "2026-11-11T08:00:00Z"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/E400"
          },
          "401": {
            "$ref": "#/components/responses/E401"
          },
          "402": {
            "$ref": "#/components/responses/E402"
          },
          "404": {
            "$ref": "#/components/responses/E404"
          },
          "429": {
            "$ref": "#/components/responses/E429"
          },
          "502": {
            "$ref": "#/components/responses/E502"
          },
          "503": {
            "$ref": "#/components/responses/E503"
          },
          "504": {
            "$ref": "#/components/responses/E504"
          }
        },
        "externalDocs": {
          "url": "https://okdata.online/apis/xiaohongshu/notes/comments/list/"
        },
        "x-price": {
          "unit": "call",
          "amount": "0.02",
          "max_per_call": "0.02",
          "currency": "USD"
        },
        "x-status": "beta"
      }
    },
    "/v1/xiaohongshu/users/get": {
      "get": {
        "operationId": "xiaohongshu_users_get",
        "summary": "Xiaohongshu account profile",
        "description": "Followers, likes and saves, note count and bio of an account. Give id or url.\n\nPrice: $0.02 per call. 1,000 calls cost $20.00. Failed calls are not charged.",
        "tags": [
          "xiaohongshu"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "query",
            "required": false,
            "description": "The account ID (sec_uid / user id as the platform uses it).",
            "schema": {
              "type": "string",
              "description": "The account ID (sec_uid / user id as the platform uses it).",
              "examples": [
                "5f1234567890abcdef123456"
              ]
            }
          },
          {
            "name": "url",
            "in": "query",
            "required": false,
            "description": "A share link or page URL; the ID is read from it.",
            "schema": {
              "type": "string",
              "description": "A share link or page URL; the ID is read from it.",
              "examples": [
                "https://www.xiaohongshu.com/user/profile/5f1234567890abcdef123456"
              ]
            }
          },
          {
            "name": "view",
            "in": "query",
            "required": false,
            "description": "How much of each object comes back. full adds platform-specific fields under ext.",
            "schema": {
              "type": "string",
              "description": "How much of each object comes back. full adds platform-specific fields under ext.",
              "enum": [
                "compact",
                "standard",
                "full"
              ],
              "default": "standard"
            }
          },
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "description": "Comma-separated fields to keep, to save tokens.",
            "schema": {
              "type": "string",
              "description": "Comma-separated fields to keep, to save tokens.",
              "examples": [
                "id,text,metrics.likes"
              ]
            }
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "One account object.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AccountResponse"
                },
                "example": {
                  "code": "ok",
                  "request_id": "0f6c2a8e-4b1d-4e0a-9a51-3c7d2b9e1f20",
                  "data": {
                    "item": {
                      "id": "5f1234567890abcdef123456",
                      "url": "https://www.xiaohongshu.com/user/profile/5f1234567890abcdef123456",
                      "username": null,
                      "name": "通勤护肤笔记",
                      "bio": "油皮 · 只写自己用空的东西",
                      "avatar_url": "https://cdn.example.com/avatar/trailkit.jpg",
                      "verified": true,
                      "followers": 182300,
                      "following": 312,
                      "posts": 486,
                      "likes": 2310000
                    }
                  },
                  "warnings": [],
                  "meta": {
                    "capability": "xiaohongshu.users.get",
                    "billing": {
                      "amount": "0.02",
                      "currency": "USD",
                      "balance_after": "9.98"
                    },
                    "unavailable": {},
                    "cached": false,
                    "replayed": false,
                    "fetched_at": "2026-11-11T08:00:00Z"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/E400"
          },
          "401": {
            "$ref": "#/components/responses/E401"
          },
          "402": {
            "$ref": "#/components/responses/E402"
          },
          "404": {
            "$ref": "#/components/responses/E404"
          },
          "429": {
            "$ref": "#/components/responses/E429"
          },
          "502": {
            "$ref": "#/components/responses/E502"
          },
          "503": {
            "$ref": "#/components/responses/E503"
          },
          "504": {
            "$ref": "#/components/responses/E504"
          }
        },
        "externalDocs": {
          "url": "https://okdata.online/apis/xiaohongshu/users/get/"
        },
        "x-price": {
          "unit": "call",
          "amount": "0.02",
          "max_per_call": "0.02",
          "currency": "USD"
        },
        "x-status": "beta"
      }
    },
    "/v1/xiaohongshu/users/notes/list": {
      "get": {
        "operationId": "xiaohongshu_users_notes_list",
        "summary": "Xiaohongshu account notes",
        "description": "An account's notes, newest first.\n\nPrice: $0.02 per call. 1,000 items take about 50 calls: $1.00. Failed calls are not charged.",
        "tags": [
          "xiaohongshu"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "query",
            "required": true,
            "description": "The account ID (sec_uid / user id as the platform uses it).",
            "schema": {
              "type": "string",
              "description": "The account ID (sec_uid / user id as the platform uses it).",
              "examples": [
                "5f1234567890abcdef123456"
              ]
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Opaque cursor from page.next_cursor of the previous call. Each page is a separate call.",
            "schema": {
              "type": "string",
              "description": "Opaque cursor from page.next_cursor of the previous call. Each page is a separate call."
            }
          },
          {
            "name": "view",
            "in": "query",
            "required": false,
            "description": "How much of each object comes back. full adds platform-specific fields under ext.",
            "schema": {
              "type": "string",
              "description": "How much of each object comes back. full adds platform-specific fields under ext.",
              "enum": [
                "compact",
                "standard",
                "full"
              ],
              "default": "standard"
            }
          },
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "description": "Comma-separated fields to keep, to save tokens.",
            "schema": {
              "type": "string",
              "description": "Comma-separated fields to keep, to save tokens.",
              "examples": [
                "id,text,metrics.likes"
              ]
            }
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "A page of post objects.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PostListResponse"
                },
                "example": {
                  "code": "ok",
                  "request_id": "0f6c2a8e-4b1d-4e0a-9a51-3c7d2b9e1f20",
                  "data": {
                    "items": [
                      {
                        "id": "6731f0a2000000001b02c3d4",
                        "url": "https://www.xiaohongshu.com/explore/6731f0a2000000001b02c3d4",
                        "type": "image",
                        "title": "油皮夏天防晒怎么选｜实测 6 款",
                        "text": "连续两周通勤实测，按清爽度和防晒力排了个序，第 3 款意外好用。",
                        "lang": "zh",
                        "published_at": "2026-11-02T09:30:00Z",
                        "author": {
                          "id": "5f1234567890abcdef123456",
                          "username": null,
                          "name": "通勤护肤笔记",
                          "avatar_url": "https://cdn.example.com/avatar/trailkit.jpg",
                          "followers": 46200,
                          "verified": true
                        },
                        "metrics": {
                          "views": null,
                          "likes": 48200,
                          "comments": 1312,
                          "shares": 2210,
                          "favorites": 9650,
                          "reposts": null
                        },
                        "images": [
                          "https://sns-img.example.com/6731f0a2/1.jpg",
                          "https://sns-img.example.com/6731f0a2/2.jpg"
                        ],
                        "hashtags": [
                          "防晒",
                          "油皮"
                        ]
                      }
                    ]
                  },
                  "page": {
                    "next_cursor": "eyJvIjoyMH0",
                    "has_more": true
                  },
                  "warnings": [],
                  "meta": {
                    "capability": "xiaohongshu.users.notes.list",
                    "billing": {
                      "amount": "0.02",
                      "currency": "USD",
                      "balance_after": "9.98"
                    },
                    "unavailable": {
                      "metrics.views": "platform",
                      "metrics.reposts": "platform"
                    },
                    "cached": false,
                    "replayed": false,
                    "fetched_at": "2026-11-11T08:00:00Z"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/E400"
          },
          "401": {
            "$ref": "#/components/responses/E401"
          },
          "402": {
            "$ref": "#/components/responses/E402"
          },
          "404": {
            "$ref": "#/components/responses/E404"
          },
          "429": {
            "$ref": "#/components/responses/E429"
          },
          "502": {
            "$ref": "#/components/responses/E502"
          },
          "503": {
            "$ref": "#/components/responses/E503"
          },
          "504": {
            "$ref": "#/components/responses/E504"
          }
        },
        "externalDocs": {
          "url": "https://okdata.online/apis/xiaohongshu/users/notes/list/"
        },
        "x-price": {
          "unit": "call",
          "amount": "0.02",
          "max_per_call": "0.02",
          "currency": "USD"
        },
        "x-status": "beta"
      }
    },
    "/v1/xiaohongshu/trends/list": {
      "get": {
        "operationId": "xiaohongshu_trends_list",
        "summary": "Xiaohongshu trending searches",
        "description": "What people are searching on Xiaohongshu right now.\n\nPrice: $0.02 per call. 1,000 items take about 50 calls: $1.00. Failed calls are not charged.",
        "tags": [
          "xiaohongshu"
        ],
        "parameters": [
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Opaque cursor from page.next_cursor of the previous call. Each page is a separate call.",
            "schema": {
              "type": "string",
              "description": "Opaque cursor from page.next_cursor of the previous call. Each page is a separate call."
            }
          },
          {
            "name": "view",
            "in": "query",
            "required": false,
            "description": "How much of each object comes back. full adds platform-specific fields under ext.",
            "schema": {
              "type": "string",
              "description": "How much of each object comes back. full adds platform-specific fields under ext.",
              "enum": [
                "compact",
                "standard",
                "full"
              ],
              "default": "standard"
            }
          },
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "description": "Comma-separated fields to keep, to save tokens.",
            "schema": {
              "type": "string",
              "description": "Comma-separated fields to keep, to save tokens.",
              "examples": [
                "id,text,metrics.likes"
              ]
            }
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "A page of trend objects.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TrendListResponse"
                },
                "example": {
                  "code": "ok",
                  "request_id": "0f6c2a8e-4b1d-4e0a-9a51-3c7d2b9e1f20",
                  "data": {
                    "items": [
                      {
                        "rank": 1,
                        "name": "秋冬叠穿",
                        "heat": 925000,
                        "url": null
                      }
                    ]
                  },
                  "page": {
                    "next_cursor": "eyJvIjoyMH0",
                    "has_more": true
                  },
                  "warnings": [],
                  "meta": {
                    "capability": "xiaohongshu.trends.list",
                    "billing": {
                      "amount": "0.02",
                      "currency": "USD",
                      "balance_after": "9.98"
                    },
                    "unavailable": {},
                    "cached": false,
                    "replayed": false,
                    "fetched_at": "2026-11-11T08:00:00Z"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/E400"
          },
          "401": {
            "$ref": "#/components/responses/E401"
          },
          "402": {
            "$ref": "#/components/responses/E402"
          },
          "404": {
            "$ref": "#/components/responses/E404"
          },
          "429": {
            "$ref": "#/components/responses/E429"
          },
          "502": {
            "$ref": "#/components/responses/E502"
          },
          "503": {
            "$ref": "#/components/responses/E503"
          },
          "504": {
            "$ref": "#/components/responses/E504"
          }
        },
        "externalDocs": {
          "url": "https://okdata.online/apis/xiaohongshu/trends/list/"
        },
        "x-price": {
          "unit": "call",
          "amount": "0.02",
          "max_per_call": "0.02",
          "currency": "USD"
        },
        "x-status": "beta"
      }
    },
    "/v1/wechat_mp/accounts/search": {
      "get": {
        "operationId": "wechat_mp_accounts_search",
        "summary": "Official Account search",
        "description": "Find Official Accounts by name or keyword, with their original ID (gh_…). Charged per account returned.\n\nPrice: $0.058 per item returned, at least one item, at most $0.58 per call. 1,000 items cost $58.00. Failed calls are not charged.",
        "tags": [
          "wechat_mp"
        ],
        "parameters": [
          {
            "name": "query",
            "in": "query",
            "required": true,
            "description": "Keywords, as a person would type them into the platform search box.",
            "schema": {
              "type": "string",
              "description": "Keywords, as a person would type them into the platform search box.",
              "examples": [
                "36氪"
              ]
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Opaque cursor from page.next_cursor of the previous call. Each page is a separate call.",
            "schema": {
              "type": "string",
              "description": "Opaque cursor from page.next_cursor of the previous call. Each page is a separate call."
            }
          },
          {
            "name": "view",
            "in": "query",
            "required": false,
            "description": "How much of each object comes back. full adds platform-specific fields under ext.",
            "schema": {
              "type": "string",
              "description": "How much of each object comes back. full adds platform-specific fields under ext.",
              "enum": [
                "compact",
                "standard",
                "full"
              ],
              "default": "standard"
            }
          },
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "description": "Comma-separated fields to keep, to save tokens.",
            "schema": {
              "type": "string",
              "description": "Comma-separated fields to keep, to save tokens.",
              "examples": [
                "id,text,metrics.likes"
              ]
            }
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "A page of account objects.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AccountListResponse"
                },
                "example": {
                  "code": "ok",
                  "request_id": "0f6c2a8e-4b1d-4e0a-9a51-3c7d2b9e1f20",
                  "data": {
                    "items": [
                      {
                        "id": "MzA5NTI3MjIwMA==",
                        "url": "https://mp.weixin.qq.com/mp/profile_ext?__biz=MzA5NTI3MjIwMA==",
                        "username": "chuhai_growth",
                        "name": "出海增长笔记",
                        "bio": "写给出海团队的增长复盘。",
                        "avatar_url": "https://cdn.example.com/avatar/trailkit.jpg",
                        "verified": true,
                        "followers": null,
                        "following": null,
                        "posts": 486,
                        "likes": null
                      }
                    ]
                  },
                  "page": {
                    "next_cursor": "eyJvIjoyMH0",
                    "has_more": true
                  },
                  "warnings": [],
                  "meta": {
                    "capability": "wechat_mp.accounts.search",
                    "billing": {
                      "amount": "0.058",
                      "currency": "USD",
                      "balance_after": "9.942"
                    },
                    "unavailable": {},
                    "cached": false,
                    "replayed": false,
                    "fetched_at": "2026-11-11T08:00:00Z"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/E400"
          },
          "401": {
            "$ref": "#/components/responses/E401"
          },
          "402": {
            "$ref": "#/components/responses/E402"
          },
          "404": {
            "$ref": "#/components/responses/E404"
          },
          "429": {
            "$ref": "#/components/responses/E429"
          },
          "502": {
            "$ref": "#/components/responses/E502"
          },
          "503": {
            "$ref": "#/components/responses/E503"
          },
          "504": {
            "$ref": "#/components/responses/E504"
          }
        },
        "externalDocs": {
          "url": "https://okdata.online/apis/wechat_mp/accounts/search/"
        },
        "x-price": {
          "unit": "item",
          "amount": "0.058",
          "max_per_call": "0.58",
          "currency": "USD"
        },
        "x-status": "beta"
      }
    },
    "/v1/wechat_mp/accounts/articles/list": {
      "get": {
        "operationId": "wechat_mp_accounts_articles_list",
        "summary": "Official Account article history",
        "description": "An Official Account's published articles, newest first, without a QR login.\n\nPrice: $0.04 per call. 1,000 items take about 100 calls: $4.00. Failed calls are not charged.",
        "tags": [
          "wechat_mp"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "query",
            "required": true,
            "description": "The account original ID (gh_…) from accounts.search, or its WeChat ID.",
            "schema": {
              "type": "string",
              "description": "The account original ID (gh_…) from accounts.search, or its WeChat ID.",
              "examples": [
                "gh_363b924965e9"
              ]
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Opaque cursor from page.next_cursor of the previous call. Each page is a separate call.",
            "schema": {
              "type": "string",
              "description": "Opaque cursor from page.next_cursor of the previous call. Each page is a separate call."
            }
          },
          {
            "name": "view",
            "in": "query",
            "required": false,
            "description": "How much of each object comes back. full adds platform-specific fields under ext.",
            "schema": {
              "type": "string",
              "description": "How much of each object comes back. full adds platform-specific fields under ext.",
              "enum": [
                "compact",
                "standard",
                "full"
              ],
              "default": "standard"
            }
          },
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "description": "Comma-separated fields to keep, to save tokens.",
            "schema": {
              "type": "string",
              "description": "Comma-separated fields to keep, to save tokens.",
              "examples": [
                "id,text,metrics.likes"
              ]
            }
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "A page of post objects.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PostListResponse"
                },
                "example": {
                  "code": "ok",
                  "request_id": "0f6c2a8e-4b1d-4e0a-9a51-3c7d2b9e1f20",
                  "data": {
                    "items": [
                      {
                        "id": "MzA5NTI3MjIwMA==_2650981234_1",
                        "url": "https://mp.weixin.qq.com/s/k3Fq9xYbT0aP2mWnR8sVdA",
                        "type": "article",
                        "title": "一家 12 人的出海团队，怎么做第一年的增长",
                        "text": "## 先说结论\n\n第一年最值钱的不是投放，而是……",
                        "lang": "zh",
                        "published_at": "2026-11-02T09:30:00Z",
                        "author": {
                          "id": "MzA5NTI3MjIwMA==",
                          "username": "chuhai_growth",
                          "name": "出海增长笔记",
                          "avatar_url": "https://cdn.example.com/avatar/trailkit.jpg",
                          "followers": null,
                          "verified": true
                        },
                        "metrics": {
                          "views": 1250000,
                          "likes": 48200,
                          "comments": null,
                          "shares": null,
                          "favorites": null,
                          "reposts": null
                        },
                        "images": null,
                        "hashtags": null
                      }
                    ]
                  },
                  "page": {
                    "next_cursor": "eyJvIjoyMH0",
                    "has_more": true
                  },
                  "warnings": [],
                  "meta": {
                    "capability": "wechat_mp.accounts.articles.list",
                    "billing": {
                      "amount": "0.04",
                      "currency": "USD",
                      "balance_after": "9.96"
                    },
                    "unavailable": {
                      "metrics.comments": "platform",
                      "metrics.shares": "platform",
                      "metrics.favorites": "platform",
                      "metrics.reposts": "platform"
                    },
                    "cached": false,
                    "replayed": false,
                    "fetched_at": "2026-11-11T08:00:00Z"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/E400"
          },
          "401": {
            "$ref": "#/components/responses/E401"
          },
          "402": {
            "$ref": "#/components/responses/E402"
          },
          "404": {
            "$ref": "#/components/responses/E404"
          },
          "429": {
            "$ref": "#/components/responses/E429"
          },
          "502": {
            "$ref": "#/components/responses/E502"
          },
          "503": {
            "$ref": "#/components/responses/E503"
          },
          "504": {
            "$ref": "#/components/responses/E504"
          }
        },
        "externalDocs": {
          "url": "https://okdata.online/apis/wechat_mp/accounts/articles/list/"
        },
        "x-price": {
          "unit": "call",
          "amount": "0.04",
          "max_per_call": "0.04",
          "currency": "USD"
        },
        "x-status": "beta"
      }
    },
    "/v1/wechat_mp/articles/get": {
      "get": {
        "operationId": "wechat_mp_articles_get",
        "summary": "Official Account article detail",
        "description": "Full text of an article as Markdown, with reads and likes where available.\n\nPrice: $0.02 per call. 1,000 calls cost $20.00. Failed calls are not charged.",
        "tags": [
          "wechat_mp"
        ],
        "parameters": [
          {
            "name": "url",
            "in": "query",
            "required": true,
            "description": "A share link or page URL; the ID is read from it.",
            "schema": {
              "type": "string",
              "description": "A share link or page URL; the ID is read from it.",
              "examples": [
                "https://mp.weixin.qq.com/s/xxxxxxxx"
              ]
            }
          },
          {
            "name": "view",
            "in": "query",
            "required": false,
            "description": "How much of each object comes back. full adds platform-specific fields under ext.",
            "schema": {
              "type": "string",
              "description": "How much of each object comes back. full adds platform-specific fields under ext.",
              "enum": [
                "compact",
                "standard",
                "full"
              ],
              "default": "standard"
            }
          },
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "description": "Comma-separated fields to keep, to save tokens.",
            "schema": {
              "type": "string",
              "description": "Comma-separated fields to keep, to save tokens.",
              "examples": [
                "id,text,metrics.likes"
              ]
            }
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "One post object.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PostResponse"
                },
                "example": {
                  "code": "ok",
                  "request_id": "0f6c2a8e-4b1d-4e0a-9a51-3c7d2b9e1f20",
                  "data": {
                    "item": {
                      "id": "MzA5NTI3MjIwMA==_2650981234_1",
                      "url": "https://mp.weixin.qq.com/s/k3Fq9xYbT0aP2mWnR8sVdA",
                      "type": "article",
                      "title": "一家 12 人的出海团队，怎么做第一年的增长",
                      "text": "## 先说结论\n\n第一年最值钱的不是投放，而是……",
                      "lang": "zh",
                      "published_at": "2026-11-02T09:30:00Z",
                      "author": {
                        "id": "MzA5NTI3MjIwMA==",
                        "username": "chuhai_growth",
                        "name": "出海增长笔记",
                        "avatar_url": "https://cdn.example.com/avatar/trailkit.jpg",
                        "followers": null,
                        "verified": true
                      },
                      "metrics": {
                        "views": 1250000,
                        "likes": 48200,
                        "comments": null,
                        "shares": null,
                        "favorites": null,
                        "reposts": null
                      },
                      "images": null,
                      "hashtags": null
                    }
                  },
                  "warnings": [],
                  "meta": {
                    "capability": "wechat_mp.articles.get",
                    "billing": {
                      "amount": "0.02",
                      "currency": "USD",
                      "balance_after": "9.98"
                    },
                    "unavailable": {
                      "metrics.comments": "platform",
                      "metrics.shares": "platform",
                      "metrics.favorites": "platform",
                      "metrics.reposts": "platform"
                    },
                    "cached": false,
                    "replayed": false,
                    "fetched_at": "2026-11-11T08:00:00Z"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/E400"
          },
          "401": {
            "$ref": "#/components/responses/E401"
          },
          "402": {
            "$ref": "#/components/responses/E402"
          },
          "404": {
            "$ref": "#/components/responses/E404"
          },
          "429": {
            "$ref": "#/components/responses/E429"
          },
          "502": {
            "$ref": "#/components/responses/E502"
          },
          "503": {
            "$ref": "#/components/responses/E503"
          },
          "504": {
            "$ref": "#/components/responses/E504"
          }
        },
        "externalDocs": {
          "url": "https://okdata.online/apis/wechat_mp/articles/get/"
        },
        "x-price": {
          "unit": "call",
          "amount": "0.02",
          "max_per_call": "0.02",
          "currency": "USD"
        },
        "x-status": "beta"
      }
    },
    "/v1/bilibili/videos/search": {
      "get": {
        "operationId": "bilibili_videos_search",
        "summary": "Bilibili video search",
        "description": "Videos matching keywords, with views, danmaku, likes and coins.\n\nPrice: $0.002 per call. 1,000 items take about 50 calls: $0.10. Failed calls are not charged.",
        "tags": [
          "bilibili"
        ],
        "parameters": [
          {
            "name": "query",
            "in": "query",
            "required": true,
            "description": "Keywords, as a person would type them into the platform search box.",
            "schema": {
              "type": "string",
              "description": "Keywords, as a person would type them into the platform search box.",
              "examples": [
                "Claude Code 教程"
              ]
            }
          },
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "description": "Result order.",
            "schema": {
              "type": "string",
              "description": "Result order.",
              "enum": [
                "relevance",
                "latest",
                "most_viewed"
              ],
              "default": "relevance"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Opaque cursor from page.next_cursor of the previous call. Each page is a separate call.",
            "schema": {
              "type": "string",
              "description": "Opaque cursor from page.next_cursor of the previous call. Each page is a separate call."
            }
          },
          {
            "name": "view",
            "in": "query",
            "required": false,
            "description": "How much of each object comes back. full adds platform-specific fields under ext.",
            "schema": {
              "type": "string",
              "description": "How much of each object comes back. full adds platform-specific fields under ext.",
              "enum": [
                "compact",
                "standard",
                "full"
              ],
              "default": "standard"
            }
          },
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "description": "Comma-separated fields to keep, to save tokens.",
            "schema": {
              "type": "string",
              "description": "Comma-separated fields to keep, to save tokens.",
              "examples": [
                "id,text,metrics.likes"
              ]
            }
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "A page of post objects.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PostListResponse"
                },
                "example": {
                  "code": "ok",
                  "request_id": "0f6c2a8e-4b1d-4e0a-9a51-3c7d2b9e1f20",
                  "data": {
                    "items": [
                      {
                        "id": "BV1Gx4y1H7kQ",
                        "url": "https://www.bilibili.com/video/BV1Gx4y1H7kQ",
                        "type": "video",
                        "title": "用 Claude Code 半小时做完一个爬虫面板",
                        "text": "从零开始，全程不写一行 CSS。",
                        "lang": "zh",
                        "published_at": "2026-11-02T09:30:00Z",
                        "author": {
                          "id": "3546581234567890",
                          "username": null,
                          "name": "周末写代码",
                          "avatar_url": "https://cdn.example.com/avatar/trailkit.jpg",
                          "followers": 88100,
                          "verified": true
                        },
                        "metrics": {
                          "views": 1250000,
                          "likes": 48200,
                          "comments": 1312,
                          "shares": 2210,
                          "favorites": 9650,
                          "reposts": null
                        },
                        "images": null,
                        "hashtags": [
                          "编程",
                          "AI"
                        ]
                      }
                    ]
                  },
                  "page": {
                    "next_cursor": "eyJvIjoyMH0",
                    "has_more": true
                  },
                  "warnings": [],
                  "meta": {
                    "capability": "bilibili.videos.search",
                    "billing": {
                      "amount": "0.002",
                      "currency": "USD",
                      "balance_after": "9.998"
                    },
                    "unavailable": {
                      "metrics.reposts": "platform"
                    },
                    "cached": false,
                    "replayed": false,
                    "fetched_at": "2026-11-11T08:00:00Z"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/E400"
          },
          "401": {
            "$ref": "#/components/responses/E401"
          },
          "402": {
            "$ref": "#/components/responses/E402"
          },
          "404": {
            "$ref": "#/components/responses/E404"
          },
          "429": {
            "$ref": "#/components/responses/E429"
          },
          "502": {
            "$ref": "#/components/responses/E502"
          },
          "503": {
            "$ref": "#/components/responses/E503"
          },
          "504": {
            "$ref": "#/components/responses/E504"
          }
        },
        "externalDocs": {
          "url": "https://okdata.online/apis/bilibili/videos/search/"
        },
        "x-price": {
          "unit": "call",
          "amount": "0.002",
          "max_per_call": "0.002",
          "currency": "USD"
        },
        "x-status": "beta"
      }
    },
    "/v1/bilibili/videos/get": {
      "get": {
        "operationId": "bilibili_videos_get",
        "summary": "Bilibili video detail",
        "description": "One video by BV ID or link. Give id or url.\n\nPrice: $0.002 per call. 1,000 calls cost $2.00. Failed calls are not charged.",
        "tags": [
          "bilibili"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "query",
            "required": false,
            "description": "The video ID. Give id or url.",
            "schema": {
              "type": "string",
              "description": "The video ID. Give id or url.",
              "examples": [
                "BV1xx411c7mD"
              ]
            }
          },
          {
            "name": "url",
            "in": "query",
            "required": false,
            "description": "A share link or page URL; the ID is read from it.",
            "schema": {
              "type": "string",
              "description": "A share link or page URL; the ID is read from it.",
              "examples": [
                "https://www.bilibili.com/video/BV1xx411c7mD"
              ]
            }
          },
          {
            "name": "view",
            "in": "query",
            "required": false,
            "description": "How much of each object comes back. full adds platform-specific fields under ext.",
            "schema": {
              "type": "string",
              "description": "How much of each object comes back. full adds platform-specific fields under ext.",
              "enum": [
                "compact",
                "standard",
                "full"
              ],
              "default": "standard"
            }
          },
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "description": "Comma-separated fields to keep, to save tokens.",
            "schema": {
              "type": "string",
              "description": "Comma-separated fields to keep, to save tokens.",
              "examples": [
                "id,text,metrics.likes"
              ]
            }
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "One post object.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PostResponse"
                },
                "example": {
                  "code": "ok",
                  "request_id": "0f6c2a8e-4b1d-4e0a-9a51-3c7d2b9e1f20",
                  "data": {
                    "item": {
                      "id": "BV1Gx4y1H7kQ",
                      "url": "https://www.bilibili.com/video/BV1Gx4y1H7kQ",
                      "type": "video",
                      "title": "用 Claude Code 半小时做完一个爬虫面板",
                      "text": "从零开始，全程不写一行 CSS。",
                      "lang": "zh",
                      "published_at": "2026-11-02T09:30:00Z",
                      "author": {
                        "id": "3546581234567890",
                        "username": null,
                        "name": "周末写代码",
                        "avatar_url": "https://cdn.example.com/avatar/trailkit.jpg",
                        "followers": 88100,
                        "verified": true
                      },
                      "metrics": {
                        "views": 1250000,
                        "likes": 48200,
                        "comments": 1312,
                        "shares": 2210,
                        "favorites": 9650,
                        "reposts": null
                      },
                      "images": null,
                      "hashtags": [
                        "编程",
                        "AI"
                      ]
                    }
                  },
                  "warnings": [],
                  "meta": {
                    "capability": "bilibili.videos.get",
                    "billing": {
                      "amount": "0.002",
                      "currency": "USD",
                      "balance_after": "9.998"
                    },
                    "unavailable": {
                      "metrics.reposts": "platform"
                    },
                    "cached": false,
                    "replayed": false,
                    "fetched_at": "2026-11-11T08:00:00Z"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/E400"
          },
          "401": {
            "$ref": "#/components/responses/E401"
          },
          "402": {
            "$ref": "#/components/responses/E402"
          },
          "404": {
            "$ref": "#/components/responses/E404"
          },
          "429": {
            "$ref": "#/components/responses/E429"
          },
          "502": {
            "$ref": "#/components/responses/E502"
          },
          "503": {
            "$ref": "#/components/responses/E503"
          },
          "504": {
            "$ref": "#/components/responses/E504"
          }
        },
        "externalDocs": {
          "url": "https://okdata.online/apis/bilibili/videos/get/"
        },
        "x-price": {
          "unit": "call",
          "amount": "0.002",
          "max_per_call": "0.002",
          "currency": "USD"
        },
        "x-status": "beta"
      }
    },
    "/v1/bilibili/videos/comments/list": {
      "get": {
        "operationId": "bilibili_videos_comments_list",
        "summary": "Bilibili video comments",
        "description": "Comments on a video, hottest or newest first.\n\nPrice: $0.002 per call. 1,000 items take about 50 calls: $0.10. Failed calls are not charged.",
        "tags": [
          "bilibili"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "query",
            "required": true,
            "description": "The video ID. Give id or url.",
            "schema": {
              "type": "string",
              "description": "The video ID. Give id or url.",
              "examples": [
                "BV1xx411c7mD"
              ]
            }
          },
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "description": "Result order.",
            "schema": {
              "type": "string",
              "description": "Result order.",
              "enum": [
                "hot",
                "latest"
              ],
              "default": "hot"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Opaque cursor from page.next_cursor of the previous call. Each page is a separate call.",
            "schema": {
              "type": "string",
              "description": "Opaque cursor from page.next_cursor of the previous call. Each page is a separate call."
            }
          },
          {
            "name": "view",
            "in": "query",
            "required": false,
            "description": "How much of each object comes back. full adds platform-specific fields under ext.",
            "schema": {
              "type": "string",
              "description": "How much of each object comes back. full adds platform-specific fields under ext.",
              "enum": [
                "compact",
                "standard",
                "full"
              ],
              "default": "standard"
            }
          },
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "description": "Comma-separated fields to keep, to save tokens.",
            "schema": {
              "type": "string",
              "description": "Comma-separated fields to keep, to save tokens.",
              "examples": [
                "id,text,metrics.likes"
              ]
            }
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "A page of comment objects.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CommentListResponse"
                },
                "example": {
                  "code": "ok",
                  "request_id": "0f6c2a8e-4b1d-4e0a-9a51-3c7d2b9e1f20",
                  "data": {
                    "items": [
                      {
                        "id": "7302000000000000001",
                        "post_id": "7301234567890123456",
                        "parent_id": null,
                        "text": "三连了，求个仓库地址",
                        "published_at": "2026-11-02T11:04:00Z",
                        "author": {
                          "id": "3546581234567890",
                          "username": null,
                          "name": "周末写代码",
                          "avatar_url": "https://cdn.example.com/avatar/trailkit.jpg",
                          "followers": 88100,
                          "verified": true
                        },
                        "likes": 214,
                        "replies": 9,
                        "ip_location": "广东"
                      }
                    ]
                  },
                  "page": {
                    "next_cursor": "eyJvIjoyMH0",
                    "has_more": true
                  },
                  "warnings": [],
                  "meta": {
                    "capability": "bilibili.videos.comments.list",
                    "billing": {
                      "amount": "0.002",
                      "currency": "USD",
                      "balance_after": "9.998"
                    },
                    "unavailable": {},
                    "cached": false,
                    "replayed": false,
                    "fetched_at": "2026-11-11T08:00:00Z"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/E400"
          },
          "401": {
            "$ref": "#/components/responses/E401"
          },
          "402": {
            "$ref": "#/components/responses/E402"
          },
          "404": {
            "$ref": "#/components/responses/E404"
          },
          "429": {
            "$ref": "#/components/responses/E429"
          },
          "502": {
            "$ref": "#/components/responses/E502"
          },
          "503": {
            "$ref": "#/components/responses/E503"
          },
          "504": {
            "$ref": "#/components/responses/E504"
          }
        },
        "externalDocs": {
          "url": "https://okdata.online/apis/bilibili/videos/comments/list/"
        },
        "x-price": {
          "unit": "call",
          "amount": "0.002",
          "max_per_call": "0.002",
          "currency": "USD"
        },
        "x-status": "beta"
      }
    },
    "/v1/bilibili/trends/list": {
      "get": {
        "operationId": "bilibili_trends_list",
        "summary": "Bilibili popular board",
        "description": "The current popular videos board.\n\nPrice: $0.002 per call. 1,000 items take about 20 calls: $0.04. Failed calls are not charged.",
        "tags": [
          "bilibili"
        ],
        "parameters": [
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Opaque cursor from page.next_cursor of the previous call. Each page is a separate call.",
            "schema": {
              "type": "string",
              "description": "Opaque cursor from page.next_cursor of the previous call. Each page is a separate call."
            }
          },
          {
            "name": "view",
            "in": "query",
            "required": false,
            "description": "How much of each object comes back. full adds platform-specific fields under ext.",
            "schema": {
              "type": "string",
              "description": "How much of each object comes back. full adds platform-specific fields under ext.",
              "enum": [
                "compact",
                "standard",
                "full"
              ],
              "default": "standard"
            }
          },
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "description": "Comma-separated fields to keep, to save tokens.",
            "schema": {
              "type": "string",
              "description": "Comma-separated fields to keep, to save tokens.",
              "examples": [
                "id,text,metrics.likes"
              ]
            }
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "A page of trend objects.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TrendListResponse"
                },
                "example": {
                  "code": "ok",
                  "request_id": "0f6c2a8e-4b1d-4e0a-9a51-3c7d2b9e1f20",
                  "data": {
                    "items": [
                      {
                        "rank": 1,
                        "name": "用 Claude Code 半小时做完一个爬虫面板",
                        "heat": 1250000,
                        "url": "https://www.bilibili.com/video/BV1Gx4y1H7kQ"
                      }
                    ]
                  },
                  "page": {
                    "next_cursor": "eyJvIjoyMH0",
                    "has_more": true
                  },
                  "warnings": [],
                  "meta": {
                    "capability": "bilibili.trends.list",
                    "billing": {
                      "amount": "0.002",
                      "currency": "USD",
                      "balance_after": "9.998"
                    },
                    "unavailable": {},
                    "cached": false,
                    "replayed": false,
                    "fetched_at": "2026-11-11T08:00:00Z"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/E400"
          },
          "401": {
            "$ref": "#/components/responses/E401"
          },
          "402": {
            "$ref": "#/components/responses/E402"
          },
          "404": {
            "$ref": "#/components/responses/E404"
          },
          "429": {
            "$ref": "#/components/responses/E429"
          },
          "502": {
            "$ref": "#/components/responses/E502"
          },
          "503": {
            "$ref": "#/components/responses/E503"
          },
          "504": {
            "$ref": "#/components/responses/E504"
          }
        },
        "externalDocs": {
          "url": "https://okdata.online/apis/bilibili/trends/list/"
        },
        "x-price": {
          "unit": "call",
          "amount": "0.002",
          "max_per_call": "0.002",
          "currency": "USD"
        },
        "x-status": "beta"
      }
    },
    "/v1/weibo/posts/search": {
      "get": {
        "operationId": "weibo_posts_search",
        "summary": "Weibo post search",
        "description": "Posts matching keywords, latest or hot, with reposts, comments and likes.\n\nPrice: $0.002 per call. 1,000 items take about 100 calls: $0.20. Failed calls are not charged.",
        "tags": [
          "weibo"
        ],
        "parameters": [
          {
            "name": "query",
            "in": "query",
            "required": true,
            "description": "Keywords, as a person would type them into the platform search box.",
            "schema": {
              "type": "string",
              "description": "Keywords, as a person would type them into the platform search box.",
              "examples": [
                "新品发布"
              ]
            }
          },
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "description": "Result order.",
            "schema": {
              "type": "string",
              "description": "Result order.",
              "enum": [
                "hot",
                "latest"
              ],
              "default": "hot"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Opaque cursor from page.next_cursor of the previous call. Each page is a separate call.",
            "schema": {
              "type": "string",
              "description": "Opaque cursor from page.next_cursor of the previous call. Each page is a separate call."
            }
          },
          {
            "name": "view",
            "in": "query",
            "required": false,
            "description": "How much of each object comes back. full adds platform-specific fields under ext.",
            "schema": {
              "type": "string",
              "description": "How much of each object comes back. full adds platform-specific fields under ext.",
              "enum": [
                "compact",
                "standard",
                "full"
              ],
              "default": "standard"
            }
          },
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "description": "Comma-separated fields to keep, to save tokens.",
            "schema": {
              "type": "string",
              "description": "Comma-separated fields to keep, to save tokens.",
              "examples": [
                "id,text,metrics.likes"
              ]
            }
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "A page of post objects.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PostListResponse"
                },
                "example": {
                  "code": "ok",
                  "request_id": "0f6c2a8e-4b1d-4e0a-9a51-3c7d2b9e1f20",
                  "data": {
                    "items": [
                      {
                        "id": "5098765432109876",
                        "url": "https://weibo.com/1234567890/PbQ7rT2xZ",
                        "type": "text",
                        "title": null,
                        "text": "新品今天开售，评论区抽三位送同款。",
                        "lang": "zh",
                        "published_at": "2026-11-02T09:30:00Z",
                        "author": {
                          "id": "1234567890",
                          "username": null,
                          "name": "轻装户外官方",
                          "avatar_url": "https://cdn.example.com/avatar/trailkit.jpg",
                          "followers": 532000,
                          "verified": true
                        },
                        "metrics": {
                          "views": null,
                          "likes": 48200,
                          "comments": 1312,
                          "shares": null,
                          "favorites": null,
                          "reposts": 640
                        },
                        "images": [
                          "https://wx1.sinaimg.example.com/large/abc123.jpg"
                        ],
                        "hashtags": [
                          "新品发布"
                        ]
                      }
                    ]
                  },
                  "page": {
                    "next_cursor": "eyJvIjoyMH0",
                    "has_more": true
                  },
                  "warnings": [],
                  "meta": {
                    "capability": "weibo.posts.search",
                    "billing": {
                      "amount": "0.002",
                      "currency": "USD",
                      "balance_after": "9.998"
                    },
                    "unavailable": {
                      "metrics.views": "platform",
                      "metrics.shares": "platform",
                      "metrics.favorites": "platform"
                    },
                    "cached": false,
                    "replayed": false,
                    "fetched_at": "2026-11-11T08:00:00Z"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/E400"
          },
          "401": {
            "$ref": "#/components/responses/E401"
          },
          "402": {
            "$ref": "#/components/responses/E402"
          },
          "404": {
            "$ref": "#/components/responses/E404"
          },
          "429": {
            "$ref": "#/components/responses/E429"
          },
          "502": {
            "$ref": "#/components/responses/E502"
          },
          "503": {
            "$ref": "#/components/responses/E503"
          },
          "504": {
            "$ref": "#/components/responses/E504"
          }
        },
        "externalDocs": {
          "url": "https://okdata.online/apis/weibo/posts/search/"
        },
        "x-price": {
          "unit": "call",
          "amount": "0.002",
          "max_per_call": "0.002",
          "currency": "USD"
        },
        "x-status": "beta"
      }
    },
    "/v1/weibo/trends/list": {
      "get": {
        "operationId": "weibo_trends_list",
        "summary": "Weibo hot search",
        "description": "The Weibo hot search list with rank and heat.\n\nPrice: $0.002 per call. 1,000 items take about 20 calls: $0.04. Failed calls are not charged.",
        "tags": [
          "weibo"
        ],
        "parameters": [
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Opaque cursor from page.next_cursor of the previous call. Each page is a separate call.",
            "schema": {
              "type": "string",
              "description": "Opaque cursor from page.next_cursor of the previous call. Each page is a separate call."
            }
          },
          {
            "name": "view",
            "in": "query",
            "required": false,
            "description": "How much of each object comes back. full adds platform-specific fields under ext.",
            "schema": {
              "type": "string",
              "description": "How much of each object comes back. full adds platform-specific fields under ext.",
              "enum": [
                "compact",
                "standard",
                "full"
              ],
              "default": "standard"
            }
          },
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "description": "Comma-separated fields to keep, to save tokens.",
            "schema": {
              "type": "string",
              "description": "Comma-separated fields to keep, to save tokens.",
              "examples": [
                "id,text,metrics.likes"
              ]
            }
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "A page of trend objects.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TrendListResponse"
                },
                "example": {
                  "code": "ok",
                  "request_id": "0f6c2a8e-4b1d-4e0a-9a51-3c7d2b9e1f20",
                  "data": {
                    "items": [
                      {
                        "rank": 1,
                        "name": "#初雪#",
                        "heat": 1203423,
                        "url": "https://s.weibo.com/weibo?q=%23%E5%88%9D%E9%9B%AA%23"
                      }
                    ]
                  },
                  "page": {
                    "next_cursor": "eyJvIjoyMH0",
                    "has_more": true
                  },
                  "warnings": [],
                  "meta": {
                    "capability": "weibo.trends.list",
                    "billing": {
                      "amount": "0.002",
                      "currency": "USD",
                      "balance_after": "9.998"
                    },
                    "unavailable": {},
                    "cached": false,
                    "replayed": false,
                    "fetched_at": "2026-11-11T08:00:00Z"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/E400"
          },
          "401": {
            "$ref": "#/components/responses/E401"
          },
          "402": {
            "$ref": "#/components/responses/E402"
          },
          "404": {
            "$ref": "#/components/responses/E404"
          },
          "429": {
            "$ref": "#/components/responses/E429"
          },
          "502": {
            "$ref": "#/components/responses/E502"
          },
          "503": {
            "$ref": "#/components/responses/E503"
          },
          "504": {
            "$ref": "#/components/responses/E504"
          }
        },
        "externalDocs": {
          "url": "https://okdata.online/apis/weibo/trends/list/"
        },
        "x-price": {
          "unit": "call",
          "amount": "0.002",
          "max_per_call": "0.002",
          "currency": "USD"
        },
        "x-status": "beta"
      }
    },
    "/v1/weibo/users/get": {
      "get": {
        "operationId": "weibo_users_get",
        "summary": "Weibo account profile",
        "description": "Followers, post count, verification and bio of an account.\n\nPrice: $0.002 per call. 1,000 calls cost $2.00. Failed calls are not charged.",
        "tags": [
          "weibo"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "query",
            "required": true,
            "description": "The account ID (sec_uid / user id as the platform uses it).",
            "schema": {
              "type": "string",
              "description": "The account ID (sec_uid / user id as the platform uses it).",
              "examples": [
                "1234567890"
              ]
            }
          },
          {
            "name": "view",
            "in": "query",
            "required": false,
            "description": "How much of each object comes back. full adds platform-specific fields under ext.",
            "schema": {
              "type": "string",
              "description": "How much of each object comes back. full adds platform-specific fields under ext.",
              "enum": [
                "compact",
                "standard",
                "full"
              ],
              "default": "standard"
            }
          },
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "description": "Comma-separated fields to keep, to save tokens.",
            "schema": {
              "type": "string",
              "description": "Comma-separated fields to keep, to save tokens.",
              "examples": [
                "id,text,metrics.likes"
              ]
            }
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "One account object.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AccountResponse"
                },
                "example": {
                  "code": "ok",
                  "request_id": "0f6c2a8e-4b1d-4e0a-9a51-3c7d2b9e1f20",
                  "data": {
                    "item": {
                      "id": "1234567890",
                      "url": "https://weibo.com/u/1234567890",
                      "username": null,
                      "name": "轻装户外官方",
                      "bio": "户外装备品牌官方微博",
                      "avatar_url": "https://cdn.example.com/avatar/trailkit.jpg",
                      "verified": true,
                      "followers": 182300,
                      "following": 312,
                      "posts": 486,
                      "likes": 2310000
                    }
                  },
                  "warnings": [],
                  "meta": {
                    "capability": "weibo.users.get",
                    "billing": {
                      "amount": "0.002",
                      "currency": "USD",
                      "balance_after": "9.998"
                    },
                    "unavailable": {},
                    "cached": false,
                    "replayed": false,
                    "fetched_at": "2026-11-11T08:00:00Z"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/E400"
          },
          "401": {
            "$ref": "#/components/responses/E401"
          },
          "402": {
            "$ref": "#/components/responses/E402"
          },
          "404": {
            "$ref": "#/components/responses/E404"
          },
          "429": {
            "$ref": "#/components/responses/E429"
          },
          "502": {
            "$ref": "#/components/responses/E502"
          },
          "503": {
            "$ref": "#/components/responses/E503"
          },
          "504": {
            "$ref": "#/components/responses/E504"
          }
        },
        "externalDocs": {
          "url": "https://okdata.online/apis/weibo/users/get/"
        },
        "x-price": {
          "unit": "call",
          "amount": "0.002",
          "max_per_call": "0.002",
          "currency": "USD"
        },
        "x-status": "beta"
      }
    },
    "/v1/tiktok/videos/search": {
      "get": {
        "operationId": "tiktok_videos_search",
        "summary": "TikTok video search",
        "description": "Videos matching keywords worldwide, with plays, likes, comments and shares.\n\nPrice: $0.002 per call. 1,000 items take about 34 calls: $0.068. Failed calls are not charged.",
        "tags": [
          "tiktok"
        ],
        "parameters": [
          {
            "name": "query",
            "in": "query",
            "required": true,
            "description": "Keywords, as a person would type them into the platform search box.",
            "schema": {
              "type": "string",
              "description": "Keywords, as a person would type them into the platform search box.",
              "examples": [
                "ai agents"
              ]
            }
          },
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "description": "Result order.",
            "schema": {
              "type": "string",
              "description": "Result order.",
              "enum": [
                "relevance",
                "latest",
                "most_liked"
              ],
              "default": "relevance"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Opaque cursor from page.next_cursor of the previous call. Each page is a separate call.",
            "schema": {
              "type": "string",
              "description": "Opaque cursor from page.next_cursor of the previous call. Each page is a separate call."
            }
          },
          {
            "name": "view",
            "in": "query",
            "required": false,
            "description": "How much of each object comes back. full adds platform-specific fields under ext.",
            "schema": {
              "type": "string",
              "description": "How much of each object comes back. full adds platform-specific fields under ext.",
              "enum": [
                "compact",
                "standard",
                "full"
              ],
              "default": "standard"
            }
          },
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "description": "Comma-separated fields to keep, to save tokens.",
            "schema": {
              "type": "string",
              "description": "Comma-separated fields to keep, to save tokens.",
              "examples": [
                "id,text,metrics.likes"
              ]
            }
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "A page of post objects.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PostListResponse"
                },
                "example": {
                  "code": "ok",
                  "request_id": "0f6c2a8e-4b1d-4e0a-9a51-3c7d2b9e1f20",
                  "data": {
                    "items": [
                      {
                        "id": "7305085486984858894",
                        "url": "https://www.tiktok.com/@trailkit/video/7305085486984858894",
                        "type": "video",
                        "title": null,
                        "text": "Everything I packed for two nights in the hills #camping #gear",
                        "lang": "en",
                        "published_at": "2026-11-02T09:30:00Z",
                        "author": {
                          "id": "6812345678901234567",
                          "username": "trailkit",
                          "name": "Trail Kit",
                          "avatar_url": "https://cdn.example.com/avatar/trailkit.jpg",
                          "followers": 182300,
                          "verified": true
                        },
                        "metrics": {
                          "views": 1250000,
                          "likes": 48200,
                          "comments": 1312,
                          "shares": 2210,
                          "favorites": 9650,
                          "reposts": null
                        },
                        "images": null,
                        "hashtags": [
                          "camping",
                          "gear"
                        ]
                      }
                    ]
                  },
                  "page": {
                    "next_cursor": "eyJvIjoyMH0",
                    "has_more": true
                  },
                  "warnings": [],
                  "meta": {
                    "capability": "tiktok.videos.search",
                    "billing": {
                      "amount": "0.002",
                      "currency": "USD",
                      "balance_after": "9.998"
                    },
                    "unavailable": {
                      "metrics.reposts": "platform"
                    },
                    "cached": false,
                    "replayed": false,
                    "fetched_at": "2026-11-11T08:00:00Z"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/E400"
          },
          "401": {
            "$ref": "#/components/responses/E401"
          },
          "402": {
            "$ref": "#/components/responses/E402"
          },
          "404": {
            "$ref": "#/components/responses/E404"
          },
          "429": {
            "$ref": "#/components/responses/E429"
          },
          "502": {
            "$ref": "#/components/responses/E502"
          },
          "503": {
            "$ref": "#/components/responses/E503"
          },
          "504": {
            "$ref": "#/components/responses/E504"
          }
        },
        "externalDocs": {
          "url": "https://okdata.online/apis/tiktok/videos/search/"
        },
        "x-price": {
          "unit": "call",
          "amount": "0.002",
          "max_per_call": "0.002",
          "currency": "USD"
        },
        "x-status": "beta"
      }
    },
    "/v1/tiktok/videos/get": {
      "get": {
        "operationId": "tiktok_videos_get",
        "summary": "TikTok video detail",
        "description": "One video by ID or link. Give id or url.\n\nPrice: $0.002 per call. 1,000 calls cost $2.00. Failed calls are not charged.",
        "tags": [
          "tiktok"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "query",
            "required": false,
            "description": "The video ID. Give id or url.",
            "schema": {
              "type": "string",
              "description": "The video ID. Give id or url.",
              "examples": [
                "7305085486984858894"
              ]
            }
          },
          {
            "name": "url",
            "in": "query",
            "required": false,
            "description": "A share link or page URL; the ID is read from it.",
            "schema": {
              "type": "string",
              "description": "A share link or page URL; the ID is read from it.",
              "examples": [
                "https://www.tiktok.com/@user/video/7305085486984858894"
              ]
            }
          },
          {
            "name": "view",
            "in": "query",
            "required": false,
            "description": "How much of each object comes back. full adds platform-specific fields under ext.",
            "schema": {
              "type": "string",
              "description": "How much of each object comes back. full adds platform-specific fields under ext.",
              "enum": [
                "compact",
                "standard",
                "full"
              ],
              "default": "standard"
            }
          },
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "description": "Comma-separated fields to keep, to save tokens.",
            "schema": {
              "type": "string",
              "description": "Comma-separated fields to keep, to save tokens.",
              "examples": [
                "id,text,metrics.likes"
              ]
            }
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "One post object.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PostResponse"
                },
                "example": {
                  "code": "ok",
                  "request_id": "0f6c2a8e-4b1d-4e0a-9a51-3c7d2b9e1f20",
                  "data": {
                    "item": {
                      "id": "7305085486984858894",
                      "url": "https://www.tiktok.com/@trailkit/video/7305085486984858894",
                      "type": "video",
                      "title": null,
                      "text": "Everything I packed for two nights in the hills #camping #gear",
                      "lang": "en",
                      "published_at": "2026-11-02T09:30:00Z",
                      "author": {
                        "id": "6812345678901234567",
                        "username": "trailkit",
                        "name": "Trail Kit",
                        "avatar_url": "https://cdn.example.com/avatar/trailkit.jpg",
                        "followers": 182300,
                        "verified": true
                      },
                      "metrics": {
                        "views": 1250000,
                        "likes": 48200,
                        "comments": 1312,
                        "shares": 2210,
                        "favorites": 9650,
                        "reposts": null
                      },
                      "images": null,
                      "hashtags": [
                        "camping",
                        "gear"
                      ]
                    }
                  },
                  "warnings": [],
                  "meta": {
                    "capability": "tiktok.videos.get",
                    "billing": {
                      "amount": "0.002",
                      "currency": "USD",
                      "balance_after": "9.998"
                    },
                    "unavailable": {
                      "metrics.reposts": "platform"
                    },
                    "cached": false,
                    "replayed": false,
                    "fetched_at": "2026-11-11T08:00:00Z"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/E400"
          },
          "401": {
            "$ref": "#/components/responses/E401"
          },
          "402": {
            "$ref": "#/components/responses/E402"
          },
          "404": {
            "$ref": "#/components/responses/E404"
          },
          "429": {
            "$ref": "#/components/responses/E429"
          },
          "502": {
            "$ref": "#/components/responses/E502"
          },
          "503": {
            "$ref": "#/components/responses/E503"
          },
          "504": {
            "$ref": "#/components/responses/E504"
          }
        },
        "externalDocs": {
          "url": "https://okdata.online/apis/tiktok/videos/get/"
        },
        "x-price": {
          "unit": "call",
          "amount": "0.002",
          "max_per_call": "0.002",
          "currency": "USD"
        },
        "x-status": "beta"
      }
    },
    "/v1/tiktok/videos/comments/list": {
      "get": {
        "operationId": "tiktok_videos_comments_list",
        "summary": "TikTok video comments",
        "description": "Comments on a video with likes and reply counts.\n\nPrice: $0.002 per call. 1,000 items take about 20 calls: $0.04. Failed calls are not charged.",
        "tags": [
          "tiktok"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "query",
            "required": true,
            "description": "The video ID. Give id or url.",
            "schema": {
              "type": "string",
              "description": "The video ID. Give id or url.",
              "examples": [
                "7305085486984858894"
              ]
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Opaque cursor from page.next_cursor of the previous call. Each page is a separate call.",
            "schema": {
              "type": "string",
              "description": "Opaque cursor from page.next_cursor of the previous call. Each page is a separate call."
            }
          },
          {
            "name": "view",
            "in": "query",
            "required": false,
            "description": "How much of each object comes back. full adds platform-specific fields under ext.",
            "schema": {
              "type": "string",
              "description": "How much of each object comes back. full adds platform-specific fields under ext.",
              "enum": [
                "compact",
                "standard",
                "full"
              ],
              "default": "standard"
            }
          },
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "description": "Comma-separated fields to keep, to save tokens.",
            "schema": {
              "type": "string",
              "description": "Comma-separated fields to keep, to save tokens.",
              "examples": [
                "id,text,metrics.likes"
              ]
            }
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "A page of comment objects.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CommentListResponse"
                },
                "example": {
                  "code": "ok",
                  "request_id": "0f6c2a8e-4b1d-4e0a-9a51-3c7d2b9e1f20",
                  "data": {
                    "items": [
                      {
                        "id": "7302000000000000001",
                        "post_id": "7301234567890123456",
                        "parent_id": null,
                        "text": "Which tent is that? Looks tiny packed.",
                        "published_at": "2026-11-02T11:04:00Z",
                        "author": {
                          "id": "6812345678901234567",
                          "username": "trailkit",
                          "name": "Trail Kit",
                          "avatar_url": "https://cdn.example.com/avatar/trailkit.jpg",
                          "followers": 182300,
                          "verified": true
                        },
                        "likes": 214,
                        "replies": 9,
                        "ip_location": null
                      }
                    ]
                  },
                  "page": {
                    "next_cursor": "eyJvIjoyMH0",
                    "has_more": true
                  },
                  "warnings": [],
                  "meta": {
                    "capability": "tiktok.videos.comments.list",
                    "billing": {
                      "amount": "0.002",
                      "currency": "USD",
                      "balance_after": "9.998"
                    },
                    "unavailable": {},
                    "cached": false,
                    "replayed": false,
                    "fetched_at": "2026-11-11T08:00:00Z"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/E400"
          },
          "401": {
            "$ref": "#/components/responses/E401"
          },
          "402": {
            "$ref": "#/components/responses/E402"
          },
          "404": {
            "$ref": "#/components/responses/E404"
          },
          "429": {
            "$ref": "#/components/responses/E429"
          },
          "502": {
            "$ref": "#/components/responses/E502"
          },
          "503": {
            "$ref": "#/components/responses/E503"
          },
          "504": {
            "$ref": "#/components/responses/E504"
          }
        },
        "externalDocs": {
          "url": "https://okdata.online/apis/tiktok/videos/comments/list/"
        },
        "x-price": {
          "unit": "call",
          "amount": "0.002",
          "max_per_call": "0.002",
          "currency": "USD"
        },
        "x-status": "beta"
      }
    },
    "/v1/tiktok/users/get": {
      "get": {
        "operationId": "tiktok_users_get",
        "summary": "TikTok account profile",
        "description": "Followers, likes, video count and bio of an account.\n\nPrice: $0.002 per call. 1,000 calls cost $2.00. Failed calls are not charged.",
        "tags": [
          "tiktok"
        ],
        "parameters": [
          {
            "name": "username",
            "in": "query",
            "required": true,
            "description": "The handle, with or without @.",
            "schema": {
              "type": "string",
              "description": "The handle, with or without @.",
              "examples": [
                "khaby.lame"
              ]
            }
          },
          {
            "name": "view",
            "in": "query",
            "required": false,
            "description": "How much of each object comes back. full adds platform-specific fields under ext.",
            "schema": {
              "type": "string",
              "description": "How much of each object comes back. full adds platform-specific fields under ext.",
              "enum": [
                "compact",
                "standard",
                "full"
              ],
              "default": "standard"
            }
          },
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "description": "Comma-separated fields to keep, to save tokens.",
            "schema": {
              "type": "string",
              "description": "Comma-separated fields to keep, to save tokens.",
              "examples": [
                "id,text,metrics.likes"
              ]
            }
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "One account object.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AccountResponse"
                },
                "example": {
                  "code": "ok",
                  "request_id": "0f6c2a8e-4b1d-4e0a-9a51-3c7d2b9e1f20",
                  "data": {
                    "item": {
                      "id": "6812345678901234567",
                      "url": "https://www.tiktok.com/@trailkit",
                      "username": "trailkit",
                      "name": "Trail Kit",
                      "bio": "Light packs, long walks.",
                      "avatar_url": "https://cdn.example.com/avatar/trailkit.jpg",
                      "verified": true,
                      "followers": 182300,
                      "following": 312,
                      "posts": 486,
                      "likes": 2310000
                    }
                  },
                  "warnings": [],
                  "meta": {
                    "capability": "tiktok.users.get",
                    "billing": {
                      "amount": "0.002",
                      "currency": "USD",
                      "balance_after": "9.998"
                    },
                    "unavailable": {},
                    "cached": false,
                    "replayed": false,
                    "fetched_at": "2026-11-11T08:00:00Z"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/E400"
          },
          "401": {
            "$ref": "#/components/responses/E401"
          },
          "402": {
            "$ref": "#/components/responses/E402"
          },
          "404": {
            "$ref": "#/components/responses/E404"
          },
          "429": {
            "$ref": "#/components/responses/E429"
          },
          "502": {
            "$ref": "#/components/responses/E502"
          },
          "503": {
            "$ref": "#/components/responses/E503"
          },
          "504": {
            "$ref": "#/components/responses/E504"
          }
        },
        "externalDocs": {
          "url": "https://okdata.online/apis/tiktok/users/get/"
        },
        "x-price": {
          "unit": "call",
          "amount": "0.002",
          "max_per_call": "0.002",
          "currency": "USD"
        },
        "x-status": "beta"
      }
    },
    "/v1/x/posts/get": {
      "get": {
        "operationId": "x_posts_get",
        "summary": "X post detail",
        "description": "One post by ID or link: text, media, views, likes, reposts and replies. Give id or url.\n\nPrice: $0.001 per call. 1,000 calls cost $1.00. Failed calls are not charged.",
        "tags": [
          "x"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "query",
            "required": false,
            "description": "The post ID. Give id or url.",
            "schema": {
              "type": "string",
              "description": "The post ID. Give id or url.",
              "examples": [
                "1850000000000000000"
              ]
            }
          },
          {
            "name": "url",
            "in": "query",
            "required": false,
            "description": "A share link or page URL; the ID is read from it.",
            "schema": {
              "type": "string",
              "description": "A share link or page URL; the ID is read from it.",
              "examples": [
                "https://x.com/user/status/1850000000000000000"
              ]
            }
          },
          {
            "name": "view",
            "in": "query",
            "required": false,
            "description": "How much of each object comes back. full adds platform-specific fields under ext.",
            "schema": {
              "type": "string",
              "description": "How much of each object comes back. full adds platform-specific fields under ext.",
              "enum": [
                "compact",
                "standard",
                "full"
              ],
              "default": "standard"
            }
          },
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "description": "Comma-separated fields to keep, to save tokens.",
            "schema": {
              "type": "string",
              "description": "Comma-separated fields to keep, to save tokens.",
              "examples": [
                "id,text,metrics.likes"
              ]
            }
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "One post object.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PostResponse"
                },
                "example": {
                  "code": "ok",
                  "request_id": "0f6c2a8e-4b1d-4e0a-9a51-3c7d2b9e1f20",
                  "data": {
                    "item": {
                      "id": "1856012345678901234",
                      "url": "https://x.com/trailkit/status/1856012345678901234",
                      "type": "text",
                      "title": null,
                      "text": "Shipped the lighter tent today. 1.1 kg packed, same footprint.",
                      "lang": "en",
                      "published_at": "2026-11-02T09:30:00Z",
                      "author": {
                        "id": "1450012345678901248",
                        "username": "trailkit",
                        "name": "Trail Kit",
                        "avatar_url": "https://cdn.example.com/avatar/trailkit.jpg",
                        "followers": 18230,
                        "verified": true
                      },
                      "metrics": {
                        "views": 1250000,
                        "likes": 48200,
                        "comments": 1312,
                        "shares": null,
                        "favorites": 9650,
                        "reposts": 640
                      },
                      "images": null,
                      "hashtags": null
                    }
                  },
                  "warnings": [],
                  "meta": {
                    "capability": "x.posts.get",
                    "billing": {
                      "amount": "0.001",
                      "currency": "USD",
                      "balance_after": "9.999"
                    },
                    "unavailable": {
                      "metrics.shares": "platform"
                    },
                    "cached": false,
                    "replayed": false,
                    "fetched_at": "2026-11-11T08:00:00Z"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/E400"
          },
          "401": {
            "$ref": "#/components/responses/E401"
          },
          "402": {
            "$ref": "#/components/responses/E402"
          },
          "404": {
            "$ref": "#/components/responses/E404"
          },
          "429": {
            "$ref": "#/components/responses/E429"
          },
          "502": {
            "$ref": "#/components/responses/E502"
          },
          "503": {
            "$ref": "#/components/responses/E503"
          },
          "504": {
            "$ref": "#/components/responses/E504"
          }
        },
        "externalDocs": {
          "url": "https://okdata.online/apis/x/posts/get/"
        },
        "x-price": {
          "unit": "call",
          "amount": "0.001",
          "max_per_call": "0.001",
          "currency": "USD"
        },
        "x-status": "beta"
      }
    },
    "/v1/x/posts/search": {
      "get": {
        "operationId": "x_posts_search",
        "summary": "X post search",
        "description": "Posts matching a query (X search operators work), latest or top.\n\nPrice: $0.006 per call. 1,000 items take about 50 calls: $0.30. Failed calls are not charged.",
        "tags": [
          "x"
        ],
        "parameters": [
          {
            "name": "query",
            "in": "query",
            "required": true,
            "description": "Keywords, as a person would type them into the platform search box.",
            "schema": {
              "type": "string",
              "description": "Keywords, as a person would type them into the platform search box.",
              "examples": [
                "\"claude code\" lang:zh"
              ]
            }
          },
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "description": "Result order.",
            "schema": {
              "type": "string",
              "description": "Result order.",
              "enum": [
                "latest",
                "top"
              ],
              "default": "latest"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Opaque cursor from page.next_cursor of the previous call. Each page is a separate call.",
            "schema": {
              "type": "string",
              "description": "Opaque cursor from page.next_cursor of the previous call. Each page is a separate call."
            }
          },
          {
            "name": "view",
            "in": "query",
            "required": false,
            "description": "How much of each object comes back. full adds platform-specific fields under ext.",
            "schema": {
              "type": "string",
              "description": "How much of each object comes back. full adds platform-specific fields under ext.",
              "enum": [
                "compact",
                "standard",
                "full"
              ],
              "default": "standard"
            }
          },
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "description": "Comma-separated fields to keep, to save tokens.",
            "schema": {
              "type": "string",
              "description": "Comma-separated fields to keep, to save tokens.",
              "examples": [
                "id,text,metrics.likes"
              ]
            }
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "A page of post objects.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PostListResponse"
                },
                "example": {
                  "code": "ok",
                  "request_id": "0f6c2a8e-4b1d-4e0a-9a51-3c7d2b9e1f20",
                  "data": {
                    "items": [
                      {
                        "id": "1856012345678901234",
                        "url": "https://x.com/trailkit/status/1856012345678901234",
                        "type": "text",
                        "title": null,
                        "text": "Shipped the lighter tent today. 1.1 kg packed, same footprint.",
                        "lang": "en",
                        "published_at": "2026-11-02T09:30:00Z",
                        "author": {
                          "id": "1450012345678901248",
                          "username": "trailkit",
                          "name": "Trail Kit",
                          "avatar_url": "https://cdn.example.com/avatar/trailkit.jpg",
                          "followers": 18230,
                          "verified": true
                        },
                        "metrics": {
                          "views": 1250000,
                          "likes": 48200,
                          "comments": 1312,
                          "shares": null,
                          "favorites": 9650,
                          "reposts": 640
                        },
                        "images": null,
                        "hashtags": null
                      }
                    ]
                  },
                  "page": {
                    "next_cursor": "eyJvIjoyMH0",
                    "has_more": true
                  },
                  "warnings": [],
                  "meta": {
                    "capability": "x.posts.search",
                    "billing": {
                      "amount": "0.006",
                      "currency": "USD",
                      "balance_after": "9.994"
                    },
                    "unavailable": {
                      "metrics.shares": "platform"
                    },
                    "cached": false,
                    "replayed": false,
                    "fetched_at": "2026-11-11T08:00:00Z"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/E400"
          },
          "401": {
            "$ref": "#/components/responses/E401"
          },
          "402": {
            "$ref": "#/components/responses/E402"
          },
          "404": {
            "$ref": "#/components/responses/E404"
          },
          "429": {
            "$ref": "#/components/responses/E429"
          },
          "502": {
            "$ref": "#/components/responses/E502"
          },
          "503": {
            "$ref": "#/components/responses/E503"
          },
          "504": {
            "$ref": "#/components/responses/E504"
          }
        },
        "externalDocs": {
          "url": "https://okdata.online/apis/x/posts/search/"
        },
        "x-price": {
          "unit": "call",
          "amount": "0.006",
          "max_per_call": "0.006",
          "currency": "USD"
        },
        "x-status": "beta"
      }
    },
    "/v1/x/users/get": {
      "get": {
        "operationId": "x_users_get",
        "summary": "X account profile",
        "description": "Followers, following, post count, bio and verification of an account.\n\nPrice: $0.001 per call. 1,000 calls cost $1.00. Failed calls are not charged.",
        "tags": [
          "x"
        ],
        "parameters": [
          {
            "name": "username",
            "in": "query",
            "required": true,
            "description": "The handle, with or without @.",
            "schema": {
              "type": "string",
              "description": "The handle, with or without @.",
              "examples": [
                "openai"
              ]
            }
          },
          {
            "name": "view",
            "in": "query",
            "required": false,
            "description": "How much of each object comes back. full adds platform-specific fields under ext.",
            "schema": {
              "type": "string",
              "description": "How much of each object comes back. full adds platform-specific fields under ext.",
              "enum": [
                "compact",
                "standard",
                "full"
              ],
              "default": "standard"
            }
          },
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "description": "Comma-separated fields to keep, to save tokens.",
            "schema": {
              "type": "string",
              "description": "Comma-separated fields to keep, to save tokens.",
              "examples": [
                "id,text,metrics.likes"
              ]
            }
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "One account object.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AccountResponse"
                },
                "example": {
                  "code": "ok",
                  "request_id": "0f6c2a8e-4b1d-4e0a-9a51-3c7d2b9e1f20",
                  "data": {
                    "item": {
                      "id": "1450012345678901248",
                      "url": "https://x.com/trailkit",
                      "username": "trailkit",
                      "name": "Trail Kit",
                      "bio": "Light packs, long walks.",
                      "avatar_url": "https://cdn.example.com/avatar/trailkit.jpg",
                      "verified": true,
                      "followers": 182300,
                      "following": 312,
                      "posts": 486,
                      "likes": null
                    }
                  },
                  "warnings": [],
                  "meta": {
                    "capability": "x.users.get",
                    "billing": {
                      "amount": "0.001",
                      "currency": "USD",
                      "balance_after": "9.999"
                    },
                    "unavailable": {},
                    "cached": false,
                    "replayed": false,
                    "fetched_at": "2026-11-11T08:00:00Z"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/E400"
          },
          "401": {
            "$ref": "#/components/responses/E401"
          },
          "402": {
            "$ref": "#/components/responses/E402"
          },
          "404": {
            "$ref": "#/components/responses/E404"
          },
          "429": {
            "$ref": "#/components/responses/E429"
          },
          "502": {
            "$ref": "#/components/responses/E502"
          },
          "503": {
            "$ref": "#/components/responses/E503"
          },
          "504": {
            "$ref": "#/components/responses/E504"
          }
        },
        "externalDocs": {
          "url": "https://okdata.online/apis/x/users/get/"
        },
        "x-price": {
          "unit": "call",
          "amount": "0.001",
          "max_per_call": "0.001",
          "currency": "USD"
        },
        "x-status": "beta"
      }
    },
    "/v1/x/users/posts/list": {
      "get": {
        "operationId": "x_users_posts_list",
        "summary": "X account posts",
        "description": "An account's posts, newest first.\n\nPrice: $0.006 per call. 1,000 items take about 50 calls: $0.30. Failed calls are not charged.",
        "tags": [
          "x"
        ],
        "parameters": [
          {
            "name": "username",
            "in": "query",
            "required": true,
            "description": "The handle, with or without @.",
            "schema": {
              "type": "string",
              "description": "The handle, with or without @.",
              "examples": [
                "openai"
              ]
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Opaque cursor from page.next_cursor of the previous call. Each page is a separate call.",
            "schema": {
              "type": "string",
              "description": "Opaque cursor from page.next_cursor of the previous call. Each page is a separate call."
            }
          },
          {
            "name": "view",
            "in": "query",
            "required": false,
            "description": "How much of each object comes back. full adds platform-specific fields under ext.",
            "schema": {
              "type": "string",
              "description": "How much of each object comes back. full adds platform-specific fields under ext.",
              "enum": [
                "compact",
                "standard",
                "full"
              ],
              "default": "standard"
            }
          },
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "description": "Comma-separated fields to keep, to save tokens.",
            "schema": {
              "type": "string",
              "description": "Comma-separated fields to keep, to save tokens.",
              "examples": [
                "id,text,metrics.likes"
              ]
            }
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "A page of post objects.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PostListResponse"
                },
                "example": {
                  "code": "ok",
                  "request_id": "0f6c2a8e-4b1d-4e0a-9a51-3c7d2b9e1f20",
                  "data": {
                    "items": [
                      {
                        "id": "1856012345678901234",
                        "url": "https://x.com/trailkit/status/1856012345678901234",
                        "type": "text",
                        "title": null,
                        "text": "Shipped the lighter tent today. 1.1 kg packed, same footprint.",
                        "lang": "en",
                        "published_at": "2026-11-02T09:30:00Z",
                        "author": {
                          "id": "1450012345678901248",
                          "username": "trailkit",
                          "name": "Trail Kit",
                          "avatar_url": "https://cdn.example.com/avatar/trailkit.jpg",
                          "followers": 18230,
                          "verified": true
                        },
                        "metrics": {
                          "views": 1250000,
                          "likes": 48200,
                          "comments": 1312,
                          "shares": null,
                          "favorites": 9650,
                          "reposts": 640
                        },
                        "images": null,
                        "hashtags": null
                      }
                    ]
                  },
                  "page": {
                    "next_cursor": "eyJvIjoyMH0",
                    "has_more": true
                  },
                  "warnings": [],
                  "meta": {
                    "capability": "x.users.posts.list",
                    "billing": {
                      "amount": "0.006",
                      "currency": "USD",
                      "balance_after": "9.994"
                    },
                    "unavailable": {
                      "metrics.shares": "platform"
                    },
                    "cached": false,
                    "replayed": false,
                    "fetched_at": "2026-11-11T08:00:00Z"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/E400"
          },
          "401": {
            "$ref": "#/components/responses/E401"
          },
          "402": {
            "$ref": "#/components/responses/E402"
          },
          "404": {
            "$ref": "#/components/responses/E404"
          },
          "429": {
            "$ref": "#/components/responses/E429"
          },
          "502": {
            "$ref": "#/components/responses/E502"
          },
          "503": {
            "$ref": "#/components/responses/E503"
          },
          "504": {
            "$ref": "#/components/responses/E504"
          }
        },
        "externalDocs": {
          "url": "https://okdata.online/apis/x/users/posts/list/"
        },
        "x-price": {
          "unit": "call",
          "amount": "0.006",
          "max_per_call": "0.006",
          "currency": "USD"
        },
        "x-status": "beta"
      }
    },
    "/v1/x/trends/list": {
      "get": {
        "operationId": "x_trends_list",
        "summary": "X trending topics",
        "description": "Trending topics worldwide or for one country.\n\nPrice: $0.009 per call. 1,000 items take about 34 calls: $0.306. Failed calls are not charged.",
        "tags": [
          "x"
        ],
        "parameters": [
          {
            "name": "country",
            "in": "query",
            "required": false,
            "description": "ISO country code; worldwide when omitted.",
            "schema": {
              "type": "string",
              "description": "ISO country code; worldwide when omitted.",
              "examples": [
                "US"
              ]
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Opaque cursor from page.next_cursor of the previous call. Each page is a separate call.",
            "schema": {
              "type": "string",
              "description": "Opaque cursor from page.next_cursor of the previous call. Each page is a separate call."
            }
          },
          {
            "name": "view",
            "in": "query",
            "required": false,
            "description": "How much of each object comes back. full adds platform-specific fields under ext.",
            "schema": {
              "type": "string",
              "description": "How much of each object comes back. full adds platform-specific fields under ext.",
              "enum": [
                "compact",
                "standard",
                "full"
              ],
              "default": "standard"
            }
          },
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "description": "Comma-separated fields to keep, to save tokens.",
            "schema": {
              "type": "string",
              "description": "Comma-separated fields to keep, to save tokens.",
              "examples": [
                "id,text,metrics.likes"
              ]
            }
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "A page of trend objects.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TrendListResponse"
                },
                "example": {
                  "code": "ok",
                  "request_id": "0f6c2a8e-4b1d-4e0a-9a51-3c7d2b9e1f20",
                  "data": {
                    "items": [
                      {
                        "rank": 1,
                        "name": "#FirstSnow",
                        "heat": 12500,
                        "url": "https://x.com/search?q=%23FirstSnow"
                      }
                    ]
                  },
                  "page": {
                    "next_cursor": "eyJvIjoyMH0",
                    "has_more": true
                  },
                  "warnings": [],
                  "meta": {
                    "capability": "x.trends.list",
                    "billing": {
                      "amount": "0.009",
                      "currency": "USD",
                      "balance_after": "9.991"
                    },
                    "unavailable": {},
                    "cached": false,
                    "replayed": false,
                    "fetched_at": "2026-11-11T08:00:00Z"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/E400"
          },
          "401": {
            "$ref": "#/components/responses/E401"
          },
          "402": {
            "$ref": "#/components/responses/E402"
          },
          "404": {
            "$ref": "#/components/responses/E404"
          },
          "429": {
            "$ref": "#/components/responses/E429"
          },
          "502": {
            "$ref": "#/components/responses/E502"
          },
          "503": {
            "$ref": "#/components/responses/E503"
          },
          "504": {
            "$ref": "#/components/responses/E504"
          }
        },
        "externalDocs": {
          "url": "https://okdata.online/apis/x/trends/list/"
        },
        "x-price": {
          "unit": "call",
          "amount": "0.009",
          "max_per_call": "0.009",
          "currency": "USD"
        },
        "x-status": "beta"
      }
    },
    "/v1/youtube/videos/search": {
      "get": {
        "operationId": "youtube_videos_search",
        "summary": "YouTube video search",
        "description": "Videos matching keywords with views, length and channel.\n\nPrice: $0.004 per call. 1,000 items take about 50 calls: $0.20. Failed calls are not charged.",
        "tags": [
          "youtube"
        ],
        "parameters": [
          {
            "name": "query",
            "in": "query",
            "required": true,
            "description": "Keywords, as a person would type them into the platform search box.",
            "schema": {
              "type": "string",
              "description": "Keywords, as a person would type them into the platform search box.",
              "examples": [
                "claude code tutorial"
              ]
            }
          },
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "description": "Result order.",
            "schema": {
              "type": "string",
              "description": "Result order.",
              "enum": [
                "relevance",
                "latest",
                "most_viewed"
              ],
              "default": "relevance"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Opaque cursor from page.next_cursor of the previous call. Each page is a separate call.",
            "schema": {
              "type": "string",
              "description": "Opaque cursor from page.next_cursor of the previous call. Each page is a separate call."
            }
          },
          {
            "name": "view",
            "in": "query",
            "required": false,
            "description": "How much of each object comes back. full adds platform-specific fields under ext.",
            "schema": {
              "type": "string",
              "description": "How much of each object comes back. full adds platform-specific fields under ext.",
              "enum": [
                "compact",
                "standard",
                "full"
              ],
              "default": "standard"
            }
          },
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "description": "Comma-separated fields to keep, to save tokens.",
            "schema": {
              "type": "string",
              "description": "Comma-separated fields to keep, to save tokens.",
              "examples": [
                "id,text,metrics.likes"
              ]
            }
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "A page of post objects.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PostListResponse"
                },
                "example": {
                  "code": "ok",
                  "request_id": "0f6c2a8e-4b1d-4e0a-9a51-3c7d2b9e1f20",
                  "data": {
                    "items": [
                      {
                        "id": "Zx3kP9vQm2A",
                        "url": "https://www.youtube.com/watch?v=Zx3kP9vQm2A",
                        "type": "video",
                        "title": "Two nights, one backpack: my full camping kit",
                        "text": "What I packed, what I would leave at home, and what it all weighs.",
                        "lang": "en",
                        "published_at": "2026-11-02T09:30:00Z",
                        "author": {
                          "id": "UCa1b2c3d4e5f6g7h8i9j0kL",
                          "username": "@trailkit",
                          "name": "Trail Kit",
                          "avatar_url": "https://cdn.example.com/avatar/trailkit.jpg",
                          "followers": 412000,
                          "verified": true
                        },
                        "metrics": {
                          "views": 1250000,
                          "likes": 48200,
                          "comments": 1312,
                          "shares": null,
                          "favorites": null,
                          "reposts": null
                        },
                        "images": null,
                        "hashtags": [
                          "camping"
                        ]
                      }
                    ]
                  },
                  "page": {
                    "next_cursor": "eyJvIjoyMH0",
                    "has_more": true
                  },
                  "warnings": [],
                  "meta": {
                    "capability": "youtube.videos.search",
                    "billing": {
                      "amount": "0.004",
                      "currency": "USD",
                      "balance_after": "9.996"
                    },
                    "unavailable": {
                      "metrics.shares": "platform",
                      "metrics.favorites": "platform",
                      "metrics.reposts": "platform"
                    },
                    "cached": false,
                    "replayed": false,
                    "fetched_at": "2026-11-11T08:00:00Z"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/E400"
          },
          "401": {
            "$ref": "#/components/responses/E401"
          },
          "402": {
            "$ref": "#/components/responses/E402"
          },
          "404": {
            "$ref": "#/components/responses/E404"
          },
          "429": {
            "$ref": "#/components/responses/E429"
          },
          "502": {
            "$ref": "#/components/responses/E502"
          },
          "503": {
            "$ref": "#/components/responses/E503"
          },
          "504": {
            "$ref": "#/components/responses/E504"
          }
        },
        "externalDocs": {
          "url": "https://okdata.online/apis/youtube/videos/search/"
        },
        "x-price": {
          "unit": "call",
          "amount": "0.004",
          "max_per_call": "0.004",
          "currency": "USD"
        },
        "x-status": "beta"
      }
    },
    "/v1/youtube/videos/get": {
      "get": {
        "operationId": "youtube_videos_get",
        "summary": "YouTube video detail",
        "description": "One video by ID or link: title, description, views, likes and channel. Give id or url.\n\nPrice: $0.004 per call. 1,000 calls cost $4.00. Failed calls are not charged.",
        "tags": [
          "youtube"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "query",
            "required": false,
            "description": "The video ID. Give id or url.",
            "schema": {
              "type": "string",
              "description": "The video ID. Give id or url.",
              "examples": [
                "dQw4w9WgXcQ"
              ]
            }
          },
          {
            "name": "url",
            "in": "query",
            "required": false,
            "description": "A share link or page URL; the ID is read from it.",
            "schema": {
              "type": "string",
              "description": "A share link or page URL; the ID is read from it.",
              "examples": [
                "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
              ]
            }
          },
          {
            "name": "view",
            "in": "query",
            "required": false,
            "description": "How much of each object comes back. full adds platform-specific fields under ext.",
            "schema": {
              "type": "string",
              "description": "How much of each object comes back. full adds platform-specific fields under ext.",
              "enum": [
                "compact",
                "standard",
                "full"
              ],
              "default": "standard"
            }
          },
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "description": "Comma-separated fields to keep, to save tokens.",
            "schema": {
              "type": "string",
              "description": "Comma-separated fields to keep, to save tokens.",
              "examples": [
                "id,text,metrics.likes"
              ]
            }
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "One post object.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PostResponse"
                },
                "example": {
                  "code": "ok",
                  "request_id": "0f6c2a8e-4b1d-4e0a-9a51-3c7d2b9e1f20",
                  "data": {
                    "item": {
                      "id": "Zx3kP9vQm2A",
                      "url": "https://www.youtube.com/watch?v=Zx3kP9vQm2A",
                      "type": "video",
                      "title": "Two nights, one backpack: my full camping kit",
                      "text": "What I packed, what I would leave at home, and what it all weighs.",
                      "lang": "en",
                      "published_at": "2026-11-02T09:30:00Z",
                      "author": {
                        "id": "UCa1b2c3d4e5f6g7h8i9j0kL",
                        "username": "@trailkit",
                        "name": "Trail Kit",
                        "avatar_url": "https://cdn.example.com/avatar/trailkit.jpg",
                        "followers": 412000,
                        "verified": true
                      },
                      "metrics": {
                        "views": 1250000,
                        "likes": 48200,
                        "comments": 1312,
                        "shares": null,
                        "favorites": null,
                        "reposts": null
                      },
                      "images": null,
                      "hashtags": [
                        "camping"
                      ]
                    }
                  },
                  "warnings": [],
                  "meta": {
                    "capability": "youtube.videos.get",
                    "billing": {
                      "amount": "0.004",
                      "currency": "USD",
                      "balance_after": "9.996"
                    },
                    "unavailable": {
                      "metrics.shares": "platform",
                      "metrics.favorites": "platform",
                      "metrics.reposts": "platform"
                    },
                    "cached": false,
                    "replayed": false,
                    "fetched_at": "2026-11-11T08:00:00Z"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/E400"
          },
          "401": {
            "$ref": "#/components/responses/E401"
          },
          "402": {
            "$ref": "#/components/responses/E402"
          },
          "404": {
            "$ref": "#/components/responses/E404"
          },
          "429": {
            "$ref": "#/components/responses/E429"
          },
          "502": {
            "$ref": "#/components/responses/E502"
          },
          "503": {
            "$ref": "#/components/responses/E503"
          },
          "504": {
            "$ref": "#/components/responses/E504"
          }
        },
        "externalDocs": {
          "url": "https://okdata.online/apis/youtube/videos/get/"
        },
        "x-price": {
          "unit": "call",
          "amount": "0.004",
          "max_per_call": "0.004",
          "currency": "USD"
        },
        "x-status": "beta"
      }
    },
    "/v1/youtube/videos/comments/list": {
      "get": {
        "operationId": "youtube_videos_comments_list",
        "summary": "YouTube video comments",
        "description": "Comments on a video, top or newest first.\n\nPrice: $0.004 per call. 1,000 items take about 50 calls: $0.20. Failed calls are not charged.",
        "tags": [
          "youtube"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "query",
            "required": true,
            "description": "The video ID. Give id or url.",
            "schema": {
              "type": "string",
              "description": "The video ID. Give id or url.",
              "examples": [
                "dQw4w9WgXcQ"
              ]
            }
          },
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "description": "Result order.",
            "schema": {
              "type": "string",
              "description": "Result order.",
              "enum": [
                "top",
                "latest"
              ],
              "default": "top"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Opaque cursor from page.next_cursor of the previous call. Each page is a separate call.",
            "schema": {
              "type": "string",
              "description": "Opaque cursor from page.next_cursor of the previous call. Each page is a separate call."
            }
          },
          {
            "name": "view",
            "in": "query",
            "required": false,
            "description": "How much of each object comes back. full adds platform-specific fields under ext.",
            "schema": {
              "type": "string",
              "description": "How much of each object comes back. full adds platform-specific fields under ext.",
              "enum": [
                "compact",
                "standard",
                "full"
              ],
              "default": "standard"
            }
          },
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "description": "Comma-separated fields to keep, to save tokens.",
            "schema": {
              "type": "string",
              "description": "Comma-separated fields to keep, to save tokens.",
              "examples": [
                "id,text,metrics.likes"
              ]
            }
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "A page of comment objects.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CommentListResponse"
                },
                "example": {
                  "code": "ok",
                  "request_id": "0f6c2a8e-4b1d-4e0a-9a51-3c7d2b9e1f20",
                  "data": {
                    "items": [
                      {
                        "id": "7302000000000000001",
                        "post_id": "7301234567890123456",
                        "parent_id": null,
                        "text": "Which tent is that? Looks tiny packed.",
                        "published_at": "2026-11-02T11:04:00Z",
                        "author": {
                          "id": "UCa1b2c3d4e5f6g7h8i9j0kL",
                          "username": "@trailkit",
                          "name": "Trail Kit",
                          "avatar_url": "https://cdn.example.com/avatar/trailkit.jpg",
                          "followers": 412000,
                          "verified": true
                        },
                        "likes": 214,
                        "replies": 9,
                        "ip_location": null
                      }
                    ]
                  },
                  "page": {
                    "next_cursor": "eyJvIjoyMH0",
                    "has_more": true
                  },
                  "warnings": [],
                  "meta": {
                    "capability": "youtube.videos.comments.list",
                    "billing": {
                      "amount": "0.004",
                      "currency": "USD",
                      "balance_after": "9.996"
                    },
                    "unavailable": {},
                    "cached": false,
                    "replayed": false,
                    "fetched_at": "2026-11-11T08:00:00Z"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/E400"
          },
          "401": {
            "$ref": "#/components/responses/E401"
          },
          "402": {
            "$ref": "#/components/responses/E402"
          },
          "404": {
            "$ref": "#/components/responses/E404"
          },
          "429": {
            "$ref": "#/components/responses/E429"
          },
          "502": {
            "$ref": "#/components/responses/E502"
          },
          "503": {
            "$ref": "#/components/responses/E503"
          },
          "504": {
            "$ref": "#/components/responses/E504"
          }
        },
        "externalDocs": {
          "url": "https://okdata.online/apis/youtube/videos/comments/list/"
        },
        "x-price": {
          "unit": "call",
          "amount": "0.004",
          "max_per_call": "0.004",
          "currency": "USD"
        },
        "x-status": "beta"
      }
    },
    "/v1/youtube/videos/transcript/get": {
      "get": {
        "operationId": "youtube_videos_transcript_get",
        "summary": "YouTube video transcript",
        "description": "The transcript of a video with timestamps, in the original or a chosen language.\n\nPrice: $0.004 per call. 1,000 calls cost $4.00. Failed calls are not charged.",
        "tags": [
          "youtube"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "query",
            "required": true,
            "description": "The video ID. Give id or url.",
            "schema": {
              "type": "string",
              "description": "The video ID. Give id or url.",
              "examples": [
                "dQw4w9WgXcQ"
              ]
            }
          },
          {
            "name": "lang",
            "in": "query",
            "required": false,
            "description": "Preferred transcript language.",
            "schema": {
              "type": "string",
              "description": "Preferred transcript language.",
              "examples": [
                "en"
              ]
            }
          },
          {
            "name": "view",
            "in": "query",
            "required": false,
            "description": "How much of each object comes back. full adds platform-specific fields under ext.",
            "schema": {
              "type": "string",
              "description": "How much of each object comes back. full adds platform-specific fields under ext.",
              "enum": [
                "compact",
                "standard",
                "full"
              ],
              "default": "standard"
            }
          },
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "description": "Comma-separated fields to keep, to save tokens.",
            "schema": {
              "type": "string",
              "description": "Comma-separated fields to keep, to save tokens.",
              "examples": [
                "id,text,metrics.likes"
              ]
            }
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "responses": {
          "200": {
            "description": "One transcript object.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TranscriptResponse"
                },
                "example": {
                  "code": "ok",
                  "request_id": "0f6c2a8e-4b1d-4e0a-9a51-3c7d2b9e1f20",
                  "data": {
                    "item": {
                      "video_id": "Zx3kP9vQm2A",
                      "lang": "en",
                      "segments": [
                        {
                          "start": 0,
                          "end": 4.2,
                          "text": "Here is what I pack for a two-night trip."
                        }
                      ],
                      "text": "Here is what I pack for a two-night trip."
                    }
                  },
                  "warnings": [],
                  "meta": {
                    "capability": "youtube.videos.transcript.get",
                    "billing": {
                      "amount": "0.004",
                      "currency": "USD",
                      "balance_after": "9.996"
                    },
                    "unavailable": {},
                    "cached": false,
                    "replayed": false,
                    "fetched_at": "2026-11-11T08:00:00Z"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/E400"
          },
          "401": {
            "$ref": "#/components/responses/E401"
          },
          "402": {
            "$ref": "#/components/responses/E402"
          },
          "404": {
            "$ref": "#/components/responses/E404"
          },
          "429": {
            "$ref": "#/components/responses/E429"
          },
          "502": {
            "$ref": "#/components/responses/E502"
          },
          "503": {
            "$ref": "#/components/responses/E503"
          },
          "504": {
            "$ref": "#/components/responses/E504"
          }
        },
        "externalDocs": {
          "url": "https://okdata.online/apis/youtube/videos/transcript/get/"
        },
        "x-price": {
          "unit": "call",
          "amount": "0.004",
          "max_per_call": "0.004",
          "currency": "USD"
        },
        "x-status": "beta"
      }
    },
    "/v1/catalog": {
      "get": {
        "operationId": "catalog_get",
        "summary": "The catalog",
        "tags": [
          "catalog"
        ],
        "security": [],
        "description": "Every endpoint with its parameters and price. Free, no key needed.",
        "responses": {
          "200": {
            "description": "The catalog.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          }
        }
      }
    },
    "/v1/catalog/status": {
      "get": {
        "operationId": "catalog_status",
        "summary": "Endpoint status",
        "tags": [
          "catalog"
        ],
        "security": [],
        "description": "Which endpoints are up right now. Free, no key needed.",
        "responses": {
          "200": {
            "description": "Status per endpoint.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          }
        }
      }
    },
    "/v1/calls/{request_id}": {
      "get": {
        "operationId": "calls_get",
        "summary": "Look up a call",
        "tags": [
          "catalog"
        ],
        "description": "The outcome and charge of an earlier call, e.g. after a timeout.",
        "parameters": [
          {
            "name": "request_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The call record.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": true
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/E401"
          },
          "404": {
            "$ref": "#/components/responses/E404"
          }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "bearerAuth": {
        "type": "http",
        "scheme": "bearer",
        "description": "API key starting with okd_, sent as Authorization: Bearer <key>."
      }
    },
    "parameters": {
      "IdempotencyKey": {
        "name": "Idempotency-Key",
        "in": "header",
        "required": false,
        "description": "The same key with the same request within 24 hours returns the stored result with meta.replayed=true and no new charge.",
        "schema": {
          "type": "string",
          "maxLength": 255
        }
      }
    },
    "schemas": {
      "Post": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Post ID on the platform."
          },
          "url": {
            "type": "string",
            "format": "uri",
            "description": "Link to the post."
          },
          "type": {
            "type": "string",
            "enum": [
              "video",
              "image",
              "text",
              "article"
            ],
            "description": "What kind of post it is."
          },
          "title": {
            "type": [
              "string",
              "null"
            ],
            "description": "Title, where the platform has one (videos, notes, articles)."
          },
          "text": {
            "type": "string",
            "description": "Caption, body or description as plain text; articles come as Markdown."
          },
          "lang": {
            "type": [
              "string",
              "null"
            ],
            "description": "Language code, as reported or detected."
          },
          "published_at": {
            "type": "string",
            "format": "date-time",
            "description": "When it was published, ISO 8601 in UTC."
          },
          "author": {
            "$ref": "#/components/schemas/AccountRef",
            "description": "Who posted it."
          },
          "metrics": {
            "$ref": "#/components/schemas/Metrics",
            "description": "Counts at fetch time; a count the platform hides is null."
          },
          "images": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": "string"
            },
            "description": "Image URLs for image posts and notes."
          },
          "hashtags": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": "string"
            },
            "description": "Hashtags or topics, without the # sign."
          },
          "ext": {
            "type": "object",
            "additionalProperties": true,
            "description": "Platform-specific extras. Only returned with view=full."
          }
        },
        "required": [
          "id",
          "url",
          "type",
          "title",
          "text",
          "lang",
          "published_at",
          "author",
          "metrics",
          "images",
          "hashtags"
        ]
      },
      "Account": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Account ID on the platform."
          },
          "url": {
            "type": "string",
            "format": "uri",
            "description": "Profile link."
          },
          "username": {
            "type": [
              "string",
              "null"
            ],
            "description": "Handle, where the platform has one."
          },
          "name": {
            "type": "string",
            "description": "Display name."
          },
          "bio": {
            "type": [
              "string",
              "null"
            ],
            "description": "Profile bio."
          },
          "avatar_url": {
            "type": [
              "string",
              "null"
            ],
            "format": "uri",
            "description": "Avatar image URL."
          },
          "verified": {
            "type": [
              "boolean",
              "null"
            ],
            "description": "Whether the platform shows a verification badge."
          },
          "followers": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Followers."
          },
          "following": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Accounts it follows."
          },
          "posts": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Posts, videos, notes or articles published."
          },
          "likes": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Total likes received, where the platform shows it."
          },
          "ext": {
            "type": "object",
            "additionalProperties": true,
            "description": "Platform-specific extras. Only returned with view=full."
          }
        },
        "required": [
          "id",
          "url",
          "username",
          "name",
          "bio",
          "avatar_url",
          "verified",
          "followers",
          "following",
          "posts",
          "likes"
        ]
      },
      "Comment": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Comment ID."
          },
          "post_id": {
            "type": "string",
            "description": "ID of the post it is under."
          },
          "parent_id": {
            "type": [
              "string",
              "null"
            ],
            "description": "The comment it replies to; null for top-level comments."
          },
          "text": {
            "type": "string",
            "description": "Comment text."
          },
          "published_at": {
            "type": "string",
            "format": "date-time",
            "description": "When it was posted, ISO 8601 in UTC."
          },
          "author": {
            "$ref": "#/components/schemas/AccountRef",
            "description": "Who wrote it."
          },
          "likes": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Likes on the comment."
          },
          "replies": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Replies under it."
          },
          "ip_location": {
            "type": [
              "string",
              "null"
            ],
            "description": "Region label the platform shows next to the comment, if any."
          }
        },
        "required": [
          "id",
          "post_id",
          "parent_id",
          "text",
          "published_at",
          "author",
          "likes",
          "replies",
          "ip_location"
        ]
      },
      "Trend": {
        "type": "object",
        "properties": {
          "rank": {
            "type": "integer",
            "description": "Position on the board, 1 is the top."
          },
          "name": {
            "type": "string",
            "description": "The topic or search term."
          },
          "heat": {
            "type": [
              "number",
              "null"
            ],
            "description": "The heat score the platform shows; scales differ by platform."
          },
          "url": {
            "type": [
              "string",
              "null"
            ],
            "format": "uri",
            "description": "Link to the topic page, if there is one."
          }
        },
        "required": [
          "rank",
          "name",
          "heat",
          "url"
        ]
      },
      "Transcript": {
        "type": "object",
        "properties": {
          "video_id": {
            "type": "string",
            "description": "ID of the video."
          },
          "lang": {
            "type": "string",
            "description": "Language of this transcript."
          },
          "segments": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Segment"
            },
            "description": "Timed segments in order."
          },
          "text": {
            "type": "string",
            "description": "All segments joined as plain text."
          }
        },
        "required": [
          "video_id",
          "lang",
          "segments",
          "text"
        ]
      },
      "AccountRef": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Account ID on the platform."
          },
          "username": {
            "type": [
              "string",
              "null"
            ],
            "description": "Handle, where the platform has one."
          },
          "name": {
            "type": [
              "string",
              "null"
            ],
            "description": "Display name."
          },
          "avatar_url": {
            "type": [
              "string",
              "null"
            ],
            "format": "uri",
            "description": "Avatar image URL."
          },
          "followers": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Follower count at fetch time."
          },
          "verified": {
            "type": [
              "boolean",
              "null"
            ],
            "description": "Whether the platform shows a verification badge."
          }
        },
        "required": [
          "id",
          "username",
          "name",
          "avatar_url",
          "followers",
          "verified"
        ]
      },
      "Metrics": {
        "type": "object",
        "properties": {
          "views": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Views or plays."
          },
          "likes": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Likes."
          },
          "comments": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Comments."
          },
          "shares": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Shares."
          },
          "favorites": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Saves or favorites."
          },
          "reposts": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Reposts, retweets or forwards."
          }
        },
        "required": [
          "views",
          "likes",
          "comments",
          "shares",
          "favorites",
          "reposts"
        ]
      },
      "Segment": {
        "type": "object",
        "properties": {
          "start": {
            "type": "number",
            "description": "Start, in seconds from the beginning."
          },
          "end": {
            "type": "number",
            "description": "End, in seconds from the beginning."
          },
          "text": {
            "type": "string",
            "description": "What is said in this segment."
          }
        },
        "required": [
          "start",
          "end",
          "text"
        ]
      },
      "Envelope": {
        "type": "object",
        "description": "Every successful response. List endpoints add data.items and page; single-object endpoints add data.item.",
        "properties": {
          "code": {
            "const": "ok"
          },
          "request_id": {
            "type": "string",
            "format": "uuid"
          },
          "data": {
            "type": "object"
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          }
        },
        "required": [
          "code",
          "request_id",
          "data",
          "warnings",
          "meta"
        ]
      },
      "Page": {
        "type": "object",
        "description": "Pass next_cursor back as cursor for the next page. Each page is a separate, separately charged call.",
        "properties": {
          "next_cursor": {
            "type": [
              "string",
              "null"
            ]
          },
          "has_more": {
            "type": "boolean"
          }
        },
        "required": [
          "next_cursor",
          "has_more"
        ]
      },
      "Billing": {
        "type": "object",
        "properties": {
          "amount": {
            "type": "string",
            "pattern": "^\\d+(\\.\\d+)?$",
            "description": "What this call cost, in US dollars."
          },
          "currency": {
            "const": "USD"
          },
          "balance_after": {
            "type": "string",
            "pattern": "^\\d+(\\.\\d+)?$"
          }
        },
        "required": [
          "amount",
          "currency",
          "balance_after"
        ]
      },
      "Meta": {
        "type": "object",
        "properties": {
          "capability": {
            "type": "string",
            "description": "The endpoint id that answered."
          },
          "billing": {
            "$ref": "#/components/schemas/Billing"
          },
          "unavailable": {
            "type": "object",
            "additionalProperties": {
              "enum": [
                "platform",
                "capability"
              ]
            },
            "description": "Fields that are null and why: the platform never shows them, or they cannot be fetched yet."
          },
          "cached": {
            "type": "boolean"
          },
          "replayed": {
            "type": "boolean",
            "description": "true when an Idempotency-Key replayed a stored result at no charge."
          },
          "fetched_at": {
            "type": "string",
            "format": "date-time"
          }
        },
        "required": [
          "capability",
          "billing",
          "unavailable",
          "cached",
          "replayed",
          "fetched_at"
        ]
      },
      "Error": {
        "type": "object",
        "properties": {
          "code": {
            "enum": [
              "unauthorized",
              "invalid_params",
              "unknown_endpoint",
              "insufficient_balance",
              "not_found",
              "rate_limited",
              "upstream_busy",
              "upstream_failed",
              "timeout"
            ]
          },
          "message": {
            "type": "string"
          },
          "request_id": {
            "type": "string",
            "format": "uuid"
          },
          "charged": {
            "type": [
              "boolean",
              "null"
            ],
            "description": "null: not known yet; look the call up at /v1/calls/{request_id}."
          },
          "retry": {
            "enum": [
              "no",
              "yes",
              "after_fix",
              "same_key"
            ]
          },
          "retry_after_seconds": {
            "type": [
              "integer",
              "null"
            ]
          }
        },
        "required": [
          "code",
          "message",
          "request_id",
          "charged",
          "retry",
          "retry_after_seconds"
        ]
      },
      "PostListResponse": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Envelope"
          },
          {
            "type": "object",
            "properties": {
              "data": {
                "type": "object",
                "properties": {
                  "items": {
                    "type": "array",
                    "items": {
                      "$ref": "#/components/schemas/Post"
                    }
                  }
                },
                "required": [
                  "items"
                ]
              },
              "page": {
                "$ref": "#/components/schemas/Page"
              }
            },
            "required": [
              "data",
              "page"
            ]
          }
        ]
      },
      "PostResponse": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Envelope"
          },
          {
            "type": "object",
            "properties": {
              "data": {
                "type": "object",
                "properties": {
                  "item": {
                    "$ref": "#/components/schemas/Post"
                  }
                },
                "required": [
                  "item"
                ]
              }
            },
            "required": [
              "data"
            ]
          }
        ]
      },
      "AccountListResponse": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Envelope"
          },
          {
            "type": "object",
            "properties": {
              "data": {
                "type": "object",
                "properties": {
                  "items": {
                    "type": "array",
                    "items": {
                      "$ref": "#/components/schemas/Account"
                    }
                  }
                },
                "required": [
                  "items"
                ]
              },
              "page": {
                "$ref": "#/components/schemas/Page"
              }
            },
            "required": [
              "data",
              "page"
            ]
          }
        ]
      },
      "AccountResponse": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Envelope"
          },
          {
            "type": "object",
            "properties": {
              "data": {
                "type": "object",
                "properties": {
                  "item": {
                    "$ref": "#/components/schemas/Account"
                  }
                },
                "required": [
                  "item"
                ]
              }
            },
            "required": [
              "data"
            ]
          }
        ]
      },
      "CommentListResponse": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Envelope"
          },
          {
            "type": "object",
            "properties": {
              "data": {
                "type": "object",
                "properties": {
                  "items": {
                    "type": "array",
                    "items": {
                      "$ref": "#/components/schemas/Comment"
                    }
                  }
                },
                "required": [
                  "items"
                ]
              },
              "page": {
                "$ref": "#/components/schemas/Page"
              }
            },
            "required": [
              "data",
              "page"
            ]
          }
        ]
      },
      "CommentResponse": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Envelope"
          },
          {
            "type": "object",
            "properties": {
              "data": {
                "type": "object",
                "properties": {
                  "item": {
                    "$ref": "#/components/schemas/Comment"
                  }
                },
                "required": [
                  "item"
                ]
              }
            },
            "required": [
              "data"
            ]
          }
        ]
      },
      "TrendListResponse": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Envelope"
          },
          {
            "type": "object",
            "properties": {
              "data": {
                "type": "object",
                "properties": {
                  "items": {
                    "type": "array",
                    "items": {
                      "$ref": "#/components/schemas/Trend"
                    }
                  }
                },
                "required": [
                  "items"
                ]
              },
              "page": {
                "$ref": "#/components/schemas/Page"
              }
            },
            "required": [
              "data",
              "page"
            ]
          }
        ]
      },
      "TrendResponse": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Envelope"
          },
          {
            "type": "object",
            "properties": {
              "data": {
                "type": "object",
                "properties": {
                  "item": {
                    "$ref": "#/components/schemas/Trend"
                  }
                },
                "required": [
                  "item"
                ]
              }
            },
            "required": [
              "data"
            ]
          }
        ]
      },
      "TranscriptListResponse": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Envelope"
          },
          {
            "type": "object",
            "properties": {
              "data": {
                "type": "object",
                "properties": {
                  "items": {
                    "type": "array",
                    "items": {
                      "$ref": "#/components/schemas/Transcript"
                    }
                  }
                },
                "required": [
                  "items"
                ]
              },
              "page": {
                "$ref": "#/components/schemas/Page"
              }
            },
            "required": [
              "data",
              "page"
            ]
          }
        ]
      },
      "TranscriptResponse": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Envelope"
          },
          {
            "type": "object",
            "properties": {
              "data": {
                "type": "object",
                "properties": {
                  "item": {
                    "$ref": "#/components/schemas/Transcript"
                  }
                },
                "required": [
                  "item"
                ]
              }
            },
            "required": [
              "data"
            ]
          }
        ]
      }
    },
    "responses": {
      "E401": {
        "description": "unauthorized: The key is missing, malformed or revoked.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      },
      "E400": {
        "description": "invalid_params: A parameter is missing, has the wrong type, or an Idempotency-Key was reused for a different request.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      },
      "E404": {
        "description": "unknown_endpoint: No endpoint lives at that path. not_found: The post, account or page does not exist or is not public.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      },
      "E402": {
        "description": "insufficient_balance: The balance cannot cover the most this call could cost.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      },
      "E429": {
        "description": "rate_limited: Too many requests from this key right now.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      },
      "E503": {
        "description": "upstream_busy: Every data source for this endpoint is saturated.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      },
      "E502": {
        "description": "upstream_failed: Every data source for this endpoint failed on this request.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      },
      "E504": {
        "description": "timeout: No answer in time. Whether it was charged is not known yet.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      }
    }
  }
}
