Every API here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for apis
7 MCP tools reach this
find_apisBrowse and filter every API in the catalog.
get_api_artifactsOne API's artifacts, grouped by type.
get_openapiThe primary OpenAPI for this API.
find_similar_apisAPIs that look like this one.
apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
resolveTurn a domain, URL or GitHub org into the provider it belongs to.
find_cohortsEvery scored population of providers in the catalog.
All 92 tools →
Call it yourself
curl for this page
This API
curl "https://apis.io/api/v1/apis/xquik-api-extractions-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no email required.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Xquik Extractions API
version: '1.0'
description: "Xquik is an independent third-party service. Not affiliated with X Corp. \"Twitter\" and \"X\" are trademarks of X Corp. Look up tweets, users, and X trends. Search tweets, check follow relationships, download media, and monitor accounts. 33 paid-read endpoints accept prepaid credits without a subscription. 7 fixed-price lookups also accept direct MPP payments. Write and automation endpoints require an API key or OAuth 2.1 bearer token.\n\n## Xquik SDKs\n\nStainless generates each SDK from this OpenAPI schema. Pick a language:\n\n- TypeScript / Node.js: `npm i x-twitter-scraper` -\n [Xquik-dev/x-twitter-scraper-typescript](https://github.com/Xquik-dev/x-twitter-scraper-typescript)\n\n- Python: `pip install x-twitter-scraper` -\n [Xquik-dev/x-twitter-scraper-python](https://github.com/Xquik-dev/x-twitter-scraper-python)\n\n- Go: `go get github.com/Xquik-dev/x-twitter-scraper-go` -\n [Xquik-dev/x-twitter-scraper-go](https://github.com/Xquik-dev/x-twitter-scraper-go)\n\n- Ruby: `gem install x-twitter-scraper` -\n [Xquik-dev/x-twitter-scraper-ruby](https://github.com/Xquik-dev/x-twitter-scraper-ruby)\n\n- Java (source build; Maven Central pending) -\n [Xquik-dev/x-twitter-scraper-java](https://github.com/Xquik-dev/x-twitter-scraper-java)\n\n- Kotlin (source build; Maven Central pending) -\n [Xquik-dev/x-twitter-scraper-kotlin](https://github.com/Xquik-dev/x-twitter-scraper-kotlin)\n\n- C# / .NET: `dotnet add package XTwitterScraper` -\n [Xquik-dev/x-twitter-scraper-csharp](https://github.com/Xquik-dev/x-twitter-scraper-csharp)\n\n- PHP: `composer require xquik/x-twitter-scraper` -\n [Xquik-dev/x-twitter-scraper-php](https://github.com/Xquik-dev/x-twitter-scraper-php)\n\n- CLI: `go install github.com/Xquik-dev/x-twitter-scraper-cli/cmd/x-twitter-scraper@latest` -\n [Xquik-dev/x-twitter-scraper-cli](https://github.com/Xquik-dev/x-twitter-scraper-cli)\n\n- Terraform Provider (Terraform Registry) -\n [Xquik-dev/terraform-provider-x-twitter-scraper](https://github.com/Xquik-dev/terraform-provider-x-twitter-scraper)\n\n\nOpenClaw plugin: [Xquik-dev/tweetclaw](https://github.com/Xquik-dev/tweetclaw) (`openclaw plugins install clawhub:@xquik/tweetclaw`)."
x-guidance: '## Common tasks
**Find a tweet** - GET /x/tweets/{id} with a numeric tweet ID. Returns full tweet data: text, author, metrics (likes, retweets, replies, views), media URLs, and creation timestamp. Cost: $0.00015 per lookup.
**Search tweets** - GET /x/tweets/search?q={query}&limit={n}. Supports X search operators, structured filters like fromUser, mediaType, minFaves, hashtags, and verifiedOnly, plus exact lookup for a pasted Tweet ID or X status URL. Plain from:user date windows are optimized for timeline completeness. Returns up to 200 tweets per page with cursor-based pagination. Cost: $0.00015 per tweet returned.
**Find a user** - GET /x/users/{id} where {id} is a numeric user ID or @username. Returns profile data: name, bio, follower/following counts, verification status, join date. Cost: $0.00015 per lookup.
**Check if A follows B** - GET /x/followers/check?source={a}&target={b} where source and target are usernames, @usernames, or X or Twitter profile URLs. Cost: $0.00075.
**Get trending topics** - GET /trends?woeid={region}&count={n}. WOEID 1 = worldwide, 23424977 = US, 23424975 = UK, 23424969 = Turkey. Cost: $0.00045.
**Download media** - POST /x/media/download with {"tweetIds": ["123", "456"]} body. Returns download URLs for images and videos. Cost: 1 credit per fresh tweet processed with media; cached repeat downloads are free.
**Read an article** - GET /x/articles/{tweetId} for long-form X Articles. Returns full article HTML, cover image, and metadata. Cost: $0.00075.
## Pagination
Default v1 responses keep their existing pagination fields for compatibility. Platform list endpoints return `hasMore` and `nextCursor`; X data endpoints return `has_next_page` and `next_cursor`. Send `xquik-api-contract: 2026-04-29` to receive the unified best-practice fields `has_more` and `next_cursor`. Pass the cursor back as `?cursor={cursor}`; legacy `?after={cursor}` still works. Dynamic-priced endpoints charge per item returned, not per request.
## Authentication
Eligible paid read endpoints accept accountless prepaid credit wallets. Fixed-price lookups also accept direct MPP payments. Media downloads, write endpoints, and automation features require authentication. Send an Xquik API key through `x-api-key`, `Xquik-Api-Key`, or `Authorization: Bearer xq_...`. Send an OAuth 2.1 access token through `Authorization: Bearer`.
## Best-Practice Response Contract
v1 keeps its original response contract by default so existing integrations do not break. Send `xquik-api-contract: 2026-04-29` to opt in to the best-practice contract: snake_case response fields, Unix timestamps in seconds, structured error objects, `has_more` and `next_cursor` pagination fields, `object` resource identifiers, and prefixed IDs where available. Dependency failures that returned 502 in default v1 return 424 in the opt-in contract. Future major API versions should make this contract the default.'
contact:
name: Xquik
url: https://xquik.com
email: support@xquik.com
servers:
- url: https://xquik.com
security:
- apiKey: []
- oauthBearer: []
tags:
- name: Extractions
description: Bulk data extraction (23 tool types)
paths:
/api/v1/extractions:
get:
operationId: listExtractions
summary: List extraction jobs
tags:
- Extractions
security:
- apiKey: []
- oauthBearer: []
parameters:
- $ref: '#/components/parameters/Limit'
- $ref: '#/components/parameters/After'
- name: toolType
in: query
description: Filter by extraction tool type
schema:
$ref: '#/components/schemas/ExtractionToolType'
- name: status
in: query
description: Filter by job status
schema:
type: string
enum:
- running
- completed
- failed
responses:
'200':
description: Extraction job list
content:
application/json:
schema:
type: object
required:
- extractions
- hasMore
properties:
extractions:
type: array
items:
$ref: '#/components/schemas/ExtractionJob'
example: []
hasMore:
type: boolean
example: false
nextCursor:
type: string
example: abc123
example:
extractions: []
hasMore: false
'401':
$ref: '#/components/responses/Unauthenticated'
'429':
$ref: '#/components/responses/RateLimitExceeded'
default:
content:
application/json:
example:
error: internal_error
message: Unexpected error. Try again.
schema:
$ref: '#/components/schemas/Error'
description: Unexpected error.
description: List extraction jobs.
post:
operationId: createExtraction
summary: Run extraction
tags:
- Extractions
security:
- apiKey: []
- oauthBearer: []
parameters:
- name: dry_run
in: query
description: Return a cost estimate without creating or running an extraction.
schema:
type: boolean
default: false
example: true
requestBody:
required: true
description: Tool type and target identifier (tweet, user, community, list, or search query).
content:
application/json:
schema:
type: object
required:
- toolType
properties:
toolType:
$ref: '#/components/schemas/ExtractionToolType'
example: follower_explorer
targetTweetId:
type: string
example: '1234567890'
targetUsername:
type: string
example: elonmusk
targetCommunityId:
type: string
description: Required for community_post_extractor & community_search.
example: '1500000000000000000'
targetListId:
type: string
description: Required for list_follower_explorer, list_member_extractor & list_post_extractor.
example: '1234567890'
targetSpaceId:
type: string
description: Required for space_explorer.
example: 1vOGwMdBqpwGB
resultsLimit:
type: integer
description: Maximum number of results to extract. When set, the extraction stops after reaching this limit.
example: 1000
searchQuery:
type: string
description: Required for tweet_search_extractor & community_search.
example: AI trends 2025
fromUser:
type: string
description: Filter by author username (tweet_search_extractor)
example: nasa
toUser:
type: string
description: Filter replies sent to a username (tweet_search_extractor)
example: openai
mentioning:
type: string
description: Filter tweets mentioning a username (tweet_search_extractor)
example: example_user
language:
type: string
description: Language code filter (tweet_search_extractor)
example: en
sinceDate:
type: string
format: date
description: Start date YYYY-MM-DD (tweet_search_extractor)
example: '2025-01-01'
untilDate:
type: string
format: date
description: End date YYYY-MM-DD (tweet_search_extractor)
example: '2025-12-31'
mediaType:
type: string
enum:
- images
- videos
- gifs
- media
- links
- none
description: Media type filter (tweet_search_extractor)
example: images
minFaves:
type: integer
minimum: 0
description: Minimum likes threshold (tweet_search_extractor)
example: 10
minRetweets:
type: integer
minimum: 0
description: Minimum retweets threshold (tweet_search_extractor)
example: 5
minReplies:
type: integer
minimum: 0
description: Minimum replies threshold (tweet_search_extractor)
example: 3
minQuotes:
type: integer
minimum: 0
description: Minimum quote count threshold (tweet_search_extractor)
example: 2
verifiedOnly:
type: boolean
description: Only verified authors (tweet_search_extractor)
example: false
replies:
type: string
enum:
- include
- exclude
- only
description: Reply mode (tweet_search_extractor)
example: include
retweets:
type: string
enum:
- include
- exclude
- only
description: Retweet mode (tweet_search_extractor)
example: exclude
quotes:
type: string
enum:
- include
- exclude
- only
description: Quote mode (tweet_search_extractor)
example: include
exactPhrase:
type: string
description: Exact phrase to match (tweet_search_extractor)
example: artificial intelligence
excludeWords:
type: string
description: Words or quoted phrases to exclude. Separate with spaces, commas, or lines. (tweet_search_extractor)
example: spam
anyWords:
type: string
description: Words or quoted phrases where any one can match. Separate with spaces, commas, or lines. (tweet_search_extractor)
example: ChatGPT AI model
hashtags:
type: string
description: Hashtags separated by spaces, commas, or lines. (tweet_search_extractor)
example: '#AI startups'
cashtags:
type: string
description: Cashtags separated by spaces, commas, or lines. (tweet_search_extractor)
example: $TSLA $NVDA
url:
type: string
description: URL substring or domain filter (tweet_search_extractor)
example: example.com
conversationId:
type: string
description: Conversation ID filter (tweet_search_extractor)
example: '1234567890'
inReplyToTweetId:
type: string
description: Only replies to this tweet ID (tweet_search_extractor)
example: '1234567890'
quotesOfTweetId:
type: string
description: Only quotes of this tweet ID (tweet_search_extractor)
example: '1234567890'
retweetsOfTweetId:
type: string
description: Only retweets of this tweet ID (tweet_search_extractor)
example: '1234567890'
listId:
type: string
description: Search within a list ID (tweet_search_extractor)
example: '1234567890'
place:
type: string
description: Search within a place ID (tweet_search_extractor)
example: 96683cc9126741d1
placeCountry:
type: string
description: Search within a country code (tweet_search_extractor)
example: US
pointRadius:
type: string
description: Geo point radius, e.g. -73.99 40.73 25mi (tweet_search_extractor)
example: -73.99 40.73 25mi
boundingBox:
type: string
description: Geo bounding box, e.g. -74.1 40.6 -73.9 40.8 (tweet_search_extractor)
example: -74.1 40.6 -73.9 40.8
advancedQuery:
type: string
description: Raw advanced search query appended as-is (tweet_search_extractor)
example: min_faves:100
example:
toolType: follower_explorer
targetUsername: elonmusk
responses:
'200':
description: Dry-run estimate
content:
application/json:
schema:
type: object
required:
- allowed
- creditsAvailable
- creditsRequired
- estimatedResults
- source
properties:
allowed:
type: boolean
creditsAvailable:
type: string
creditsRequired:
type: string
estimatedResults:
type: integer
resolvedXUserId:
type: string
source:
type: string
example:
allowed: true
creditsAvailable: '10000'
creditsRequired: '1000'
estimatedResults: 1000
source: profile
'202':
description: Extraction started
content:
application/json:
schema:
type: object
required:
- id
- toolType
- status
properties:
id:
type: string
example: a1b2c3d4-e5f6-7890-abcd-ef1234567890
toolType:
$ref: '#/components/schemas/ExtractionToolType'
example: follower_explorer
status:
type: string
const: running
example: running
example:
id: a1b2c3d4-e5f6-7890-abcd-ef1234567890
toolType: follower_explorer
status: running
'400':
$ref: '#/components/responses/InvalidInput'
'401':
$ref: '#/components/responses/Unauthenticated'
'402':
$ref: '#/components/responses/PaymentRequired'
'404':
$ref: '#/components/responses/NotFound'
'424':
$ref: '#/components/responses/XApiError'
'429':
$ref: '#/components/responses/RateLimitExceeded'
'502':
$ref: '#/components/responses/XApiError'
default:
content:
application/json:
example:
error: internal_error
message: Unexpected error. Try again.
schema:
$ref: '#/components/schemas/Error'
description: Unexpected error.
description: Run extraction.
/api/v1/extractions/estimate:
post:
operationId: estimateExtraction
summary: Estimate extraction cost
tags:
- Extractions
security:
- apiKey: []
- oauthBearer: []
requestBody:
required: true
description: Same parameters as a real extraction; returns estimated credit cost without running the job.
content:
application/json:
schema:
type: object
required:
- toolType
properties:
toolType:
$ref: '#/components/schemas/ExtractionToolType'
example: follower_explorer
targetTweetId:
type: string
example: '1234567890'
targetUsername:
type: string
example: elonmusk
targetCommunityId:
type: string
description: Community ID used to price community_post_extractor or community_search.
example: '1500000000000000000'
targetListId:
type: string
description: List ID used to price list_follower_explorer, list_member_extractor, or list_post_extractor.
example: '1234567890'
targetSpaceId:
type: string
description: Space ID used to price space_explorer.
example: 1vOGwMdBqpwGB
resultsLimit:
type: integer
description: Maximum number of results to estimate. When set, the estimate caps projected results to this value.
example: 1000
searchQuery:
type: string
description: Query used to price tweet_search_extractor or community_search.
example: AI trends 2025
fromUser:
type: string
description: Estimate only tweets from this author username (tweet_search_extractor)
example: nasa
toUser:
type: string
description: Estimate replies sent to this username (tweet_search_extractor)
example: openai
mentioning:
type: string
description: Estimate tweets mentioning this username (tweet_search_extractor)
example: example_user
language:
type: string
description: Language code used for estimate filtering (tweet_search_extractor)
example: en
sinceDate:
type: string
format: date
description: Estimate start date in YYYY-MM-DD format (tweet_search_extractor)
example: '2025-01-01'
untilDate:
type: string
format: date
description: Estimate end date in YYYY-MM-DD format (tweet_search_extractor)
example: '2025-12-31'
mediaType:
type: string
enum:
- images
- videos
- gifs
- media
- links
- none
description: Media type used for estimate filtering (tweet_search_extractor)
example: images
minFaves:
type: integer
minimum: 0
description: Minimum likes threshold for estimated results (tweet_search_extractor)
example: 10
minRetweets:
type: integer
minimum: 0
description: Minimum retweets threshold for estimated results (tweet_search_extractor)
example: 5
minReplies:
type: integer
minimum: 0
description: Minimum replies threshold for estimated results (tweet_search_extractor)
example: 3
minQuotes:
type: integer
minimum: 0
description: Minimum quote count threshold for estimated results (tweet_search_extractor)
example: 2
verifiedOnly:
type: boolean
description: Estimate only verified authors (tweet_search_extractor)
example: false
replies:
type: string
enum:
- include
- exclude
- only
description: Reply mode used for estimation (tweet_search_extractor)
example: include
retweets:
type: string
enum:
- include
- exclude
- only
description: Retweet mode used for estimation (tweet_search_extractor)
example: exclude
quotes:
type: string
enum:
- include
- exclude
- only
description: Quote mode used for estimation (tweet_search_extractor)
example: include
exactPhrase:
type: string
description: Exact phrase filter for search estimation
example: artificial intelligence
excludeWords:
type: string
description: Words or quoted phrases excluded from estimated results. Separate with spaces, commas, or lines.
example: spam
anyWords:
type: string
description: Alternative words or quoted phrases for estimated results. Separate with spaces, commas, or lines.
example: ChatGPT AI model
hashtags:
type: string
description: Hashtags applied to the estimate, separated by spaces, commas, or lines.
example: '#AI startups'
cashtags:
type: string
description: Cashtags applied to the estimate, separated by spaces, commas, or lines.
example: $TSLA $NVDA
url:
type: string
description: URL substring or domain filter used for estimation (tweet_search_extractor)
example: example.com
conversationId:
type: string
description: Conversation ID filter used for estimation (tweet_search_extractor)
example: '1234567890'
inReplyToTweetId:
type: string
description: Estimate only replies to this tweet ID (tweet_search_extractor)
example: '1234567890'
quotesOfTweetId:
type: string
description: Estimate only quotes of this tweet ID (tweet_search_extractor)
example: '1234567890'
retweetsOfTweetId:
type: string
description: Estimate only retweets of this tweet ID (tweet_search_extractor)
example: '1234567890'
listId:
type: string
description: Estimate search results within this list ID (tweet_search_extractor)
example: '1234567890'
place:
type: string
description: Estimate search results within this place ID (tweet_search_extractor)
example: 96683cc9126741d1
placeCountry:
type: string
description: Estimate search results within this country code (tweet_search_extractor)
example: US
pointRadius:
type: string
description: Geo point radius used for estimation, e.g. -73.99 40.73 25mi (tweet_search_extractor)
example: -73.99 40.73 25mi
boundingBox:
type: string
description: Geo bounding box used for estimation, e.g. -74.1 40.6 -73.9 40.8 (tweet_search_extractor)
example: -74.1 40.6 -73.9 40.8
advancedQuery:
type: string
description: Raw advanced query string appended to the estimate (tweet_search_extractor)
example: min_faves:100
example:
toolType: follower_explorer
targetUsername: elonmusk
responses:
'200':
description: Extraction estimate
content:
application/json:
schema:
type: object
required:
- estimatedResults
- creditsRequired
- creditsAvailable
- allowed
- source
properties:
estimatedResults:
type: integer
example: 500
creditsRequired:
type: string
example: '500'
creditsAvailable:
type: string
example: '50000'
allowed:
type: boolean
example: true
source:
type: string
enum:
- followers
- following
- paginationCap
- posts
- quoteCount
- replyCount
- resultsLimit
- retweetCount
- unknown
example: replyCount
resolvedXUserId:
type: string
example: '123456'
example:
estimatedResults: 500
creditsRequired: '500'
creditsAvailable: '50000'
allowed: true
source: replyCount
'400':
$ref: '#/components/responses/InvalidInput'
'401':
$ref: '#/components/responses/Unauthenticated'
'402':
$ref: '#/components/responses/PaymentRequired'
'404':
$ref: '#/components/responses/NotFound'
'429':
$ref: '#/components/responses/RateLimitExceeded'
default:
content:
application/json:
example:
error: internal_error
message: Unexpected error. Try again.
schema:
$ref: '#/components/schemas/Error'
description: Unexpected error.
description: Estimate extraction cost.
/api/v1/extractions/{id}:
get:
operationId: getExtraction
summary: Get extraction results
tags:
- Extractions
security:
- apiKey: []
- oauthBearer: []
parameters:
- name: id
in: path
required: true
schema:
type: string
description: Extraction public ID (UUID)
- name: limit
in: query
description: Maximum number of results to return (1-1000, default 100)
schema:
type: integer
minimum: 1
maximum: 1000
default: 100
- $ref: '#/components/parameters/After'
responses:
'200':
description: Extraction job with results
content:
application/json:
schema:
type: object
required:
- job
- results
- hasMore
properties:
job:
type: object
additionalProperties: true
x-stainless-any: true
description: Extraction job metadata - shape varies by tool type (JSON)
x-stainless-terraform-type: string
example:
id: a1b2c3d4-e5f6-7890-abcd-ef1234567890
toolType: follower_explorer
status: completed
results:
type: array
items:
type: object
additionalProperties: true
example: []
hasMore:
type: boolean
example: false
nextCursor:
type: string
example: abc123
example:
job:
id: a1b2c3d4-e5f6-7890-abcd-ef1234567890
toolType: follower_explorer
status: completed
results: []
hasMore: false
'401':
$ref: '#/components/responses/Unauthenticated'
'404':
$ref: '#/components/responses/NotFound'
'429':
$ref: '#/components/responses/RateLimitExceeded'
default:
content:
application/json:
example:
error: internal_error
message: Unexpected error. Try again.
schema:
$ref: '#/components/schemas/Error'
description: Unexpected error.
description: Get extraction results.
/api/v1/extractions/{id}/export:
get:
operationId: exportExtraction
summary: Export extraction results
tags:
- Extractions
security:
- apiKey: []
- oauthBearer: []
parameters:
- name: id
in: path
required: true
schema:
type: string
description: Extraction public ID
- name: format
in: query
required: true
description: Export file format
schema:
type: string
enum:
- csv
- json
- md
# --- truncated at 32 KB (73 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/xquik-api/refs/heads/main/openapi/xquik-api-extractions-api-openapi.yml