twitter-developer-api 2.5.3

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.
Files changed (140) hide show
  1. package/.claude-plugin/marketplace.json +60 -0
  2. package/.claude-plugin/plugin.json +45 -0
  3. package/.codex-plugin/plugin.json +61 -0
  4. package/.mcp.json +8 -0
  5. package/LICENSE +21 -0
  6. package/README.md +279 -0
  7. package/assets/icon.svg +1 -0
  8. package/commands/post.md +15 -0
  9. package/commands/search.md +16 -0
  10. package/commands/trending.md +17 -0
  11. package/commands/user.md +19 -0
  12. package/context7.json +33 -0
  13. package/logo.png +0 -0
  14. package/openclaw.plugin.json +25 -0
  15. package/package.json +79 -0
  16. package/scripts/check-versions.mjs +381 -0
  17. package/scripts/release-guard/content-policy.mjs +337 -0
  18. package/scripts/release-guard/frontmatter.mjs +148 -0
  19. package/scripts/release-guard/policy.mjs +223 -0
  20. package/server.json +18 -0
  21. package/skills/x-twitter-scraper/SKILL.md +387 -0
  22. package/skills/x-twitter-scraper/metadata.json +38 -0
  23. package/skills/x-twitter-scraper/references/api-endpoints-api-keys.md +31 -0
  24. package/skills/x-twitter-scraper/references/api-endpoints-compose.md +33 -0
  25. package/skills/x-twitter-scraper/references/api-endpoints-credits.md +11 -0
  26. package/skills/x-twitter-scraper/references/api-endpoints-drafts.md +86 -0
  27. package/skills/x-twitter-scraper/references/api-endpoints-draws.md +75 -0
  28. package/skills/x-twitter-scraper/references/api-endpoints-error-codes.md +37 -0
  29. package/skills/x-twitter-scraper/references/api-endpoints-events.md +48 -0
  30. package/skills/x-twitter-scraper/references/api-endpoints-extractions.md +97 -0
  31. package/skills/x-twitter-scraper/references/api-endpoints-monitors.md +74 -0
  32. package/skills/x-twitter-scraper/references/api-endpoints-radar.md +49 -0
  33. package/skills/x-twitter-scraper/references/api-endpoints-support.md +47 -0
  34. package/skills/x-twitter-scraper/references/api-endpoints-trends.md +25 -0
  35. package/skills/x-twitter-scraper/references/api-endpoints-tweet-style-cache.md +155 -0
  36. package/skills/x-twitter-scraper/references/api-endpoints-webhooks.md +74 -0
  37. package/skills/x-twitter-scraper/references/api-endpoints-x-accounts.md +42 -0
  38. package/skills/x-twitter-scraper/references/api-endpoints-x-api.md +206 -0
  39. package/skills/x-twitter-scraper/references/api-endpoints-x-media.md +40 -0
  40. package/skills/x-twitter-scraper/references/api-endpoints-x-write.md +204 -0
  41. package/skills/x-twitter-scraper/references/api-endpoints.md +30 -0
  42. package/skills/x-twitter-scraper/references/draws.md +57 -0
  43. package/skills/x-twitter-scraper/references/extractions.md +237 -0
  44. package/skills/x-twitter-scraper/references/mcp-setup.md +273 -0
  45. package/skills/x-twitter-scraper/references/mcp-tools.md +174 -0
  46. package/skills/x-twitter-scraper/references/python-examples.md +182 -0
  47. package/skills/x-twitter-scraper/references/security.md +124 -0
  48. package/skills/x-twitter-scraper/references/types-account-identity.md +9 -0
  49. package/skills/x-twitter-scraper/references/types-account.md +26 -0
  50. package/skills/x-twitter-scraper/references/types-api-keys.md +22 -0
  51. package/skills/x-twitter-scraper/references/types-bookmarks-and-timeline.md +46 -0
  52. package/skills/x-twitter-scraper/references/types-credits.md +11 -0
  53. package/skills/x-twitter-scraper/references/types-download-media.md +22 -0
  54. package/skills/x-twitter-scraper/references/types-draws.md +60 -0
  55. package/skills/x-twitter-scraper/references/types-error.md +10 -0
  56. package/skills/x-twitter-scraper/references/types-events.md +43 -0
  57. package/skills/x-twitter-scraper/references/types-extractions.md +106 -0
  58. package/skills/x-twitter-scraper/references/types-mcp-add-webhook.md +14 -0
  59. package/skills/x-twitter-scraper/references/types-mcp-check-follow.md +10 -0
  60. package/skills/x-twitter-scraper/references/types-mcp-compose-tweet.md +31 -0
  61. package/skills/x-twitter-scraper/references/types-mcp-estimate-extraction.md +15 -0
  62. package/skills/x-twitter-scraper/references/types-mcp-get-account.md +26 -0
  63. package/skills/x-twitter-scraper/references/types-mcp-get-draw.md +30 -0
  64. package/skills/x-twitter-scraper/references/types-mcp-get-events.md +19 -0
  65. package/skills/x-twitter-scraper/references/types-mcp-get-trends.md +16 -0
  66. package/skills/x-twitter-scraper/references/types-mcp-get-user-info.md +16 -0
  67. package/skills/x-twitter-scraper/references/types-mcp-list-monitors.md +15 -0
  68. package/skills/x-twitter-scraper/references/types-mcp-lookup-tweet.md +25 -0
  69. package/skills/x-twitter-scraper/references/types-mcp-output-schemas.md +22 -0
  70. package/skills/x-twitter-scraper/references/types-mcp-refine-tweet.md +13 -0
  71. package/skills/x-twitter-scraper/references/types-mcp-run-draw.md +18 -0
  72. package/skills/x-twitter-scraper/references/types-mcp-run-extraction.md +12 -0
  73. package/skills/x-twitter-scraper/references/types-mcp-score-tweet.md +16 -0
  74. package/skills/x-twitter-scraper/references/types-mcp-search-tweets.md +17 -0
  75. package/skills/x-twitter-scraper/references/types-mcp-test-webhook.md +11 -0
  76. package/skills/x-twitter-scraper/references/types-monitors.md +20 -0
  77. package/skills/x-twitter-scraper/references/types-radar.md +40 -0
  78. package/skills/x-twitter-scraper/references/types-request-bodies.md +30 -0
  79. package/skills/x-twitter-scraper/references/types-rest-api-vs-mcp-field-naming.md +15 -0
  80. package/skills/x-twitter-scraper/references/types-support.md +25 -0
  81. package/skills/x-twitter-scraper/references/types-trends.md +18 -0
  82. package/skills/x-twitter-scraper/references/types-tweet-drafts.md +20 -0
  83. package/skills/x-twitter-scraper/references/types-tweet-style-cache.md +50 -0
  84. package/skills/x-twitter-scraper/references/types-user-activity.md +35 -0
  85. package/skills/x-twitter-scraper/references/types-webhooks.md +38 -0
  86. package/skills/x-twitter-scraper/references/types-x-accounts.md +16 -0
  87. package/skills/x-twitter-scraper/references/types-x-api.md +69 -0
  88. package/skills/x-twitter-scraper/references/types-x-articles.md +21 -0
  89. package/skills/x-twitter-scraper/references/types-x-write.md +39 -0
  90. package/skills/x-twitter-scraper/references/types.md +48 -0
  91. package/skills/x-twitter-scraper/references/usage.md +50 -0
  92. package/skills/x-twitter-scraper/references/webhooks.md +243 -0
  93. package/skills/x-twitter-scraper/references/workflows.md +202 -0
  94. package/skills/x-twitter-scraper/skill-card.md +76 -0
  95. package/skills/x-twitter-scraper/skillspector-report.md +17 -0
  96. package/skills/xquik-social-research/LICENSE +21 -0
  97. package/skills/xquik-social-research/SKILL.md +77 -0
  98. package/skills.sh.json +77 -0
  99. package/start.sh +2 -0
  100. package/stub-server.mjs +209 -0
  101. package/task-guides/check-mutuals.md +55 -0
  102. package/task-guides/clean-followers.md +71 -0
  103. package/task-guides/export-tweets-csv.md +70 -0
  104. package/task-guides/extract-followers.md +83 -0
  105. package/task-guides/find-bangers.md +61 -0
  106. package/task-guides/find-influencers.md +72 -0
  107. package/task-guides/find-viral-tweets.md +80 -0
  108. package/task-guides/follow-unfollow.md +83 -0
  109. package/task-guides/for-you-feed.md +63 -0
  110. package/task-guides/going-viral.md +68 -0
  111. package/task-guides/grow-followers.md +66 -0
  112. package/task-guides/monitor-accounts.md +81 -0
  113. package/task-guides/optimize-tweets.md +80 -0
  114. package/task-guides/post-tweets.md +108 -0
  115. package/task-guides/run-giveaway.md +90 -0
  116. package/task-guides/search-tweets.md +122 -0
  117. package/task-guides/send-dms.md +92 -0
  118. package/task-guides/top-replies.md +71 -0
  119. package/task-guides/track-competitors.md +73 -0
  120. package/task-guides/track-hashtags.md +86 -0
  121. package/task-guides/track-mentions.md +88 -0
  122. package/task-guides/trending-news.md +68 -0
  123. package/task-guides/tweet-analytics.md +129 -0
  124. package/task-guides/tweet-ideas.md +65 -0
  125. package/task-guides/tweet-replies.md +82 -0
  126. package/task-guides/tweet-style.md +72 -0
  127. package/task-guides/tweet-webhooks.md +84 -0
  128. package/task-guides/update-x-profile.md +75 -0
  129. package/task-guides/user-tweets.md +148 -0
  130. package/task-guides/who-liked.md +68 -0
  131. package/task-guides/who-quoted.md +68 -0
  132. package/task-guides/who-retweeted.md +67 -0
  133. package/task-guides/write-threads.md +72 -0
  134. package/task-guides/write-tweets.md +84 -0
  135. package/task-guides/x-articles.md +84 -0
  136. package/task-guides/x-bookmarks.md +63 -0
  137. package/task-guides/x-communities.md +71 -0
  138. package/task-guides/x-lists.md +70 -0
  139. package/task-guides/x-spaces.md +67 -0
  140. package/task-guides/x-trends.md +74 -0
@@ -0,0 +1,204 @@
1
+ # Xquik REST API Endpoints: X Write
2
+
3
+ Write actions performed through connected X accounts. All endpoints are metered. Every request requires an `account` field (username or account ID) identifying which connected account to use.
4
+
5
+ ### Create Tweet
6
+
7
+ ```
8
+ POST /x/tweets
9
+ ```
10
+
11
+ **Body:**
12
+
13
+ | Field | Type | Required | Description |
14
+ |-------|------|----------|-------------|
15
+ | `account` | string | Yes | Connected X username or account ID |
16
+ | `text` | string | No | Tweet text (280 chars, or 25,000 if `is_note_tweet` is true). Required unless `media` is provided |
17
+ | `reply_to_tweet_id` | string | No | Tweet ID to reply to |
18
+ | `attachment_url` | string | No | URL to attach as a card |
19
+ | `community_id` | string | No | Community ID to post into |
20
+ | `is_note_tweet` | boolean | No | Long-form note tweet (up to 25,000 chars) |
21
+ | `media` | string[] | No | Public image URLs to attach (max 4). `POST /x/media` returns `mediaUrl` values for this field |
22
+
23
+ **Response:** `{ tweetId, success: true }`
24
+
25
+ **Errors:** `502 x_write_failed`
26
+
27
+ ### Delete Tweet
28
+
29
+ ```
30
+ delete request to `/x/tweets/{id}`
31
+ ```
32
+
33
+ **Body:** `{ "account": "username" }`
34
+
35
+ **Response:** `{ success: true }`
36
+
37
+ ### Like Tweet
38
+
39
+ ```
40
+ POST /x/tweets/{id}/like
41
+ ```
42
+
43
+ **Body:** `{ "account": "username" }`
44
+
45
+ ### Unlike Tweet
46
+
47
+ ```
48
+ delete request to `/x/tweets/{id}/like`
49
+ ```
50
+
51
+ **Body:** `{ "account": "username" }`
52
+
53
+ ### Retweet
54
+
55
+ ```
56
+ POST /x/tweets/{id}/retweet
57
+ ```
58
+
59
+ **Body:** `{ "account": "username" }`
60
+
61
+ ### Unretweet
62
+
63
+ ```
64
+ delete request to `/x/tweets/{id}/retweet`
65
+ ```
66
+
67
+ **Body:** `{ "account": "username" }`
68
+
69
+ ### Follow User
70
+
71
+ ```
72
+ POST /x/users/{id}/follow
73
+ ```
74
+
75
+ **Body:** `{ "account": "username" }`
76
+
77
+ **Errors:** `502 x_write_failed`
78
+
79
+ ### Unfollow User
80
+
81
+ ```
82
+ delete request to `/x/users/{id}/follow`
83
+ ```
84
+
85
+ **Body:** `{ "account": "username" }`
86
+
87
+ ### Remove Follower
88
+
89
+ ```
90
+ POST /x/users/{id}/remove-follower
91
+ ```
92
+
93
+ Remove a user from your followers without blocking them.
94
+
95
+ **Body:** `{ "account": "username" }`
96
+
97
+ **Usage:** Metered per call.
98
+
99
+ ### Send DM
100
+
101
+ ```
102
+ POST /x/dm/{userId}
103
+ ```
104
+
105
+ **Body:**
106
+
107
+ | Field | Type | Required | Description |
108
+ |-------|------|----------|-------------|
109
+ | `account` | string | Yes | Connected X username or account ID |
110
+ | `text` | string | Yes | Message text |
111
+ | `media_ids` | string[] | No | Media IDs to attach |
112
+ | `reply_to_message_id` | string | No | Message ID to reply to |
113
+
114
+ ### Get DM History
115
+
116
+ ```
117
+ GET /x/dm/{userId}/history
118
+ ```
119
+
120
+ Get DM conversation history with a user. Requires a connected X account. Metered per returned result.
121
+
122
+ **Sensitive:** Returns private DM conversations. Confirm with user before calling. Forward to other tools only after explicit approval.
123
+
124
+ ### Update Profile
125
+
126
+ ```
127
+ PATCH /x/profile
128
+ ```
129
+
130
+ **Body:** `{ "account": "username", "name": "...", "description": "...", "location": "...", "url": "..." }` (account required, others optional)
131
+
132
+ ### Update Avatar
133
+
134
+ ```
135
+ PATCH /x/profile/avatar
136
+ ```
137
+
138
+ Update profile avatar. Max 700 KB, GIF/JPEG/PNG. Metered.
139
+
140
+ **Body:** FormData with `account` (required) and `file` (required, max 700 KB).
141
+
142
+ ### Update Banner
143
+
144
+ ```
145
+ PATCH /x/profile/banner
146
+ ```
147
+
148
+ Update profile banner. Max 2 MB, GIF/JPEG/PNG. Metered.
149
+
150
+ **Body:** FormData with `account` (required) and `file` (required, max 2 MB).
151
+
152
+ ### Upload Media
153
+
154
+ ```
155
+ POST /x/media
156
+ ```
157
+
158
+ **Body:** FormData with `account` (required), `file` (required), and `is_long_video` (optional boolean). Alternatively, JSON body with `account` (required) and `url` (required, direct media URL) for URL-based upload.
159
+
160
+ **Response:** Returns `mediaId`, `mediaUrl`, and `success`. Pass `mediaUrl` in the `media` array when creating a tweet.
161
+
162
+ ### Create Community
163
+
164
+ ```
165
+ POST /x/communities
166
+ ```
167
+
168
+ **Body:** `{ "account": "username", "name": "...", "description": "..." }` (all required)
169
+
170
+ ### Delete Community
171
+
172
+ ```
173
+ delete request to `/x/communities/{id}`
174
+ ```
175
+
176
+ **Body:** `{ "account": "username", "community_name": "..." }` (name required for confirmation)
177
+
178
+ ### Join Community
179
+
180
+ ```
181
+ POST /x/communities/{id}/join
182
+ ```
183
+
184
+ **Body:** `{ "account": "username" }`
185
+
186
+ **Errors:** `409 already_member`
187
+
188
+ ### Leave Community
189
+
190
+ ```
191
+ delete request to `/x/communities/{id}/join`
192
+ ```
193
+
194
+ **Body:** `{ "account": "username" }`
195
+
196
+ ### Get Write Action Status
197
+
198
+ ```
199
+ GET /x/write-actions/{id}
200
+ ```
201
+
202
+ Check a pending write action by the ID returned from an earlier write response.
203
+
204
+ ---
@@ -0,0 +1,30 @@
1
+ # Xquik REST API Endpoints
2
+
3
+ Routing index for the REST API reference. Load only the section file needed for the user task instead of loading the full endpoint catalog.
4
+
5
+ Base URL: `https://xquik.com/api/v1`
6
+
7
+ All requests require the `x-api-key` header unless the section says session auth only. All responses are JSON. HTTPS only.
8
+
9
+ Plan and credit changes are dashboard-only. Agents may read usage state with `GET /credits`, but must not start plan or credit changes.
10
+
11
+ | Need | Reference |
12
+ |---|---|
13
+ | API Keys | [api-keys.md](api-endpoints-api-keys.md) |
14
+ | Monitors | [monitors.md](api-endpoints-monitors.md) |
15
+ | Events | [events.md](api-endpoints-events.md) |
16
+ | Webhooks | [webhooks.md](api-endpoints-webhooks.md) |
17
+ | Draws | [draws.md](api-endpoints-draws.md) |
18
+ | Extractions | [extractions.md](api-endpoints-extractions.md) |
19
+ | X API (Direct Lookups) | [x-api.md](api-endpoints-x-api.md) |
20
+ | X Media (Download) | [x-media.md](api-endpoints-x-media.md) |
21
+ | Trends | [trends.md](api-endpoints-trends.md) |
22
+ | Radar | [radar.md](api-endpoints-radar.md) |
23
+ | Compose | [compose.md](api-endpoints-compose.md) |
24
+ | Drafts | [drafts.md](api-endpoints-drafts.md) |
25
+ | Tweet Style Cache | [tweet-style-cache.md](api-endpoints-tweet-style-cache.md) |
26
+ | X Accounts (Connected) | [x-accounts.md](api-endpoints-x-accounts.md) |
27
+ | X Write | [x-write.md](api-endpoints-x-write.md) |
28
+ | Credits | [credits.md](api-endpoints-credits.md) |
29
+ | Support | [support.md](api-endpoints-support.md) |
30
+ | Error Codes | [error-codes.md](api-endpoints-error-codes.md) |
@@ -0,0 +1,57 @@
1
+ # Xquik Giveaway Draws
2
+
3
+ Run transparent, auditable giveaway draws from tweet replies with configurable filters.
4
+
5
+ ## Create Draw
6
+
7
+ `POST /draws` with a `tweetUrl` (required) and optional filters:
8
+
9
+ | Field | Type | Description |
10
+ |-------|------|-------------|
11
+ | `tweetUrl` | string | **Required.** Full tweet URL: `https://x.com/user/status/ID` |
12
+ | `winnerCount` | number | Winners to select (default 1) |
13
+ | `backupCount` | number | Backup winners to select |
14
+ | `uniqueAuthorsOnly` | boolean | Count only one entry per author |
15
+ | `mustRetweet` | boolean | Require participants to have retweeted |
16
+ | `mustFollowUsername` | string | Username participants must follow |
17
+ | `filterMinFollowers` | number | Minimum follower count |
18
+ | `filterAccountAgeDays` | number | Minimum account age in days |
19
+ | `filterLanguage` | string | Language code (e.g., `"en"`) |
20
+ | `requiredKeywords` | string[] | Words that must appear in the reply |
21
+ | `requiredHashtags` | string[] | Hashtags that must appear (e.g., `["#giveaway"]`) |
22
+ | `requiredMentions` | string[] | Usernames that must be mentioned (e.g., `["@xquik"]`) |
23
+
24
+ ## Complete Workflow
25
+
26
+ ```javascript
27
+ // Step 1: Create draw with filters
28
+ const draw = await xquikFetch("/draws", {
29
+ method: "POST",
30
+ body: JSON.stringify({
31
+ tweetUrl: "https://x.com/burakbayir/status/1893456789012345678",
32
+ winnerCount: 3,
33
+ backupCount: 2,
34
+ uniqueAuthorsOnly: true,
35
+ mustRetweet: true,
36
+ mustFollowUsername: "burakbayir",
37
+ filterMinFollowers: 50,
38
+ filterAccountAgeDays: 30,
39
+ filterLanguage: "en",
40
+ requiredHashtags: ["#giveaway"],
41
+ }),
42
+ });
43
+
44
+ // Step 2: Get draw details with winners
45
+ const details = await xquikFetch(`/draws/${draw.id}`);
46
+ // details.winners: [
47
+ // { position: 1, authorUsername: "winner1", tweetId: "...", isBackup: false },
48
+ // ...
49
+ // ]
50
+
51
+ // Step 3: Export results
52
+ const exportUrl = `${BASE}/draws/${draw.id}/export?format=csv`;
53
+ ```
54
+
55
+ ## Usage
56
+
57
+ Metered per participant entry.
@@ -0,0 +1,237 @@
1
+ # Xquik Extraction Tools
2
+
3
+ 23 bulk data extraction tools. Each requires a specific target parameter.
4
+
5
+ **Endpoint:** `POST /extractions`
6
+
7
+ **Always estimate first:** `POST /extractions/estimate` with the same body to preview `creditsRequired`, `creditsAvailable`, and whether the job is allowed.
8
+
9
+ ## Contents
10
+
11
+ - [Tool Types](#tool-types)
12
+ - [Response](#response)
13
+ - [Retrieving Results](#retrieving-results)
14
+ - [Exporting Results](#exporting-results)
15
+ - [Estimating Usage](#estimating-usage)
16
+
17
+ ## Tool Types
18
+
19
+ ### Tweet-Based (require `targetTweetId`)
20
+
21
+ | Tool Type | Description |
22
+ |-----------|-------------|
23
+ | `reply_extractor` | Extract users who replied to a tweet |
24
+ | `repost_extractor` | Extract users who retweeted a tweet |
25
+ | `quote_extractor` | Extract users who quote-tweeted a tweet |
26
+ | `thread_extractor` | Extract all tweets in a thread |
27
+ | `article_extractor` | Extract article content linked in a tweet |
28
+ | `favoriters` | Extract users who favorited a tweet |
29
+
30
+ **Example:**
31
+ ```json
32
+ {
33
+ "toolType": "reply_extractor",
34
+ "targetTweetId": "1893704267862470862"
35
+ }
36
+ ```
37
+
38
+ ### User-Based (require `targetUsername`)
39
+
40
+ | Tool Type | Description |
41
+ |-----------|-------------|
42
+ | `follower_explorer` | Extract followers of an account |
43
+ | `following_explorer` | Extract accounts followed by a user |
44
+ | `verified_follower_explorer` | Extract verified followers of an account |
45
+ | `mention_extractor` | Extract tweets mentioning an account |
46
+ | `post_extractor` | Extract posts from an account |
47
+
48
+ **Example:**
49
+ ```json
50
+ {
51
+ "toolType": "follower_explorer",
52
+ "targetUsername": "elonmusk"
53
+ }
54
+ ```
55
+
56
+ The `@` prefix is automatically stripped if included.
57
+
58
+ ### User-Based by ID (require `targetUserId`)
59
+
60
+ | Tool Type | Description |
61
+ |-----------|-------------|
62
+ | `user_likes` | Extract tweets liked by a user |
63
+ | `user_media` | Extract media tweets from a user |
64
+
65
+ **Example:**
66
+ ```json
67
+ {
68
+ "toolType": "user_likes",
69
+ "targetUserId": "44196397"
70
+ }
71
+ ```
72
+
73
+ ### Community-Based (require `targetCommunityId`)
74
+
75
+ | Tool Type | Description |
76
+ |-----------|-------------|
77
+ | `community_extractor` | Extract members of a community |
78
+ | `community_moderator_explorer` | Extract moderators of a community |
79
+ | `community_post_extractor` | Extract posts from a community |
80
+ | `community_search` | Search posts within a community (also requires `searchQuery`) |
81
+
82
+ **Example:**
83
+ ```json
84
+ {
85
+ "toolType": "community_extractor",
86
+ "targetCommunityId": "1234567890"
87
+ }
88
+ ```
89
+
90
+ ### List-Based (require `targetListId`)
91
+
92
+ | Tool Type | Description |
93
+ |-----------|-------------|
94
+ | `list_member_extractor` | Extract members of a list |
95
+ | `list_post_extractor` | Extract posts from a list |
96
+ | `list_follower_explorer` | Extract followers of a list |
97
+
98
+ **Example:**
99
+ ```json
100
+ {
101
+ "toolType": "list_member_extractor",
102
+ "targetListId": "1234567890"
103
+ }
104
+ ```
105
+
106
+ ### Space-Based (require `targetSpaceId`)
107
+
108
+ | Tool Type | Description |
109
+ |-----------|-------------|
110
+ | `space_explorer` | Extract participants of a Space |
111
+
112
+ **Example:**
113
+ ```json
114
+ {
115
+ "toolType": "space_explorer",
116
+ "targetSpaceId": "1YqKDqDXAbwKV"
117
+ }
118
+ ```
119
+
120
+ ### Search-Based (require `searchQuery`)
121
+
122
+ | Tool Type | Description |
123
+ |-----------|-------------|
124
+ | `people_search` | Search for users by keyword |
125
+ | `tweet_search_extractor` | Search and extract tweets by keyword or hashtag (bulk, up to 1,000) |
126
+
127
+ **Example (people search):**
128
+ ```json
129
+ {
130
+ "toolType": "people_search",
131
+ "searchQuery": "machine learning engineer"
132
+ }
133
+ ```
134
+
135
+ **Example (tweet search):**
136
+ ```json
137
+ {
138
+ "toolType": "tweet_search_extractor",
139
+ "searchQuery": "#AI",
140
+ "resultsLimit": 100
141
+ }
142
+ ```
143
+
144
+ ### Tweet Search Filters
145
+
146
+ The `tweet_search_extractor` tool type supports 16 additional filter fields that are converted to X search operators and combined with `searchQuery`:
147
+
148
+ | Field | Type | Description |
149
+ |-------|------|-------------|
150
+ | `fromUser` | string | Author username |
151
+ | `toUser` | string | Directed to user |
152
+ | `mentioning` | string | Mentions user |
153
+ | `language` | string | Language code (e.g., `en`) |
154
+ | `sinceDate` | string | Start date (YYYY-MM-DD) |
155
+ | `untilDate` | string | End date (YYYY-MM-DD) |
156
+ | `mediaType` | string | `images`, `videos`, `gifs`, or `media` |
157
+ | `minFaves` | number | Minimum likes |
158
+ | `minRetweets` | number | Minimum retweets |
159
+ | `minReplies` | number | Minimum replies |
160
+ | `verifiedOnly` | boolean | Verified authors only |
161
+ | `replies` | string | `include`, `exclude`, or `only` |
162
+ | `retweets` | string | `include`, `exclude`, or `only` |
163
+ | `exactPhrase` | string | Exact match text |
164
+ | `excludeWords` | string | Comma-separated words to exclude |
165
+ | `advancedQuery` | string | Raw X search operators appended to query |
166
+
167
+ **Example with filters:**
168
+ ```json
169
+ {
170
+ "toolType": "tweet_search_extractor",
171
+ "searchQuery": "AI",
172
+ "fromUser": "elonmusk",
173
+ "minFaves": 100,
174
+ "sinceDate": "2026-01-01",
175
+ "mediaType": "videos",
176
+ "resultsLimit": 500
177
+ }
178
+ ```
179
+
180
+ `resultsLimit` (optional): Maximum results to extract. Stops early instead of fetching all. Pass this on both `POST /extractions/estimate` and `POST /extractions` when you only need a specific count.
181
+
182
+ ## Response
183
+
184
+ ```json
185
+ {
186
+ "id": "77777",
187
+ "toolType": "reply_extractor",
188
+ "status": "completed",
189
+ "totalResults": 150
190
+ }
191
+ ```
192
+
193
+ Statuses: `pending`, `running`, `completed`, `failed`.
194
+
195
+ ## Retrieving Results
196
+
197
+ ```
198
+ GET /extractions/{id}
199
+ ```
200
+
201
+ Returns paginated results (up to 1,000 per page). Each result includes:
202
+
203
+ - `xUserId`, `xUsername`, `xDisplayName`
204
+ - `xFollowersCount`, `xVerified`, `xProfileImageUrl`
205
+ - `tweetId`, `tweetText`, `tweetCreatedAt` (for tweet-based extractions)
206
+
207
+ ## Exporting Results
208
+
209
+ ```
210
+ GET /extractions/{id}/export?format=csv
211
+ ```
212
+
213
+ Formats: `csv`, `json`, `md`, `md-document`, `pdf`, `txt`, `xlsx`. 100,000 row limit (10,000 for PDF).
214
+
215
+ Exports include enrichment columns not present in the API response.
216
+
217
+ ## Estimating Usage
218
+
219
+ ```
220
+ POST /extractions/estimate
221
+ ```
222
+
223
+ Same body as create. Response:
224
+
225
+ ```json
226
+ {
227
+ "allowed": true,
228
+ "source": "replyCount",
229
+ "estimatedResults": 150,
230
+ "creditsRequired": "150",
231
+ "creditsAvailable": "50000"
232
+ }
233
+ ```
234
+
235
+ If `allowed` is `false`, the extraction requires more credits than are currently available.
236
+
237
+ For common mistakes and tool selection rules, see [mcp-tools.md](mcp-tools.md#common-mistakes).