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.
- package/.claude-plugin/marketplace.json +60 -0
- package/.claude-plugin/plugin.json +45 -0
- package/.codex-plugin/plugin.json +61 -0
- package/.mcp.json +8 -0
- package/LICENSE +21 -0
- package/README.md +279 -0
- package/assets/icon.svg +1 -0
- package/commands/post.md +15 -0
- package/commands/search.md +16 -0
- package/commands/trending.md +17 -0
- package/commands/user.md +19 -0
- package/context7.json +33 -0
- package/logo.png +0 -0
- package/openclaw.plugin.json +25 -0
- package/package.json +79 -0
- package/scripts/check-versions.mjs +381 -0
- package/scripts/release-guard/content-policy.mjs +337 -0
- package/scripts/release-guard/frontmatter.mjs +148 -0
- package/scripts/release-guard/policy.mjs +223 -0
- package/server.json +18 -0
- package/skills/x-twitter-scraper/SKILL.md +387 -0
- package/skills/x-twitter-scraper/metadata.json +38 -0
- package/skills/x-twitter-scraper/references/api-endpoints-api-keys.md +31 -0
- package/skills/x-twitter-scraper/references/api-endpoints-compose.md +33 -0
- package/skills/x-twitter-scraper/references/api-endpoints-credits.md +11 -0
- package/skills/x-twitter-scraper/references/api-endpoints-drafts.md +86 -0
- package/skills/x-twitter-scraper/references/api-endpoints-draws.md +75 -0
- package/skills/x-twitter-scraper/references/api-endpoints-error-codes.md +37 -0
- package/skills/x-twitter-scraper/references/api-endpoints-events.md +48 -0
- package/skills/x-twitter-scraper/references/api-endpoints-extractions.md +97 -0
- package/skills/x-twitter-scraper/references/api-endpoints-monitors.md +74 -0
- package/skills/x-twitter-scraper/references/api-endpoints-radar.md +49 -0
- package/skills/x-twitter-scraper/references/api-endpoints-support.md +47 -0
- package/skills/x-twitter-scraper/references/api-endpoints-trends.md +25 -0
- package/skills/x-twitter-scraper/references/api-endpoints-tweet-style-cache.md +155 -0
- package/skills/x-twitter-scraper/references/api-endpoints-webhooks.md +74 -0
- package/skills/x-twitter-scraper/references/api-endpoints-x-accounts.md +42 -0
- package/skills/x-twitter-scraper/references/api-endpoints-x-api.md +206 -0
- package/skills/x-twitter-scraper/references/api-endpoints-x-media.md +40 -0
- package/skills/x-twitter-scraper/references/api-endpoints-x-write.md +204 -0
- package/skills/x-twitter-scraper/references/api-endpoints.md +30 -0
- package/skills/x-twitter-scraper/references/draws.md +57 -0
- package/skills/x-twitter-scraper/references/extractions.md +237 -0
- package/skills/x-twitter-scraper/references/mcp-setup.md +273 -0
- package/skills/x-twitter-scraper/references/mcp-tools.md +174 -0
- package/skills/x-twitter-scraper/references/python-examples.md +182 -0
- package/skills/x-twitter-scraper/references/security.md +124 -0
- package/skills/x-twitter-scraper/references/types-account-identity.md +9 -0
- package/skills/x-twitter-scraper/references/types-account.md +26 -0
- package/skills/x-twitter-scraper/references/types-api-keys.md +22 -0
- package/skills/x-twitter-scraper/references/types-bookmarks-and-timeline.md +46 -0
- package/skills/x-twitter-scraper/references/types-credits.md +11 -0
- package/skills/x-twitter-scraper/references/types-download-media.md +22 -0
- package/skills/x-twitter-scraper/references/types-draws.md +60 -0
- package/skills/x-twitter-scraper/references/types-error.md +10 -0
- package/skills/x-twitter-scraper/references/types-events.md +43 -0
- package/skills/x-twitter-scraper/references/types-extractions.md +106 -0
- package/skills/x-twitter-scraper/references/types-mcp-add-webhook.md +14 -0
- package/skills/x-twitter-scraper/references/types-mcp-check-follow.md +10 -0
- package/skills/x-twitter-scraper/references/types-mcp-compose-tweet.md +31 -0
- package/skills/x-twitter-scraper/references/types-mcp-estimate-extraction.md +15 -0
- package/skills/x-twitter-scraper/references/types-mcp-get-account.md +26 -0
- package/skills/x-twitter-scraper/references/types-mcp-get-draw.md +30 -0
- package/skills/x-twitter-scraper/references/types-mcp-get-events.md +19 -0
- package/skills/x-twitter-scraper/references/types-mcp-get-trends.md +16 -0
- package/skills/x-twitter-scraper/references/types-mcp-get-user-info.md +16 -0
- package/skills/x-twitter-scraper/references/types-mcp-list-monitors.md +15 -0
- package/skills/x-twitter-scraper/references/types-mcp-lookup-tweet.md +25 -0
- package/skills/x-twitter-scraper/references/types-mcp-output-schemas.md +22 -0
- package/skills/x-twitter-scraper/references/types-mcp-refine-tweet.md +13 -0
- package/skills/x-twitter-scraper/references/types-mcp-run-draw.md +18 -0
- package/skills/x-twitter-scraper/references/types-mcp-run-extraction.md +12 -0
- package/skills/x-twitter-scraper/references/types-mcp-score-tweet.md +16 -0
- package/skills/x-twitter-scraper/references/types-mcp-search-tweets.md +17 -0
- package/skills/x-twitter-scraper/references/types-mcp-test-webhook.md +11 -0
- package/skills/x-twitter-scraper/references/types-monitors.md +20 -0
- package/skills/x-twitter-scraper/references/types-radar.md +40 -0
- package/skills/x-twitter-scraper/references/types-request-bodies.md +30 -0
- package/skills/x-twitter-scraper/references/types-rest-api-vs-mcp-field-naming.md +15 -0
- package/skills/x-twitter-scraper/references/types-support.md +25 -0
- package/skills/x-twitter-scraper/references/types-trends.md +18 -0
- package/skills/x-twitter-scraper/references/types-tweet-drafts.md +20 -0
- package/skills/x-twitter-scraper/references/types-tweet-style-cache.md +50 -0
- package/skills/x-twitter-scraper/references/types-user-activity.md +35 -0
- package/skills/x-twitter-scraper/references/types-webhooks.md +38 -0
- package/skills/x-twitter-scraper/references/types-x-accounts.md +16 -0
- package/skills/x-twitter-scraper/references/types-x-api.md +69 -0
- package/skills/x-twitter-scraper/references/types-x-articles.md +21 -0
- package/skills/x-twitter-scraper/references/types-x-write.md +39 -0
- package/skills/x-twitter-scraper/references/types.md +48 -0
- package/skills/x-twitter-scraper/references/usage.md +50 -0
- package/skills/x-twitter-scraper/references/webhooks.md +243 -0
- package/skills/x-twitter-scraper/references/workflows.md +202 -0
- package/skills/x-twitter-scraper/skill-card.md +76 -0
- package/skills/x-twitter-scraper/skillspector-report.md +17 -0
- package/skills/xquik-social-research/LICENSE +21 -0
- package/skills/xquik-social-research/SKILL.md +77 -0
- package/skills.sh.json +77 -0
- package/start.sh +2 -0
- package/stub-server.mjs +209 -0
- package/task-guides/check-mutuals.md +55 -0
- package/task-guides/clean-followers.md +71 -0
- package/task-guides/export-tweets-csv.md +70 -0
- package/task-guides/extract-followers.md +83 -0
- package/task-guides/find-bangers.md +61 -0
- package/task-guides/find-influencers.md +72 -0
- package/task-guides/find-viral-tweets.md +80 -0
- package/task-guides/follow-unfollow.md +83 -0
- package/task-guides/for-you-feed.md +63 -0
- package/task-guides/going-viral.md +68 -0
- package/task-guides/grow-followers.md +66 -0
- package/task-guides/monitor-accounts.md +81 -0
- package/task-guides/optimize-tweets.md +80 -0
- package/task-guides/post-tweets.md +108 -0
- package/task-guides/run-giveaway.md +90 -0
- package/task-guides/search-tweets.md +122 -0
- package/task-guides/send-dms.md +92 -0
- package/task-guides/top-replies.md +71 -0
- package/task-guides/track-competitors.md +73 -0
- package/task-guides/track-hashtags.md +86 -0
- package/task-guides/track-mentions.md +88 -0
- package/task-guides/trending-news.md +68 -0
- package/task-guides/tweet-analytics.md +129 -0
- package/task-guides/tweet-ideas.md +65 -0
- package/task-guides/tweet-replies.md +82 -0
- package/task-guides/tweet-style.md +72 -0
- package/task-guides/tweet-webhooks.md +84 -0
- package/task-guides/update-x-profile.md +75 -0
- package/task-guides/user-tweets.md +148 -0
- package/task-guides/who-liked.md +68 -0
- package/task-guides/who-quoted.md +68 -0
- package/task-guides/who-retweeted.md +67 -0
- package/task-guides/write-threads.md +72 -0
- package/task-guides/write-tweets.md +84 -0
- package/task-guides/x-articles.md +84 -0
- package/task-guides/x-bookmarks.md +63 -0
- package/task-guides/x-communities.md +71 -0
- package/task-guides/x-lists.md +70 -0
- package/task-guides/x-spaces.md +67 -0
- 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).
|