x-developer 2.6.7 → 2.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +4 -4
- package/.claude-plugin/plugin.json +2 -27
- package/.codex-plugin/plugin.json +4 -28
- package/README.de.md +505 -0
- package/README.es.md +504 -0
- package/README.fr.md +507 -0
- package/README.it.md +499 -0
- package/README.ja.md +493 -0
- package/README.ko.md +494 -0
- package/README.md +486 -123
- package/README.tr.md +502 -0
- package/README.zh-CN.md +484 -0
- package/assets/logo-400.png +0 -0
- package/commands/post.md +2 -2
- package/commands/search.md +1 -1
- package/commands/trending.md +1 -1
- package/commands/user.md +1 -1
- package/context7.json +5 -11
- package/docker-mcp-registry/xquik/readme.md +1 -0
- package/docker-mcp-registry/xquik/server.yaml +23 -0
- package/docker-mcp-registry/xquik/tools.json +1 -0
- package/glama.json +4 -0
- package/mcp.json +9 -0
- package/openclaw.plugin.json +2 -2
- package/package.json +24 -20
- package/plugin.json +22 -0
- package/registry.json +60 -0
- package/server.json +2 -2
- package/skills/x-twitter-scraper/LICENSE +21 -0
- package/skills/x-twitter-scraper/SKILL.md +175 -457
- package/skills/x-twitter-scraper/metadata.json +19 -9
- package/skills/x-twitter-scraper/references/compare-faq.md +101 -0
- package/skills/x-twitter-scraper/references/extractions.md +65 -290
- package/skills/x-twitter-scraper/references/mcp.md +24 -0
- package/skills/x-twitter-scraper/references/monitors-webhooks.md +167 -0
- package/skills/x-twitter-scraper/references/reads.md +415 -0
- package/skills/x-twitter-scraper/references/writes.md +109 -0
- package/skills/xquik-mcp/SKILL.md +75 -0
- package/skills/{x-twitter-scraper → xquik-mcp}/references/mcp-setup.md +32 -108
- package/skills/xquik-social-research/SKILL.md +61 -74
- package/skills.sh.json +6 -68
- package/start.sh +2 -2
- package/stub-server.mjs +37 -86
- package/task-guides/check-mutuals.md +1 -1
- package/task-guides/clean-followers.md +2 -2
- package/task-guides/export-tweets-csv.md +1 -1
- package/task-guides/extract-followers.md +6 -6
- package/task-guides/find-bangers.md +1 -1
- package/task-guides/find-influencers.md +3 -3
- package/task-guides/find-viral-tweets.md +2 -2
- package/task-guides/follow-unfollow.md +3 -3
- package/task-guides/for-you-feed.md +2 -2
- package/task-guides/going-viral.md +5 -5
- package/task-guides/grow-followers.md +1 -1
- package/task-guides/monitor-accounts.md +4 -4
- package/task-guides/optimize-tweets.md +1 -1
- package/task-guides/post-tweets.md +6 -6
- package/task-guides/run-giveaway.md +4 -4
- package/task-guides/search-tweets.md +2 -2
- package/task-guides/send-dms.md +9 -9
- package/task-guides/top-replies.md +4 -4
- package/task-guides/track-competitors.md +6 -6
- package/task-guides/track-hashtags.md +7 -7
- package/task-guides/track-mentions.md +3 -3
- package/task-guides/trending-news.md +3 -3
- package/task-guides/tweet-analytics.md +2 -2
- package/task-guides/tweet-ideas.md +1 -1
- package/task-guides/tweet-replies.md +5 -5
- package/task-guides/tweet-style.md +2 -2
- package/task-guides/tweet-webhooks.md +3 -3
- package/task-guides/update-x-profile.md +4 -4
- package/task-guides/user-tweets.md +3 -3
- package/task-guides/who-liked.md +2 -2
- package/task-guides/who-quoted.md +2 -2
- package/task-guides/who-retweeted.md +2 -2
- package/task-guides/write-threads.md +4 -4
- package/task-guides/write-tweets.md +4 -4
- package/task-guides/x-articles.md +1 -1
- package/task-guides/x-bookmarks.md +3 -3
- package/task-guides/x-communities.md +2 -2
- package/task-guides/x-lists.md +3 -3
- package/task-guides/x-spaces.md +2 -2
- package/task-guides/x-trends.md +2 -2
- package/x-twitter-scraper.json +10 -0
- package/CHANGELOG.md +0 -94
- package/scripts/check-reproducible.mjs +0 -48
- package/scripts/check-versions.mjs +0 -24
- package/scripts/release-guard/content-policy.mjs +0 -410
- package/scripts/release-guard/context.mjs +0 -61
- package/scripts/release-guard/frontmatter.mjs +0 -151
- package/scripts/release-guard/policy-checks.mjs +0 -134
- package/scripts/release-guard/policy.mjs +0 -226
- package/scripts/release-guard/repository-checks.mjs +0 -256
- package/skills/x-twitter-scraper/references/api-endpoints-api-keys.md +0 -14
- package/skills/x-twitter-scraper/references/api-endpoints-compose.md +0 -33
- package/skills/x-twitter-scraper/references/api-endpoints-credits.md +0 -11
- package/skills/x-twitter-scraper/references/api-endpoints-drafts.md +0 -105
- package/skills/x-twitter-scraper/references/api-endpoints-draws.md +0 -101
- package/skills/x-twitter-scraper/references/api-endpoints-error-codes.md +0 -67
- package/skills/x-twitter-scraper/references/api-endpoints-events.md +0 -50
- package/skills/x-twitter-scraper/references/api-endpoints-extractions.md +0 -113
- package/skills/x-twitter-scraper/references/api-endpoints-monitors.md +0 -111
- package/skills/x-twitter-scraper/references/api-endpoints-radar.md +0 -50
- package/skills/x-twitter-scraper/references/api-endpoints-support.md +0 -53
- package/skills/x-twitter-scraper/references/api-endpoints-trends.md +0 -48
- package/skills/x-twitter-scraper/references/api-endpoints-tweet-style-cache.md +0 -186
- package/skills/x-twitter-scraper/references/api-endpoints-webhooks.md +0 -120
- package/skills/x-twitter-scraper/references/api-endpoints-x-accounts.md +0 -54
- package/skills/x-twitter-scraper/references/api-endpoints-x-api.md +0 -267
- package/skills/x-twitter-scraper/references/api-endpoints-x-media.md +0 -50
- package/skills/x-twitter-scraper/references/api-endpoints-x-write.md +0 -270
- package/skills/x-twitter-scraper/references/api-endpoints.md +0 -30
- package/skills/x-twitter-scraper/references/automate-twitter-giveaways.md +0 -130
- package/skills/x-twitter-scraper/references/best-x-api-alternative.md +0 -198
- package/skills/x-twitter-scraper/references/compare-twitter-apis.md +0 -151
- package/skills/x-twitter-scraper/references/draws.md +0 -57
- package/skills/x-twitter-scraper/references/export-twitter-followers.md +0 -127
- package/skills/x-twitter-scraper/references/extract-x-community-data.md +0 -121
- package/skills/x-twitter-scraper/references/mcp-tools.md +0 -183
- package/skills/x-twitter-scraper/references/monitor-twitter-webhooks.md +0 -121
- package/skills/x-twitter-scraper/references/python-examples.md +0 -201
- package/skills/x-twitter-scraper/references/reliable-twitter-data-api-2026.md +0 -239
- package/skills/x-twitter-scraper/references/scrape-export-twitter-data.md +0 -173
- package/skills/x-twitter-scraper/references/security.md +0 -111
- package/skills/x-twitter-scraper/references/track-twitter-keywords-mentions.md +0 -148
- package/skills/x-twitter-scraper/references/twitter-api-alternative-faq.md +0 -128
- package/skills/x-twitter-scraper/references/twitter-api-without-x-account.md +0 -110
- package/skills/x-twitter-scraper/references/twitter-data-pipeline.md +0 -136
- package/skills/x-twitter-scraper/references/twitter-scraper-api-guide.md +0 -229
- package/skills/x-twitter-scraper/references/types-account-identity.md +0 -9
- package/skills/x-twitter-scraper/references/types-account.md +0 -26
- package/skills/x-twitter-scraper/references/types-api-keys.md +0 -22
- package/skills/x-twitter-scraper/references/types-bookmarks-and-timeline.md +0 -46
- package/skills/x-twitter-scraper/references/types-credits.md +0 -11
- package/skills/x-twitter-scraper/references/types-download-media.md +0 -22
- package/skills/x-twitter-scraper/references/types-draws.md +0 -60
- package/skills/x-twitter-scraper/references/types-error.md +0 -29
- package/skills/x-twitter-scraper/references/types-events.md +0 -23
- package/skills/x-twitter-scraper/references/types-extractions.md +0 -136
- package/skills/x-twitter-scraper/references/types-mcp-output-schemas.md +0 -13
- package/skills/x-twitter-scraper/references/types-monitors.md +0 -49
- package/skills/x-twitter-scraper/references/types-radar.md +0 -47
- package/skills/x-twitter-scraper/references/types-request-bodies.md +0 -30
- package/skills/x-twitter-scraper/references/types-rest-api-vs-mcp-field-naming.md +0 -11
- package/skills/x-twitter-scraper/references/types-support.md +0 -46
- package/skills/x-twitter-scraper/references/types-trends.md +0 -21
- package/skills/x-twitter-scraper/references/types-tweet-drafts.md +0 -20
- package/skills/x-twitter-scraper/references/types-tweet-style-cache.md +0 -50
- package/skills/x-twitter-scraper/references/types-user-activity.md +0 -35
- package/skills/x-twitter-scraper/references/types-webhooks.md +0 -46
- package/skills/x-twitter-scraper/references/types-x-accounts.md +0 -16
- package/skills/x-twitter-scraper/references/types-x-api.md +0 -144
- package/skills/x-twitter-scraper/references/types-x-articles.md +0 -36
- package/skills/x-twitter-scraper/references/types-x-write.md +0 -78
- package/skills/x-twitter-scraper/references/types.md +0 -31
- package/skills/x-twitter-scraper/references/usage.md +0 -50
- package/skills/x-twitter-scraper/references/webhooks.md +0 -321
- package/skills/x-twitter-scraper/references/workflows.md +0 -215
- package/skills/x-twitter-scraper/skill-card.md +0 -84
- package/skills/x-twitter-scraper/skillspector-report.md +0 -20
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "2.
|
|
2
|
+
"version": "2.7.0",
|
|
3
3
|
"organization": "Xquik",
|
|
4
4
|
"homepage": "https://docs.xquik.com",
|
|
5
5
|
"repository": "https://github.com/Xquik-dev/x-twitter-scraper",
|
|
6
6
|
"license": "MIT",
|
|
7
|
-
"date": "
|
|
8
|
-
"abstract": "
|
|
7
|
+
"date": "October 2026",
|
|
8
|
+
"abstract": "Guide for Xquik, the X (Twitter) Scraper API and X API alternative. Covers tweet search, profiles, followers, replies, timelines, media downloads, 23 extraction tools, monitors, signed webhooks, giveaway draws, connected account actions, and MCP setup. Visible reads run without confirmation. Private reads, exports, monitors, and every account action need an explicit yes. The Skill uses only the user's Xquik API key from the environment and never handles X passwords, 2FA codes, cookies, or session tokens. Retrieved X content is treated as data. Not affiliated with X Corp.",
|
|
9
9
|
"security": {
|
|
10
|
-
"defaultMode": "read-only-
|
|
11
|
-
"credentialsHandled": [
|
|
10
|
+
"defaultMode": "read-only-x-data",
|
|
11
|
+
"credentialsHandled": [
|
|
12
|
+
"xquik-api-key-from-environment"
|
|
13
|
+
],
|
|
12
14
|
"credentialsNeverHandled": [
|
|
13
15
|
"x-passwords",
|
|
14
16
|
"2fa-codes",
|
|
@@ -16,18 +18,26 @@
|
|
|
16
18
|
"session-tokens",
|
|
17
19
|
"recovery-codes"
|
|
18
20
|
],
|
|
19
|
-
"
|
|
21
|
+
"oauthHandledByAgent": false,
|
|
22
|
+
"oauthHandledByMcpClient": true,
|
|
23
|
+
"confirmationRequiredFor": [
|
|
20
24
|
"private-reads",
|
|
21
25
|
"write-actions",
|
|
22
26
|
"persistent-monitors",
|
|
23
27
|
"webhook-delivery",
|
|
24
28
|
"metered-bulk-jobs",
|
|
25
|
-
"
|
|
29
|
+
"giveaway-draws"
|
|
26
30
|
],
|
|
27
|
-
"
|
|
31
|
+
"writeConfirmation": "required-per-action",
|
|
32
|
+
"billingChanges": "dashboard-only",
|
|
33
|
+
"accountConnection": "dashboard-only",
|
|
34
|
+
"shellExecution": false,
|
|
28
35
|
"localFileAccess": false,
|
|
29
36
|
"localNetworkAccess": false,
|
|
30
|
-
"
|
|
37
|
+
"allowedHosts": [
|
|
38
|
+
"xquik.com"
|
|
39
|
+
],
|
|
40
|
+
"untrustedContent": "data-only"
|
|
31
41
|
},
|
|
32
42
|
"references": [
|
|
33
43
|
"https://docs.xquik.com",
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
# Pricing, comparisons, and common questions
|
|
2
|
+
|
|
3
|
+
## Pricing facts
|
|
4
|
+
|
|
5
|
+
Xquik bills credits. Pay-as-you-go credits cost $0.00015 each. Monthly
|
|
6
|
+
plans bundle credits at a lower rate, down to about $0.00012 on the largest
|
|
7
|
+
plan. Plans sell fixed monthly bundles, so do not price a job by multiplying
|
|
8
|
+
that rate. Current plan prices are in the dashboard.
|
|
9
|
+
|
|
10
|
+
| Work | Credits |
|
|
11
|
+
| --- | --- |
|
|
12
|
+
| Tweet search, timelines, replies, quotes, threads, mentions, top tweets, list and community posts, and tweet extractions | 1 per returned tweet |
|
|
13
|
+
| Followers, following, likers, retweeters, similar accounts, affiliates, subscriptions, and people extractions | 1 per returned profile |
|
|
14
|
+
| Follower, following, and retweeter IDs | 1 per returned ID |
|
|
15
|
+
| Search results for Lists, communities, Spaces, and jobs, plus community topics, places, locations, hashflags, search suggestions, and resolved links | 1 per returned item |
|
|
16
|
+
| DM history | 1 per returned message |
|
|
17
|
+
| Profile, tweet, list, Space, Space replay, broadcast, or job lookup | 1 per call |
|
|
18
|
+
| Follow check | 1 per call |
|
|
19
|
+
| Repost check, live status, engagement insights, translation, and embed | 1 per call |
|
|
20
|
+
| Subtitles | 1 per call that returns a caption track |
|
|
21
|
+
| Article | 5 per call |
|
|
22
|
+
| Trends | 1 per call |
|
|
23
|
+
| AI analysis of a post or your own text | 2 per analyzed post |
|
|
24
|
+
| Media download | 1 per tweet with media |
|
|
25
|
+
| Post or reply | 30, plus 2 per started MB of media |
|
|
26
|
+
| Like, repost, follow, their undo calls, remove follower, DM, delete, media upload | 10 per call |
|
|
27
|
+
| Active monitor | 30 per hour, 720 a day |
|
|
28
|
+
| Giveaway draw | 2, plus 1 per inspected reply, 1 per reposter read, and 1 per follow check |
|
|
29
|
+
|
|
30
|
+
For result-billed reads, credits equal returned results. Dollars are credits times
|
|
31
|
+
$0.00015 at pay-as-you-go rates: 1,000 tweets cost 1,000 credits, or $0.15. A
|
|
32
|
+
top-up of $500 buys 3,333,333 credits, with any partial credit dropped.
|
|
33
|
+
Supported filters apply before billing, so excluded rows cost nothing.
|
|
34
|
+
Estimates, stored event reads, webhook operations, and extraction exports are
|
|
35
|
+
free.
|
|
36
|
+
|
|
37
|
+
Price a bulk job with `POST /extractions/estimate`. It returns
|
|
38
|
+
`estimatedResults`, `creditsRequired`, and `allowed` for that exact body.
|
|
39
|
+
Credits, plans, and top-ups live in the Xquik dashboard. The first
|
|
40
|
+
pay-as-you-go funding amount is $10, and unused credits carry over.
|
|
41
|
+
|
|
42
|
+
Quote only these published rates or a live estimate. Do not state other
|
|
43
|
+
providers' prices or tier limits as current facts. Tell the user to check
|
|
44
|
+
their current pricing pages.
|
|
45
|
+
|
|
46
|
+
## Xquik or the official X API
|
|
47
|
+
|
|
48
|
+
Choose Xquik when several of these matter:
|
|
49
|
+
|
|
50
|
+
- Per-result billing with server-side filters and pre-run estimates
|
|
51
|
+
- Reads without an X developer account or a connected X account
|
|
52
|
+
- Bulk jobs with caps and CSV, JSON, or XLSX exports
|
|
53
|
+
- Account and keyword monitors with signed webhooks
|
|
54
|
+
- REST, SDKs, MCP, and a Skill in one contract
|
|
55
|
+
- Connected X account actions in the same API
|
|
56
|
+
|
|
57
|
+
Choose the official X API when the project needs a first-party contract,
|
|
58
|
+
official support, a platform partnership, or X's own policy guarantees.
|
|
59
|
+
|
|
60
|
+
For a volume decision, name `POST /api/v1/extractions/estimate` for the exact
|
|
61
|
+
query, filters, and cap, and read the official pricing page. Then
|
|
62
|
+
test the same known posts and fields on both before committing.
|
|
63
|
+
|
|
64
|
+
## Legality
|
|
65
|
+
|
|
66
|
+
Give a direct, qualified answer first. Collecting visible X data for research
|
|
67
|
+
is often lawful, but no one can promise it for every case. The answer depends
|
|
68
|
+
on:
|
|
69
|
+
|
|
70
|
+
- Jurisdiction and its data protection law, such as GDPR for EU residents
|
|
71
|
+
- X terms of service and developer rules
|
|
72
|
+
- The data involved, especially personal or sensitive data
|
|
73
|
+
- The purpose and use, such as research, resale, or profiling
|
|
74
|
+
- The access method, such as a documented API versus bypassing access controls
|
|
75
|
+
|
|
76
|
+
Say resale is riskier than internal analysis or research. Explain the extra
|
|
77
|
+
redistribution, licensing, and privacy risks. Xquik grants no resale rights.
|
|
78
|
+
For university work, the ethics board or IRB and the data protection office
|
|
79
|
+
make the call. Recommend qualified counsel for high-stakes or commercial use.
|
|
80
|
+
Minimize fields, secure storage, and set a deletion date. This is general
|
|
81
|
+
information, not legal advice.
|
|
82
|
+
|
|
83
|
+
## Account requirements
|
|
84
|
+
|
|
85
|
+
| Work | Needs |
|
|
86
|
+
| --- | --- |
|
|
87
|
+
| Visible reads, search, profiles, followers, extractions | Xquik API key |
|
|
88
|
+
| DMs, bookmarks, notifications, home timeline, likers, own likes | Xquik API key and a connected X account |
|
|
89
|
+
| Posts, likes, follows, DMs, profile changes | Xquik API key and a connected X account |
|
|
90
|
+
|
|
91
|
+
Users connect X accounts in the Xquik dashboard. The Skill never handles X
|
|
92
|
+
passwords, 2FA codes, cookies, or session tokens.
|
|
93
|
+
|
|
94
|
+
## Other questions
|
|
95
|
+
|
|
96
|
+
- Deleted, protected, or unavailable content can stay inaccessible. Xquik
|
|
97
|
+
omits missing optional fields and never invents data.
|
|
98
|
+
- Rate limits: each user gets 500 reads per second, 120 writes per minute,
|
|
99
|
+
and 60 deletes per minute. A `429` includes `Retry-After`.
|
|
100
|
+
- SDKs: typed TypeScript and Python SDKs are listed in the repository README.
|
|
101
|
+
- Docs for the user: `https://docs.xquik.com`.
|
|
@@ -1,311 +1,86 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Extraction jobs
|
|
2
|
+
|
|
3
|
+
Use an extraction for a complete list, a large dataset, or a file export.
|
|
4
|
+
Each job bills 1 credit per delivered tweet or profile, and
|
|
5
|
+
`article_extractor` 5 per article. So 10,000 tweets cost 10,000 credits, or
|
|
6
|
+
$1.50.
|
|
7
|
+
|
|
8
|
+
## Flow
|
|
9
|
+
|
|
10
|
+
| Call | Contract |
|
|
11
|
+
| --- | --- |
|
|
12
|
+
| `POST /extractions/estimate` | Free. Creates nothing. Takes the job body: `toolType`, its target, the requested filters & `resultsLimit`. Without a cap the API uses 10,000. Returns `allowed`, `estimatedResults`, `creditsRequired`, `creditsAvailable` & `source` |
|
|
13
|
+
| `POST /extractions` | Same body plus a new `Idempotency-Key`. A retry with that key returns the original job. `202` returns the job `id`, `status` & `statusUrl` |
|
|
14
|
+
| `GET /extractions/{id}` | Returns `job`, `results`, `hasMore`, `nextCursor` & `pollAfterMs`. `job.status` ends as `completed`, `failed`, or `canceled`. Rows come 100 per page, up to 1,000 with `limit=1000`. Send `nextCursor` back as `cursor` |
|
|
15
|
+
| `GET /extractions/{id}/export?format=csv` | Formats: `csv`, `json`, `md`, `md-document`, `pdf`, `txt`, `xlsx`. 1 export holds up to 100,000 rows, and PDF up to 10,000 |
|
|
16
|
+
|
|
17
|
+
- `creditsRequired` & `creditsAvailable` are numeric strings. Convert them
|
|
18
|
+
before any math.
|
|
19
|
+
- `creditsRequired` is a charge ceiling, not an exact bill. Skipped or
|
|
20
|
+
filtered rows cost nothing.
|
|
21
|
+
- `estimatedResults` is a conservative billing count, such as the follower
|
|
22
|
+
count or the `resultsLimit` cap. It is not a count of matching posts.
|
|
23
|
+
`source` names which one it used.
|
|
24
|
+
- `allowed: false` means the balance cannot fund the job. Lower
|
|
25
|
+
`resultsLimit`, or the user adds credits in the dashboard.
|
|
26
|
+
- Show the estimate & get a yes before `POST /extractions`. Create nothing
|
|
27
|
+
before that yes.
|
|
28
|
+
- Wait `pollAfterMs` between status reads.
|
|
29
|
+
- Always give the download call. For a job over the export limit, page
|
|
30
|
+
`GET /extractions/{id}?limit=1000` from the start instead, so no row
|
|
31
|
+
appears twice.
|
|
32
|
+
|
|
33
|
+
`DELETE /extractions/{id}` cancels a running job.
|
|
2
34
|
|
|
3
|
-
Xquik provides 23 bulk data extraction tools. Each tool requires a specific target.
|
|
4
|
-
|
|
5
|
-
## Privacy and acceptable use
|
|
6
|
-
|
|
7
|
-
Bulk extraction and export can collect large amounts of public identity,
|
|
8
|
-
activity, and relationship data. Before creating a job, confirm the lawful
|
|
9
|
-
purpose, target, `resultsLimit`, intended recipients, and retention period.
|
|
10
|
-
Follow X rules and applicable privacy law. Do not use these tools for
|
|
11
|
-
credential collection, private data, surveillance, discrimination, harassment,
|
|
12
|
-
doxxing, or unrelated secondary use. Delete exported data when the approved
|
|
13
|
-
purpose ends.
|
|
14
|
-
|
|
15
|
-
Every extraction requires an estimate and explicit approval for the exact
|
|
16
|
-
bounded job. Never infer approval from a general request or increase a bound
|
|
17
|
-
without renewed approval.
|
|
18
|
-
|
|
19
|
-
The API accepts an omitted `resultsLimit`. This Skill must always send an
|
|
20
|
-
explicit finite positive bound. Use the same bound for estimate and create.
|
|
21
|
-
|
|
22
|
-
Call `POST /extractions`
|
|
23
|
-
|
|
24
|
-
Estimate first with `POST /extractions/estimate` with the same body to preview `creditsRequired`, `creditsAvailable`, and whether the job is allowed.
|
|
25
|
-
|
|
26
|
-
## Tool types
|
|
27
|
-
|
|
28
|
-
### Tweet-based tools
|
|
29
|
-
|
|
30
|
-
These tools require `targetTweetId`.
|
|
31
|
-
|
|
32
|
-
| Tool type | Description |
|
|
33
|
-
|-----------|-------------|
|
|
34
|
-
| `reply_extractor` | Extract users who replied to a tweet |
|
|
35
|
-
| `repost_extractor` | Extract users who retweeted a tweet |
|
|
36
|
-
| `quote_extractor` | Extract users who quote-tweeted a tweet |
|
|
37
|
-
| `thread_extractor` | Extract all tweets in a thread |
|
|
38
|
-
| `article_extractor` | Extract article content linked in a tweet |
|
|
39
|
-
| `favoriters` | Extract users who favorited a tweet |
|
|
40
|
-
|
|
41
|
-
For example:
|
|
42
|
-
```json
|
|
43
|
-
{
|
|
44
|
-
"toolType": "reply_extractor",
|
|
45
|
-
"targetTweetId": "1893704267862470862"
|
|
46
|
-
}
|
|
47
|
-
```
|
|
48
|
-
|
|
49
|
-
### User-based tools
|
|
50
|
-
|
|
51
|
-
These tools require `targetUsername`.
|
|
52
|
-
|
|
53
|
-
| Tool type | Description |
|
|
54
|
-
|-----------|-------------|
|
|
55
|
-
| `follower_explorer` | Extract followers of an account |
|
|
56
|
-
| `following_explorer` | Extract accounts followed by a user |
|
|
57
|
-
| `verified_follower_explorer` | Extract verified followers of an account |
|
|
58
|
-
| `mention_extractor` | Extract tweets mentioning an account |
|
|
59
|
-
| `post_extractor` | Extract posts from an account |
|
|
60
|
-
|
|
61
|
-
For example:
|
|
62
35
|
```json
|
|
63
36
|
{
|
|
64
37
|
"toolType": "follower_explorer",
|
|
65
|
-
"targetUsername": "
|
|
38
|
+
"targetUsername": "nasa",
|
|
39
|
+
"resultsLimit": 5000
|
|
66
40
|
}
|
|
67
41
|
```
|
|
68
42
|
|
|
69
|
-
|
|
43
|
+
## Tools and targets
|
|
70
44
|
|
|
71
|
-
|
|
45
|
+
| Target field | Tools |
|
|
46
|
+
| --- | --- |
|
|
47
|
+
| `targetTweetId` | `reply_extractor` (reply authors), `repost_extractor`, `quote_extractor`, `favoriters` (needs a connected X account), `thread_extractor`, `article_extractor` |
|
|
48
|
+
| `targetUsername` | `follower_explorer`, `following_explorer`, `verified_follower_explorer`, `mention_extractor`, `post_extractor`, `user_media`, `user_likes` (needs a connected X account) |
|
|
49
|
+
| `targetCommunityId` | `community_extractor` (members), `community_moderator_explorer`, `community_post_extractor`, `community_search` (also needs `searchQuery`) |
|
|
50
|
+
| `targetListId` | `list_member_extractor`, `list_post_extractor`, `list_follower_explorer` |
|
|
51
|
+
| `targetSpaceId` | `space_explorer` (participants) |
|
|
52
|
+
| `searchQuery` | `tweet_search_extractor`, `people_search` |
|
|
72
53
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
| Tool type | Description |
|
|
76
|
-
|-----------|-------------|
|
|
77
|
-
| `user_likes` | Extract tweets liked by a user |
|
|
78
|
-
| `user_media` | Extract media tweets from a user |
|
|
79
|
-
|
|
80
|
-
For example:
|
|
81
|
-
```json
|
|
82
|
-
{
|
|
83
|
-
"toolType": "user_likes",
|
|
84
|
-
"targetUsername": "elonmusk"
|
|
85
|
-
}
|
|
86
|
-
```
|
|
54
|
+
Multi-target jobs use `targetUsernames`, `targetTweetIds`, `searchQueries`,
|
|
55
|
+
`targetCommunityIds`, or `targetListIds`, with `maxItemsPerTarget`.
|
|
87
56
|
|
|
88
|
-
|
|
57
|
+
## Search filters
|
|
89
58
|
|
|
90
|
-
|
|
59
|
+
`tweet_search_extractor` takes the query in `searchQuery` and these optional
|
|
60
|
+
top-level filters: `fromUser`, `toUser`, `mentioning`, `language`,
|
|
61
|
+
`sinceDate`, `untilDate`, `mediaType`, `minFaves`, `minRetweets`,
|
|
62
|
+
`minReplies`, `minQuotes`, `verifiedOnly`, `replies`, `retweets`, `quotes`,
|
|
63
|
+
`exactPhrase`, `excludeWords`, `anyWords`, `hashtags`, `cashtags`, `url`, and
|
|
64
|
+
`queryType` (`Latest` default, or `Top`). Send only the filters the user asked
|
|
65
|
+
for.
|
|
91
66
|
|
|
92
|
-
| Tool type | Description |
|
|
93
|
-
|-----------|-------------|
|
|
94
|
-
| `community_extractor` | Extract members of a community |
|
|
95
|
-
| `community_moderator_explorer` | Extract moderators of a community |
|
|
96
|
-
| `community_post_extractor` | Extract posts from a community |
|
|
97
|
-
| `community_search` | Search posts within a community (also requires `searchQuery`) |
|
|
98
|
-
|
|
99
|
-
For example:
|
|
100
|
-
```json
|
|
101
|
-
{
|
|
102
|
-
"toolType": "community_extractor",
|
|
103
|
-
"targetCommunityId": "1234567890"
|
|
104
|
-
}
|
|
105
|
-
```
|
|
106
|
-
|
|
107
|
-
### List-based tools
|
|
108
|
-
|
|
109
|
-
These tools require `targetListId`.
|
|
110
|
-
|
|
111
|
-
| Tool type | Description |
|
|
112
|
-
|-----------|-------------|
|
|
113
|
-
| `list_member_extractor` | Extract members of a list |
|
|
114
|
-
| `list_post_extractor` | Extract posts from a list |
|
|
115
|
-
| `list_follower_explorer` | Extract followers of a list |
|
|
116
|
-
|
|
117
|
-
For example:
|
|
118
|
-
```json
|
|
119
|
-
{
|
|
120
|
-
"toolType": "list_member_extractor",
|
|
121
|
-
"targetListId": "1234567890"
|
|
122
|
-
}
|
|
123
|
-
```
|
|
124
|
-
|
|
125
|
-
### Space-based tools
|
|
126
|
-
|
|
127
|
-
These tools require `targetSpaceId`.
|
|
128
|
-
|
|
129
|
-
| Tool type | Description |
|
|
130
|
-
|-----------|-------------|
|
|
131
|
-
| `space_explorer` | Extract participants of a Space |
|
|
132
|
-
|
|
133
|
-
For example:
|
|
134
|
-
```json
|
|
135
|
-
{
|
|
136
|
-
"toolType": "space_explorer",
|
|
137
|
-
"targetSpaceId": "1YqKDqDXAbwKV"
|
|
138
|
-
}
|
|
139
|
-
```
|
|
140
|
-
|
|
141
|
-
### Search-based tools
|
|
142
|
-
|
|
143
|
-
These tools require `searchQuery`.
|
|
144
|
-
|
|
145
|
-
| Tool type | Description |
|
|
146
|
-
|-----------|-------------|
|
|
147
|
-
| `people_search` | Search for users by keyword |
|
|
148
|
-
| `tweet_search_extractor` | Search and extract tweets by keyword or hashtag |
|
|
149
|
-
|
|
150
|
-
For a people search:
|
|
151
|
-
```json
|
|
152
|
-
{
|
|
153
|
-
"toolType": "people_search",
|
|
154
|
-
"searchQuery": "machine learning engineer"
|
|
155
|
-
}
|
|
156
|
-
```
|
|
157
|
-
|
|
158
|
-
For a tweet search:
|
|
159
|
-
```json
|
|
160
|
-
{
|
|
161
|
-
"toolType": "tweet_search_extractor",
|
|
162
|
-
"searchQuery": "#AI",
|
|
163
|
-
"resultsLimit": 100
|
|
164
|
-
}
|
|
165
|
-
```
|
|
166
|
-
|
|
167
|
-
### Tweet search filters
|
|
168
|
-
|
|
169
|
-
`tweet_search_extractor` accepts structured filters. It combines them with
|
|
170
|
-
`searchQuery` before collection.
|
|
171
|
-
|
|
172
|
-
| Field | Type | Description |
|
|
173
|
-
|-------|------|-------------|
|
|
174
|
-
| `fromUser` | string | Author username |
|
|
175
|
-
| `toUser` | string | Directed to user |
|
|
176
|
-
| `mentioning` | string | Mentions user |
|
|
177
|
-
| `language` | string | Language code (e.g., `en`) |
|
|
178
|
-
| `sinceDate` | string | Start date (YYYY-MM-DD) |
|
|
179
|
-
| `untilDate` | string | End date (YYYY-MM-DD) |
|
|
180
|
-
| `mediaType` | string | `images`, `videos`, `gifs`, `media`, `links`, or `none` |
|
|
181
|
-
| `minFaves` | number | Minimum likes |
|
|
182
|
-
| `minRetweets` | number | Minimum retweets |
|
|
183
|
-
| `minReplies` | number | Minimum replies |
|
|
184
|
-
| `minQuotes` | number | Minimum quote count |
|
|
185
|
-
| `minViews` | number | Minimum view count |
|
|
186
|
-
| `minBookmarks` | number | Minimum bookmark count |
|
|
187
|
-
| `maxLikes` | number | Maximum likes |
|
|
188
|
-
| `maxRetweets` | number | Maximum reposts |
|
|
189
|
-
| `maxReplies` | number | Maximum replies |
|
|
190
|
-
| `maxQuotes` | number | Maximum quotes |
|
|
191
|
-
| `blueVerifiedOnly` | boolean | Blue-verified authors only |
|
|
192
|
-
| `cardName` | string | Match the Tweet card name |
|
|
193
|
-
| `source` | string | Match the source application |
|
|
194
|
-
| `excludeSource` | string | Exclude a source application |
|
|
195
|
-
| `geocode` | string | Match latitude, longitude, and radius |
|
|
196
|
-
| `sinceId` | string | Tweets newer than this ID |
|
|
197
|
-
| `maxId` | string | Tweets older than this ID |
|
|
198
|
-
| `near` | string | Match a place name |
|
|
199
|
-
| `within` | string | Radius for the `near` filter |
|
|
200
|
-
| `withinTime` | string | Recent time window |
|
|
201
|
-
| `nativeRetweets` | boolean | Native reposts only |
|
|
202
|
-
| `safe` | boolean | Enable safe search |
|
|
203
|
-
| `news` | boolean | News results only |
|
|
204
|
-
| `verifiedOnly` | boolean | Verified authors only |
|
|
205
|
-
| `replies` | string | `include`, `exclude`, or `only` |
|
|
206
|
-
| `retweets` | string | `include`, `exclude`, or `only` |
|
|
207
|
-
| `quotes` | string | `include`, `exclude`, or `only` |
|
|
208
|
-
| `exactPhrase` | string | Exact match text |
|
|
209
|
-
| `excludeWords` | string | Comma-separated words to exclude |
|
|
210
|
-
| `anyWords` | string | Terms where any one can match |
|
|
211
|
-
| `hashtags` | string | Hashtags separated by spaces, commas, or lines |
|
|
212
|
-
| `cashtags` | string | Cashtags separated by spaces, commas, or lines |
|
|
213
|
-
| `url` | string | URL substring or domain |
|
|
214
|
-
| `conversationId` | string | Conversation ID |
|
|
215
|
-
| `inReplyToTweetId` | string | Replies to one Tweet ID |
|
|
216
|
-
| `quotesOfTweetId` | string | Quotes of one Tweet ID |
|
|
217
|
-
| `retweetsOfTweetId` | string | Reposts of one Tweet ID |
|
|
218
|
-
| `listId` | string | Search within a list |
|
|
219
|
-
| `place` | string | Search within a place ID |
|
|
220
|
-
| `placeCountry` | string | Search within a country code |
|
|
221
|
-
| `pointRadius` | string | Geographic point and radius |
|
|
222
|
-
| `boundingBox` | string | Geographic bounding box |
|
|
223
|
-
| `advancedQuery` | string | Raw X search operators appended to query |
|
|
224
|
-
|
|
225
|
-
For example, apply filters:
|
|
226
67
|
```json
|
|
227
68
|
{
|
|
228
69
|
"toolType": "tweet_search_extractor",
|
|
229
|
-
"searchQuery": "
|
|
230
|
-
"
|
|
231
|
-
"minFaves": 100,
|
|
70
|
+
"searchQuery": "solar panels",
|
|
71
|
+
"language": "en",
|
|
232
72
|
"sinceDate": "2026-01-01",
|
|
233
|
-
"
|
|
234
|
-
"
|
|
235
|
-
|
|
236
|
-
```
|
|
237
|
-
|
|
238
|
-
Set optional `resultsLimit` to stop after a specific result count. Pass the same value to `POST /extractions/estimate` and `POST /extractions`.
|
|
239
|
-
|
|
240
|
-
### Profile filters
|
|
241
|
-
|
|
242
|
-
Profile-producing extractions also accept `minFollowers`, `maxFollowers`,
|
|
243
|
-
`minFollowing`, `maxFollowing`, `minPosts`, `maxPosts`,
|
|
244
|
-
`minAccountAgeDays`, `verifiedType`, `hasWebsite`, `hasLocation`,
|
|
245
|
-
`bioContains`, `locationContains`, and `usernameContains`.
|
|
246
|
-
|
|
247
|
-
## Response
|
|
248
|
-
|
|
249
|
-
```json
|
|
250
|
-
{
|
|
251
|
-
"id": "77777",
|
|
252
|
-
"toolType": "reply_extractor",
|
|
253
|
-
"status": "completed",
|
|
254
|
-
"totalResults": 150
|
|
73
|
+
"untilDate": "2026-06-30",
|
|
74
|
+
"retweets": "exclude",
|
|
75
|
+
"resultsLimit": 20000
|
|
255
76
|
}
|
|
256
77
|
```
|
|
257
78
|
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
## Retrieving results
|
|
261
|
-
|
|
262
|
-
```
|
|
263
|
-
GET /extractions/{id}
|
|
264
|
-
```
|
|
265
|
-
|
|
266
|
-
The endpoint returns up to 1,000 results per page. Each result includes:
|
|
267
|
-
|
|
268
|
-
- `xUserId`, `xUsername`, `xDisplayName`
|
|
269
|
-
- `xFollowersCount`, `xVerified`, `xProfileImageUrl`
|
|
270
|
-
- `tweetId`, `tweetText`, `tweetCreatedAt` (for tweet-based extractions)
|
|
271
|
-
|
|
272
|
-
## Exporting results
|
|
273
|
-
|
|
274
|
-
```
|
|
275
|
-
GET /extractions/{id}/export?format=csv
|
|
276
|
-
```
|
|
277
|
-
|
|
278
|
-
Choose `csv`, `json`, `md`, `md-document`, `pdf`, `txt`, or `xlsx`. Exports support 100,000 rows, except PDF supports 10,000.
|
|
279
|
-
|
|
280
|
-
Exports include enrichment columns not present in the API response.
|
|
281
|
-
|
|
282
|
-
The endpoint supports follower, following, post, engagement, profile, media,
|
|
283
|
-
language, search, and date filters. It does not project individual fields.
|
|
284
|
-
|
|
285
|
-
Get approval first. Set the smallest approved `resultsLimit` when creating
|
|
286
|
-
the job. Before export, show the job, filters, format, row count, schema,
|
|
287
|
-
recipients, storage, and retention. Materialize or transmit the dataset only
|
|
288
|
-
after explicit approval. Delete it when the approved purpose ends.
|
|
289
|
-
|
|
290
|
-
## Estimating usage
|
|
291
|
-
|
|
292
|
-
```
|
|
293
|
-
POST /extractions/estimate
|
|
294
|
-
```
|
|
295
|
-
|
|
296
|
-
Same body as create. Response:
|
|
297
|
-
|
|
298
|
-
```json
|
|
299
|
-
{
|
|
300
|
-
"allowed": true,
|
|
301
|
-
"source": "replyCount",
|
|
302
|
-
"estimatedResults": 150,
|
|
303
|
-
"creditsRequired": "150",
|
|
304
|
-
"creditsAvailable": "50000"
|
|
305
|
-
}
|
|
306
|
-
```
|
|
79
|
+
Profile tools accept `minFollowers`, `maxFollowers`, `verifiedOnly`,
|
|
80
|
+
`bioContains`, `locationContains`, and `minAccountAgeDays`.
|
|
307
81
|
|
|
308
|
-
|
|
309
|
-
not cover the estimate.
|
|
82
|
+
## Results
|
|
310
83
|
|
|
311
|
-
|
|
84
|
+
Rows keep stable IDs. Store the job ID, body, and collection time with the
|
|
85
|
+
file. Deleted, protected, or unavailable content can be missing, so counts can
|
|
86
|
+
differ from the numbers X shows on a profile or post.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Xquik MCP server
|
|
2
|
+
|
|
3
|
+
The remote server lives at `https://xquik.com/mcp` and speaks Streamable HTTP.
|
|
4
|
+
Sign in with OAuth from the client. The server exposes 3 tools: `docs` for
|
|
5
|
+
guidance, `search` for route contracts, and `execute` for calls. Hosted MCP
|
|
6
|
+
adds the `Idempotency-Key` header to writes.
|
|
7
|
+
|
|
8
|
+
| Client | Setup |
|
|
9
|
+
| --- | --- |
|
|
10
|
+
| Claude Code | `claude mcp add --transport http xquik https://xquik.com/mcp`, then run `/mcp` and authenticate |
|
|
11
|
+
| Claude.ai and Claude Desktop | Settings, Connectors, Add custom connector, enter the URL |
|
|
12
|
+
| Cursor | In `~/.cursor/mcp.json` or `.cursor/mcp.json`, add `{"mcpServers": {"xquik": {"url": "https://xquik.com/mcp"}}}`. Cursor opens OAuth when the server answers `401` |
|
|
13
|
+
| VS Code | In `.vscode/mcp.json`, add `{"servers": {"xquik": {"type": "http", "url": "https://xquik.com/mcp"}}}`, start it from the MCP view, and follow the OAuth prompt |
|
|
14
|
+
| Codex CLI | `codex mcp add xquik --url https://xquik.com/mcp`, then `codex mcp login xquik` |
|
|
15
|
+
| ChatGPT | Developer mode, Apps, Create, enter the URL, choose OAuth |
|
|
16
|
+
|
|
17
|
+
Confirm the connection by listing the client's MCP servers or tools and
|
|
18
|
+
checking that `docs`, `search`, and `execute` appear.
|
|
19
|
+
|
|
20
|
+
Use an API key only when the client cannot run OAuth. Keep it in an
|
|
21
|
+
environment variable or the client's secret store, and reference it from the
|
|
22
|
+
config. The client sends it as `Authorization: Bearer <key>`, for example
|
|
23
|
+
through Codex's `bearer_token_env_var = "XQUIK_API_KEY"`. Never
|
|
24
|
+
commit a key to a config file in a repository.
|