{
 "openapi": "3.0.3",
 "info": {
  "title": "cheapxapi API",
  "version": "1.0.0",
  "description": "API for public X (Twitter) data and account actions.\n\n**Authentication** — send your API key in the `x-api-key` request header. Keys in the URL are rejected.\n\n**Pricing (data endpoints)** — $0.0006 per request, pay as you go. Every request is charged except when the failure is on our side:\ncharged: successful responses, \"not found\" style responses (e.g. user does not exist), invalid parameters, unknown endpoints;\nnot charged: rate-limited requests (429), insufficient balance (402), invalid key (401), items reported as not found with HTTP 404, and service errors (503).\nEach charged response carries `x-balance-remaining` (USD); every response carries `x-request-id`.\n\n**Rate limits** — 2 requests per second for new accounts, 10 per second for paid accounts; at most 10 requests in flight per account.\n\n**Not found results** — most endpoints report a missing user, tweet or list as HTTP 200 with `\"status\": \"error\"` (charged). Always check the `status` field, not only the HTTP status code.\n\n**Pagination** — paginated endpoints return `has_next_page` and `next_cursor`. Pass `next_cursor` as `cursor` to get the next page.\nStop when `has_next_page` is `false` or `next_cursor` is empty; the API sets both when the end is reached. Use `has_next_page` (some endpoints also return a legacy `has_next` field; ignore it).\n\n**Timeouts** — most requests return in under a second, some take several seconds; set your client timeout to at least 75 seconds.\n\n\n**Account actions** — post, like, retweet, follow, message and more as an X account you control.\nFirst call *Log in to an X account* to get `login_cookies`, then send `login_cookies` and the same `proxy` with every action.\nWe pass these values through for the request only and never store or log your password, two-factor secret, `login_cookies` or proxy credentials.\nPricing: login $0.1 per request, every other action $0.0006 per request. HTTP 200 is charged, including when X rejects the action (`\"status\": \"error\"`, the reason is in `message`); invalid fields (400), rate limits and service errors are not.\nDo not retry an action automatically after a timeout: it may already have been applied on X.\nX limits how often each account may act; we cap posts and messages at 5 per minute and follows at 15 per minute per X account to protect it.\n",
  "contact": {
   "email": "support@cheapxapi.com"
  }
 },
 "servers": [
  {
   "url": "https://api.cheapxapi.com"
  }
 ],
 "security": [
  {
   "ApiKey": []
  }
 ],
 "tags": [
  {
   "name": "Users"
  },
  {
   "name": "Followers"
  },
  {
   "name": "Tweets"
  },
  {
   "name": "Lists"
  },
  {
   "name": "Communities"
  },
  {
   "name": "Trends"
  },
  {
   "name": "Account actions"
  }
 ],
 "paths": {
  "/twitter/user/info": {
   "get": {
    "operationId": "twitter_user_info",
    "tags": [
     "Users"
    ],
    "summary": "Get user profile",
    "description": "Public profile of a user by screen name.",
    "parameters": [
     {
      "name": "userName",
      "in": "query",
      "required": true,
      "schema": {
       "type": "string",
       "format": "string"
      },
      "description": "Screen name without the @, e.g. `NASA`.",
      "example": "NASA"
     }
    ],
    "x-price-per-request": "$0.0006",
    "responses": {
     "200": {
      "description": "Charged. Check `status`: `success` means data was returned; `error` (e.g. user not found) is also HTTP 200.",
      "content": {
       "application/json": {
        "schema": {
         "type": "object",
         "properties": {
          "data": {
           "$ref": "#/components/schemas/UserInfo"
          },
          "status": {
           "type": "string",
           "enum": [
            "success",
            "error"
           ]
          },
          "msg": {
           "type": "string"
          }
         }
        }
       }
      }
     },
     "400": {
      "description": "Invalid parameters (charged), or API key placed in the URL (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "401": {
      "description": "Missing or invalid API key (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "402": {
      "description": "Insufficient balance (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "403": {
      "description": "Account disabled (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "405": {
      "description": "Only GET is supported (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "404": {
      "description": "Unknown endpoint (charged), or the requested item could not be found (not charged). Note: many endpoints report a missing user/tweet as HTTP 200 with `\"status\":\"error\"` instead; those are charged.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "429": {
      "description": "Rate limit exceeded (not charged). Retry after the time in the `Retry-After` header.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "503": {
      "description": "Temporary service problem, or the endpoint is temporarily unavailable (not charged). Retry with exponential backoff.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     }
    }
   }
  },
  "/twitter/user_about": {
   "get": {
    "operationId": "twitter_user_about",
    "tags": [
     "Users"
    ],
    "summary": "Get user 'about' details",
    "description": "Extra profile details of a user (account location, creation info, verification details).",
    "parameters": [
     {
      "name": "userName",
      "in": "query",
      "required": true,
      "schema": {
       "type": "string",
       "format": "string"
      },
      "description": "Screen name without the @, e.g. `NASA`.",
      "example": "NASA"
     }
    ],
    "x-price-per-request": "$0.0006",
    "responses": {
     "200": {
      "description": "Charged. Check `status`: `success` means data was returned; `error` (e.g. user not found) is also HTTP 200.",
      "content": {
       "application/json": {
        "schema": {
         "type": "object",
         "properties": {
          "data": {
           "$ref": "#/components/schemas/UserAbout"
          },
          "status": {
           "type": "string",
           "enum": [
            "success",
            "error"
           ]
          },
          "msg": {
           "type": "string"
          }
         }
        }
       }
      }
     },
     "400": {
      "description": "Invalid parameters (charged), or API key placed in the URL (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "401": {
      "description": "Missing or invalid API key (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "402": {
      "description": "Insufficient balance (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "403": {
      "description": "Account disabled (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "405": {
      "description": "Only GET is supported (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "404": {
      "description": "Unknown endpoint (charged), or the requested item could not be found (not charged). Note: many endpoints report a missing user/tweet as HTTP 200 with `\"status\":\"error\"` instead; those are charged.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "429": {
      "description": "Rate limit exceeded (not charged). Retry after the time in the `Retry-After` header.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "503": {
      "description": "Temporary service problem, or the endpoint is temporarily unavailable (not charged). Retry with exponential backoff.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     }
    }
   }
  },
  "/twitter/user/batch_info_by_ids": {
   "get": {
    "operationId": "twitter_user_batch_info_by_ids",
    "tags": [
     "Users"
    ],
    "summary": "Get users by IDs",
    "description": "Profiles of up to 20 users in one request.",
    "parameters": [
     {
      "name": "userIds",
      "in": "query",
      "required": true,
      "schema": {
       "type": "string",
       "pattern": "^[0-9]+(,[0-9]+){0,19}$"
      },
      "description": "1 to 20 numeric user IDs separated by commas, e.g. `11348282,44196397`.",
      "example": "11348282,44196397"
     }
    ],
    "x-price-per-request": "$0.0006",
    "responses": {
     "200": {
      "description": "Charged. Check `status`: `success` means data was returned; `error` (e.g. user not found) is also HTTP 200.",
      "content": {
       "application/json": {
        "schema": {
         "type": "object",
         "properties": {
          "users": {
           "type": "array",
           "items": {
            "$ref": "#/components/schemas/UserInfo"
           }
          },
          "status": {
           "type": "string",
           "enum": [
            "success",
            "error"
           ]
          },
          "msg": {
           "type": "string"
          }
         }
        }
       }
      }
     },
     "400": {
      "description": "Invalid parameters (charged), or API key placed in the URL (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "401": {
      "description": "Missing or invalid API key (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "402": {
      "description": "Insufficient balance (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "403": {
      "description": "Account disabled (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "405": {
      "description": "Only GET is supported (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "404": {
      "description": "Unknown endpoint (charged), or the requested item could not be found (not charged). Note: many endpoints report a missing user/tweet as HTTP 200 with `\"status\":\"error\"` instead; those are charged.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "429": {
      "description": "Rate limit exceeded (not charged). Retry after the time in the `Retry-After` header.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "503": {
      "description": "Temporary service problem, or the endpoint is temporarily unavailable (not charged). Retry with exponential backoff.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     }
    }
   }
  },
  "/twitter/user/search": {
   "get": {
    "operationId": "twitter_user_search",
    "tags": [
     "Users"
    ],
    "summary": "Search users",
    "description": "Search users by keyword. Paginated: use `cursor` / `next_cursor`.",
    "parameters": [
     {
      "name": "query",
      "in": "query",
      "required": true,
      "schema": {
       "type": "string",
       "format": "string"
      },
      "description": "Search query.",
      "example": "nasa"
     },
     {
      "name": "cursor",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string",
       "format": "string"
      },
      "description": "Pagination cursor. Leave empty for the first page, then pass `next_cursor` from the previous response."
     }
    ],
    "x-price-per-request": "$0.0006",
    "responses": {
     "200": {
      "description": "Charged. Check `status`: `success` means data was returned; `error` (e.g. user not found) is also HTTP 200.",
      "content": {
       "application/json": {
        "schema": {
         "type": "object",
         "properties": {
          "users": {
           "type": "array",
           "items": {
            "$ref": "#/components/schemas/UserProfileSnake"
           }
          },
          "has_next_page": {
           "type": "boolean"
          },
          "next_cursor": {
           "type": "string"
          }
         }
        }
       }
      }
     },
     "400": {
      "description": "Invalid parameters (charged), or API key placed in the URL (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "401": {
      "description": "Missing or invalid API key (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "402": {
      "description": "Insufficient balance (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "403": {
      "description": "Account disabled (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "405": {
      "description": "Only GET is supported (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "404": {
      "description": "Unknown endpoint (charged), or the requested item could not be found (not charged). Note: many endpoints report a missing user/tweet as HTTP 200 with `\"status\":\"error\"` instead; those are charged.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "429": {
      "description": "Rate limit exceeded (not charged). Retry after the time in the `Retry-After` header.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "503": {
      "description": "Temporary service problem, or the endpoint is temporarily unavailable (not charged). Retry with exponential backoff.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     }
    }
   }
  },
  "/twitter/user/last_tweets": {
   "get": {
    "operationId": "twitter_user_last_tweets",
    "tags": [
     "Users"
    ],
    "summary": "Get user's latest tweets",
    "description": "Latest tweets of a user, newest first. The list is inside `data.tweets`. Pass either `userName` or `userId`. Paginated: use `cursor` / `next_cursor`.",
    "parameters": [
     {
      "name": "userId",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string",
       "format": "string"
      },
      "description": "Numeric user ID, e.g. `11348282`."
     },
     {
      "name": "userName",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string",
       "format": "string"
      },
      "description": "Screen name without the @, e.g. `NASA`.",
      "example": "NASA"
     },
     {
      "name": "cursor",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string",
       "format": "string"
      },
      "description": "Pagination cursor. Leave empty for the first page, then pass `next_cursor` from the previous response."
     },
     {
      "name": "includeReplies",
      "in": "query",
      "required": false,
      "schema": {
       "type": "boolean",
       "default": false
      },
      "description": "Include replies (`true` / `false`)."
     }
    ],
    "x-price-per-request": "$0.0006",
    "responses": {
     "200": {
      "description": "Charged. Check `status`: `success` means data was returned; `error` (e.g. user not found) is also HTTP 200.",
      "content": {
       "application/json": {
        "schema": {
         "type": "object",
         "properties": {
          "status": {
           "type": "string",
           "enum": [
            "success",
            "error"
           ]
          },
          "code": {
           "type": "integer"
          },
          "msg": {
           "type": "string"
          },
          "data": {
           "type": "object",
           "properties": {
            "pin_tweet": {
             "nullable": true,
             "allOf": [
              {
               "$ref": "#/components/schemas/Tweet"
              }
             ]
            },
            "tweets": {
             "type": "array",
             "items": {
              "$ref": "#/components/schemas/Tweet"
             }
            }
           }
          },
          "has_next_page": {
           "type": "boolean"
          },
          "next_cursor": {
           "type": "string"
          }
         },
         "required": [
          "status",
          "data",
          "has_next_page",
          "next_cursor"
         ]
        }
       }
      }
     },
     "400": {
      "description": "Invalid parameters (charged), or API key placed in the URL (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "401": {
      "description": "Missing or invalid API key (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "402": {
      "description": "Insufficient balance (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "403": {
      "description": "Account disabled (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "405": {
      "description": "Only GET is supported (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "404": {
      "description": "Unknown endpoint (charged), or the requested item could not be found (not charged). Note: many endpoints report a missing user/tweet as HTTP 200 with `\"status\":\"error\"` instead; those are charged.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "429": {
      "description": "Rate limit exceeded (not charged). Retry after the time in the `Retry-After` header.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "503": {
      "description": "Temporary service problem, or the endpoint is temporarily unavailable (not charged). Retry with exponential backoff.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     }
    }
   }
  },
  "/twitter/user/tweet_timeline": {
   "get": {
    "operationId": "twitter_user_tweet_timeline",
    "tags": [
     "Users"
    ],
    "summary": "Get user's tweet timeline",
    "description": "Tweet timeline of a user by numeric user ID. The list is inside `data.tweets`. Paginated: use `cursor` / `next_cursor`.",
    "parameters": [
     {
      "name": "userId",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string",
       "format": "string"
      },
      "description": "Numeric user ID, e.g. `11348282`.",
      "example": "11348282"
     },
     {
      "name": "includeReplies",
      "in": "query",
      "required": false,
      "schema": {
       "type": "boolean",
       "default": false
      },
      "description": "Include replies (`true` / `false`)."
     },
     {
      "name": "includeParentTweet",
      "in": "query",
      "required": false,
      "schema": {
       "type": "boolean",
       "default": false
      },
      "description": "Include the parent tweet of replies (`true` / `false`)."
     },
     {
      "name": "cursor",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string",
       "format": "string"
      },
      "description": "Pagination cursor. Leave empty for the first page, then pass `next_cursor` from the previous response."
     }
    ],
    "x-price-per-request": "$0.0006",
    "responses": {
     "200": {
      "description": "Charged. Check `status`: `success` means data was returned; `error` (e.g. user not found) is also HTTP 200.",
      "content": {
       "application/json": {
        "schema": {
         "type": "object",
         "properties": {
          "status": {
           "type": "string"
          },
          "msg": {
           "type": "string"
          },
          "code": {
           "type": "integer"
          },
          "data": {
           "type": "object",
           "properties": {
            "tweets": {
             "type": "array",
             "items": {
              "$ref": "#/components/schemas/Tweet"
             }
            }
           }
          },
          "has_next_page": {
           "type": "boolean"
          },
          "next_cursor": {
           "type": "string",
           "nullable": true
          }
         }
        }
       }
      }
     },
     "400": {
      "description": "Invalid parameters (charged), or API key placed in the URL (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "401": {
      "description": "Missing or invalid API key (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "402": {
      "description": "Insufficient balance (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "403": {
      "description": "Account disabled (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "405": {
      "description": "Only GET is supported (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "404": {
      "description": "Unknown endpoint (charged), or the requested item could not be found (not charged). Note: many endpoints report a missing user/tweet as HTTP 200 with `\"status\":\"error\"` instead; those are charged.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "429": {
      "description": "Rate limit exceeded (not charged). Retry after the time in the `Retry-After` header.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "503": {
      "description": "Temporary service problem, or the endpoint is temporarily unavailable (not charged). Retry with exponential backoff.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     }
    }
   }
  },
  "/twitter/user/mentions": {
   "get": {
    "operationId": "twitter_user_mentions",
    "tags": [
     "Users"
    ],
    "summary": "Get user mentions",
    "description": "Tweets that mention a user. Paginated: use `cursor` / `next_cursor`.",
    "parameters": [
     {
      "name": "userName",
      "in": "query",
      "required": true,
      "schema": {
       "type": "string",
       "format": "string"
      },
      "description": "Screen name without the @, e.g. `NASA`.",
      "example": "NASA"
     },
     {
      "name": "sinceTime",
      "in": "query",
      "required": false,
      "schema": {
       "type": "integer",
       "format": "int64"
      },
      "description": "Only items created at or after this Unix timestamp (seconds)."
     },
     {
      "name": "untilTime",
      "in": "query",
      "required": false,
      "schema": {
       "type": "integer",
       "format": "int64"
      },
      "description": "Only items created before this Unix timestamp (seconds)."
     },
     {
      "name": "cursor",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string",
       "format": "string"
      },
      "description": "Pagination cursor. Leave empty for the first page, then pass `next_cursor` from the previous response."
     }
    ],
    "x-price-per-request": "$0.0006",
    "responses": {
     "200": {
      "description": "Charged. Check `status`: `success` means data was returned; `error` (e.g. user not found) is also HTTP 200.",
      "content": {
       "application/json": {
        "schema": {
         "type": "object",
         "properties": {
          "tweets": {
           "type": "array",
           "items": {
            "$ref": "#/components/schemas/Tweet"
           }
          },
          "has_next_page": {
           "type": "boolean"
          },
          "next_cursor": {
           "type": "string"
          },
          "status": {
           "type": "string",
           "enum": [
            "success",
            "error"
           ]
          },
          "msg": {
           "type": "string"
          }
         }
        }
       }
      }
     },
     "400": {
      "description": "Invalid parameters (charged), or API key placed in the URL (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "401": {
      "description": "Missing or invalid API key (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "402": {
      "description": "Insufficient balance (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "403": {
      "description": "Account disabled (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "405": {
      "description": "Only GET is supported (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "404": {
      "description": "Unknown endpoint (charged), or the requested item could not be found (not charged). Note: many endpoints report a missing user/tweet as HTTP 200 with `\"status\":\"error\"` instead; those are charged.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "429": {
      "description": "Rate limit exceeded (not charged). Retry after the time in the `Retry-After` header.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "503": {
      "description": "Temporary service problem, or the endpoint is temporarily unavailable (not charged). Retry with exponential backoff.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     }
    }
   }
  },
  "/twitter/user/articles": {
   "get": {
    "operationId": "twitter_user_articles",
    "tags": [
     "Users"
    ],
    "summary": "Get user's articles",
    "description": "Articles (long-form posts) published by a user. The list is inside `data.articles`. Paginated: use `cursor` / `next_cursor`.",
    "parameters": [
     {
      "name": "username",
      "in": "query",
      "required": true,
      "schema": {
       "type": "string"
      },
      "description": "Screen name without the @.",
      "example": "balajis"
     },
     {
      "name": "cursor",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string"
      },
      "description": "Pagination cursor. Leave empty for the first page, then pass `next_cursor` from the previous response."
     }
    ],
    "x-price-per-request": "$0.0006",
    "responses": {
     "200": {
      "description": "Charged. Check `status`: `success` means data was returned; `error` (e.g. user not found) is also HTTP 200.",
      "content": {
       "application/json": {
        "schema": {
         "type": "object",
         "properties": {
          "status": {
           "type": "string"
          },
          "msg": {
           "type": "string"
          },
          "code": {
           "type": "integer"
          },
          "data": {
           "type": "object",
           "properties": {
            "articles": {
             "type": "array",
             "items": {
              "$ref": "#/components/schemas/Tweet"
             }
            }
           }
          },
          "has_next_page": {
           "type": "boolean"
          },
          "next_cursor": {
           "type": "string",
           "nullable": true
          }
         }
        }
       }
      }
     },
     "400": {
      "description": "Invalid parameters (charged), or API key placed in the URL (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "401": {
      "description": "Missing or invalid API key (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "402": {
      "description": "Insufficient balance (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "403": {
      "description": "Account disabled (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "405": {
      "description": "Only GET is supported (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "404": {
      "description": "Unknown endpoint (charged), or the requested item could not be found (not charged). Note: many endpoints report a missing user/tweet as HTTP 200 with `\"status\":\"error\"` instead; those are charged.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "429": {
      "description": "Rate limit exceeded (not charged). Retry after the time in the `Retry-After` header.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "503": {
      "description": "Temporary service problem, or the endpoint is temporarily unavailable (not charged). Retry with exponential backoff.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     }
    }
   }
  },
  "/twitter/user/followers": {
   "get": {
    "operationId": "twitter_user_followers",
    "tags": [
     "Followers"
    ],
    "summary": "Get followers",
    "description": "Followers of a user with full profiles. Up to 100 per page. Paginated: use `cursor` / `next_cursor`.",
    "parameters": [
     {
      "name": "userName",
      "in": "query",
      "required": true,
      "schema": {
       "type": "string",
       "format": "string"
      },
      "description": "Screen name without the @, e.g. `NASA`.",
      "example": "NASA"
     },
     {
      "name": "cursor",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string",
       "format": "string"
      },
      "description": "Pagination cursor. Leave empty for the first page, then pass `next_cursor` from the previous response."
     },
     {
      "name": "pageSize",
      "in": "query",
      "required": false,
      "schema": {
       "type": "integer",
       "minimum": 20,
       "maximum": 100,
       "default": 100
      },
      "description": "Items per page, 20 to 100 (default 100). Larger values are treated as 100, smaller as 20.",
      "example": 100
     }
    ],
    "x-price-per-request": "$0.0006",
    "responses": {
     "200": {
      "description": "Charged. Check `status`: `success` means data was returned; `error` (e.g. user not found) is also HTTP 200.",
      "content": {
       "application/json": {
        "schema": {
         "type": "object",
         "properties": {
          "followers": {
           "type": "array",
           "items": {
            "$ref": "#/components/schemas/UserProfileSnake"
           }
          },
          "status": {
           "type": "string",
           "enum": [
            "success",
            "error"
           ]
          },
          "msg": {
           "type": "string"
          },
          "has_next_page": {
           "type": "boolean"
          },
          "next_cursor": {
           "type": "string"
          },
          "code": {
           "type": "integer"
          }
         }
        }
       }
      }
     },
     "400": {
      "description": "Invalid parameters (charged), or API key placed in the URL (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "401": {
      "description": "Missing or invalid API key (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "402": {
      "description": "Insufficient balance (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "403": {
      "description": "Account disabled (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "405": {
      "description": "Only GET is supported (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "404": {
      "description": "Unknown endpoint (charged), or the requested item could not be found (not charged). Note: many endpoints report a missing user/tweet as HTTP 200 with `\"status\":\"error\"` instead; those are charged.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "429": {
      "description": "Rate limit exceeded (not charged). Retry after the time in the `Retry-After` header.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "503": {
      "description": "Temporary service problem, or the endpoint is temporarily unavailable (not charged). Retry with exponential backoff.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     }
    }
   }
  },
  "/twitter/user/followings": {
   "get": {
    "operationId": "twitter_user_followings",
    "tags": [
     "Followers"
    ],
    "summary": "Get followings",
    "description": "Accounts a user follows, with full profiles. Up to 100 per page. Paginated: use `cursor` / `next_cursor`.",
    "parameters": [
     {
      "name": "userName",
      "in": "query",
      "required": true,
      "schema": {
       "type": "string",
       "format": "string"
      },
      "description": "Screen name without the @, e.g. `NASA`.",
      "example": "NASA"
     },
     {
      "name": "cursor",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string",
       "format": "string"
      },
      "description": "Pagination cursor. Leave empty for the first page, then pass `next_cursor` from the previous response."
     },
     {
      "name": "pageSize",
      "in": "query",
      "required": false,
      "schema": {
       "type": "integer",
       "minimum": 20,
       "maximum": 100,
       "default": 100
      },
      "description": "Items per page, 20 to 100 (default 100). Larger values are treated as 100, smaller as 20.",
      "example": 100
     }
    ],
    "x-price-per-request": "$0.0006",
    "responses": {
     "200": {
      "description": "Charged. Check `status`: `success` means data was returned; `error` (e.g. user not found) is also HTTP 200.",
      "content": {
       "application/json": {
        "schema": {
         "type": "object",
         "properties": {
          "followings": {
           "type": "array",
           "items": {
            "$ref": "#/components/schemas/UserProfileSnake"
           }
          },
          "has_next_page": {
           "type": "boolean"
          },
          "next_cursor": {
           "type": "string"
          },
          "status": {
           "type": "string",
           "enum": [
            "success",
            "error"
           ]
          },
          "msg": {
           "type": "string"
          },
          "code": {
           "type": "integer"
          }
         }
        }
       }
      }
     },
     "400": {
      "description": "Invalid parameters (charged), or API key placed in the URL (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "401": {
      "description": "Missing or invalid API key (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "402": {
      "description": "Insufficient balance (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "403": {
      "description": "Account disabled (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "405": {
      "description": "Only GET is supported (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "404": {
      "description": "Unknown endpoint (charged), or the requested item could not be found (not charged). Note: many endpoints report a missing user/tweet as HTTP 200 with `\"status\":\"error\"` instead; those are charged.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "429": {
      "description": "Rate limit exceeded (not charged). Retry after the time in the `Retry-After` header.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "503": {
      "description": "Temporary service problem, or the endpoint is temporarily unavailable (not charged). Retry with exponential backoff.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     }
    }
   }
  },
  "/twitter/user/followers_ids": {
   "get": {
    "operationId": "twitter_user_followers_ids",
    "tags": [
     "Followers"
    ],
    "summary": "Get follower IDs",
    "description": "Follower user IDs only, 200 per page. Pass either `userName` or `userId`. Paginated: use `cursor` / `next_cursor`.",
    "parameters": [
     {
      "name": "userName",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string",
       "format": "string"
      },
      "description": "Screen name without the @, e.g. `NASA`.",
      "example": "NASA"
     },
     {
      "name": "userId",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string",
       "format": "string"
      },
      "description": "Numeric user ID, e.g. `11348282`."
     },
     {
      "name": "cursor",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string",
       "format": "string"
      },
      "description": "Pagination cursor. Leave empty for the first page, then pass `next_cursor` from the previous response."
     }
    ],
    "x-price-per-request": "$0.0006",
    "responses": {
     "200": {
      "description": "Charged. Check `status`: `success` means data was returned; `error` (e.g. user not found) is also HTTP 200.",
      "content": {
       "application/json": {
        "schema": {
         "type": "object",
         "properties": {
          "ids": {
           "type": "array",
           "items": {
            "type": "string"
           }
          },
          "has_next_page": {
           "type": "boolean"
          },
          "next_cursor": {
           "type": "string"
          },
          "status": {
           "type": "string",
           "enum": [
            "success",
            "error"
           ]
          },
          "msg": {
           "type": "string"
          },
          "code": {
           "type": "integer"
          }
         }
        }
       }
      }
     },
     "400": {
      "description": "Invalid parameters (charged), or API key placed in the URL (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "401": {
      "description": "Missing or invalid API key (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "402": {
      "description": "Insufficient balance (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "403": {
      "description": "Account disabled (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "405": {
      "description": "Only GET is supported (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "404": {
      "description": "Unknown endpoint (charged), or the requested item could not be found (not charged). Note: many endpoints report a missing user/tweet as HTTP 200 with `\"status\":\"error\"` instead; those are charged.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "429": {
      "description": "Rate limit exceeded (not charged). Retry after the time in the `Retry-After` header.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "503": {
      "description": "Temporary service problem, or the endpoint is temporarily unavailable (not charged). Retry with exponential backoff.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     }
    }
   }
  },
  "/twitter/user/verifiedFollowers": {
   "get": {
    "operationId": "twitter_user_verifiedFollowers",
    "tags": [
     "Followers"
    ],
    "summary": "Get verified followers",
    "description": "Verified followers of a user by numeric user ID. Paginated: use `cursor` / `next_cursor`.",
    "parameters": [
     {
      "name": "user_id",
      "in": "query",
      "required": true,
      "schema": {
       "type": "string",
       "format": "string"
      },
      "description": "Numeric user ID, e.g. `11348282`.",
      "example": "11348282"
     },
     {
      "name": "cursor",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string",
       "format": "string"
      },
      "description": "Pagination cursor. Leave empty for the first page, then pass `next_cursor` from the previous response."
     }
    ],
    "x-price-per-request": "$0.0006",
    "responses": {
     "200": {
      "description": "Charged. Check `status`: `success` means data was returned; `error` (e.g. user not found) is also HTTP 200.",
      "content": {
       "application/json": {
        "schema": {
         "type": "object",
         "properties": {
          "followers": {
           "type": "array",
           "items": {
            "$ref": "#/components/schemas/UserProfileSnake"
           }
          },
          "status": {
           "type": "string",
           "enum": [
            "success",
            "error"
           ]
          },
          "msg": {
           "type": "string"
          },
          "has_next_page": {
           "type": "boolean"
          },
          "next_cursor": {
           "type": "string"
          },
          "code": {
           "type": "integer"
          }
         }
        }
       }
      }
     },
     "400": {
      "description": "Invalid parameters (charged), or API key placed in the URL (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "401": {
      "description": "Missing or invalid API key (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "402": {
      "description": "Insufficient balance (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "403": {
      "description": "Account disabled (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "405": {
      "description": "Only GET is supported (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "404": {
      "description": "Unknown endpoint (charged), or the requested item could not be found (not charged). Note: many endpoints report a missing user/tweet as HTTP 200 with `\"status\":\"error\"` instead; those are charged.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "429": {
      "description": "Rate limit exceeded (not charged). Retry after the time in the `Retry-After` header.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "503": {
      "description": "Temporary service problem, or the endpoint is temporarily unavailable (not charged). Retry with exponential backoff.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     }
    }
   }
  },
  "/twitter/user/check_follow_relationship": {
   "get": {
    "operationId": "twitter_user_check_follow_relationship",
    "tags": [
     "Followers"
    ],
    "summary": "Check follow relationship",
    "description": "Whether two users follow each other.",
    "parameters": [
     {
      "name": "source_user_name",
      "in": "query",
      "required": true,
      "schema": {
       "type": "string",
       "format": "string"
      },
      "description": "Screen name of the first user.",
      "example": "NASA"
     },
     {
      "name": "target_user_name",
      "in": "query",
      "required": true,
      "schema": {
       "type": "string",
       "format": "string"
      },
      "description": "Screen name of the second user.",
      "example": "SpaceX"
     }
    ],
    "x-price-per-request": "$0.0006",
    "responses": {
     "200": {
      "description": "Charged. Check `status`: `success` means data was returned; `error` (e.g. user not found) is also HTTP 200.",
      "content": {
       "application/json": {
        "schema": {
         "type": "object",
         "properties": {
          "data": {
           "type": "object",
           "properties": {
            "following": {
             "type": "boolean"
            },
            "followed_by": {
             "type": "boolean"
            }
           }
          },
          "status": {
           "type": "string",
           "enum": [
            "success",
            "error"
           ]
          },
          "message": {
           "type": "string"
          }
         }
        }
       }
      }
     },
     "400": {
      "description": "Invalid parameters (charged), or API key placed in the URL (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "401": {
      "description": "Missing or invalid API key (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "402": {
      "description": "Insufficient balance (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "403": {
      "description": "Account disabled (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "405": {
      "description": "Only GET is supported (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "404": {
      "description": "Unknown endpoint (charged), or the requested item could not be found (not charged). Note: many endpoints report a missing user/tweet as HTTP 200 with `\"status\":\"error\"` instead; those are charged.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "429": {
      "description": "Rate limit exceeded (not charged). Retry after the time in the `Retry-After` header.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "503": {
      "description": "Temporary service problem, or the endpoint is temporarily unavailable (not charged). Retry with exponential backoff.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     }
    }
   }
  },
  "/twitter/tweets": {
   "get": {
    "operationId": "twitter_tweets",
    "tags": [
     "Tweets"
    ],
    "summary": "Get tweet by ID",
    "description": "One tweet by its numeric ID. Exactly one ID per request.",
    "parameters": [
     {
      "name": "tweet_ids",
      "in": "query",
      "required": true,
      "schema": {
       "type": "string",
       "pattern": "^[0-9]+$"
      },
      "description": "Exactly one numeric tweet ID per request.",
      "example": "1585341984679469056"
     }
    ],
    "x-price-per-request": "$0.0006",
    "responses": {
     "200": {
      "description": "Charged. Check `status`: `success` means data was returned; `error` (e.g. user not found) is also HTTP 200.",
      "content": {
       "application/json": {
        "schema": {
         "type": "object",
         "properties": {
          "tweets": {
           "type": "array",
           "items": {
            "$ref": "#/components/schemas/Tweet"
           }
          },
          "status": {
           "type": "string",
           "enum": [
            "success",
            "error"
           ]
          },
          "msg": {
           "type": "string"
          },
          "code": {
           "type": "integer"
          }
         },
         "required": [
          "tweets",
          "status",
          "msg"
         ]
        }
       }
      }
     },
     "400": {
      "description": "Invalid parameters (charged), or API key placed in the URL (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "401": {
      "description": "Missing or invalid API key (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "402": {
      "description": "Insufficient balance (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "403": {
      "description": "Account disabled (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "405": {
      "description": "Only GET is supported (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "404": {
      "description": "Unknown endpoint (charged), or the requested item could not be found (not charged). Note: many endpoints report a missing user/tweet as HTTP 200 with `\"status\":\"error\"` instead; those are charged.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "429": {
      "description": "Rate limit exceeded (not charged). Retry after the time in the `Retry-After` header.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "503": {
      "description": "Temporary service problem, or the endpoint is temporarily unavailable (not charged). Retry with exponential backoff.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     }
    }
   }
  },
  "/twitter/tweet/advanced_search": {
   "get": {
    "operationId": "twitter_tweet_advanced_search",
    "tags": [
     "Tweets"
    ],
    "summary": "Advanced search",
    "description": "Search tweets with the X advanced search syntax, e.g. `from:NASA since:2026-01-01`. Paginated: use `cursor` / `next_cursor`.",
    "parameters": [
     {
      "name": "query",
      "in": "query",
      "required": true,
      "schema": {
       "type": "string",
       "format": "string"
      },
      "description": "Search query.",
      "example": "from:NASA"
     },
     {
      "name": "queryType",
      "in": "query",
      "required": true,
      "schema": {
       "type": "string",
       "enum": [
        "Latest",
        "Top"
       ],
       "default": "Latest"
      },
      "description": "`Latest` or `Top`.",
      "example": "Latest"
     },
     {
      "name": "cursor",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string",
       "format": "string"
      },
      "description": "Pagination cursor. Leave empty for the first page, then pass `next_cursor` from the previous response."
     }
    ],
    "x-price-per-request": "$0.0006",
    "responses": {
     "200": {
      "description": "Charged. Check `status`: `success` means data was returned; `error` (e.g. user not found) is also HTTP 200.",
      "content": {
       "application/json": {
        "schema": {
         "type": "object",
         "properties": {
          "tweets": {
           "type": "array",
           "items": {
            "$ref": "#/components/schemas/Tweet"
           }
          },
          "has_next_page": {
           "type": "boolean"
          },
          "next_cursor": {
           "type": "string"
          }
         },
         "required": [
          "tweets",
          "has_next_page",
          "next_cursor"
         ]
        }
       }
      }
     },
     "400": {
      "description": "Invalid parameters (charged), or API key placed in the URL (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "401": {
      "description": "Missing or invalid API key (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "402": {
      "description": "Insufficient balance (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "403": {
      "description": "Account disabled (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "405": {
      "description": "Only GET is supported (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "404": {
      "description": "Unknown endpoint (charged), or the requested item could not be found (not charged). Note: many endpoints report a missing user/tweet as HTTP 200 with `\"status\":\"error\"` instead; those are charged.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "429": {
      "description": "Rate limit exceeded (not charged). Retry after the time in the `Retry-After` header.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "503": {
      "description": "Temporary service problem, or the endpoint is temporarily unavailable (not charged). Retry with exponential backoff.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     }
    }
   }
  },
  "/twitter/tweet/replies": {
   "get": {
    "operationId": "twitter_tweet_replies",
    "tags": [
     "Tweets"
    ],
    "summary": "Get tweet replies",
    "description": "Replies to a tweet. Paginated: use `cursor` / `next_cursor`.",
    "parameters": [
     {
      "name": "tweetId",
      "in": "query",
      "required": true,
      "schema": {
       "type": "string",
       "format": "string"
      },
      "description": "Numeric tweet ID.",
      "example": "1585341984679469056"
     },
     {
      "name": "sinceTime",
      "in": "query",
      "required": false,
      "schema": {
       "type": "integer",
       "format": "int64"
      },
      "description": "Only items created at or after this Unix timestamp (seconds)."
     },
     {
      "name": "untilTime",
      "in": "query",
      "required": false,
      "schema": {
       "type": "integer",
       "format": "int64"
      },
      "description": "Only items created before this Unix timestamp (seconds)."
     },
     {
      "name": "cursor",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string",
       "format": "string"
      },
      "description": "Pagination cursor. Leave empty for the first page, then pass `next_cursor` from the previous response."
     }
    ],
    "x-price-per-request": "$0.0006",
    "responses": {
     "200": {
      "description": "Charged. Check `status`: `success` means data was returned; `error` (e.g. user not found) is also HTTP 200.",
      "content": {
       "application/json": {
        "schema": {
         "type": "object",
         "properties": {
          "tweets": {
           "type": "array",
           "items": {
            "$ref": "#/components/schemas/Tweet"
           }
          },
          "has_next_page": {
           "type": "boolean"
          },
          "next_cursor": {
           "type": "string"
          },
          "status": {
           "type": "string",
           "enum": [
            "success",
            "error"
           ]
          },
          "msg": {
           "type": "string"
          }
         }
        }
       }
      }
     },
     "400": {
      "description": "Invalid parameters (charged), or API key placed in the URL (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "401": {
      "description": "Missing or invalid API key (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "402": {
      "description": "Insufficient balance (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "403": {
      "description": "Account disabled (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "405": {
      "description": "Only GET is supported (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "404": {
      "description": "Unknown endpoint (charged), or the requested item could not be found (not charged). Note: many endpoints report a missing user/tweet as HTTP 200 with `\"status\":\"error\"` instead; those are charged.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "429": {
      "description": "Rate limit exceeded (not charged). Retry after the time in the `Retry-After` header.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "503": {
      "description": "Temporary service problem, or the endpoint is temporarily unavailable (not charged). Retry with exponential backoff.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     }
    }
   }
  },
  "/twitter/tweet/replies/v2": {
   "get": {
    "operationId": "twitter_tweet_replies_v2",
    "tags": [
     "Tweets"
    ],
    "summary": "Get tweet replies (sortable)",
    "description": "Replies to a tweet, with a choice of ordering via `queryType`. Paginated: use `cursor` / `next_cursor`.",
    "parameters": [
     {
      "name": "tweetId",
      "in": "query",
      "required": true,
      "schema": {
       "type": "string",
       "format": "string"
      },
      "description": "Numeric tweet ID.",
      "example": "1585341984679469056"
     },
     {
      "name": "cursor",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string",
       "format": "string"
      },
      "description": "Pagination cursor. Leave empty for the first page, then pass `next_cursor` from the previous response."
     },
     {
      "name": "queryType",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string",
       "enum": [
        "Relevance",
        "Latest",
        "Likes"
       ],
       "default": "Relevance"
      },
      "description": "Ordering: `Relevance` (default), `Latest` or `Likes`."
     }
    ],
    "x-price-per-request": "$0.0006",
    "responses": {
     "200": {
      "description": "Charged. Check `status`: `success` means data was returned; `error` (e.g. user not found) is also HTTP 200.",
      "content": {
       "application/json": {
        "schema": {
         "type": "object",
         "properties": {
          "tweets": {
           "type": "array",
           "items": {
            "$ref": "#/components/schemas/Tweet"
           }
          },
          "has_next_page": {
           "type": "boolean"
          },
          "next_cursor": {
           "type": "string"
          },
          "status": {
           "type": "string",
           "enum": [
            "success",
            "error"
           ]
          },
          "msg": {
           "type": "string"
          }
         }
        }
       }
      }
     },
     "400": {
      "description": "Invalid parameters (charged), or API key placed in the URL (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "401": {
      "description": "Missing or invalid API key (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "402": {
      "description": "Insufficient balance (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "403": {
      "description": "Account disabled (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "405": {
      "description": "Only GET is supported (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "404": {
      "description": "Unknown endpoint (charged), or the requested item could not be found (not charged). Note: many endpoints report a missing user/tweet as HTTP 200 with `\"status\":\"error\"` instead; those are charged.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "429": {
      "description": "Rate limit exceeded (not charged). Retry after the time in the `Retry-After` header.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "503": {
      "description": "Temporary service problem, or the endpoint is temporarily unavailable (not charged). Retry with exponential backoff.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     }
    }
   }
  },
  "/twitter/tweet/thread_context": {
   "get": {
    "operationId": "twitter_tweet_thread_context",
    "tags": [
     "Tweets"
    ],
    "summary": "Get thread context",
    "description": "The conversation thread a tweet belongs to. Paginated: use `cursor` / `next_cursor`.",
    "parameters": [
     {
      "name": "tweetId",
      "in": "query",
      "required": true,
      "schema": {
       "type": "string",
       "format": "string"
      },
      "description": "Numeric tweet ID.",
      "example": "1585341984679469056"
     },
     {
      "name": "cursor",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string",
       "format": "string"
      },
      "description": "Pagination cursor. Leave empty for the first page, then pass `next_cursor` from the previous response."
     }
    ],
    "x-price-per-request": "$0.0006",
    "responses": {
     "200": {
      "description": "Charged. Check `status`: `success` means data was returned; `error` (e.g. user not found) is also HTTP 200.",
      "content": {
       "application/json": {
        "schema": {
         "type": "object",
         "properties": {
          "tweets": {
           "type": "array",
           "items": {
            "$ref": "#/components/schemas/Tweet"
           }
          },
          "has_next_page": {
           "type": "boolean"
          },
          "next_cursor": {
           "type": "string"
          },
          "status": {
           "type": "string",
           "enum": [
            "success",
            "error"
           ]
          },
          "msg": {
           "type": "string"
          }
         }
        }
       }
      }
     },
     "400": {
      "description": "Invalid parameters (charged), or API key placed in the URL (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "401": {
      "description": "Missing or invalid API key (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "402": {
      "description": "Insufficient balance (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "403": {
      "description": "Account disabled (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "405": {
      "description": "Only GET is supported (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "404": {
      "description": "Unknown endpoint (charged), or the requested item could not be found (not charged). Note: many endpoints report a missing user/tweet as HTTP 200 with `\"status\":\"error\"` instead; those are charged.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "429": {
      "description": "Rate limit exceeded (not charged). Retry after the time in the `Retry-After` header.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "503": {
      "description": "Temporary service problem, or the endpoint is temporarily unavailable (not charged). Retry with exponential backoff.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     }
    }
   }
  },
  "/twitter/tweet/quotes": {
   "get": {
    "operationId": "twitter_tweet_quotes",
    "tags": [
     "Tweets"
    ],
    "summary": "Get quote tweets",
    "description": "Tweets that quote a tweet. Paginated: use `cursor` / `next_cursor`.",
    "parameters": [
     {
      "name": "tweetId",
      "in": "query",
      "required": true,
      "schema": {
       "type": "string",
       "format": "string"
      },
      "description": "Numeric tweet ID.",
      "example": "1585341984679469056"
     },
     {
      "name": "sinceTime",
      "in": "query",
      "required": false,
      "schema": {
       "type": "integer",
       "format": "int64"
      },
      "description": "Only items created at or after this Unix timestamp (seconds)."
     },
     {
      "name": "untilTime",
      "in": "query",
      "required": false,
      "schema": {
       "type": "integer",
       "format": "int64"
      },
      "description": "Only items created before this Unix timestamp (seconds)."
     },
     {
      "name": "includeReplies",
      "in": "query",
      "required": false,
      "schema": {
       "type": "boolean",
       "default": true
      },
      "description": "Include replies (`true` / `false`)."
     },
     {
      "name": "cursor",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string",
       "format": "string"
      },
      "description": "Pagination cursor. Leave empty for the first page, then pass `next_cursor` from the previous response."
     }
    ],
    "x-price-per-request": "$0.0006",
    "responses": {
     "200": {
      "description": "Charged. Check `status`: `success` means data was returned; `error` (e.g. user not found) is also HTTP 200.",
      "content": {
       "application/json": {
        "schema": {
         "type": "object",
         "properties": {
          "tweets": {
           "type": "array",
           "items": {
            "$ref": "#/components/schemas/Tweet"
           }
          },
          "has_next_page": {
           "type": "boolean"
          },
          "next_cursor": {
           "type": "string"
          },
          "status": {
           "type": "string",
           "enum": [
            "success",
            "error"
           ]
          },
          "msg": {
           "type": "string"
          }
         }
        }
       }
      }
     },
     "400": {
      "description": "Invalid parameters (charged), or API key placed in the URL (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "401": {
      "description": "Missing or invalid API key (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "402": {
      "description": "Insufficient balance (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "403": {
      "description": "Account disabled (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "405": {
      "description": "Only GET is supported (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "404": {
      "description": "Unknown endpoint (charged), or the requested item could not be found (not charged). Note: many endpoints report a missing user/tweet as HTTP 200 with `\"status\":\"error\"` instead; those are charged.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "429": {
      "description": "Rate limit exceeded (not charged). Retry after the time in the `Retry-After` header.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "503": {
      "description": "Temporary service problem, or the endpoint is temporarily unavailable (not charged). Retry with exponential backoff.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     }
    }
   }
  },
  "/twitter/tweet/retweeters": {
   "get": {
    "operationId": "twitter_tweet_retweeters",
    "tags": [
     "Tweets"
    ],
    "summary": "Get retweeters",
    "description": "Users who retweeted a tweet. Paginated: use `cursor` / `next_cursor`.",
    "parameters": [
     {
      "name": "tweetId",
      "in": "query",
      "required": true,
      "schema": {
       "type": "string",
       "format": "string"
      },
      "description": "Numeric tweet ID.",
      "example": "1585341984679469056"
     },
     {
      "name": "cursor",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string",
       "format": "string"
      },
      "description": "Pagination cursor. Leave empty for the first page, then pass `next_cursor` from the previous response."
     }
    ],
    "x-price-per-request": "$0.0006",
    "responses": {
     "200": {
      "description": "Charged. Check `status`: `success` means data was returned; `error` (e.g. user not found) is also HTTP 200.",
      "content": {
       "application/json": {
        "schema": {
         "type": "object",
         "properties": {
          "users": {
           "type": "array",
           "items": {
            "$ref": "#/components/schemas/UserInfo"
           }
          },
          "has_next_page": {
           "type": "boolean"
          },
          "next_cursor": {
           "type": "string"
          }
         }
        }
       }
      }
     },
     "400": {
      "description": "Invalid parameters (charged), or API key placed in the URL (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "401": {
      "description": "Missing or invalid API key (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "402": {
      "description": "Insufficient balance (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "403": {
      "description": "Account disabled (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "405": {
      "description": "Only GET is supported (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "404": {
      "description": "Unknown endpoint (charged), or the requested item could not be found (not charged). Note: many endpoints report a missing user/tweet as HTTP 200 with `\"status\":\"error\"` instead; those are charged.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "429": {
      "description": "Rate limit exceeded (not charged). Retry after the time in the `Retry-After` header.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "503": {
      "description": "Temporary service problem, or the endpoint is temporarily unavailable (not charged). Retry with exponential backoff.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     }
    }
   }
  },
  "/twitter/article": {
   "get": {
    "operationId": "twitter_article",
    "tags": [
     "Tweets"
    ],
    "summary": "Get article",
    "description": "An article (long-form post) by its tweet ID.",
    "parameters": [
     {
      "name": "tweet_id",
      "in": "query",
      "required": true,
      "schema": {
       "type": "string",
       "format": "string"
      },
      "description": "Numeric tweet ID.",
      "example": "2082071471548244406"
     }
    ],
    "x-price-per-request": "$0.0006",
    "responses": {
     "200": {
      "description": "Charged. Check `status`: `success` means data was returned; `error` (e.g. user not found) is also HTTP 200.",
      "content": {
       "application/json": {
        "schema": {
         "type": "object",
         "properties": {
          "article": {
           "type": "object",
           "properties": {
            "author": {
             "$ref": "#/components/schemas/UserInfo"
            },
            "replyCount": {
             "type": "integer"
            },
            "likeCount": {
             "type": "integer"
            },
            "quoteCount": {
             "type": "integer"
            },
            "viewCount": {
             "type": "integer"
            },
            "createdAt": {
             "type": "string"
            },
            "title": {
             "type": "string"
            },
            "preview_text": {
             "type": "string"
            },
            "cover_media_img_url": {
             "type": "string"
            },
            "contents": {
             "type": "array",
             "items": {
              "type": "object",
              "properties": {
               "type": {
                "type": "string",
                "enum": [
                 "unstyled",
                 "header-one",
                 "header-two",
                 "header-three",
                 "unordered-list-item",
                 "ordered-list-item",
                 "image",
                 "gif",
                 "markdown",
                 "divider"
                ]
               },
               "text": {
                "type": "string"
               },
               "url": {
                "type": "string"
               },
               "previewUrl": {
                "type": "string"
               },
               "width": {
                "type": "integer"
               },
               "height": {
                "type": "integer"
               },
               "inlineStyleRanges": {
                "type": "array",
                "items": {
                 "type": "object",
                 "properties": {
                  "offset": {
                   "type": "integer"
                  },
                  "length": {
                   "type": "integer"
                  },
                  "style": {
                   "type": "string"
                  }
                 }
                }
               }
              },
              "required": [
               "type"
              ]
             }
            }
           }
          },
          "status": {
           "type": "string",
           "enum": [
            "success",
            "failed"
           ]
          },
          "msg": {
           "type": "string"
          }
         }
        }
       }
      }
     },
     "400": {
      "description": "Invalid parameters (charged), or API key placed in the URL (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "401": {
      "description": "Missing or invalid API key (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "402": {
      "description": "Insufficient balance (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "403": {
      "description": "Account disabled (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "405": {
      "description": "Only GET is supported (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "404": {
      "description": "Unknown endpoint (charged), or the requested item could not be found (not charged). Note: many endpoints report a missing user/tweet as HTTP 200 with `\"status\":\"error\"` instead; those are charged.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "429": {
      "description": "Rate limit exceeded (not charged). Retry after the time in the `Retry-After` header.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "503": {
      "description": "Temporary service problem, or the endpoint is temporarily unavailable (not charged). Retry with exponential backoff.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     }
    }
   }
  },
  "/twitter/list/tweets": {
   "get": {
    "operationId": "twitter_list_tweets",
    "tags": [
     "Lists"
    ],
    "summary": "Get list tweets",
    "description": "Tweets from members of a list. Paginated: use `cursor` / `next_cursor`.",
    "parameters": [
     {
      "name": "listId",
      "in": "query",
      "required": true,
      "schema": {
       "type": "string",
       "format": "string"
      },
      "description": "Numeric list ID.",
      "example": "1518120210263572480"
     },
     {
      "name": "sinceTime",
      "in": "query",
      "required": false,
      "schema": {
       "type": "integer",
       "format": "int64"
      },
      "description": "Only items created at or after this Unix timestamp (seconds)."
     },
     {
      "name": "untilTime",
      "in": "query",
      "required": false,
      "schema": {
       "type": "integer",
       "format": "int64"
      },
      "description": "Only items created before this Unix timestamp (seconds)."
     },
     {
      "name": "includeReplies",
      "in": "query",
      "required": false,
      "schema": {
       "type": "boolean",
       "default": true
      },
      "description": "Include replies (`true` / `false`)."
     },
     {
      "name": "cursor",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string",
       "format": "string"
      },
      "description": "Pagination cursor. Leave empty for the first page, then pass `next_cursor` from the previous response."
     }
    ],
    "x-price-per-request": "$0.0006",
    "responses": {
     "200": {
      "description": "Charged. Check `status`: `success` means data was returned; `error` (e.g. user not found) is also HTTP 200.",
      "content": {
       "application/json": {
        "schema": {
         "type": "object",
         "properties": {
          "tweets": {
           "type": "array",
           "items": {
            "$ref": "#/components/schemas/Tweet"
           }
          },
          "has_next_page": {
           "type": "boolean"
          },
          "next_cursor": {
           "type": "string"
          },
          "status": {
           "type": "string",
           "enum": [
            "success",
            "error"
           ]
          },
          "msg": {
           "type": "string"
          }
         }
        }
       }
      }
     },
     "400": {
      "description": "Invalid parameters (charged), or API key placed in the URL (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "401": {
      "description": "Missing or invalid API key (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "402": {
      "description": "Insufficient balance (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "403": {
      "description": "Account disabled (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "405": {
      "description": "Only GET is supported (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "404": {
      "description": "Unknown endpoint (charged), or the requested item could not be found (not charged). Note: many endpoints report a missing user/tweet as HTTP 200 with `\"status\":\"error\"` instead; those are charged.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "429": {
      "description": "Rate limit exceeded (not charged). Retry after the time in the `Retry-After` header.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "503": {
      "description": "Temporary service problem, or the endpoint is temporarily unavailable (not charged). Retry with exponential backoff.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     }
    }
   }
  },
  "/twitter/list/tweets_timeline": {
   "get": {
    "operationId": "twitter_list_tweets_timeline",
    "tags": [
     "Lists"
    ],
    "summary": "Get list timeline",
    "description": "Timeline of a list. Paginated: use `cursor` / `next_cursor`.",
    "parameters": [
     {
      "name": "listId",
      "in": "query",
      "required": true,
      "schema": {
       "type": "string",
       "format": "string"
      },
      "description": "Numeric list ID.",
      "example": "1518120210263572480"
     },
     {
      "name": "cursor",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string",
       "format": "string"
      },
      "description": "Pagination cursor. Leave empty for the first page, then pass `next_cursor` from the previous response."
     }
    ],
    "x-price-per-request": "$0.0006",
    "responses": {
     "200": {
      "description": "Charged. Check `status`: `success` means data was returned; `error` (e.g. user not found) is also HTTP 200.",
      "content": {
       "application/json": {
        "schema": {
         "type": "object",
         "properties": {
          "tweets": {
           "type": "array",
           "items": {
            "$ref": "#/components/schemas/Tweet"
           }
          },
          "has_next_page": {
           "type": "boolean"
          },
          "next_cursor": {
           "type": "string"
          },
          "status": {
           "type": "string",
           "enum": [
            "success",
            "error"
           ]
          },
          "msg": {
           "type": "string"
          }
         },
         "required": [
          "tweets",
          "has_next_page",
          "next_cursor"
         ]
        }
       }
      }
     },
     "400": {
      "description": "Invalid parameters (charged), or API key placed in the URL (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "401": {
      "description": "Missing or invalid API key (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "402": {
      "description": "Insufficient balance (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "403": {
      "description": "Account disabled (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "405": {
      "description": "Only GET is supported (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "404": {
      "description": "Unknown endpoint (charged), or the requested item could not be found (not charged). Note: many endpoints report a missing user/tweet as HTTP 200 with `\"status\":\"error\"` instead; those are charged.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "429": {
      "description": "Rate limit exceeded (not charged). Retry after the time in the `Retry-After` header.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "503": {
      "description": "Temporary service problem, or the endpoint is temporarily unavailable (not charged). Retry with exponential backoff.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     }
    }
   }
  },
  "/twitter/list/members": {
   "get": {
    "operationId": "twitter_list_members",
    "tags": [
     "Lists"
    ],
    "summary": "Get list members",
    "description": "Members of a list. Paginated: use `cursor` / `next_cursor`.",
    "parameters": [
     {
      "name": "list_id",
      "in": "query",
      "required": true,
      "schema": {
       "type": "string",
       "format": "string"
      },
      "description": "Numeric list ID.",
      "example": "1518120210263572480"
     },
     {
      "name": "cursor",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string",
       "format": "string"
      },
      "description": "Pagination cursor. Leave empty for the first page, then pass `next_cursor` from the previous response."
     }
    ],
    "x-price-per-request": "$0.0006",
    "responses": {
     "200": {
      "description": "Charged. Check `status`: `success` means data was returned; `error` (e.g. user not found) is also HTTP 200.",
      "content": {
       "application/json": {
        "schema": {
         "type": "object",
         "properties": {
          "members": {
           "type": "array",
           "items": {
            "$ref": "#/components/schemas/UserInfo"
           }
          },
          "has_next_page": {
           "type": "boolean"
          },
          "next_cursor": {
           "type": "string"
          },
          "status": {
           "type": "string",
           "enum": [
            "success",
            "error"
           ]
          },
          "msg": {
           "type": "string"
          }
         }
        }
       }
      }
     },
     "400": {
      "description": "Invalid parameters (charged), or API key placed in the URL (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "401": {
      "description": "Missing or invalid API key (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "402": {
      "description": "Insufficient balance (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "403": {
      "description": "Account disabled (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "405": {
      "description": "Only GET is supported (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "404": {
      "description": "Unknown endpoint (charged), or the requested item could not be found (not charged). Note: many endpoints report a missing user/tweet as HTTP 200 with `\"status\":\"error\"` instead; those are charged.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "429": {
      "description": "Rate limit exceeded (not charged). Retry after the time in the `Retry-After` header.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "503": {
      "description": "Temporary service problem, or the endpoint is temporarily unavailable (not charged). Retry with exponential backoff.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     }
    }
   }
  },
  "/twitter/list/followers": {
   "get": {
    "operationId": "twitter_list_followers",
    "tags": [
     "Lists"
    ],
    "summary": "Get list followers",
    "description": "Followers of a list. Paginated: use `cursor` / `next_cursor`.",
    "parameters": [
     {
      "name": "list_id",
      "in": "query",
      "required": true,
      "schema": {
       "type": "string",
       "format": "string"
      },
      "description": "Numeric list ID.",
      "example": "1518120210263572480"
     },
     {
      "name": "cursor",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string",
       "format": "string"
      },
      "description": "Pagination cursor. Leave empty for the first page, then pass `next_cursor` from the previous response."
     }
    ],
    "x-price-per-request": "$0.0006",
    "responses": {
     "200": {
      "description": "Charged. Check `status`: `success` means data was returned; `error` (e.g. user not found) is also HTTP 200.",
      "content": {
       "application/json": {
        "schema": {
         "type": "object",
         "properties": {
          "followers": {
           "type": "array",
           "items": {
            "$ref": "#/components/schemas/UserInfo"
           }
          },
          "has_next_page": {
           "type": "boolean"
          },
          "next_cursor": {
           "type": "string"
          },
          "status": {
           "type": "string",
           "enum": [
            "success",
            "error"
           ]
          },
          "msg": {
           "type": "string"
          }
         }
        }
       }
      }
     },
     "400": {
      "description": "Invalid parameters (charged), or API key placed in the URL (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "401": {
      "description": "Missing or invalid API key (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "402": {
      "description": "Insufficient balance (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "403": {
      "description": "Account disabled (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "405": {
      "description": "Only GET is supported (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "404": {
      "description": "Unknown endpoint (charged), or the requested item could not be found (not charged). Note: many endpoints report a missing user/tweet as HTTP 200 with `\"status\":\"error\"` instead; those are charged.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "429": {
      "description": "Rate limit exceeded (not charged). Retry after the time in the `Retry-After` header.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "503": {
      "description": "Temporary service problem, or the endpoint is temporarily unavailable (not charged). Retry with exponential backoff.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     }
    }
   }
  },
  "/twitter/community/info": {
   "get": {
    "operationId": "twitter_community_info",
    "tags": [
     "Communities"
    ],
    "summary": "Get community",
    "description": "Details of a community.",
    "parameters": [
     {
      "name": "community_id",
      "in": "query",
      "required": true,
      "schema": {
       "type": "string",
       "format": "string"
      },
      "description": "Numeric community ID.",
      "example": "1789410733115236387"
     }
    ],
    "x-price-per-request": "$0.0006",
    "responses": {
     "200": {
      "description": "Charged. Check `status`: `success` means data was returned; `error` (e.g. user not found) is also HTTP 200.",
      "content": {
       "application/json": {
        "schema": {
         "type": "object",
         "properties": {
          "community_info": {
           "type": "object",
           "properties": {
            "id": {
             "type": "string"
            },
            "name": {
             "type": "string"
            },
            "description": {
             "type": "string"
            },
            "question": {
             "type": "string"
            },
            "member_count": {
             "type": "integer"
            },
            "moderator_count": {
             "type": "integer"
            },
            "created_at": {
             "type": "string"
            },
            "join_policy": {
             "type": "string"
            },
            "invites_policy": {
             "type": "string"
            },
            "is_nsfw": {
             "type": "boolean"
            },
            "is_pinned": {
             "type": "boolean"
            },
            "role": {
             "type": "string"
            },
            "primary_topic": {
             "type": "object",
             "properties": {
              "id": {
               "type": "string"
              },
              "name": {
               "type": "string"
              }
             }
            },
            "banner_url": {
             "type": "string"
            },
            "search_tags": {
             "type": "array",
             "items": {
              "type": "string"
             }
            },
            "rules": {
             "type": "array",
             "items": {
              "type": "object",
              "properties": {
               "id": {
                "type": "string"
               },
               "name": {
                "type": "string"
               },
               "description": {
                "type": "string"
               }
              }
             }
            },
            "creator": {
             "$ref": "#/components/schemas/UserInfo"
            },
            "admin": {
             "$ref": "#/components/schemas/UserInfo"
            },
            "members_preview": {
             "type": "array",
             "items": {
              "type": "object"
             }
            }
           }
          },
          "status": {
           "type": "string",
           "enum": [
            "success",
            "error"
           ]
          },
          "msg": {
           "type": "string"
          }
         }
        }
       }
      }
     },
     "400": {
      "description": "Invalid parameters (charged), or API key placed in the URL (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "401": {
      "description": "Missing or invalid API key (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "402": {
      "description": "Insufficient balance (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "403": {
      "description": "Account disabled (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "405": {
      "description": "Only GET is supported (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "404": {
      "description": "Unknown endpoint (charged), or the requested item could not be found (not charged). Note: many endpoints report a missing user/tweet as HTTP 200 with `\"status\":\"error\"` instead; those are charged.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "429": {
      "description": "Rate limit exceeded (not charged). Retry after the time in the `Retry-After` header.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "503": {
      "description": "Temporary service problem, or the endpoint is temporarily unavailable (not charged). Retry with exponential backoff.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     }
    }
   }
  },
  "/twitter/community/members": {
   "get": {
    "operationId": "twitter_community_members",
    "tags": [
     "Communities"
    ],
    "summary": "Get community members",
    "description": "Members of a community. Paginated: use `cursor` / `next_cursor`.",
    "parameters": [
     {
      "name": "community_id",
      "in": "query",
      "required": true,
      "schema": {
       "type": "string",
       "format": "string"
      },
      "description": "Numeric community ID.",
      "example": "1789410733115236387"
     },
     {
      "name": "cursor",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string",
       "format": "string"
      },
      "description": "Pagination cursor. Leave empty for the first page, then pass `next_cursor` from the previous response."
     }
    ],
    "x-price-per-request": "$0.0006",
    "responses": {
     "200": {
      "description": "Charged. Check `status`: `success` means data was returned; `error` (e.g. user not found) is also HTTP 200.",
      "content": {
       "application/json": {
        "schema": {
         "type": "object",
         "properties": {
          "members": {
           "type": "array",
           "items": {
            "$ref": "#/components/schemas/UserProfileSnake"
           }
          },
          "has_next_page": {
           "type": "boolean"
          },
          "next_cursor": {
           "type": "string"
          },
          "status": {
           "type": "string",
           "enum": [
            "success",
            "error"
           ]
          },
          "msg": {
           "type": "string"
          }
         }
        }
       }
      }
     },
     "400": {
      "description": "Invalid parameters (charged), or API key placed in the URL (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "401": {
      "description": "Missing or invalid API key (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "402": {
      "description": "Insufficient balance (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "403": {
      "description": "Account disabled (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "405": {
      "description": "Only GET is supported (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "404": {
      "description": "Unknown endpoint (charged), or the requested item could not be found (not charged). Note: many endpoints report a missing user/tweet as HTTP 200 with `\"status\":\"error\"` instead; those are charged.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "429": {
      "description": "Rate limit exceeded (not charged). Retry after the time in the `Retry-After` header.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "503": {
      "description": "Temporary service problem, or the endpoint is temporarily unavailable (not charged). Retry with exponential backoff.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     }
    }
   }
  },
  "/twitter/community/moderators": {
   "get": {
    "operationId": "twitter_community_moderators",
    "tags": [
     "Communities"
    ],
    "summary": "Get community moderators",
    "description": "Moderators of a community. Paginated: use `cursor` / `next_cursor`.",
    "parameters": [
     {
      "name": "community_id",
      "in": "query",
      "required": true,
      "schema": {
       "type": "string",
       "format": "string"
      },
      "description": "Numeric community ID.",
      "example": "1789410733115236387"
     },
     {
      "name": "cursor",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string",
       "format": "string"
      },
      "description": "Pagination cursor. Leave empty for the first page, then pass `next_cursor` from the previous response."
     }
    ],
    "x-price-per-request": "$0.0006",
    "responses": {
     "200": {
      "description": "Charged. Check `status`: `success` means data was returned; `error` (e.g. user not found) is also HTTP 200.",
      "content": {
       "application/json": {
        "schema": {
         "type": "object",
         "properties": {
          "has_next_page": {
           "type": "boolean"
          },
          "next_cursor": {
           "type": "string"
          },
          "status": {
           "type": "string",
           "enum": [
            "success",
            "error"
           ]
          },
          "msg": {
           "type": "string"
          },
          "moderators": {
           "type": "array",
           "items": {
            "$ref": "#/components/schemas/UserInfo"
           }
          }
         }
        }
       }
      }
     },
     "400": {
      "description": "Invalid parameters (charged), or API key placed in the URL (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "401": {
      "description": "Missing or invalid API key (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "402": {
      "description": "Insufficient balance (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "403": {
      "description": "Account disabled (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "405": {
      "description": "Only GET is supported (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "404": {
      "description": "Unknown endpoint (charged), or the requested item could not be found (not charged). Note: many endpoints report a missing user/tweet as HTTP 200 with `\"status\":\"error\"` instead; those are charged.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "429": {
      "description": "Rate limit exceeded (not charged). Retry after the time in the `Retry-After` header.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "503": {
      "description": "Temporary service problem, or the endpoint is temporarily unavailable (not charged). Retry with exponential backoff.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     }
    }
   }
  },
  "/twitter/community/tweets": {
   "get": {
    "operationId": "twitter_community_tweets",
    "tags": [
     "Communities"
    ],
    "summary": "Get community tweets",
    "description": "Tweets posted in a community. Paginated: use `cursor` / `next_cursor`.",
    "parameters": [
     {
      "name": "community_id",
      "in": "query",
      "required": true,
      "schema": {
       "type": "string",
       "format": "string"
      },
      "description": "Numeric community ID.",
      "example": "1789410733115236387"
     },
     {
      "name": "cursor",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string",
       "format": "string"
      },
      "description": "Pagination cursor. Leave empty for the first page, then pass `next_cursor` from the previous response."
     }
    ],
    "x-price-per-request": "$0.0006",
    "responses": {
     "200": {
      "description": "Charged. Check `status`: `success` means data was returned; `error` (e.g. user not found) is also HTTP 200.",
      "content": {
       "application/json": {
        "schema": {
         "type": "object",
         "properties": {
          "tweets": {
           "type": "array",
           "items": {
            "$ref": "#/components/schemas/Tweet"
           }
          },
          "has_next_page": {
           "type": "boolean"
          },
          "next_cursor": {
           "type": "string"
          },
          "status": {
           "type": "string",
           "enum": [
            "success",
            "error"
           ]
          },
          "msg": {
           "type": "string"
          }
         }
        }
       }
      }
     },
     "400": {
      "description": "Invalid parameters (charged), or API key placed in the URL (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "401": {
      "description": "Missing or invalid API key (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "402": {
      "description": "Insufficient balance (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "403": {
      "description": "Account disabled (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "405": {
      "description": "Only GET is supported (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "404": {
      "description": "Unknown endpoint (charged), or the requested item could not be found (not charged). Note: many endpoints report a missing user/tweet as HTTP 200 with `\"status\":\"error\"` instead; those are charged.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "429": {
      "description": "Rate limit exceeded (not charged). Retry after the time in the `Retry-After` header.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "503": {
      "description": "Temporary service problem, or the endpoint is temporarily unavailable (not charged). Retry with exponential backoff.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     }
    }
   }
  },
  "/twitter/community/get_tweets_from_all_community": {
   "get": {
    "operationId": "twitter_community_get_tweets_from_all_community",
    "tags": [
     "Communities"
    ],
    "summary": "Search tweets across communities",
    "description": "Search tweets posted in any community. Paginated: use `cursor` / `next_cursor`.",
    "parameters": [
     {
      "name": "query",
      "in": "query",
      "required": true,
      "schema": {
       "type": "string",
       "format": "string"
      },
      "description": "Search query.",
      "example": "AI"
     },
     {
      "name": "queryType",
      "in": "query",
      "required": true,
      "schema": {
       "type": "string",
       "enum": [
        "Latest",
        "Top"
       ],
       "default": "Latest"
      },
      "description": "`Latest` or `Top`.",
      "example": "Latest"
     },
     {
      "name": "cursor",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string",
       "format": "string"
      },
      "description": "Pagination cursor. Leave empty for the first page, then pass `next_cursor` from the previous response."
     }
    ],
    "x-price-per-request": "$0.0006",
    "responses": {
     "200": {
      "description": "Charged. Check `status`: `success` means data was returned; `error` (e.g. user not found) is also HTTP 200.",
      "content": {
       "application/json": {
        "schema": {
         "type": "object",
         "properties": {
          "tweets": {
           "type": "array",
           "items": {
            "$ref": "#/components/schemas/Tweet"
           }
          },
          "has_next_page": {
           "type": "boolean"
          },
          "next_cursor": {
           "type": "string"
          }
         },
         "required": [
          "tweets",
          "has_next_page",
          "next_cursor"
         ]
        }
       }
      }
     },
     "400": {
      "description": "Invalid parameters (charged), or API key placed in the URL (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "401": {
      "description": "Missing or invalid API key (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "402": {
      "description": "Insufficient balance (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "403": {
      "description": "Account disabled (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "405": {
      "description": "Only GET is supported (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "404": {
      "description": "Unknown endpoint (charged), or the requested item could not be found (not charged). Note: many endpoints report a missing user/tweet as HTTP 200 with `\"status\":\"error\"` instead; those are charged.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "429": {
      "description": "Rate limit exceeded (not charged). Retry after the time in the `Retry-After` header.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "503": {
      "description": "Temporary service problem, or the endpoint is temporarily unavailable (not charged). Retry with exponential backoff.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     }
    }
   }
  },
  "/twitter/trends": {
   "get": {
    "operationId": "twitter_trends",
    "tags": [
     "Trends"
    ],
    "summary": "Get trends",
    "description": "Trending topics for a location.",
    "parameters": [
     {
      "name": "woeid",
      "in": "query",
      "required": true,
      "schema": {
       "type": "integer",
       "format": "int64"
      },
      "description": "Location WOEID, e.g. `1` for worldwide, `23424977` for the United States.",
      "example": 1
     },
     {
      "name": "count",
      "in": "query",
      "required": false,
      "schema": {
       "type": "integer",
       "format": "int64"
      },
      "description": "Number of trends to return."
     }
    ],
    "x-price-per-request": "$0.0006",
    "responses": {
     "200": {
      "description": "Charged. Check `status`: `success` means data was returned; `error` (e.g. user not found) is also HTTP 200.",
      "content": {
       "application/json": {
        "schema": {
         "type": "object",
         "properties": {
          "trends": {
           "type": "array",
           "items": {
            "type": "object",
            "properties": {
             "trend": {
              "type": "object",
              "properties": {
               "name": {
                "type": "string"
               },
               "target": {
                "type": "object",
                "properties": {
                 "query": {
                  "type": "string"
                 }
                }
               },
               "rank": {
                "type": "integer"
               }
              }
             }
            }
           }
          },
          "status": {
           "type": "string",
           "enum": [
            "success",
            "error"
           ]
          },
          "msg": {
           "type": "string"
          },
          "metadata": {
           "type": "object",
           "properties": {
            "timestamp": {
             "type": "integer"
            },
            "refresh_interval_millis": {
             "type": "integer"
            },
            "woeid": {
             "type": "object"
            },
            "context_mode": {
             "type": "string"
            }
           }
          }
         }
        }
       }
      }
     },
     "400": {
      "description": "Invalid parameters (charged), or API key placed in the URL (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "401": {
      "description": "Missing or invalid API key (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "402": {
      "description": "Insufficient balance (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "403": {
      "description": "Account disabled (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "405": {
      "description": "Only GET is supported (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "404": {
      "description": "Unknown endpoint (charged), or the requested item could not be found (not charged). Note: many endpoints report a missing user/tweet as HTTP 200 with `\"status\":\"error\"` instead; those are charged.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "429": {
      "description": "Rate limit exceeded (not charged). Retry after the time in the `Retry-After` header.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "503": {
      "description": "Temporary service problem, or the endpoint is temporarily unavailable (not charged). Retry with exponential backoff.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     }
    }
   }
  },
  "/twitter/user_login_v2": {
   "post": {
    "operationId": "twitter_user_login_v2",
    "tags": [
     "Account actions"
    ],
    "summary": "Log in to an X account",
    "description": "Logs in to an X account and returns `login_cookies`, which every other account action needs. Log in once and reuse `login_cookies` (and the same proxy) until it stops working; logging in repeatedly can get the account locked. Takes 10-25 seconds. Providing `totp_secret` (two-factor key) is strongly recommended, otherwise the credential may not be allowed to post. At most 10 logins per 10 minutes per API account and 3 per 10 minutes per X user name.",
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object",
        "required": [
         "user_name",
         "email",
         "password",
         "proxy"
        ],
        "properties": {
         "user_name": {
          "type": "string",
          "description": "X screen name of the account, without the @."
         },
         "email": {
          "type": "string",
          "description": "Email address of the X account."
         },
         "password": {
          "type": "string",
          "description": "Password of the X account. Used for this login only; we do not store it."
         },
         "totp_secret": {
          "type": "string",
          "description": "Two-factor authentication secret (the key behind the authenticator app code). Strongly recommended."
         },
         "proxy": {
          "type": "string",
          "description": "Proxy for this X account, in the form `scheme://user:pass@host:port` where scheme is `http`, `https`, `socks5` or `socks4`. Use the same proxy for every request of the account. Must be a public address; a residential proxy is recommended."
         }
        }
       }
      }
     }
    },
    "x-price-per-request": "$0.1",
    "responses": {
     "200": {
      "description": "Charged. `\"status\": \"success\"` means the action was done; `\"status\": \"error\"` means X rejected it and `message` says why.",
      "content": {
       "application/json": {
        "schema": {
         "type": "object",
         "properties": {
          "login_cookies": {
           "type": "string"
          },
          "status": {
           "type": "string"
          },
          "message": {
           "type": "string"
          }
         }
        }
       }
      }
     },
     "400": {
      "description": "Missing or invalid fields (not charged). The message names the field; your values are never echoed back.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "401": {
      "description": "Missing or invalid API key (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "402": {
      "description": "Insufficient balance (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "405": {
      "description": "Wrong HTTP method (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "413": {
      "description": "Request body too large (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "429": {
      "description": "Rate limit exceeded, including the per-X-account and login limits (not charged). Retry after the time in the `Retry-After` header.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "503": {
      "description": "Temporary service problem (not charged). If it says the request timed out, the action may already have been applied on X: check before retrying.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     }
    }
   }
  },
  "/twitter/create_tweet_v2": {
   "post": {
    "operationId": "twitter_create_tweet_v2",
    "tags": [
     "Account actions"
    ],
    "summary": "Post a tweet or reply",
    "description": "Posts a tweet as the logged-in account. Set `reply_to_tweet_id` to reply. Attach images or videos with `media_ids` from *Upload media*. At most 5 per minute per X account.",
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object",
        "required": [
         "login_cookies",
         "tweet_text",
         "proxy"
        ],
        "properties": {
         "login_cookies": {
          "type": "string",
          "description": "The `login_cookies` value returned by *Log in to an X account*. Send the same value with every action for that account."
         },
         "tweet_text": {
          "type": "string",
          "description": "Text of the tweet."
         },
         "reply_to_tweet_id": {
          "type": "string",
          "description": "Numeric ID of the tweet to reply to."
         },
         "attachment_url": {
          "type": "string",
          "description": "URL of a tweet to quote, or another link to attach."
         },
         "community_id": {
          "type": "string",
          "description": "Numeric ID of a community to post in."
         },
         "is_note_tweet": {
          "type": "boolean",
          "description": "Set to `true` for a long post (more than 280 characters, needs X Premium)."
         },
         "media_ids": {
          "type": "array",
          "items": {
           "type": "string"
          },
          "description": "Media IDs returned by *Upload media*."
         },
         "proxy": {
          "type": "string",
          "description": "Proxy for this X account, in the form `scheme://user:pass@host:port` where scheme is `http`, `https`, `socks5` or `socks4`. Use the same proxy for every request of the account. Must be a public address; a residential proxy is recommended."
         }
        }
       }
      }
     }
    },
    "x-price-per-request": "$0.0006",
    "responses": {
     "200": {
      "description": "Charged. `\"status\": \"success\"` means the action was done; `\"status\": \"error\"` means X rejected it and `message` says why.",
      "content": {
       "application/json": {
        "schema": {
         "type": "object",
         "properties": {
          "tweet_id": {
           "type": "string"
          },
          "status": {
           "type": "string"
          },
          "message": {
           "type": "string"
          }
         }
        }
       }
      }
     },
     "400": {
      "description": "Missing or invalid fields (not charged). The message names the field; your values are never echoed back.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "401": {
      "description": "Missing or invalid API key (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "402": {
      "description": "Insufficient balance (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "405": {
      "description": "Wrong HTTP method (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "413": {
      "description": "Request body too large (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "429": {
      "description": "Rate limit exceeded, including the per-X-account and login limits (not charged). Retry after the time in the `Retry-After` header.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "503": {
      "description": "Temporary service problem (not charged). If it says the request timed out, the action may already have been applied on X: check before retrying.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     }
    }
   }
  },
  "/twitter/delete_tweet_v2": {
   "post": {
    "operationId": "twitter_delete_tweet_v2",
    "tags": [
     "Account actions"
    ],
    "summary": "Delete a tweet",
    "description": "Deletes one of the account's own tweets.",
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object",
        "required": [
         "login_cookies",
         "tweet_id",
         "proxy"
        ],
        "properties": {
         "login_cookies": {
          "type": "string",
          "description": "The `login_cookies` value returned by *Log in to an X account*. Send the same value with every action for that account."
         },
         "tweet_id": {
          "type": "string",
          "description": "Numeric tweet ID."
         },
         "proxy": {
          "type": "string",
          "description": "Proxy for this X account, in the form `scheme://user:pass@host:port` where scheme is `http`, `https`, `socks5` or `socks4`. Use the same proxy for every request of the account. Must be a public address; a residential proxy is recommended."
         }
        }
       }
      }
     }
    },
    "x-price-per-request": "$0.0006",
    "responses": {
     "200": {
      "description": "Charged. `\"status\": \"success\"` means the action was done; `\"status\": \"error\"` means X rejected it and `message` says why.",
      "content": {
       "application/json": {
        "schema": {
         "type": "object",
         "properties": {
          "status": {
           "type": "string"
          },
          "message": {
           "type": "string"
          }
         }
        }
       }
      }
     },
     "400": {
      "description": "Missing or invalid fields (not charged). The message names the field; your values are never echoed back.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "401": {
      "description": "Missing or invalid API key (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "402": {
      "description": "Insufficient balance (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "405": {
      "description": "Wrong HTTP method (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "413": {
      "description": "Request body too large (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "429": {
      "description": "Rate limit exceeded, including the per-X-account and login limits (not charged). Retry after the time in the `Retry-After` header.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "503": {
      "description": "Temporary service problem (not charged). If it says the request timed out, the action may already have been applied on X: check before retrying.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     }
    }
   }
  },
  "/twitter/like_tweet_v2": {
   "post": {
    "operationId": "twitter_like_tweet_v2",
    "tags": [
     "Account actions"
    ],
    "summary": "Like a tweet",
    "description": "Likes a tweet. Liking an already-liked tweet returns success.",
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object",
        "required": [
         "login_cookies",
         "tweet_id",
         "proxy"
        ],
        "properties": {
         "login_cookies": {
          "type": "string",
          "description": "The `login_cookies` value returned by *Log in to an X account*. Send the same value with every action for that account."
         },
         "tweet_id": {
          "type": "string",
          "description": "Numeric tweet ID."
         },
         "proxy": {
          "type": "string",
          "description": "Proxy for this X account, in the form `scheme://user:pass@host:port` where scheme is `http`, `https`, `socks5` or `socks4`. Use the same proxy for every request of the account. Must be a public address; a residential proxy is recommended."
         }
        }
       }
      }
     }
    },
    "x-price-per-request": "$0.0006",
    "responses": {
     "200": {
      "description": "Charged. `\"status\": \"success\"` means the action was done; `\"status\": \"error\"` means X rejected it and `message` says why.",
      "content": {
       "application/json": {
        "schema": {
         "type": "object",
         "properties": {
          "status": {
           "type": "string"
          },
          "message": {
           "type": "string"
          }
         }
        }
       }
      }
     },
     "400": {
      "description": "Missing or invalid fields (not charged). The message names the field; your values are never echoed back.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "401": {
      "description": "Missing or invalid API key (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "402": {
      "description": "Insufficient balance (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "405": {
      "description": "Wrong HTTP method (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "413": {
      "description": "Request body too large (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "429": {
      "description": "Rate limit exceeded, including the per-X-account and login limits (not charged). Retry after the time in the `Retry-After` header.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "503": {
      "description": "Temporary service problem (not charged). If it says the request timed out, the action may already have been applied on X: check before retrying.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     }
    }
   }
  },
  "/twitter/unlike_tweet_v2": {
   "post": {
    "operationId": "twitter_unlike_tweet_v2",
    "tags": [
     "Account actions"
    ],
    "summary": "Unlike a tweet",
    "description": "Removes a like.",
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object",
        "required": [
         "login_cookies",
         "tweet_id",
         "proxy"
        ],
        "properties": {
         "login_cookies": {
          "type": "string",
          "description": "The `login_cookies` value returned by *Log in to an X account*. Send the same value with every action for that account."
         },
         "tweet_id": {
          "type": "string",
          "description": "Numeric tweet ID."
         },
         "proxy": {
          "type": "string",
          "description": "Proxy for this X account, in the form `scheme://user:pass@host:port` where scheme is `http`, `https`, `socks5` or `socks4`. Use the same proxy for every request of the account. Must be a public address; a residential proxy is recommended."
         }
        }
       }
      }
     }
    },
    "x-price-per-request": "$0.0006",
    "responses": {
     "200": {
      "description": "Charged. `\"status\": \"success\"` means the action was done; `\"status\": \"error\"` means X rejected it and `message` says why.",
      "content": {
       "application/json": {
        "schema": {
         "type": "object",
         "properties": {
          "status": {
           "type": "string"
          },
          "message": {
           "type": "string"
          }
         }
        }
       }
      }
     },
     "400": {
      "description": "Missing or invalid fields (not charged). The message names the field; your values are never echoed back.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "401": {
      "description": "Missing or invalid API key (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "402": {
      "description": "Insufficient balance (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "405": {
      "description": "Wrong HTTP method (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "413": {
      "description": "Request body too large (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "429": {
      "description": "Rate limit exceeded, including the per-X-account and login limits (not charged). Retry after the time in the `Retry-After` header.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "503": {
      "description": "Temporary service problem (not charged). If it says the request timed out, the action may already have been applied on X: check before retrying.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     }
    }
   }
  },
  "/twitter/retweet_tweet_v2": {
   "post": {
    "operationId": "twitter_retweet_tweet_v2",
    "tags": [
     "Account actions"
    ],
    "summary": "Retweet",
    "description": "Retweets a tweet. Retweeting again returns success.",
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object",
        "required": [
         "login_cookies",
         "tweet_id",
         "proxy"
        ],
        "properties": {
         "login_cookies": {
          "type": "string",
          "description": "The `login_cookies` value returned by *Log in to an X account*. Send the same value with every action for that account."
         },
         "tweet_id": {
          "type": "string",
          "description": "Numeric tweet ID."
         },
         "proxy": {
          "type": "string",
          "description": "Proxy for this X account, in the form `scheme://user:pass@host:port` where scheme is `http`, `https`, `socks5` or `socks4`. Use the same proxy for every request of the account. Must be a public address; a residential proxy is recommended."
         }
        }
       }
      }
     }
    },
    "x-price-per-request": "$0.0006",
    "responses": {
     "200": {
      "description": "Charged. `\"status\": \"success\"` means the action was done; `\"status\": \"error\"` means X rejected it and `message` says why.",
      "content": {
       "application/json": {
        "schema": {
         "type": "object",
         "properties": {
          "status": {
           "type": "string"
          },
          "message": {
           "type": "string"
          }
         }
        }
       }
      }
     },
     "400": {
      "description": "Missing or invalid fields (not charged). The message names the field; your values are never echoed back.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "401": {
      "description": "Missing or invalid API key (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "402": {
      "description": "Insufficient balance (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "405": {
      "description": "Wrong HTTP method (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "413": {
      "description": "Request body too large (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "429": {
      "description": "Rate limit exceeded, including the per-X-account and login limits (not charged). Retry after the time in the `Retry-After` header.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "503": {
      "description": "Temporary service problem (not charged). If it says the request timed out, the action may already have been applied on X: check before retrying.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     }
    }
   }
  },
  "/twitter/unretweet_tweet_v2": {
   "post": {
    "operationId": "twitter_unretweet_tweet_v2",
    "tags": [
     "Account actions"
    ],
    "summary": "Undo retweet",
    "description": "Undoes a retweet. Undoing a tweet that was not retweeted also returns success.",
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object",
        "required": [
         "login_cookies",
         "tweet_id",
         "proxy"
        ],
        "properties": {
         "login_cookies": {
          "type": "string",
          "description": "The `login_cookies` value returned by *Log in to an X account*. Send the same value with every action for that account."
         },
         "tweet_id": {
          "type": "string",
          "description": "Numeric tweet ID."
         },
         "proxy": {
          "type": "string",
          "description": "Proxy for this X account, in the form `scheme://user:pass@host:port` where scheme is `http`, `https`, `socks5` or `socks4`. Use the same proxy for every request of the account. Must be a public address; a residential proxy is recommended."
         }
        }
       }
      }
     }
    },
    "x-price-per-request": "$0.0006",
    "responses": {
     "200": {
      "description": "Charged. `\"status\": \"success\"` means the action was done; `\"status\": \"error\"` means X rejected it and `message` says why.",
      "content": {
       "application/json": {
        "schema": {
         "type": "object",
         "properties": {
          "status": {
           "type": "string"
          },
          "message": {
           "type": "string"
          },
          "x_status": {
           "type": "integer"
          },
          "code": {
           "type": "integer"
          }
         }
        }
       }
      }
     },
     "400": {
      "description": "Missing or invalid fields (not charged). The message names the field; your values are never echoed back.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "401": {
      "description": "Missing or invalid API key (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "402": {
      "description": "Insufficient balance (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "405": {
      "description": "Wrong HTTP method (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "413": {
      "description": "Request body too large (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "429": {
      "description": "Rate limit exceeded, including the per-X-account and login limits (not charged). Retry after the time in the `Retry-After` header.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "503": {
      "description": "Temporary service problem (not charged). If it says the request timed out, the action may already have been applied on X: check before retrying.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     }
    }
   }
  },
  "/twitter/pin_tweet_v2": {
   "post": {
    "operationId": "twitter_pin_tweet_v2",
    "tags": [
     "Account actions"
    ],
    "summary": "Pin a tweet",
    "description": "Pins one of the account's own tweets to its profile. Pinning someone else's tweet returns an error.",
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object",
        "required": [
         "login_cookies",
         "tweet_id",
         "proxy"
        ],
        "properties": {
         "login_cookies": {
          "type": "string",
          "description": "The `login_cookies` value returned by *Log in to an X account*. Send the same value with every action for that account."
         },
         "tweet_id": {
          "type": "string",
          "description": "Numeric tweet ID."
         },
         "proxy": {
          "type": "string",
          "description": "Proxy for this X account, in the form `scheme://user:pass@host:port` where scheme is `http`, `https`, `socks5` or `socks4`. Use the same proxy for every request of the account. Must be a public address; a residential proxy is recommended."
         }
        }
       }
      }
     }
    },
    "x-price-per-request": "$0.0006",
    "responses": {
     "200": {
      "description": "Charged. `\"status\": \"success\"` means the action was done; `\"status\": \"error\"` means X rejected it and `message` says why.",
      "content": {
       "application/json": {
        "schema": {
         "type": "object",
         "properties": {
          "status": {
           "type": "string"
          },
          "message": {
           "type": "string"
          },
          "x_status": {
           "type": "integer"
          },
          "code": {
           "type": "integer"
          }
         }
        }
       }
      }
     },
     "400": {
      "description": "Missing or invalid fields (not charged). The message names the field; your values are never echoed back.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "401": {
      "description": "Missing or invalid API key (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "402": {
      "description": "Insufficient balance (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "405": {
      "description": "Wrong HTTP method (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "413": {
      "description": "Request body too large (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "429": {
      "description": "Rate limit exceeded, including the per-X-account and login limits (not charged). Retry after the time in the `Retry-After` header.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "503": {
      "description": "Temporary service problem (not charged). If it says the request timed out, the action may already have been applied on X: check before retrying.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     }
    }
   }
  },
  "/twitter/unpin_tweet_v2": {
   "post": {
    "operationId": "twitter_unpin_tweet_v2",
    "tags": [
     "Account actions"
    ],
    "summary": "Unpin a tweet",
    "description": "Unpins a tweet from the profile.",
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object",
        "required": [
         "login_cookies",
         "tweet_id",
         "proxy"
        ],
        "properties": {
         "login_cookies": {
          "type": "string",
          "description": "The `login_cookies` value returned by *Log in to an X account*. Send the same value with every action for that account."
         },
         "tweet_id": {
          "type": "string",
          "description": "Numeric tweet ID."
         },
         "proxy": {
          "type": "string",
          "description": "Proxy for this X account, in the form `scheme://user:pass@host:port` where scheme is `http`, `https`, `socks5` or `socks4`. Use the same proxy for every request of the account. Must be a public address; a residential proxy is recommended."
         }
        }
       }
      }
     }
    },
    "x-price-per-request": "$0.0006",
    "responses": {
     "200": {
      "description": "Charged. `\"status\": \"success\"` means the action was done; `\"status\": \"error\"` means X rejected it and `message` says why.",
      "content": {
       "application/json": {
        "schema": {
         "type": "object",
         "properties": {
          "status": {
           "type": "string"
          },
          "message": {
           "type": "string"
          },
          "x_status": {
           "type": "integer"
          },
          "code": {
           "type": "integer"
          }
         }
        }
       }
      }
     },
     "400": {
      "description": "Missing or invalid fields (not charged). The message names the field; your values are never echoed back.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "401": {
      "description": "Missing or invalid API key (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "402": {
      "description": "Insufficient balance (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "405": {
      "description": "Wrong HTTP method (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "413": {
      "description": "Request body too large (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "429": {
      "description": "Rate limit exceeded, including the per-X-account and login limits (not charged). Retry after the time in the `Retry-After` header.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "503": {
      "description": "Temporary service problem (not charged). If it says the request timed out, the action may already have been applied on X: check before retrying.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     }
    }
   }
  },
  "/twitter/bookmark_tweet_v2": {
   "post": {
    "operationId": "twitter_bookmark_tweet_v2",
    "tags": [
     "Account actions"
    ],
    "summary": "Bookmark a tweet",
    "description": "Adds a tweet to the account's bookmarks.",
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object",
        "required": [
         "login_cookies",
         "tweet_id",
         "proxy"
        ],
        "properties": {
         "login_cookies": {
          "type": "string",
          "description": "The `login_cookies` value returned by *Log in to an X account*. Send the same value with every action for that account."
         },
         "tweet_id": {
          "type": "string",
          "description": "Numeric tweet ID."
         },
         "proxy": {
          "type": "string",
          "description": "Proxy for this X account, in the form `scheme://user:pass@host:port` where scheme is `http`, `https`, `socks5` or `socks4`. Use the same proxy for every request of the account. Must be a public address; a residential proxy is recommended."
         }
        }
       }
      }
     }
    },
    "x-price-per-request": "$0.0006",
    "responses": {
     "200": {
      "description": "Charged. `\"status\": \"success\"` means the action was done; `\"status\": \"error\"` means X rejected it and `message` says why.",
      "content": {
       "application/json": {
        "schema": {
         "type": "object",
         "properties": {
          "status": {
           "type": "string"
          },
          "message": {
           "type": "string"
          }
         }
        }
       }
      }
     },
     "400": {
      "description": "Missing or invalid fields (not charged). The message names the field; your values are never echoed back.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "401": {
      "description": "Missing or invalid API key (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "402": {
      "description": "Insufficient balance (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "405": {
      "description": "Wrong HTTP method (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "413": {
      "description": "Request body too large (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "429": {
      "description": "Rate limit exceeded, including the per-X-account and login limits (not charged). Retry after the time in the `Retry-After` header.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "503": {
      "description": "Temporary service problem (not charged). If it says the request timed out, the action may already have been applied on X: check before retrying.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     }
    }
   }
  },
  "/twitter/unbookmark_tweet_v2": {
   "post": {
    "operationId": "twitter_unbookmark_tweet_v2",
    "tags": [
     "Account actions"
    ],
    "summary": "Remove a bookmark",
    "description": "Removes a tweet from the account's bookmarks.",
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object",
        "required": [
         "login_cookies",
         "tweet_id",
         "proxy"
        ],
        "properties": {
         "login_cookies": {
          "type": "string",
          "description": "The `login_cookies` value returned by *Log in to an X account*. Send the same value with every action for that account."
         },
         "tweet_id": {
          "type": "string",
          "description": "Numeric tweet ID."
         },
         "proxy": {
          "type": "string",
          "description": "Proxy for this X account, in the form `scheme://user:pass@host:port` where scheme is `http`, `https`, `socks5` or `socks4`. Use the same proxy for every request of the account. Must be a public address; a residential proxy is recommended."
         }
        }
       }
      }
     }
    },
    "x-price-per-request": "$0.0006",
    "responses": {
     "200": {
      "description": "Charged. `\"status\": \"success\"` means the action was done; `\"status\": \"error\"` means X rejected it and `message` says why.",
      "content": {
       "application/json": {
        "schema": {
         "type": "object",
         "properties": {
          "status": {
           "type": "string"
          },
          "message": {
           "type": "string"
          }
         }
        }
       }
      }
     },
     "400": {
      "description": "Missing or invalid fields (not charged). The message names the field; your values are never echoed back.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "401": {
      "description": "Missing or invalid API key (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "402": {
      "description": "Insufficient balance (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "405": {
      "description": "Wrong HTTP method (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "413": {
      "description": "Request body too large (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "429": {
      "description": "Rate limit exceeded, including the per-X-account and login limits (not charged). Retry after the time in the `Retry-After` header.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "503": {
      "description": "Temporary service problem (not charged). If it says the request timed out, the action may already have been applied on X: check before retrying.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     }
    }
   }
  },
  "/twitter/bookmarks_v2": {
   "post": {
    "operationId": "twitter_bookmarks_v2",
    "tags": [
     "Account actions"
    ],
    "summary": "Get bookmarks",
    "description": "The account's own bookmarks. Paginated: use `cursor` / `next_cursor`.",
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object",
        "required": [
         "login_cookies",
         "proxy"
        ],
        "properties": {
         "login_cookies": {
          "type": "string",
          "description": "The `login_cookies` value returned by *Log in to an X account*. Send the same value with every action for that account."
         },
         "proxy": {
          "type": "string",
          "description": "Proxy for this X account, in the form `scheme://user:pass@host:port` where scheme is `http`, `https`, `socks5` or `socks4`. Use the same proxy for every request of the account. Must be a public address; a residential proxy is recommended."
         },
         "count": {
          "type": "integer",
          "default": 20,
          "description": "Number of items per page."
         },
         "cursor": {
          "type": "string",
          "description": "Pagination cursor. Leave empty for the first page, then pass `next_cursor` from the previous response."
         }
        }
       }
      }
     }
    },
    "x-price-per-request": "$0.0006",
    "responses": {
     "200": {
      "description": "Charged. `\"status\": \"success\"` means the action was done; `\"status\": \"error\"` means X rejected it and `message` says why.",
      "content": {
       "application/json": {
        "schema": {
         "type": "object",
         "properties": {
          "tweets": {
           "type": "array",
           "items": {
            "$ref": "#/components/schemas/Tweet"
           }
          },
          "has_next_page": {
           "type": "boolean"
          },
          "next_cursor": {
           "type": "string"
          }
         },
         "required": [
          "tweets",
          "has_next_page",
          "next_cursor"
         ]
        }
       }
      }
     },
     "400": {
      "description": "Missing or invalid fields (not charged). The message names the field; your values are never echoed back.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "401": {
      "description": "Missing or invalid API key (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "402": {
      "description": "Insufficient balance (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "405": {
      "description": "Wrong HTTP method (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "413": {
      "description": "Request body too large (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "429": {
      "description": "Rate limit exceeded, including the per-X-account and login limits (not charged). Retry after the time in the `Retry-After` header.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "503": {
      "description": "Temporary service problem (not charged). If it says the request timed out, the action may already have been applied on X: check before retrying.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     }
    }
   }
  },
  "/twitter/follow_user_v2": {
   "post": {
    "operationId": "twitter_follow_user_v2",
    "tags": [
     "Account actions"
    ],
    "summary": "Follow a user",
    "description": "Follows a user by numeric user ID (or sends a follow request to a protected account). Following again returns success. At most 15 per minute per X account.",
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object",
        "required": [
         "login_cookies",
         "user_id",
         "proxy"
        ],
        "properties": {
         "login_cookies": {
          "type": "string",
          "description": "The `login_cookies` value returned by *Log in to an X account*. Send the same value with every action for that account."
         },
         "user_id": {
          "type": "string",
          "description": "Numeric user ID of the target user."
         },
         "proxy": {
          "type": "string",
          "description": "Proxy for this X account, in the form `scheme://user:pass@host:port` where scheme is `http`, `https`, `socks5` or `socks4`. Use the same proxy for every request of the account. Must be a public address; a residential proxy is recommended."
         }
        }
       }
      }
     }
    },
    "x-price-per-request": "$0.0006",
    "responses": {
     "200": {
      "description": "Charged. `\"status\": \"success\"` means the action was done; `\"status\": \"error\"` means X rejected it and `message` says why.",
      "content": {
       "application/json": {
        "schema": {
         "type": "object",
         "properties": {
          "status": {
           "type": "string"
          },
          "message": {
           "type": "string"
          }
         }
        }
       }
      }
     },
     "400": {
      "description": "Missing or invalid fields (not charged). The message names the field; your values are never echoed back.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "401": {
      "description": "Missing or invalid API key (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "402": {
      "description": "Insufficient balance (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "405": {
      "description": "Wrong HTTP method (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "413": {
      "description": "Request body too large (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "429": {
      "description": "Rate limit exceeded, including the per-X-account and login limits (not charged). Retry after the time in the `Retry-After` header.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "503": {
      "description": "Temporary service problem (not charged). If it says the request timed out, the action may already have been applied on X: check before retrying.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     }
    }
   }
  },
  "/twitter/unfollow_user_v2": {
   "post": {
    "operationId": "twitter_unfollow_user_v2",
    "tags": [
     "Account actions"
    ],
    "summary": "Unfollow a user",
    "description": "Unfollows a user by numeric user ID. At most 15 per minute per X account.",
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object",
        "required": [
         "login_cookies",
         "user_id",
         "proxy"
        ],
        "properties": {
         "login_cookies": {
          "type": "string",
          "description": "The `login_cookies` value returned by *Log in to an X account*. Send the same value with every action for that account."
         },
         "user_id": {
          "type": "string",
          "description": "Numeric user ID of the target user."
         },
         "proxy": {
          "type": "string",
          "description": "Proxy for this X account, in the form `scheme://user:pass@host:port` where scheme is `http`, `https`, `socks5` or `socks4`. Use the same proxy for every request of the account. Must be a public address; a residential proxy is recommended."
         }
        }
       }
      }
     }
    },
    "x-price-per-request": "$0.0006",
    "responses": {
     "200": {
      "description": "Charged. `\"status\": \"success\"` means the action was done; `\"status\": \"error\"` means X rejected it and `message` says why.",
      "content": {
       "application/json": {
        "schema": {
         "type": "object",
         "properties": {
          "status": {
           "type": "string"
          },
          "message": {
           "type": "string"
          }
         }
        }
       }
      }
     },
     "400": {
      "description": "Missing or invalid fields (not charged). The message names the field; your values are never echoed back.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "401": {
      "description": "Missing or invalid API key (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "402": {
      "description": "Insufficient balance (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "405": {
      "description": "Wrong HTTP method (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "413": {
      "description": "Request body too large (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "429": {
      "description": "Rate limit exceeded, including the per-X-account and login limits (not charged). Retry after the time in the `Retry-After` header.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "503": {
      "description": "Temporary service problem (not charged). If it says the request timed out, the action may already have been applied on X: check before retrying.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     }
    }
   }
  },
  "/twitter/mute_user_v2": {
   "post": {
    "operationId": "twitter_mute_user_v2",
    "tags": [
     "Account actions"
    ],
    "summary": "Mute a user",
    "description": "Mutes a user by numeric user ID.",
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object",
        "required": [
         "login_cookies",
         "user_id",
         "proxy"
        ],
        "properties": {
         "login_cookies": {
          "type": "string",
          "description": "The `login_cookies` value returned by *Log in to an X account*. Send the same value with every action for that account."
         },
         "user_id": {
          "type": "string",
          "description": "Numeric user ID of the target user."
         },
         "proxy": {
          "type": "string",
          "description": "Proxy for this X account, in the form `scheme://user:pass@host:port` where scheme is `http`, `https`, `socks5` or `socks4`. Use the same proxy for every request of the account. Must be a public address; a residential proxy is recommended."
         }
        }
       }
      }
     }
    },
    "x-price-per-request": "$0.0006",
    "responses": {
     "200": {
      "description": "Charged. `\"status\": \"success\"` means the action was done; `\"status\": \"error\"` means X rejected it and `message` says why.",
      "content": {
       "application/json": {
        "schema": {
         "type": "object",
         "properties": {
          "status": {
           "type": "string"
          },
          "message": {
           "type": "string"
          },
          "x_status": {
           "type": "integer"
          },
          "code": {
           "type": "integer"
          }
         }
        }
       }
      }
     },
     "400": {
      "description": "Missing or invalid fields (not charged). The message names the field; your values are never echoed back.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "401": {
      "description": "Missing or invalid API key (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "402": {
      "description": "Insufficient balance (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "405": {
      "description": "Wrong HTTP method (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "413": {
      "description": "Request body too large (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "429": {
      "description": "Rate limit exceeded, including the per-X-account and login limits (not charged). Retry after the time in the `Retry-After` header.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "503": {
      "description": "Temporary service problem (not charged). If it says the request timed out, the action may already have been applied on X: check before retrying.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     }
    }
   }
  },
  "/twitter/unmute_user_v2": {
   "post": {
    "operationId": "twitter_unmute_user_v2",
    "tags": [
     "Account actions"
    ],
    "summary": "Unmute a user",
    "description": "Unmutes a user.",
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object",
        "required": [
         "login_cookies",
         "user_id",
         "proxy"
        ],
        "properties": {
         "login_cookies": {
          "type": "string",
          "description": "The `login_cookies` value returned by *Log in to an X account*. Send the same value with every action for that account."
         },
         "user_id": {
          "type": "string",
          "description": "Numeric user ID of the target user."
         },
         "proxy": {
          "type": "string",
          "description": "Proxy for this X account, in the form `scheme://user:pass@host:port` where scheme is `http`, `https`, `socks5` or `socks4`. Use the same proxy for every request of the account. Must be a public address; a residential proxy is recommended."
         }
        }
       }
      }
     }
    },
    "x-price-per-request": "$0.0006",
    "responses": {
     "200": {
      "description": "Charged. `\"status\": \"success\"` means the action was done; `\"status\": \"error\"` means X rejected it and `message` says why.",
      "content": {
       "application/json": {
        "schema": {
         "type": "object",
         "properties": {
          "status": {
           "type": "string"
          },
          "message": {
           "type": "string"
          },
          "x_status": {
           "type": "integer"
          },
          "code": {
           "type": "integer"
          }
         }
        }
       }
      }
     },
     "400": {
      "description": "Missing or invalid fields (not charged). The message names the field; your values are never echoed back.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "401": {
      "description": "Missing or invalid API key (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "402": {
      "description": "Insufficient balance (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "405": {
      "description": "Wrong HTTP method (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "413": {
      "description": "Request body too large (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "429": {
      "description": "Rate limit exceeded, including the per-X-account and login limits (not charged). Retry after the time in the `Retry-After` header.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "503": {
      "description": "Temporary service problem (not charged). If it says the request timed out, the action may already have been applied on X: check before retrying.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     }
    }
   }
  },
  "/twitter/block_user_v2": {
   "post": {
    "operationId": "twitter_block_user_v2",
    "tags": [
     "Account actions"
    ],
    "summary": "Block a user",
    "description": "Blocks a user by numeric user ID. Blocking also removes follows in both directions; unblocking does not restore them.",
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object",
        "required": [
         "login_cookies",
         "user_id",
         "proxy"
        ],
        "properties": {
         "login_cookies": {
          "type": "string",
          "description": "The `login_cookies` value returned by *Log in to an X account*. Send the same value with every action for that account."
         },
         "user_id": {
          "type": "string",
          "description": "Numeric user ID of the target user."
         },
         "proxy": {
          "type": "string",
          "description": "Proxy for this X account, in the form `scheme://user:pass@host:port` where scheme is `http`, `https`, `socks5` or `socks4`. Use the same proxy for every request of the account. Must be a public address; a residential proxy is recommended."
         }
        }
       }
      }
     }
    },
    "x-price-per-request": "$0.0006",
    "responses": {
     "200": {
      "description": "Charged. `\"status\": \"success\"` means the action was done; `\"status\": \"error\"` means X rejected it and `message` says why.",
      "content": {
       "application/json": {
        "schema": {
         "type": "object",
         "properties": {
          "status": {
           "type": "string"
          },
          "message": {
           "type": "string"
          },
          "x_status": {
           "type": "integer"
          },
          "code": {
           "type": "integer"
          }
         }
        }
       }
      }
     },
     "400": {
      "description": "Missing or invalid fields (not charged). The message names the field; your values are never echoed back.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "401": {
      "description": "Missing or invalid API key (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "402": {
      "description": "Insufficient balance (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "405": {
      "description": "Wrong HTTP method (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "413": {
      "description": "Request body too large (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "429": {
      "description": "Rate limit exceeded, including the per-X-account and login limits (not charged). Retry after the time in the `Retry-After` header.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "503": {
      "description": "Temporary service problem (not charged). If it says the request timed out, the action may already have been applied on X: check before retrying.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     }
    }
   }
  },
  "/twitter/unblock_user_v2": {
   "post": {
    "operationId": "twitter_unblock_user_v2",
    "tags": [
     "Account actions"
    ],
    "summary": "Unblock a user",
    "description": "Unblocks a user.",
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object",
        "required": [
         "login_cookies",
         "user_id",
         "proxy"
        ],
        "properties": {
         "login_cookies": {
          "type": "string",
          "description": "The `login_cookies` value returned by *Log in to an X account*. Send the same value with every action for that account."
         },
         "user_id": {
          "type": "string",
          "description": "Numeric user ID of the target user."
         },
         "proxy": {
          "type": "string",
          "description": "Proxy for this X account, in the form `scheme://user:pass@host:port` where scheme is `http`, `https`, `socks5` or `socks4`. Use the same proxy for every request of the account. Must be a public address; a residential proxy is recommended."
         }
        }
       }
      }
     }
    },
    "x-price-per-request": "$0.0006",
    "responses": {
     "200": {
      "description": "Charged. `\"status\": \"success\"` means the action was done; `\"status\": \"error\"` means X rejected it and `message` says why.",
      "content": {
       "application/json": {
        "schema": {
         "type": "object",
         "properties": {
          "status": {
           "type": "string"
          },
          "message": {
           "type": "string"
          },
          "x_status": {
           "type": "integer"
          },
          "code": {
           "type": "integer"
          }
         }
        }
       }
      }
     },
     "400": {
      "description": "Missing or invalid fields (not charged). The message names the field; your values are never echoed back.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "401": {
      "description": "Missing or invalid API key (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "402": {
      "description": "Insufficient balance (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "405": {
      "description": "Wrong HTTP method (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "413": {
      "description": "Request body too large (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "429": {
      "description": "Rate limit exceeded, including the per-X-account and login limits (not charged). Retry after the time in the `Retry-After` header.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "503": {
      "description": "Temporary service problem (not charged). If it says the request timed out, the action may already have been applied on X: check before retrying.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     }
    }
   }
  },
  "/twitter/send_dm_to_user": {
   "post": {
    "operationId": "twitter_send_dm_to_user",
    "tags": [
     "Account actions"
    ],
    "summary": "Send a direct message",
    "description": "Sends a direct message to a user who accepts messages from the account. At most 5 per minute per X account.",
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object",
        "required": [
         "login_cookies",
         "user_id",
         "text",
         "proxy"
        ],
        "properties": {
         "login_cookies": {
          "type": "string",
          "description": "The `login_cookies` value returned by *Log in to an X account*. Send the same value with every action for that account."
         },
         "user_id": {
          "type": "string",
          "description": "Numeric user ID of the target user."
         },
         "text": {
          "type": "string",
          "description": "Message text."
         },
         "media_id": {
          "type": "string",
          "description": "Media ID returned by *Upload media*, to attach to the message."
         },
         "proxy": {
          "type": "string",
          "description": "Proxy for this X account, in the form `scheme://user:pass@host:port` where scheme is `http`, `https`, `socks5` or `socks4`. Use the same proxy for every request of the account. Must be a public address; a residential proxy is recommended."
         },
         "reply_to_message_id": {
          "type": "string",
          "description": "ID of the message to reply to."
         }
        }
       }
      }
     }
    },
    "x-price-per-request": "$0.0006",
    "responses": {
     "200": {
      "description": "Charged. `\"status\": \"success\"` means the action was done; `\"status\": \"error\"` means X rejected it and `message` says why.",
      "content": {
       "application/json": {
        "schema": {
         "type": "object",
         "properties": {
          "message_id": {
           "type": "string"
          },
          "status": {
           "type": "string"
          },
          "message": {
           "type": "string"
          }
         }
        }
       }
      }
     },
     "400": {
      "description": "Missing or invalid fields (not charged). The message names the field; your values are never echoed back.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "401": {
      "description": "Missing or invalid API key (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "402": {
      "description": "Insufficient balance (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "405": {
      "description": "Wrong HTTP method (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "413": {
      "description": "Request body too large (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "429": {
      "description": "Rate limit exceeded, including the per-X-account and login limits (not charged). Retry after the time in the `Retry-After` header.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "503": {
      "description": "Temporary service problem (not charged). If it says the request timed out, the action may already have been applied on X: check before retrying.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     }
    }
   }
  },
  "/twitter/upload_media_v2": {
   "post": {
    "operationId": "twitter_upload_media_v2",
    "tags": [
     "Account actions"
    ],
    "summary": "Upload media",
    "description": "Uploads an image or video (`multipart/form-data`, field `file`, at most 100 MB) and returns a `media_id` to use in *Post a tweet or reply*. Large videos can take up to a minute.",
    "requestBody": {
     "required": true,
     "content": {
      "multipart/form-data": {
       "schema": {
        "type": "object",
        "required": [
         "login_cookies",
         "proxy",
         "file"
        ],
        "properties": {
         "file": {
          "type": "string",
          "format": "binary",
          "description": "The file to upload."
         },
         "proxy": {
          "type": "string",
          "description": "Proxy for this X account, in the form `scheme://user:pass@host:port` where scheme is `http`, `https`, `socks5` or `socks4`. Use the same proxy for every request of the account. Must be a public address; a residential proxy is recommended."
         },
         "login_cookies": {
          "type": "string",
          "description": "The `login_cookies` value returned by *Log in to an X account*. Send the same value with every action for that account."
         },
         "is_long_video": {
          "type": "boolean",
          "description": "Set to `true` for videos longer than 140 seconds (needs X Premium)."
         }
        }
       }
      }
     }
    },
    "x-price-per-request": "$0.0006",
    "responses": {
     "200": {
      "description": "Charged. `\"status\": \"success\"` means the action was done; `\"status\": \"error\"` means X rejected it and `message` says why.",
      "content": {
       "application/json": {
        "schema": {
         "type": "object",
         "properties": {
          "media_id": {
           "type": "string"
          },
          "status": {
           "type": "string"
          },
          "message": {
           "type": "string"
          }
         }
        }
       }
      }
     },
     "400": {
      "description": "Missing or invalid fields (not charged). The message names the field; your values are never echoed back.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "401": {
      "description": "Missing or invalid API key (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "402": {
      "description": "Insufficient balance (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "405": {
      "description": "Wrong HTTP method (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "413": {
      "description": "Request body too large (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "429": {
      "description": "Rate limit exceeded, including the per-X-account and login limits (not charged). Retry after the time in the `Retry-After` header.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "503": {
      "description": "Temporary service problem (not charged). If it says the request timed out, the action may already have been applied on X: check before retrying.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     }
    }
   }
  },
  "/twitter/update_profile_v2": {
   "patch": {
    "operationId": "twitter_update_profile_v2",
    "tags": [
     "Account actions"
    ],
    "summary": "Update profile",
    "description": "Updates the account's name, bio, location or website. Only the fields you send are changed.",
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "type": "object",
        "required": [
         "login_cookies",
         "proxy"
        ],
        "properties": {
         "login_cookies": {
          "type": "string",
          "description": "The `login_cookies` value returned by *Log in to an X account*. Send the same value with every action for that account."
         },
         "proxy": {
          "type": "string",
          "description": "Proxy for this X account, in the form `scheme://user:pass@host:port` where scheme is `http`, `https`, `socks5` or `socks4`. Use the same proxy for every request of the account. Must be a public address; a residential proxy is recommended."
         },
         "name": {
          "type": "string",
          "description": "Display name."
         },
         "description": {
          "type": "string",
          "description": "Bio."
         },
         "location": {
          "type": "string",
          "description": "Location text."
         },
         "url": {
          "type": "string",
          "description": "Website URL."
         }
        }
       }
      }
     }
    },
    "x-price-per-request": "$0.0006",
    "responses": {
     "200": {
      "description": "Charged. `\"status\": \"success\"` means the action was done; `\"status\": \"error\"` means X rejected it and `message` says why.",
      "content": {
       "application/json": {
        "schema": {
         "type": "object",
         "properties": {
          "status": {
           "type": "string"
          },
          "message": {
           "type": "string"
          }
         }
        }
       }
      }
     },
     "400": {
      "description": "Missing or invalid fields (not charged). The message names the field; your values are never echoed back.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "401": {
      "description": "Missing or invalid API key (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "402": {
      "description": "Insufficient balance (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "405": {
      "description": "Wrong HTTP method (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "413": {
      "description": "Request body too large (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "429": {
      "description": "Rate limit exceeded, including the per-X-account and login limits (not charged). Retry after the time in the `Retry-After` header.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "503": {
      "description": "Temporary service problem (not charged). If it says the request timed out, the action may already have been applied on X: check before retrying.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     }
    }
   }
  },
  "/twitter/update_avatar_v2": {
   "patch": {
    "operationId": "twitter_update_avatar_v2",
    "tags": [
     "Account actions"
    ],
    "summary": "Update profile photo",
    "description": "Replaces the profile photo (`multipart/form-data`, field `file`, at most 2 MB).",
    "requestBody": {
     "required": true,
     "content": {
      "multipart/form-data": {
       "schema": {
        "type": "object",
        "required": [
         "login_cookies",
         "proxy",
         "file"
        ],
        "properties": {
         "file": {
          "type": "string",
          "format": "binary",
          "description": "The file to upload."
         },
         "proxy": {
          "type": "string",
          "description": "Proxy for this X account, in the form `scheme://user:pass@host:port` where scheme is `http`, `https`, `socks5` or `socks4`. Use the same proxy for every request of the account. Must be a public address; a residential proxy is recommended."
         },
         "login_cookies": {
          "type": "string",
          "description": "The `login_cookies` value returned by *Log in to an X account*. Send the same value with every action for that account."
         }
        }
       }
      }
     }
    },
    "x-price-per-request": "$0.0006",
    "responses": {
     "200": {
      "description": "Charged. `\"status\": \"success\"` means the action was done; `\"status\": \"error\"` means X rejected it and `message` says why.",
      "content": {
       "application/json": {
        "schema": {
         "type": "object",
         "properties": {
          "status": {
           "type": "string"
          },
          "message": {
           "type": "string"
          }
         }
        }
       }
      }
     },
     "400": {
      "description": "Missing or invalid fields (not charged). The message names the field; your values are never echoed back.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "401": {
      "description": "Missing or invalid API key (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "402": {
      "description": "Insufficient balance (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "405": {
      "description": "Wrong HTTP method (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "413": {
      "description": "Request body too large (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "429": {
      "description": "Rate limit exceeded, including the per-X-account and login limits (not charged). Retry after the time in the `Retry-After` header.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "503": {
      "description": "Temporary service problem (not charged). If it says the request timed out, the action may already have been applied on X: check before retrying.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     }
    }
   }
  },
  "/twitter/update_banner_v2": {
   "patch": {
    "operationId": "twitter_update_banner_v2",
    "tags": [
     "Account actions"
    ],
    "summary": "Update header image",
    "description": "Replaces the header image (`multipart/form-data`, field `file`, at most 3 MB).",
    "requestBody": {
     "required": true,
     "content": {
      "multipart/form-data": {
       "schema": {
        "type": "object",
        "required": [
         "login_cookies",
         "proxy",
         "file"
        ],
        "properties": {
         "file": {
          "type": "string",
          "format": "binary",
          "description": "The file to upload."
         },
         "proxy": {
          "type": "string",
          "description": "Proxy for this X account, in the form `scheme://user:pass@host:port` where scheme is `http`, `https`, `socks5` or `socks4`. Use the same proxy for every request of the account. Must be a public address; a residential proxy is recommended."
         },
         "login_cookies": {
          "type": "string",
          "description": "The `login_cookies` value returned by *Log in to an X account*. Send the same value with every action for that account."
         }
        }
       }
      }
     }
    },
    "x-price-per-request": "$0.0006",
    "responses": {
     "200": {
      "description": "Charged. `\"status\": \"success\"` means the action was done; `\"status\": \"error\"` means X rejected it and `message` says why.",
      "content": {
       "application/json": {
        "schema": {
         "type": "object",
         "properties": {
          "status": {
           "type": "string"
          },
          "message": {
           "type": "string"
          }
         }
        }
       }
      }
     },
     "400": {
      "description": "Missing or invalid fields (not charged). The message names the field; your values are never echoed back.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "401": {
      "description": "Missing or invalid API key (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "402": {
      "description": "Insufficient balance (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "405": {
      "description": "Wrong HTTP method (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "413": {
      "description": "Request body too large (not charged).",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "429": {
      "description": "Rate limit exceeded, including the per-X-account and login limits (not charged). Retry after the time in the `Retry-After` header.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "503": {
      "description": "Temporary service problem (not charged). If it says the request timed out, the action may already have been applied on X: check before retrying.",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     }
    }
   }
  }
 },
 "components": {
  "securitySchemes": {
   "ApiKey": {
    "type": "apiKey",
    "in": "header",
    "name": "x-api-key"
   }
  },
  "schemas": {
   "Error": {
    "type": "object",
    "required": [
     "status",
     "msg"
    ],
    "properties": {
     "status": {
      "type": "string",
      "enum": [
       "error"
      ]
     },
     "msg": {
      "type": "string",
      "example": "Invalid API key."
     }
    }
   },
   "Tweet": {
    "type": "object",
    "properties": {
     "type": {
      "type": "string",
      "enum": [
       "tweet"
      ]
     },
     "id": {
      "type": "string"
     },
     "url": {
      "type": "string"
     },
     "text": {
      "type": "string"
     },
     "source": {
      "type": "string"
     },
     "retweetCount": {
      "type": "integer"
     },
     "replyCount": {
      "type": "integer"
     },
     "likeCount": {
      "type": "integer"
     },
     "quoteCount": {
      "type": "integer"
     },
     "viewCount": {
      "type": "integer"
     },
     "createdAt": {
      "type": "string"
     },
     "lang": {
      "type": "string"
     },
     "bookmarkCount": {
      "type": "integer"
     },
     "isReply": {
      "type": "boolean"
     },
     "inReplyToId": {
      "type": "string"
     },
     "conversationId": {
      "type": "string"
     },
     "displayTextRange": {
      "type": "array",
      "items": {
       "type": "integer"
      }
     },
     "inReplyToUserId": {
      "type": "string"
     },
     "inReplyToUsername": {
      "type": "string"
     },
     "author": {
      "$ref": "#/components/schemas/UserInfo"
     },
     "entities": {
      "$ref": "#/components/schemas/TweetEntities"
     },
     "quoted_tweet": {
      "$ref": "#/components/schemas/Tweet"
     },
     "retweeted_tweet": {
      "$ref": "#/components/schemas/Tweet"
     },
     "isLimitedReply": {
      "type": "boolean"
     }
    }
   },
   "TweetEntities": {
    "type": "object",
    "properties": {
     "hashtags": {
      "type": "array",
      "items": {
       "type": "object",
       "properties": {
        "indices": {
         "type": "array",
         "items": {
          "type": "integer"
         }
        },
        "text": {
         "type": "string"
        }
       }
      }
     },
     "urls": {
      "type": "array",
      "items": {
       "type": "object",
       "properties": {
        "display_url": {
         "type": "string"
        },
        "expanded_url": {
         "type": "string"
        },
        "indices": {
         "type": "array",
         "items": {
          "type": "integer"
         }
        },
        "url": {
         "type": "string"
        }
       }
      }
     },
     "user_mentions": {
      "type": "array",
      "items": {
       "type": "object",
       "properties": {
        "id_str": {
         "type": "string"
        },
        "name": {
         "type": "string"
        },
        "screen_name": {
         "type": "string"
        }
       }
      }
     }
    }
   },
   "UserAbout": {
    "type": "object",
    "properties": {
     "id": {
      "type": "string"
     },
     "name": {
      "type": "string"
     },
     "userName": {
      "type": "string"
     },
     "createdAt": {
      "type": "string"
     },
     "isBlueVerified": {
      "type": "boolean"
     },
     "protected": {
      "type": "boolean"
     },
     "affiliates_highlighted_label": {
      "type": "object",
      "properties": {
       "label": {
        "type": "object",
        "properties": {
         "badge": {
          "type": "object",
          "properties": {
           "url": {
            "type": "string"
           }
          }
         },
         "description": {
          "type": "string"
         },
         "url": {
          "type": "object",
          "properties": {
           "url": {
            "type": "string"
           },
           "urlType": {
            "type": "string"
           }
          }
         },
         "userLabelDisplayType": {
          "type": "string"
         },
         "userLabelType": {
          "type": "string"
         }
        }
       }
      }
     },
     "about_profile": {
      "type": "object",
      "properties": {
       "account_based_in": {
        "type": "string"
       },
       "location_accurate": {
        "type": "boolean"
       },
       "learn_more_url": {
        "type": "string"
       },
       "affiliate_username": {
        "type": "string"
       },
       "source": {
        "type": "string"
       },
       "username_changes": {
        "type": "object",
        "properties": {
         "count": {
          "type": "string"
         }
        }
       }
      }
     },
     "identity_profile_labels_highlighted_label": {
      "type": "object",
      "properties": {
       "label": {
        "type": "object",
        "properties": {
         "description": {
          "type": "string"
         },
         "badge": {
          "type": "object",
          "properties": {
           "url": {
            "type": "string"
           }
          }
         },
         "url": {
          "type": "object",
          "properties": {
           "url": {
            "type": "string"
           },
           "urlType": {
            "type": "string"
           }
          }
         },
         "userLabelDisplayType": {
          "type": "string"
         },
         "userLabelType": {
          "type": "string"
         }
        }
       }
      }
     }
    }
   },
   "UserInfo": {
    "type": "object",
    "properties": {
     "type": {
      "type": "string",
      "enum": [
       "user"
      ]
     },
     "userName": {
      "type": "string"
     },
     "url": {
      "type": "string"
     },
     "id": {
      "type": "string"
     },
     "name": {
      "type": "string"
     },
     "isBlueVerified": {
      "type": "boolean"
     },
     "protected": {
      "type": "boolean"
     },
     "verifiedType": {
      "type": "string"
     },
     "profilePicture": {
      "type": "string"
     },
     "coverPicture": {
      "type": "string"
     },
     "description": {
      "type": "string"
     },
     "location": {
      "type": "string"
     },
     "followers": {
      "type": "integer"
     },
     "following": {
      "type": "integer"
     },
     "canDm": {
      "type": "boolean"
     },
     "createdAt": {
      "type": "string"
     },
     "favouritesCount": {
      "type": "integer"
     },
     "hasCustomTimelines": {
      "type": "boolean"
     },
     "isTranslator": {
      "type": "boolean"
     },
     "mediaCount": {
      "type": "integer"
     },
     "statusesCount": {
      "type": "integer"
     },
     "withheldInCountries": {
      "type": "array",
      "items": {
       "type": "string"
      }
     },
     "affiliatesHighlightedLabel": {
      "type": "object"
     },
     "possiblySensitive": {
      "type": "boolean"
     },
     "pinnedTweetIds": {
      "type": "array",
      "items": {
       "type": "string"
      }
     },
     "isAutomated": {
      "type": "boolean"
     },
     "automatedBy": {
      "type": "string"
     },
     "unavailable": {
      "type": "boolean"
     },
     "message": {
      "type": "string"
     },
     "unavailableReason": {
      "type": "string"
     },
     "profile_bio": {
      "type": "object",
      "properties": {
       "description": {
        "type": "string"
       },
       "entities": {
        "type": "object",
        "properties": {
         "description": {
          "type": "object",
          "properties": {
           "urls": {
            "type": "array",
            "items": {
             "type": "object",
             "properties": {
              "display_url": {
               "type": "string"
              },
              "expanded_url": {
               "type": "string"
              },
              "indices": {
               "type": "array",
               "items": {
                "type": "integer"
               }
              },
              "url": {
               "type": "string"
              }
             }
            }
           }
          }
         },
         "url": {
          "type": "object",
          "properties": {
           "urls": {
            "type": "array",
            "items": {
             "type": "object",
             "properties": {
              "display_url": {
               "type": "string"
              },
              "expanded_url": {
               "type": "string"
              },
              "indices": {
               "type": "array",
               "items": {
                "type": "integer"
               }
              },
              "url": {
               "type": "string"
              }
             }
            }
           }
          }
         }
        }
       }
      }
     }
    }
   },
   "UserProfileSnake": {
    "type": "object",
    "properties": {
     "id": {
      "type": "string"
     },
     "name": {
      "type": "string"
     },
     "screen_name": {
      "type": "string"
     },
     "userName": {
      "type": "string"
     },
     "username": {
      "type": "string",
      "nullable": true
     },
     "location": {
      "type": "string"
     },
     "url": {
      "type": "string",
      "nullable": true
     },
     "description": {
      "type": "string"
     },
     "email": {
      "type": "string",
      "nullable": true
     },
     "protected": {
      "type": "boolean"
     },
     "verified": {
      "type": "boolean"
     },
     "isBlueVerified": {
      "type": "boolean"
     },
     "followers_count": {
      "type": "integer"
     },
     "following_count": {
      "type": "integer"
     },
     "friends_count": {
      "type": "integer"
     },
     "favourites_count": {
      "type": "integer"
     },
     "statuses_count": {
      "type": "integer"
     },
     "media_tweets_count": {
      "type": "integer"
     },
     "created_at": {
      "type": "string"
     },
     "profile_banner_url": {
      "type": "string"
     },
     "profile_image_url_https": {
      "type": "string"
     },
     "can_dm": {
      "type": "boolean"
     }
    }
   }
  }
 }
}
