x-developer 2.4.13 → 2.5.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 +60 -0
- package/.claude-plugin/plugin.json +45 -0
- package/.codex-plugin/plugin.json +61 -0
- package/.mcp.json +11 -0
- package/README.md +148 -100
- 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 +2 -2
- package/package.json +31 -8
- 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 +227 -0
- package/server.json +33 -0
- package/skills/x-twitter-scraper/SKILL.md +214 -44
- package/skills/x-twitter-scraper/metadata.json +30 -6
- 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 +26 -1421
- package/skills/x-twitter-scraper/references/draws.md +2 -2
- package/skills/x-twitter-scraper/references/extractions.md +9 -1
- package/skills/x-twitter-scraper/references/mcp-setup.md +41 -24
- package/skills/x-twitter-scraper/references/mcp-tools.md +36 -27
- package/skills/x-twitter-scraper/references/python-examples.md +70 -38
- package/skills/x-twitter-scraper/references/security.md +47 -14
- 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 +46 -1038
- package/skills/x-twitter-scraper/references/usage.md +50 -0
- package/skills/x-twitter-scraper/references/webhooks.md +78 -48
- package/skills/x-twitter-scraper/references/workflows.md +50 -40
- 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
- package/skills/x-twitter-scraper/references/pricing.md +0 -145
|
@@ -1,1425 +1,30 @@
|
|
|
1
1
|
# Xquik REST API Endpoints
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
All requests require the `x-api-key` header. All responses are JSON. HTTPS only.
|
|
6
|
-
|
|
7
|
-
## Table of Contents
|
|
8
|
-
|
|
9
|
-
- [API Keys](#api-keys)
|
|
10
|
-
- [Monitors](#monitors)
|
|
11
|
-
- [Events](#events)
|
|
12
|
-
- [Webhooks](#webhooks)
|
|
13
|
-
- [Draws](#draws)
|
|
14
|
-
- [Extractions](#extractions)
|
|
15
|
-
- [X API (Direct Lookups)](#x-api-direct-lookups)
|
|
16
|
-
- [X Media (Download)](#x-media-download)
|
|
17
|
-
- [Trends](#trends)
|
|
18
|
-
- [Radar](#radar)
|
|
19
|
-
- [Compose](#compose)
|
|
20
|
-
- [Drafts](#drafts)
|
|
21
|
-
- [Tweet Style Cache](#tweet-style-cache)
|
|
22
|
-
- [Subscribe](#subscribe)
|
|
23
|
-
- [X Accounts (Connected)](#x-accounts-connected)
|
|
24
|
-
- [X Write](#x-write)
|
|
25
|
-
- [Credits](#credits)
|
|
26
|
-
- [Support](#support)
|
|
27
|
-
|
|
28
|
-
---
|
|
29
|
-
|
|
30
|
-
## API Keys
|
|
31
|
-
|
|
32
|
-
Session auth only. These endpoints do not accept API key auth.
|
|
33
|
-
|
|
34
|
-
### Create API Key
|
|
35
|
-
|
|
36
|
-
```
|
|
37
|
-
POST /api-keys
|
|
38
|
-
```
|
|
39
|
-
|
|
40
|
-
**Body:** `{ "name": "My Key" }` (optional)
|
|
41
|
-
|
|
42
|
-
**Response:** Returns `fullKey` (shown only once), `prefix`, `name`, `id`, `createdAt`.
|
|
43
|
-
|
|
44
|
-
### List API Keys
|
|
45
|
-
|
|
46
|
-
```
|
|
47
|
-
GET /api-keys
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
Returns all keys with `id`, `name`, `prefix`, `isActive`, `createdAt`, `lastUsedAt`. Full key is never exposed.
|
|
51
|
-
|
|
52
|
-
### Revoke API Key
|
|
53
|
-
|
|
54
|
-
```
|
|
55
|
-
DELETE /api-keys/{id}
|
|
56
|
-
```
|
|
57
|
-
|
|
58
|
-
Permanent and irreversible. The key stops working immediately.
|
|
59
|
-
|
|
60
|
-
---
|
|
61
|
-
|
|
62
|
-
## Monitors
|
|
63
|
-
|
|
64
|
-
### Create Monitor
|
|
65
|
-
|
|
66
|
-
```
|
|
67
|
-
POST /monitors
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
**Body:**
|
|
71
|
-
```json
|
|
72
|
-
{
|
|
73
|
-
"username": "elonmusk",
|
|
74
|
-
"eventTypes": ["tweet.new", "tweet.reply", "tweet.quote"]
|
|
75
|
-
}
|
|
76
|
-
```
|
|
77
|
-
|
|
78
|
-
**Response:**
|
|
79
|
-
```json
|
|
80
|
-
{
|
|
81
|
-
"id": "7",
|
|
82
|
-
"username": "elonmusk",
|
|
83
|
-
"xUserId": "44196397",
|
|
84
|
-
"eventTypes": ["tweet.new", "tweet.reply", "tweet.quote"],
|
|
85
|
-
"createdAt": "2026-02-24T10:30:00.000Z"
|
|
86
|
-
}
|
|
87
|
-
```
|
|
88
|
-
|
|
89
|
-
Event types: `tweet.new`, `tweet.quote`, `tweet.reply`, `tweet.retweet`, `webhook.test`.
|
|
90
|
-
|
|
91
|
-
Returns `409 monitor_already_exists` if the username is already monitored.
|
|
92
|
-
|
|
93
|
-
### List Monitors
|
|
94
|
-
|
|
95
|
-
```
|
|
96
|
-
GET /monitors
|
|
97
|
-
```
|
|
98
|
-
|
|
99
|
-
Returns all monitors (up to 200, no pagination). Response includes `monitors` array and `total` count.
|
|
100
|
-
|
|
101
|
-
### Get Monitor
|
|
102
|
-
|
|
103
|
-
```
|
|
104
|
-
GET /monitors/{id}
|
|
105
|
-
```
|
|
106
|
-
|
|
107
|
-
### Update Monitor
|
|
108
|
-
|
|
109
|
-
```
|
|
110
|
-
PATCH /monitors/{id}
|
|
111
|
-
```
|
|
112
|
-
|
|
113
|
-
**Body:** `{ "eventTypes": [...], "isActive": true|false }` (both optional)
|
|
114
|
-
|
|
115
|
-
### Delete Monitor
|
|
116
|
-
|
|
117
|
-
```
|
|
118
|
-
DELETE /monitors/{id}
|
|
119
|
-
```
|
|
120
|
-
|
|
121
|
-
Stops tracking and deletes all associated data.
|
|
122
|
-
|
|
123
|
-
### Keyword Monitors
|
|
124
|
-
|
|
125
|
-
```
|
|
126
|
-
GET /monitors/keywords
|
|
127
|
-
POST /monitors/keywords
|
|
128
|
-
GET /monitors/keywords/{id}
|
|
129
|
-
PATCH /monitors/keywords/{id}
|
|
130
|
-
DELETE /monitors/keywords/{id}
|
|
131
|
-
```
|
|
132
|
-
|
|
133
|
-
Create and manage ongoing keyword monitors. Treat these as persistent resources: confirm the keyword query, event delivery plan, and ongoing cost before creating or enabling one.
|
|
134
|
-
|
|
135
|
-
---
|
|
136
|
-
|
|
137
|
-
## Events
|
|
138
|
-
|
|
139
|
-
### List Events
|
|
140
|
-
|
|
141
|
-
```
|
|
142
|
-
GET /events
|
|
143
|
-
```
|
|
144
|
-
|
|
145
|
-
**Query parameters:**
|
|
146
|
-
|
|
147
|
-
| Param | Type | Description |
|
|
148
|
-
|-------|------|-------------|
|
|
149
|
-
| `monitorId` | string | Filter by monitor ID |
|
|
150
|
-
| `eventType` | string | Filter by event type |
|
|
151
|
-
| `limit` | number | Results per page (1-100, default 50) |
|
|
152
|
-
| `after` | string | Cursor for next page |
|
|
153
|
-
|
|
154
|
-
**Response:**
|
|
155
|
-
```json
|
|
156
|
-
{
|
|
157
|
-
"events": [
|
|
158
|
-
{
|
|
159
|
-
"id": "9010",
|
|
160
|
-
"type": "tweet.new",
|
|
161
|
-
"monitorId": "7",
|
|
162
|
-
"username": "elonmusk",
|
|
163
|
-
"occurredAt": "2026-02-24T16:45:00.000Z",
|
|
164
|
-
"data": {
|
|
165
|
-
"tweetId": "1893556789012345678",
|
|
166
|
-
"text": "Hello world",
|
|
167
|
-
"metrics": { "likes": 3200, "retweets": 890, "replies": 245 }
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
],
|
|
171
|
-
"hasMore": true,
|
|
172
|
-
"nextCursor": "MjAyNi0wMi0yNFQxNjozMDowMC4wMDBa..."
|
|
173
|
-
}
|
|
174
|
-
```
|
|
175
|
-
|
|
176
|
-
### Get Event
|
|
177
|
-
|
|
178
|
-
```
|
|
179
|
-
GET /events/{id}
|
|
180
|
-
```
|
|
181
|
-
|
|
182
|
-
Returns a single event with full details.
|
|
183
|
-
|
|
184
|
-
---
|
|
185
|
-
|
|
186
|
-
## Webhooks
|
|
187
|
-
|
|
188
|
-
### Create Webhook
|
|
189
|
-
|
|
190
|
-
```
|
|
191
|
-
POST /webhooks
|
|
192
|
-
```
|
|
193
|
-
|
|
194
|
-
**Body:**
|
|
195
|
-
```json
|
|
196
|
-
{
|
|
197
|
-
"url": "https://your-server.com/webhook",
|
|
198
|
-
"eventTypes": ["tweet.new", "tweet.reply"]
|
|
199
|
-
}
|
|
200
|
-
```
|
|
201
|
-
|
|
202
|
-
**Response** includes a `secret` field (shown only once). Store it for signature verification.
|
|
203
|
-
|
|
204
|
-
### List Webhooks
|
|
205
|
-
|
|
206
|
-
```
|
|
207
|
-
GET /webhooks
|
|
208
|
-
```
|
|
209
|
-
|
|
210
|
-
Returns all webhooks (up to 200). Secret is never exposed in list responses.
|
|
211
|
-
|
|
212
|
-
### Update Webhook
|
|
213
|
-
|
|
214
|
-
```
|
|
215
|
-
PATCH /webhooks/{id}
|
|
216
|
-
```
|
|
217
|
-
|
|
218
|
-
**Body:** `{ "url": "...", "eventTypes": [...], "isActive": true|false }` (all optional)
|
|
219
|
-
|
|
220
|
-
### Delete Webhook
|
|
221
|
-
|
|
222
|
-
```
|
|
223
|
-
DELETE /webhooks/{id}
|
|
224
|
-
```
|
|
225
|
-
|
|
226
|
-
Permanently removes the webhook. All future deliveries are stopped.
|
|
227
|
-
|
|
228
|
-
### Test Webhook
|
|
229
|
-
|
|
230
|
-
```
|
|
231
|
-
POST /webhooks/{id}/test
|
|
232
|
-
```
|
|
233
|
-
|
|
234
|
-
Sends a `webhook.test` event to the webhook endpoint, HMAC-signed with the webhook's secret. Returns success or failure status with HTTP response details.
|
|
235
|
-
|
|
236
|
-
**Payload delivered to your endpoint:**
|
|
237
|
-
```json
|
|
238
|
-
{
|
|
239
|
-
"eventType": "webhook.test",
|
|
240
|
-
"data": {
|
|
241
|
-
"message": "Test delivery from Xquik"
|
|
242
|
-
},
|
|
243
|
-
"timestamp": "2026-02-27T12:00:00.000Z"
|
|
244
|
-
}
|
|
245
|
-
```
|
|
246
|
-
|
|
247
|
-
The delivery includes the `X-Xquik-Signature` header, identical to production deliveries.
|
|
248
|
-
|
|
249
|
-
Returns `400 webhook_inactive` if the webhook is disabled. Reactivate via `PATCH /webhooks/{id}` before testing.
|
|
250
|
-
|
|
251
|
-
### List Deliveries
|
|
252
|
-
|
|
253
|
-
```
|
|
254
|
-
GET /webhooks/{id}/deliveries
|
|
255
|
-
```
|
|
256
|
-
|
|
257
|
-
View delivery attempts and statuses for a webhook. Statuses: `pending`, `delivered`, `failed`, `exhausted`.
|
|
258
|
-
|
|
259
|
-
---
|
|
260
|
-
|
|
261
|
-
## Draws
|
|
262
|
-
|
|
263
|
-
### Create Draw
|
|
264
|
-
|
|
265
|
-
```
|
|
266
|
-
POST /draws
|
|
267
|
-
```
|
|
268
|
-
|
|
269
|
-
Run a giveaway draw from a tweet. Picks random winners from replies.
|
|
270
|
-
|
|
271
|
-
**Body:**
|
|
272
|
-
```json
|
|
273
|
-
{
|
|
274
|
-
"tweetUrl": "https://x.com/user/status/1893456789012345678",
|
|
275
|
-
"winnerCount": 3,
|
|
276
|
-
"backupCount": 2,
|
|
277
|
-
"uniqueAuthorsOnly": true,
|
|
278
|
-
"mustRetweet": true,
|
|
279
|
-
"mustFollowUsername": "burakbayir",
|
|
280
|
-
"filterMinFollowers": 100,
|
|
281
|
-
"filterAccountAgeDays": 30,
|
|
282
|
-
"filterLanguage": "en",
|
|
283
|
-
"requiredKeywords": ["giveaway"],
|
|
284
|
-
"requiredHashtags": ["#contest"],
|
|
285
|
-
"requiredMentions": ["@xquik"]
|
|
286
|
-
}
|
|
287
|
-
```
|
|
288
|
-
|
|
289
|
-
All filter fields are optional. Only `tweetUrl` is required.
|
|
290
|
-
|
|
291
|
-
**Response:**
|
|
292
|
-
```json
|
|
293
|
-
{
|
|
294
|
-
"id": "42",
|
|
295
|
-
"tweetId": "1893456789012345678",
|
|
296
|
-
"tweetUrl": "https://x.com/user/status/1893456789012345678",
|
|
297
|
-
"tweetText": "Like & RT to enter! Picking 3 winners tomorrow.",
|
|
298
|
-
"tweetAuthorUsername": "xquik",
|
|
299
|
-
"tweetLikeCount": 4200,
|
|
300
|
-
"tweetRetweetCount": 1800,
|
|
301
|
-
"tweetReplyCount": 1500,
|
|
302
|
-
"tweetQuoteCount": 120,
|
|
303
|
-
"status": "completed",
|
|
304
|
-
"totalEntries": 1500,
|
|
305
|
-
"validEntries": 890,
|
|
306
|
-
"createdAt": "2026-02-24T10:00:00.000Z",
|
|
307
|
-
"drawnAt": "2026-02-24T10:01:00.000Z"
|
|
308
|
-
}
|
|
309
|
-
```
|
|
310
|
-
|
|
311
|
-
### List Draws
|
|
312
|
-
|
|
313
|
-
```
|
|
314
|
-
GET /draws
|
|
315
|
-
```
|
|
316
|
-
|
|
317
|
-
Cursor-paginated. Returns compact draw objects.
|
|
318
|
-
|
|
319
|
-
### Get Draw
|
|
320
|
-
|
|
321
|
-
```
|
|
322
|
-
GET /draws/{id}
|
|
323
|
-
```
|
|
324
|
-
|
|
325
|
-
Returns full draw details including winners.
|
|
326
|
-
|
|
327
|
-
### Export Draw
|
|
328
|
-
|
|
329
|
-
```
|
|
330
|
-
GET /draws/{id}/export?format=csv&type=winners
|
|
331
|
-
```
|
|
332
|
-
|
|
333
|
-
Formats: `csv`, `json`, `md`, `md-document`, `pdf`, `txt`, `xlsx`. Types: `winners` (default), `entries`. Entry exports capped at 100,000 rows (PDF capped at 10,000).
|
|
334
|
-
|
|
335
|
-
---
|
|
336
|
-
|
|
337
|
-
## Extractions
|
|
338
|
-
|
|
339
|
-
### Create Extraction
|
|
340
|
-
|
|
341
|
-
```
|
|
342
|
-
POST /extractions
|
|
343
|
-
```
|
|
344
|
-
|
|
345
|
-
Run a bulk data extraction job. See `references/extractions.md` for all 23 tool types.
|
|
346
|
-
|
|
347
|
-
**Body:**
|
|
348
|
-
```json
|
|
349
|
-
{
|
|
350
|
-
"toolType": "reply_extractor",
|
|
351
|
-
"targetTweetId": "1893704267862470862",
|
|
352
|
-
"resultsLimit": 500
|
|
353
|
-
}
|
|
354
|
-
```
|
|
355
|
-
|
|
356
|
-
`resultsLimit` (optional): Maximum results to extract. Stops early instead of fetching all data. Useful for controlling costs.
|
|
357
|
-
|
|
358
|
-
**Tweet Search Filters** (`tweet_search_extractor` only):
|
|
359
|
-
|
|
360
|
-
| Field | Type | Description |
|
|
361
|
-
|-------|------|-------------|
|
|
362
|
-
| `fromUser` | string | Author username |
|
|
363
|
-
| `toUser` | string | Directed to user |
|
|
364
|
-
| `mentioning` | string | Mentions user |
|
|
365
|
-
| `language` | string | Language code (e.g., `en`) |
|
|
366
|
-
| `sinceDate` | string | Start date (YYYY-MM-DD) |
|
|
367
|
-
| `untilDate` | string | End date (YYYY-MM-DD) |
|
|
368
|
-
| `mediaType` | string | `images`, `videos`, `gifs`, or `media` |
|
|
369
|
-
| `minFaves` | number | Minimum likes |
|
|
370
|
-
| `minRetweets` | number | Minimum retweets |
|
|
371
|
-
| `minReplies` | number | Minimum replies |
|
|
372
|
-
| `verifiedOnly` | boolean | Verified authors only |
|
|
373
|
-
| `replies` | string | `include`, `exclude`, or `only` |
|
|
374
|
-
| `retweets` | string | `include`, `exclude`, or `only` |
|
|
375
|
-
| `exactPhrase` | string | Exact match text |
|
|
376
|
-
| `excludeWords` | string | Comma-separated words to exclude |
|
|
377
|
-
| `advancedQuery` | string | Raw X search operators appended to query |
|
|
378
|
-
|
|
379
|
-
These filters are converted to X search operators and combined with `searchQuery`.
|
|
380
|
-
|
|
381
|
-
**Response:**
|
|
382
|
-
```json
|
|
383
|
-
{
|
|
384
|
-
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
|
385
|
-
"toolType": "reply_extractor",
|
|
386
|
-
"status": "running"
|
|
387
|
-
}
|
|
388
|
-
```
|
|
389
|
-
|
|
390
|
-
### Estimate Extraction
|
|
391
|
-
|
|
392
|
-
```
|
|
393
|
-
POST /extractions/estimate
|
|
394
|
-
```
|
|
395
|
-
|
|
396
|
-
Preview the cost before running. Same body as create.
|
|
397
|
-
|
|
398
|
-
**Response:**
|
|
399
|
-
```json
|
|
400
|
-
{
|
|
401
|
-
"allowed": true,
|
|
402
|
-
"creditsAvailable": "50000",
|
|
403
|
-
"creditsRequired": "150",
|
|
404
|
-
"source": "replyCount",
|
|
405
|
-
"estimatedResults": 150
|
|
406
|
-
}
|
|
407
|
-
```
|
|
408
|
-
|
|
409
|
-
### List Extractions
|
|
410
|
-
|
|
411
|
-
```
|
|
412
|
-
GET /extractions
|
|
413
|
-
```
|
|
414
|
-
|
|
415
|
-
Cursor-paginated. Filter by `status` and `toolType`.
|
|
416
|
-
|
|
417
|
-
### Get Extraction
|
|
418
|
-
|
|
419
|
-
```
|
|
420
|
-
GET /extractions/{id}
|
|
421
|
-
```
|
|
422
|
-
|
|
423
|
-
Returns job details with paginated results (up to 1,000 per page).
|
|
424
|
-
|
|
425
|
-
### Export Extraction
|
|
426
|
-
|
|
427
|
-
```
|
|
428
|
-
GET /extractions/{id}/export?format=csv
|
|
429
|
-
```
|
|
430
|
-
|
|
431
|
-
Formats: `csv`, `json`, `md`, `md-document`, `pdf`, `txt`, `xlsx`. 100,000 row limit (PDF 10,000). Exports include enrichment columns not in the API response.
|
|
432
|
-
|
|
433
|
-
---
|
|
434
|
-
|
|
435
|
-
## X API (Direct Lookups)
|
|
436
|
-
|
|
437
|
-
Metered operations that deduct credits from the account balance.
|
|
438
|
-
|
|
439
|
-
### Get Tweet
|
|
440
|
-
|
|
441
|
-
```
|
|
442
|
-
GET /x/tweets/{id}
|
|
443
|
-
```
|
|
444
|
-
|
|
445
|
-
Returns full tweet with engagement metrics (likes, retweets, replies, quotes, views, bookmarks), author info (username, followers, verified status, profile picture), and optional attached media (photos/videos with URLs).
|
|
446
|
-
|
|
447
|
-
### Get Article
|
|
448
|
-
|
|
449
|
-
```
|
|
450
|
-
GET /x/articles/{tweetId}
|
|
451
|
-
```
|
|
452
|
-
|
|
453
|
-
Retrieve the full content of an X Article (long-form post) by numeric tweet ID. If the user gives an article URL, use the final status ID as `tweetId`. Returns title, body text with block-level formatting, cover image, inline images, and engagement metrics. Metered.
|
|
454
|
-
|
|
455
|
-
**Response:**
|
|
456
|
-
```json
|
|
457
|
-
{
|
|
458
|
-
"title": "Why AI Will Transform Everything",
|
|
459
|
-
"coverImage": "https://pbs.twimg.com/...",
|
|
460
|
-
"bodyHtml": "<p>The future of AI...</p>",
|
|
461
|
-
"likeCount": 5200,
|
|
462
|
-
"retweetCount": 890,
|
|
463
|
-
"replyCount": 245,
|
|
464
|
-
"viewCount": 150000,
|
|
465
|
-
"bookmarkCount": 1200,
|
|
466
|
-
"author": {
|
|
467
|
-
"id": "44196397",
|
|
468
|
-
"username": "elonmusk",
|
|
469
|
-
"name": "Elon Musk"
|
|
470
|
-
}
|
|
471
|
-
}
|
|
472
|
-
```
|
|
473
|
-
|
|
474
|
-
### Search Tweets
|
|
475
|
-
|
|
476
|
-
```
|
|
477
|
-
GET /x/tweets/search?q={query}
|
|
478
|
-
```
|
|
479
|
-
|
|
480
|
-
Search using X syntax: keywords, `#hashtags`, `from:user`, `to:user`, `"exact phrases"`, `OR`, `-exclude`.
|
|
481
|
-
|
|
482
|
-
Returns tweet info with optional engagement metrics (likeCount, retweetCount, replyCount) and optional attached media. Some fields may be omitted if unavailable.
|
|
483
|
-
|
|
484
|
-
### Get User
|
|
485
|
-
|
|
486
|
-
```
|
|
487
|
-
GET /x/users/{id}
|
|
488
|
-
```
|
|
489
|
-
|
|
490
|
-
Returns profile info. `id` accepts either an X username without `@` or a numeric user ID. Fields `id`, `username`, `name` are always present. All other fields (`description`, `followers`, `following`, `verified`, `profilePicture`, `location`, `createdAt`, `statusesCount`) are optional and omitted when unavailable.
|
|
491
|
-
|
|
492
|
-
### Batch & Search Users
|
|
493
|
-
|
|
494
|
-
```
|
|
495
|
-
GET /x/users/batch?ids=44196397,783214
|
|
496
|
-
GET /x/users/search?q=founder
|
|
497
|
-
```
|
|
498
|
-
|
|
499
|
-
Batch lookup accepts up to 100 comma-separated numeric user IDs. User search returns matching profiles and may include a pagination cursor.
|
|
500
|
-
|
|
501
|
-
### Check Follower
|
|
502
|
-
|
|
503
|
-
```
|
|
504
|
-
GET /x/followers/check?source={username}&target={username}
|
|
505
|
-
```
|
|
506
|
-
|
|
507
|
-
Returns `isFollowing` and `isFollowedBy` for both directions.
|
|
508
|
-
|
|
509
|
-
### Get User Tweets
|
|
510
|
-
|
|
511
|
-
```
|
|
512
|
-
GET /x/users/{id}/tweets
|
|
513
|
-
```
|
|
514
|
-
|
|
515
|
-
Get a user's recent tweets by user ID. Metered (1 credit/tweet).
|
|
516
|
-
|
|
517
|
-
### Batch Tweets
|
|
518
|
-
|
|
519
|
-
```
|
|
520
|
-
GET /x/tweets?ids=1893456789012345678,1893456789012345679
|
|
521
|
-
```
|
|
522
|
-
|
|
523
|
-
Get multiple tweets by comma-separated tweet IDs. Maximum 100 IDs.
|
|
524
|
-
|
|
525
|
-
### Get User Likes
|
|
526
|
-
|
|
527
|
-
```
|
|
528
|
-
GET /x/users/{id}/likes
|
|
529
|
-
```
|
|
530
|
-
|
|
531
|
-
Get tweets liked by a user. Metered (1 credit/result).
|
|
532
|
-
|
|
533
|
-
### Get User Media
|
|
534
|
-
|
|
535
|
-
```
|
|
536
|
-
GET /x/users/{id}/media
|
|
537
|
-
```
|
|
538
|
-
|
|
539
|
-
Get a user's media tweets (tweets containing photos/videos). Metered (1 credit/result).
|
|
540
|
-
|
|
541
|
-
### Get Tweet Favoriters
|
|
542
|
-
|
|
543
|
-
```
|
|
544
|
-
GET /x/tweets/{id}/favoriters
|
|
545
|
-
```
|
|
546
|
-
|
|
547
|
-
Get users who liked a tweet. Metered (1 credit/result).
|
|
548
|
-
|
|
549
|
-
### Tweet Conversation & Engagement Lists
|
|
550
|
-
|
|
551
|
-
```
|
|
552
|
-
GET /x/tweets/{id}/quotes
|
|
553
|
-
GET /x/tweets/{id}/replies
|
|
554
|
-
GET /x/tweets/{id}/retweeters
|
|
555
|
-
GET /x/tweets/{id}/thread
|
|
556
|
-
```
|
|
557
|
-
|
|
558
|
-
Read quote tweets, replies, retweeters, or the conversation thread for a tweet. These are paginated read operations.
|
|
559
|
-
|
|
560
|
-
### User Social Graph Reads
|
|
561
|
-
|
|
562
|
-
```
|
|
563
|
-
GET /x/users/{id}/followers
|
|
564
|
-
GET /x/users/{id}/following
|
|
565
|
-
GET /x/users/{id}/mentions
|
|
566
|
-
GET /x/users/{id}/verified-followers
|
|
567
|
-
```
|
|
568
|
-
|
|
569
|
-
Read followers, following, mentions, and verified followers for a username or numeric user ID. These are paginated read operations.
|
|
570
|
-
|
|
571
|
-
### Get Mutual Followers
|
|
572
|
-
|
|
573
|
-
```
|
|
574
|
-
GET /x/users/{id}/followers-you-know
|
|
575
|
-
```
|
|
576
|
-
|
|
577
|
-
Get mutual followers (followers you know). Metered (1 credit/result).
|
|
578
|
-
|
|
579
|
-
### X Lists
|
|
580
|
-
|
|
581
|
-
```
|
|
582
|
-
GET /x/lists/{id}/followers
|
|
583
|
-
GET /x/lists/{id}/members
|
|
584
|
-
GET /x/lists/{id}/tweets
|
|
585
|
-
```
|
|
586
|
-
|
|
587
|
-
Read list followers, members, or list timeline tweets by list ID.
|
|
588
|
-
|
|
589
|
-
### X Communities
|
|
590
|
-
|
|
591
|
-
```
|
|
592
|
-
GET /x/communities/search
|
|
593
|
-
GET /x/communities/tweets
|
|
594
|
-
GET /x/communities/{id}/info
|
|
595
|
-
GET /x/communities/{id}/members
|
|
596
|
-
GET /x/communities/{id}/moderators
|
|
597
|
-
GET /x/communities/{id}/tweets
|
|
598
|
-
```
|
|
599
|
-
|
|
600
|
-
Search communities and read community metadata, members, moderators, or tweets. Community writes are listed under X Write and require confirmation.
|
|
601
|
-
|
|
602
|
-
### Get Bookmarks
|
|
603
|
-
|
|
604
|
-
```
|
|
605
|
-
GET /x/bookmarks
|
|
606
|
-
```
|
|
607
|
-
|
|
608
|
-
Get bookmarked tweets. Requires a connected X account. Metered (1 credit/result).
|
|
609
|
-
|
|
610
|
-
**Sensitive:** Returns private data. Confirm with user before calling.
|
|
611
|
-
|
|
612
|
-
### Get Bookmark Folders
|
|
613
|
-
|
|
614
|
-
```
|
|
615
|
-
GET /x/bookmarks/folders
|
|
616
|
-
```
|
|
617
|
-
|
|
618
|
-
Get bookmark folders. Requires a connected X account. Metered (1 credit).
|
|
619
|
-
|
|
620
|
-
### Get Notifications
|
|
621
|
-
|
|
622
|
-
```
|
|
623
|
-
GET /x/notifications
|
|
624
|
-
```
|
|
625
|
-
|
|
626
|
-
Get notifications with type filter. Requires a connected X account. Metered (1 credit/result).
|
|
627
|
-
|
|
628
|
-
**Sensitive:** Returns private data. Confirm with user before calling.
|
|
629
|
-
|
|
630
|
-
### Get Home Timeline
|
|
631
|
-
|
|
632
|
-
```
|
|
633
|
-
GET /x/timeline
|
|
634
|
-
```
|
|
635
|
-
|
|
636
|
-
Get home timeline. Requires a connected X account. Metered (1 credit/result).
|
|
637
|
-
|
|
638
|
-
**Sensitive:** Returns private data. Confirm with user before calling.
|
|
639
|
-
|
|
640
|
-
---
|
|
641
|
-
|
|
642
|
-
## X Media (Download)
|
|
643
|
-
|
|
644
|
-
### Download Media
|
|
645
|
-
|
|
646
|
-
```
|
|
647
|
-
POST /x/media/download
|
|
648
|
-
```
|
|
649
|
-
|
|
650
|
-
Download images, videos, and GIFs from tweets. Single or bulk (up to 50). Returns a shareable gallery URL.
|
|
651
|
-
|
|
652
|
-
**Body:** Provide either `tweetInput` (single tweet) or `tweetIds` (bulk). Exactly 1 is required.
|
|
653
|
-
|
|
654
|
-
| Field | Type | Description |
|
|
655
|
-
|-------|------|-------------|
|
|
656
|
-
| `tweetInput` | string | Tweet URL or numeric tweet ID for a single download. Accepts `x.com` and `twitter.com` URL formats |
|
|
657
|
-
| `tweetIds` | string[] | Array of tweet URLs or IDs for bulk download. Maximum 50 items. Returns a single combined gallery |
|
|
658
|
-
|
|
659
|
-
**Response (single):**
|
|
660
|
-
```json
|
|
661
|
-
{
|
|
662
|
-
"tweetId": "1893456789012345678",
|
|
663
|
-
"galleryUrl": "https://xquik.com/g/abc123",
|
|
664
|
-
"cacheHit": false
|
|
665
|
-
}
|
|
666
|
-
```
|
|
667
|
-
|
|
668
|
-
**Response (bulk):**
|
|
669
|
-
```json
|
|
670
|
-
{
|
|
671
|
-
"galleryUrl": "https://xquik.com/g/def456",
|
|
672
|
-
"totalTweets": 3,
|
|
673
|
-
"totalMedia": 7
|
|
674
|
-
}
|
|
675
|
-
```
|
|
676
|
-
|
|
677
|
-
First download is metered. Subsequent requests for the same tweet return cached URLs at no cost (`cacheHit: true`). All downloads are saved to shareable gallery pages under `https://xquik.com/g/{token}`.
|
|
678
|
-
|
|
679
|
-
Returns `400 no_media` if the tweet has no downloadable media. Returns `400 too_many_tweets` if bulk array exceeds 50 items.
|
|
680
|
-
|
|
681
|
-
---
|
|
682
|
-
|
|
683
|
-
## Trends
|
|
684
|
-
|
|
685
|
-
### List Trends
|
|
686
|
-
|
|
687
|
-
```
|
|
688
|
-
GET /x/trends?woeid=1&count=30
|
|
689
|
-
GET /trends?woeid=1&count=30
|
|
690
|
-
```
|
|
691
|
-
|
|
692
|
-
Metered. Subscription required. `/trends` is an alias of `/x/trends`. Cached, refreshes every 15 minutes.
|
|
693
|
-
|
|
694
|
-
**WOEIDs:** 1 (Worldwide), 23424977 (US), 23424975 (UK), 23424969 (Turkey), 23424950 (Spain), 23424829 (Germany), 23424819 (France), 23424856 (Japan), 23424848 (India), 23424768 (Brazil), 23424775 (Canada), 23424900 (Mexico).
|
|
695
|
-
|
|
696
|
-
**Response:**
|
|
697
|
-
```json
|
|
698
|
-
{
|
|
699
|
-
"trends": [
|
|
700
|
-
{ "name": "#AI", "description": "...", "rank": 1, "query": "#AI" }
|
|
701
|
-
],
|
|
702
|
-
"total": 30,
|
|
703
|
-
"woeid": 1
|
|
704
|
-
}
|
|
705
|
-
```
|
|
706
|
-
|
|
707
|
-
---
|
|
708
|
-
|
|
709
|
-
## Radar
|
|
710
|
-
|
|
711
|
-
### List Radar Items
|
|
712
|
-
|
|
713
|
-
```
|
|
714
|
-
GET /radar
|
|
715
|
-
```
|
|
716
|
-
|
|
717
|
-
Get trending topics and news from 7 sources: Google Trends, Hacker News, Polymarket, TrustMRR, Wikipedia, GitHub Trending, Reddit. Free.
|
|
718
|
-
|
|
719
|
-
**Query parameters:**
|
|
720
|
-
|
|
721
|
-
| Param | Type | Description |
|
|
722
|
-
|-------|------|-------------|
|
|
723
|
-
| `source` | string | Filter by source: `google_trends`, `hacker_news`, `polymarket`, `trustmrr`, `wikipedia`, `github`, `reddit` |
|
|
724
|
-
| `category` | string | Filter by category: `general`, `tech`, `dev`, `science`, `culture`, `politics`, `business`, `entertainment` |
|
|
725
|
-
| `limit` | number | Items per page (1-100, default 50) |
|
|
726
|
-
| `hours` | number | Look-back window in hours (1-72, default 6) |
|
|
727
|
-
| `region` | string | Region code: `US`, `GB`, `TR`, `ES`, `DE`, `FR`, `JP`, `IN`, `BR`, `CA`, `MX`, `global` (default) |
|
|
728
|
-
|
|
729
|
-
**Response:**
|
|
730
|
-
```json
|
|
731
|
-
{
|
|
732
|
-
"items": [
|
|
733
|
-
{
|
|
734
|
-
"id": "12345",
|
|
735
|
-
"title": "Claude 4.6 Released",
|
|
736
|
-
"description": "Anthropic releases Claude 4.6...",
|
|
737
|
-
"url": "https://example.com/article",
|
|
738
|
-
"imageUrl": "https://example.com/image.png",
|
|
739
|
-
"source": "hacker_news",
|
|
740
|
-
"sourceId": "hn_12345",
|
|
741
|
-
"category": "tech",
|
|
742
|
-
"region": "global",
|
|
743
|
-
"language": "en",
|
|
744
|
-
"score": 450,
|
|
745
|
-
"metadata": { "points": 450, "numberComments": 132, "author": "pgdev" },
|
|
746
|
-
"publishedAt": "2026-03-05T10:00:00.000Z",
|
|
747
|
-
"createdAt": "2026-03-05T10:05:00.000Z"
|
|
748
|
-
}
|
|
749
|
-
],
|
|
750
|
-
"hasMore": true,
|
|
751
|
-
"nextCursor": "NDUwfDIwMjYtMDMtMDRUMDg6MzA6MDAuMDAwWnwxMjM0NQ=="
|
|
752
|
-
}
|
|
753
|
-
```
|
|
754
|
-
|
|
755
|
-
Fields: `id`, `title`, `description?`, `url?`, `imageUrl?`, `source`, `sourceId`, `category`, `region`, `language`, `score`, `metadata`, `publishedAt`, `createdAt`. Response includes `hasMore` and `nextCursor` for pagination.
|
|
756
|
-
|
|
757
|
-
---
|
|
758
|
-
|
|
759
|
-
## Compose
|
|
760
|
-
|
|
761
|
-
### Compose Tweet
|
|
762
|
-
|
|
763
|
-
```
|
|
764
|
-
POST /compose
|
|
765
|
-
```
|
|
766
|
-
|
|
767
|
-
Compose, refine, and score tweets using X algorithm data. Free, 3-step workflow.
|
|
768
|
-
|
|
769
|
-
**Body:**
|
|
770
|
-
|
|
771
|
-
| Field | Type | Required | Description |
|
|
772
|
-
|-------|------|----------|-------------|
|
|
773
|
-
| `step` | string | Yes | `compose`, `refine`, or `score` |
|
|
774
|
-
| `topic` | string | No | Tweet topic (compose, refine) |
|
|
775
|
-
| `goal` | string | No | `engagement`, `followers`, `authority`, `conversation` |
|
|
776
|
-
| `styleUsername` | string | No | Cached style username for voice matching (compose) |
|
|
777
|
-
| `tone` | string | No | Desired tone (refine) |
|
|
778
|
-
| `additionalContext` | string | No | Extra context or URLs (refine) |
|
|
779
|
-
| `callToAction` | string | No | Desired CTA (refine) |
|
|
780
|
-
| `mediaType` | string | No | `photo`, `video`, `none` (refine) |
|
|
781
|
-
| `draft` | string | No | Tweet text to evaluate (score) |
|
|
782
|
-
| `hasLink` | boolean | No | Link attached (score) |
|
|
783
|
-
| `hasMedia` | boolean | No | Media attached (score) |
|
|
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.
|
|
784
4
|
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
**Response (step=refine):** Returns `compositionGuidance`, `examplePatterns`.
|
|
788
|
-
|
|
789
|
-
**Response (step=score):** Returns `totalChecks`, `passedCount`, `topSuggestion`, `checklist[]` with `factor`, `passed`, `suggestion`.
|
|
790
|
-
|
|
791
|
-
---
|
|
792
|
-
|
|
793
|
-
## Drafts
|
|
794
|
-
|
|
795
|
-
### Create Draft
|
|
796
|
-
|
|
797
|
-
`POST /drafts`
|
|
798
|
-
|
|
799
|
-
Save a tweet draft for later.
|
|
800
|
-
|
|
801
|
-
**Request body:**
|
|
802
|
-
|
|
803
|
-
| Field | Type | Required | Description |
|
|
804
|
-
|-------|------|----------|-------------|
|
|
805
|
-
| `text` | string | Yes | The draft tweet text |
|
|
806
|
-
| `topic` | string | No | Topic the tweet is about |
|
|
807
|
-
| `goal` | string | No | Optimization goal: `engagement`, `followers`, `authority`, `conversation` |
|
|
808
|
-
|
|
809
|
-
**Response (201):**
|
|
810
|
-
|
|
811
|
-
```json
|
|
812
|
-
{
|
|
813
|
-
"id": "123",
|
|
814
|
-
"text": "draft text",
|
|
815
|
-
"topic": "product launch",
|
|
816
|
-
"goal": "engagement",
|
|
817
|
-
"createdAt": "2026-02-24T10:30:00.000Z",
|
|
818
|
-
"updatedAt": "2026-02-24T10:30:00.000Z"
|
|
819
|
-
}
|
|
820
|
-
```
|
|
821
|
-
|
|
822
|
-
---
|
|
823
|
-
|
|
824
|
-
### List Drafts
|
|
825
|
-
|
|
826
|
-
`GET /drafts`
|
|
827
|
-
|
|
828
|
-
List saved tweet drafts with cursor pagination.
|
|
829
|
-
|
|
830
|
-
**Query parameters:**
|
|
831
|
-
|
|
832
|
-
| Parameter | Type | Required | Default | Description |
|
|
833
|
-
|-----------|------|----------|---------|-------------|
|
|
834
|
-
| `limit` | number | No | 50 | Results per page (max 50) |
|
|
835
|
-
| `afterCursor` | string | No | - | Pagination cursor from previous response |
|
|
836
|
-
|
|
837
|
-
**Response (200):**
|
|
838
|
-
|
|
839
|
-
```json
|
|
840
|
-
{
|
|
841
|
-
"drafts": [
|
|
842
|
-
{
|
|
843
|
-
"id": "123",
|
|
844
|
-
"text": "draft text",
|
|
845
|
-
"topic": "product launch",
|
|
846
|
-
"goal": "engagement",
|
|
847
|
-
"createdAt": "2026-02-24T10:30:00.000Z",
|
|
848
|
-
"updatedAt": "2026-02-24T10:30:00.000Z"
|
|
849
|
-
}
|
|
850
|
-
],
|
|
851
|
-
"afterCursor": "cursor_string",
|
|
852
|
-
"hasMore": true
|
|
853
|
-
}
|
|
854
|
-
```
|
|
855
|
-
|
|
856
|
-
---
|
|
857
|
-
|
|
858
|
-
### Get Draft
|
|
859
|
-
|
|
860
|
-
`GET /drafts/{id}`
|
|
861
|
-
|
|
862
|
-
Get a specific draft by ID.
|
|
863
|
-
|
|
864
|
-
**Response (200):** Single draft object.
|
|
865
|
-
|
|
866
|
-
**Errors:** `400 invalid_id`, `404 draft_not_found`
|
|
867
|
-
|
|
868
|
-
---
|
|
869
|
-
|
|
870
|
-
### Delete Draft
|
|
871
|
-
|
|
872
|
-
`DELETE /drafts/{id}`
|
|
873
|
-
|
|
874
|
-
Delete a draft. Returns `204 No Content`.
|
|
875
|
-
|
|
876
|
-
**Errors:** `400 invalid_id`, `404 draft_not_found`
|
|
877
|
-
|
|
878
|
-
---
|
|
879
|
-
|
|
880
|
-
## Tweet Style Cache
|
|
881
|
-
|
|
882
|
-
### Analyze & Cache Style
|
|
883
|
-
|
|
884
|
-
`POST /styles`
|
|
885
|
-
|
|
886
|
-
Fetch recent tweets from an X account and cache them for style analysis. **Consumes API usage credits.**
|
|
887
|
-
|
|
888
|
-
**Request body:**
|
|
889
|
-
|
|
890
|
-
| Field | Type | Required | Description |
|
|
891
|
-
|-------|------|----------|-------------|
|
|
892
|
-
| `username` | string | Yes | X username to analyze (without @) |
|
|
893
|
-
|
|
894
|
-
**Response (201):**
|
|
895
|
-
|
|
896
|
-
```json
|
|
897
|
-
{
|
|
898
|
-
"xUsername": "elonmusk",
|
|
899
|
-
"tweetCount": 20,
|
|
900
|
-
"isOwnAccount": false,
|
|
901
|
-
"fetchedAt": "2026-02-24T10:30:00.000Z",
|
|
902
|
-
"tweets": [
|
|
903
|
-
{
|
|
904
|
-
"id": "1893456789012345678",
|
|
905
|
-
"text": "The future is now.",
|
|
906
|
-
"authorUsername": "elonmusk",
|
|
907
|
-
"createdAt": "2026-02-24T14:22:00.000Z"
|
|
908
|
-
}
|
|
909
|
-
]
|
|
910
|
-
}
|
|
911
|
-
```
|
|
912
|
-
|
|
913
|
-
---
|
|
914
|
-
|
|
915
|
-
### List Cached Styles
|
|
916
|
-
|
|
917
|
-
`GET /styles`
|
|
918
|
-
|
|
919
|
-
List all cached tweet style profiles. Max 200 results, ordered by fetch date.
|
|
920
|
-
|
|
921
|
-
**Response (200):**
|
|
922
|
-
|
|
923
|
-
```json
|
|
924
|
-
{
|
|
925
|
-
"styles": [
|
|
926
|
-
{
|
|
927
|
-
"xUsername": "elonmusk",
|
|
928
|
-
"tweetCount": 20,
|
|
929
|
-
"isOwnAccount": false,
|
|
930
|
-
"fetchedAt": "2026-02-24T10:30:00.000Z"
|
|
931
|
-
}
|
|
932
|
-
]
|
|
933
|
-
}
|
|
934
|
-
```
|
|
935
|
-
|
|
936
|
-
---
|
|
937
|
-
|
|
938
|
-
### Save Custom Style
|
|
939
|
-
|
|
940
|
-
`PUT /styles/{id}`
|
|
941
|
-
|
|
942
|
-
Save a custom style profile from tweet texts. Free, no usage cost. The body `label` controls the saved style label and replaces any existing style with that label.
|
|
943
|
-
|
|
944
|
-
**Body:**
|
|
945
|
-
|
|
946
|
-
| Field | Type | Required | Description |
|
|
947
|
-
|-------|------|----------|-------------|
|
|
948
|
-
| `label` | string | Yes | Style label name (1-30 characters) |
|
|
949
|
-
| `tweets` | object[] | Yes | Array of tweet objects (1-100). Each must have a `text` field |
|
|
950
|
-
|
|
951
|
-
**Response (200):** Style object with label, `tweetCount`, `isOwnAccount: false`, `fetchedAt`, and `tweets` array.
|
|
952
|
-
|
|
953
|
-
**Errors:** `400 invalid_input`
|
|
954
|
-
|
|
955
|
-
---
|
|
956
|
-
|
|
957
|
-
### Get Cached Style
|
|
958
|
-
|
|
959
|
-
`GET /styles/{id}`
|
|
960
|
-
|
|
961
|
-
Get a cached style profile with full tweet data. `id` is the cached style label or username.
|
|
962
|
-
|
|
963
|
-
**Response (200):** Full style object with `tweets` array.
|
|
964
|
-
|
|
965
|
-
**Errors:** `404 style_not_found`
|
|
966
|
-
|
|
967
|
-
---
|
|
968
|
-
|
|
969
|
-
### Delete Cached Style
|
|
970
|
-
|
|
971
|
-
`DELETE /styles/{id}`
|
|
972
|
-
|
|
973
|
-
Delete a cached style by label or username. Returns `204 No Content`.
|
|
974
|
-
|
|
975
|
-
**Errors:** `404 style_not_found`
|
|
976
|
-
|
|
977
|
-
---
|
|
978
|
-
|
|
979
|
-
### Compare Styles
|
|
980
|
-
|
|
981
|
-
`GET /styles/compare?username1=A&username2=B`
|
|
982
|
-
|
|
983
|
-
Compare two cached tweet style profiles side by side.
|
|
984
|
-
|
|
985
|
-
**Query parameters:**
|
|
986
|
-
|
|
987
|
-
| Parameter | Type | Required | Description |
|
|
988
|
-
|-----------|------|----------|-------------|
|
|
989
|
-
| `username1` | string | Yes | First X username |
|
|
990
|
-
| `username2` | string | Yes | Second X username |
|
|
991
|
-
|
|
992
|
-
**Response (200):**
|
|
993
|
-
|
|
994
|
-
```json
|
|
995
|
-
{
|
|
996
|
-
"style1": { "xUsername": "user1", "tweetCount": 20, "isOwnAccount": true, "fetchedAt": "...", "tweets": [...] },
|
|
997
|
-
"style2": { "xUsername": "user2", "tweetCount": 15, "isOwnAccount": false, "fetchedAt": "...", "tweets": [...] }
|
|
998
|
-
}
|
|
999
|
-
```
|
|
1000
|
-
|
|
1001
|
-
**Errors:** `400 missing_params`, `404 style_not_found`
|
|
1002
|
-
|
|
1003
|
-
---
|
|
1004
|
-
|
|
1005
|
-
### Analyze Performance
|
|
1006
|
-
|
|
1007
|
-
`GET /styles/{id}/performance`
|
|
1008
|
-
|
|
1009
|
-
Get live engagement metrics for cached tweets for a cached style label or username. **Consumes API usage credits.**
|
|
1010
|
-
|
|
1011
|
-
**Response (200):**
|
|
1012
|
-
|
|
1013
|
-
```json
|
|
1014
|
-
{
|
|
1015
|
-
"xUsername": "elonmusk",
|
|
1016
|
-
"tweetCount": 20,
|
|
1017
|
-
"tweets": [
|
|
1018
|
-
{
|
|
1019
|
-
"id": "1893456789012345678",
|
|
1020
|
-
"text": "The future is now.",
|
|
1021
|
-
"likeCount": 42000,
|
|
1022
|
-
"retweetCount": 8500,
|
|
1023
|
-
"replyCount": 3200,
|
|
1024
|
-
"quoteCount": 1100,
|
|
1025
|
-
"viewCount": 5000000,
|
|
1026
|
-
"bookmarkCount": 2400
|
|
1027
|
-
}
|
|
1028
|
-
]
|
|
1029
|
-
}
|
|
1030
|
-
```
|
|
1031
|
-
|
|
1032
|
-
**Errors:** `404 style_not_found`
|
|
1033
|
-
|
|
1034
|
-
---
|
|
1035
|
-
|
|
1036
|
-
## Subscribe
|
|
1037
|
-
|
|
1038
|
-
### Get Subscription Link
|
|
1039
|
-
|
|
1040
|
-
```
|
|
1041
|
-
POST /subscribe
|
|
1042
|
-
```
|
|
1043
|
-
|
|
1044
|
-
Returns a checkout URL for subscribing or managing the subscription. If already subscribed, returns the billing portal URL. Use only after the user confirms the plan or billing action.
|
|
1045
|
-
|
|
1046
|
-
**Response:**
|
|
1047
|
-
```json
|
|
1048
|
-
{
|
|
1049
|
-
"url": "<checkout-or-billing-portal-url>"
|
|
1050
|
-
}
|
|
1051
|
-
```
|
|
1052
|
-
|
|
1053
|
-
---
|
|
1054
|
-
|
|
1055
|
-
## X Accounts (Connected)
|
|
1056
|
-
|
|
1057
|
-
Manage connected X accounts for confirmation-gated write actions. All endpoints are free (no usage cost).
|
|
1058
|
-
|
|
1059
|
-
**Connecting or re-authenticating an X account is done by the user in the Xquik dashboard**, not via this skill. The skill never handles X login material. The agent should direct the user to the dashboard account page when a new account needs to be connected or an existing session needs to be refreshed.
|
|
1060
|
-
|
|
1061
|
-
The OpenAPI surface includes dashboard-owned account connection routes:
|
|
1062
|
-
|
|
1063
|
-
```
|
|
1064
|
-
POST /x/accounts
|
|
1065
|
-
POST /x/account-connection-challenges/{id}/submit
|
|
1066
|
-
POST /x/accounts/{id}/reauth
|
|
1067
|
-
POST /x/accounts/bulk-retry
|
|
1068
|
-
```
|
|
1069
|
-
|
|
1070
|
-
Do not call these from this skill. They are listed here only so the skill docs match the public API surface and keep the dashboard-only boundary explicit.
|
|
1071
|
-
|
|
1072
|
-
### List X Accounts
|
|
1073
|
-
|
|
1074
|
-
```
|
|
1075
|
-
GET /x/accounts
|
|
1076
|
-
```
|
|
1077
|
-
|
|
1078
|
-
Returns all connected X accounts. Response: `{ accounts: [{ id, username, displayName, isActive, createdAt }] }`.
|
|
1079
|
-
|
|
1080
|
-
### Get X Account
|
|
1081
|
-
|
|
1082
|
-
```
|
|
1083
|
-
GET /x/accounts/{id}
|
|
1084
|
-
```
|
|
1085
|
-
|
|
1086
|
-
Returns `{ id, username, displayName, isActive, createdAt }`.
|
|
1087
|
-
|
|
1088
|
-
### Disconnect X Account
|
|
1089
|
-
|
|
1090
|
-
```
|
|
1091
|
-
DELETE /x/accounts/{id}
|
|
1092
|
-
```
|
|
1093
|
-
|
|
1094
|
-
Permanently removes the account from Xquik. Returns `{ success: true }`. Before calling, confirm with the user.
|
|
1095
|
-
|
|
1096
|
-
---
|
|
1097
|
-
|
|
1098
|
-
## X Write
|
|
1099
|
-
|
|
1100
|
-
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.
|
|
1101
|
-
|
|
1102
|
-
### Create Tweet
|
|
1103
|
-
|
|
1104
|
-
```
|
|
1105
|
-
POST /x/tweets
|
|
1106
|
-
```
|
|
1107
|
-
|
|
1108
|
-
**Body:**
|
|
1109
|
-
|
|
1110
|
-
| Field | Type | Required | Description |
|
|
1111
|
-
|-------|------|----------|-------------|
|
|
1112
|
-
| `account` | string | Yes | Connected X username or account ID |
|
|
1113
|
-
| `text` | string | No | Tweet text (280 chars, or 25,000 if `is_note_tweet` is true). Required unless `media` is provided |
|
|
1114
|
-
| `reply_to_tweet_id` | string | No | Tweet ID to reply to |
|
|
1115
|
-
| `attachment_url` | string | No | URL to attach as a card |
|
|
1116
|
-
| `community_id` | string | No | Community ID to post into |
|
|
1117
|
-
| `is_note_tweet` | boolean | No | Long-form note tweet (up to 25,000 chars) |
|
|
1118
|
-
| `media` | string[] | No | Public image URLs to attach (max 4). `POST /x/media` returns `mediaUrl` values for this field |
|
|
1119
|
-
|
|
1120
|
-
**Response:** `{ tweetId, success: true }`
|
|
1121
|
-
|
|
1122
|
-
**Errors:** `502 x_write_failed`
|
|
1123
|
-
|
|
1124
|
-
### Delete Tweet
|
|
1125
|
-
|
|
1126
|
-
```
|
|
1127
|
-
DELETE /x/tweets/{id}
|
|
1128
|
-
```
|
|
1129
|
-
|
|
1130
|
-
**Body:** `{ "account": "username" }`
|
|
1131
|
-
|
|
1132
|
-
**Response:** `{ success: true }`
|
|
1133
|
-
|
|
1134
|
-
### Like Tweet
|
|
1135
|
-
|
|
1136
|
-
```
|
|
1137
|
-
POST /x/tweets/{id}/like
|
|
1138
|
-
```
|
|
1139
|
-
|
|
1140
|
-
**Body:** `{ "account": "username" }`
|
|
1141
|
-
|
|
1142
|
-
### Unlike Tweet
|
|
1143
|
-
|
|
1144
|
-
```
|
|
1145
|
-
DELETE /x/tweets/{id}/like
|
|
1146
|
-
```
|
|
1147
|
-
|
|
1148
|
-
**Body:** `{ "account": "username" }`
|
|
1149
|
-
|
|
1150
|
-
### Retweet
|
|
1151
|
-
|
|
1152
|
-
```
|
|
1153
|
-
POST /x/tweets/{id}/retweet
|
|
1154
|
-
```
|
|
1155
|
-
|
|
1156
|
-
**Body:** `{ "account": "username" }`
|
|
1157
|
-
|
|
1158
|
-
### Unretweet
|
|
1159
|
-
|
|
1160
|
-
```
|
|
1161
|
-
DELETE /x/tweets/{id}/retweet
|
|
1162
|
-
```
|
|
1163
|
-
|
|
1164
|
-
**Body:** `{ "account": "username" }`
|
|
1165
|
-
|
|
1166
|
-
### Follow User
|
|
1167
|
-
|
|
1168
|
-
```
|
|
1169
|
-
POST /x/users/{id}/follow
|
|
1170
|
-
```
|
|
1171
|
-
|
|
1172
|
-
**Body:** `{ "account": "username" }`
|
|
1173
|
-
|
|
1174
|
-
**Errors:** `502 x_write_failed`
|
|
1175
|
-
|
|
1176
|
-
### Unfollow User
|
|
1177
|
-
|
|
1178
|
-
```
|
|
1179
|
-
DELETE /x/users/{id}/follow
|
|
1180
|
-
```
|
|
1181
|
-
|
|
1182
|
-
**Body:** `{ "account": "username" }`
|
|
1183
|
-
|
|
1184
|
-
### Remove Follower
|
|
1185
|
-
|
|
1186
|
-
```
|
|
1187
|
-
POST /x/users/{id}/remove-follower
|
|
1188
|
-
```
|
|
1189
|
-
|
|
1190
|
-
Remove a user from your followers without blocking them.
|
|
1191
|
-
|
|
1192
|
-
**Body:** `{ "account": "username" }`
|
|
1193
|
-
|
|
1194
|
-
**Cost:** 10 credits per call.
|
|
1195
|
-
|
|
1196
|
-
### Send DM
|
|
1197
|
-
|
|
1198
|
-
```
|
|
1199
|
-
POST /x/dm/{userId}
|
|
1200
|
-
```
|
|
1201
|
-
|
|
1202
|
-
**Body:**
|
|
1203
|
-
|
|
1204
|
-
| Field | Type | Required | Description |
|
|
1205
|
-
|-------|------|----------|-------------|
|
|
1206
|
-
| `account` | string | Yes | Connected X username or account ID |
|
|
1207
|
-
| `text` | string | Yes | Message text |
|
|
1208
|
-
| `media_ids` | string[] | No | Media IDs to attach |
|
|
1209
|
-
| `reply_to_message_id` | string | No | Message ID to reply to |
|
|
1210
|
-
|
|
1211
|
-
### Get DM History
|
|
1212
|
-
|
|
1213
|
-
```
|
|
1214
|
-
GET /x/dm/{userId}/history
|
|
1215
|
-
```
|
|
1216
|
-
|
|
1217
|
-
Get DM conversation history with a user. Requires a connected X account. Metered (1 credit/result).
|
|
1218
|
-
|
|
1219
|
-
**Sensitive:** Returns private DM conversations. Confirm with user before calling. Do not forward to other tools without consent.
|
|
1220
|
-
|
|
1221
|
-
### Update Profile
|
|
1222
|
-
|
|
1223
|
-
```
|
|
1224
|
-
PATCH /x/profile
|
|
1225
|
-
```
|
|
1226
|
-
|
|
1227
|
-
**Body:** `{ "account": "username", "name": "...", "description": "...", "location": "...", "url": "..." }` (account required, others optional)
|
|
1228
|
-
|
|
1229
|
-
### Update Avatar
|
|
1230
|
-
|
|
1231
|
-
```
|
|
1232
|
-
PATCH /x/profile/avatar
|
|
1233
|
-
```
|
|
1234
|
-
|
|
1235
|
-
Update profile avatar. Max 700 KB, GIF/JPEG/PNG. Metered (10 credits).
|
|
1236
|
-
|
|
1237
|
-
**Body:** FormData with `account` (required) and `file` (required, max 700 KB).
|
|
1238
|
-
|
|
1239
|
-
### Update Banner
|
|
1240
|
-
|
|
1241
|
-
```
|
|
1242
|
-
PATCH /x/profile/banner
|
|
1243
|
-
```
|
|
1244
|
-
|
|
1245
|
-
Update profile banner. Max 2 MB, GIF/JPEG/PNG. Metered (10 credits).
|
|
1246
|
-
|
|
1247
|
-
**Body:** FormData with `account` (required) and `file` (required, max 2 MB).
|
|
1248
|
-
|
|
1249
|
-
### Upload Media
|
|
1250
|
-
|
|
1251
|
-
```
|
|
1252
|
-
POST /x/media
|
|
1253
|
-
```
|
|
1254
|
-
|
|
1255
|
-
**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.
|
|
1256
|
-
|
|
1257
|
-
**Response:** Returns `mediaId`, `mediaUrl`, and `success`. Pass `mediaUrl` in the `media` array when creating a tweet.
|
|
1258
|
-
|
|
1259
|
-
### Create Community
|
|
1260
|
-
|
|
1261
|
-
```
|
|
1262
|
-
POST /x/communities
|
|
1263
|
-
```
|
|
1264
|
-
|
|
1265
|
-
**Body:** `{ "account": "username", "name": "...", "description": "..." }` (all required)
|
|
1266
|
-
|
|
1267
|
-
### Delete Community
|
|
1268
|
-
|
|
1269
|
-
```
|
|
1270
|
-
DELETE /x/communities/{id}
|
|
1271
|
-
```
|
|
1272
|
-
|
|
1273
|
-
**Body:** `{ "account": "username", "community_name": "..." }` (name required for confirmation)
|
|
1274
|
-
|
|
1275
|
-
### Join Community
|
|
1276
|
-
|
|
1277
|
-
```
|
|
1278
|
-
POST /x/communities/{id}/join
|
|
1279
|
-
```
|
|
1280
|
-
|
|
1281
|
-
**Body:** `{ "account": "username" }`
|
|
1282
|
-
|
|
1283
|
-
**Errors:** `409 already_member`
|
|
1284
|
-
|
|
1285
|
-
### Leave Community
|
|
1286
|
-
|
|
1287
|
-
```
|
|
1288
|
-
DELETE /x/communities/{id}/join
|
|
1289
|
-
```
|
|
1290
|
-
|
|
1291
|
-
**Body:** `{ "account": "username" }`
|
|
1292
|
-
|
|
1293
|
-
### Get Write Action Status
|
|
1294
|
-
|
|
1295
|
-
```
|
|
1296
|
-
GET /x/write-actions/{id}
|
|
1297
|
-
```
|
|
1298
|
-
|
|
1299
|
-
Check a pending write action by the ID returned from an earlier write response.
|
|
1300
|
-
|
|
1301
|
-
---
|
|
1302
|
-
|
|
1303
|
-
## Credits
|
|
1304
|
-
|
|
1305
|
-
### Get Credit Balance
|
|
1306
|
-
|
|
1307
|
-
```
|
|
1308
|
-
GET /credits
|
|
1309
|
-
```
|
|
1310
|
-
|
|
1311
|
-
Get credit balance, lifetime purchased/used, and auto top-up status. Free.
|
|
1312
|
-
|
|
1313
|
-
### Top Up Credits
|
|
1314
|
-
|
|
1315
|
-
```
|
|
1316
|
-
POST /credits/topup
|
|
1317
|
-
```
|
|
1318
|
-
|
|
1319
|
-
Get a checkout URL to purchase credits ($10 minimum). Use only after the user confirms the exact amount.
|
|
1320
|
-
|
|
1321
|
-
### Get Top-Up Status
|
|
1322
|
-
|
|
1323
|
-
```
|
|
1324
|
-
GET /credits/topup/status
|
|
1325
|
-
```
|
|
1326
|
-
|
|
1327
|
-
Poll a checkout session after starting a credit top-up. Query: `session_id`. Free.
|
|
1328
|
-
|
|
1329
|
-
### Quick Top Up
|
|
1330
|
-
|
|
1331
|
-
```
|
|
1332
|
-
POST /credits/quick-topup
|
|
1333
|
-
```
|
|
1334
|
-
|
|
1335
|
-
Charge a saved payment method for credits after the user confirms the exact amount. Body: `{ "dollars": 10 }` ($10 minimum, $500 maximum). Free endpoint, but it can initiate a confirmed card charge.
|
|
1336
|
-
|
|
1337
|
-
Responses include `{ "outcome": "charged", "credits": "...", "balance": "..." }`, `{ "outcome": "no_payment_method" }`, or `{ "outcome": "requires_action", "clientSecret": "..." }`.
|
|
1338
|
-
|
|
1339
|
-
---
|
|
1340
|
-
|
|
1341
|
-
## Support
|
|
1342
|
-
|
|
1343
|
-
### Create Ticket
|
|
1344
|
-
|
|
1345
|
-
```
|
|
1346
|
-
POST /support/tickets
|
|
1347
|
-
```
|
|
1348
|
-
|
|
1349
|
-
**Body:** `{ "subject": "...", "body": "..." }`
|
|
1350
|
-
|
|
1351
|
-
**Response (201):** `{ id, subject, status, createdAt }`
|
|
1352
|
-
|
|
1353
|
-
### List Tickets
|
|
1354
|
-
|
|
1355
|
-
```
|
|
1356
|
-
GET /support/tickets
|
|
1357
|
-
```
|
|
1358
|
-
|
|
1359
|
-
Returns all tickets for the authenticated user.
|
|
1360
|
-
|
|
1361
|
-
### Get Ticket
|
|
1362
|
-
|
|
1363
|
-
```
|
|
1364
|
-
GET /support/tickets/{id}
|
|
1365
|
-
```
|
|
1366
|
-
|
|
1367
|
-
Returns ticket with messages.
|
|
1368
|
-
|
|
1369
|
-
### Update Ticket
|
|
1370
|
-
|
|
1371
|
-
```
|
|
1372
|
-
PATCH /support/tickets/{id}
|
|
1373
|
-
```
|
|
1374
|
-
|
|
1375
|
-
Update ticket status.
|
|
1376
|
-
|
|
1377
|
-
### Reply to Ticket
|
|
1378
|
-
|
|
1379
|
-
```
|
|
1380
|
-
POST /support/tickets/{id}/messages
|
|
1381
|
-
```
|
|
1382
|
-
|
|
1383
|
-
**Body:** `{ "body": "..." }`
|
|
1384
|
-
|
|
1385
|
-
Add a message to an existing ticket.
|
|
1386
|
-
|
|
1387
|
-
---
|
|
1388
|
-
|
|
1389
|
-
## Error Codes
|
|
5
|
+
Base URL: `https://xquik.com/api/v1`
|
|
1390
6
|
|
|
1391
|
-
|
|
1392
|
-
|
|
1393
|
-
|
|
1394
|
-
|
|
1395
|
-
|
|
|
1396
|
-
|
|
1397
|
-
|
|
|
1398
|
-
|
|
|
1399
|
-
|
|
|
1400
|
-
|
|
|
1401
|
-
|
|
|
1402
|
-
|
|
|
1403
|
-
|
|
|
1404
|
-
|
|
|
1405
|
-
|
|
|
1406
|
-
|
|
|
1407
|
-
|
|
|
1408
|
-
|
|
|
1409
|
-
|
|
|
1410
|
-
|
|
|
1411
|
-
|
|
|
1412
|
-
|
|
|
1413
|
-
|
|
|
1414
|
-
|
|
|
1415
|
-
| 404 | `tweet_not_found` | Tweet not found |
|
|
1416
|
-
| 404 | `style_not_found` | No cached style found |
|
|
1417
|
-
| 404 | `draft_not_found` | Draft not found |
|
|
1418
|
-
| 409 | `monitor_already_exists` | Duplicate monitor for same username |
|
|
1419
|
-
| 422 | `login_failed` | Account connection failed; use dashboard re-auth flow |
|
|
1420
|
-
| 429 | - | Rate limited. Retry with backoff |
|
|
1421
|
-
| 429 | `x_api_rate_limited` | X data source rate limited. Retry |
|
|
1422
|
-
| 500 | `internal_error` | Server error |
|
|
1423
|
-
| 502 | `stream_registration_failed` | Stream registration failed. Retry |
|
|
1424
|
-
| 502 | `x_api_unavailable` | X data source temporarily unavailable |
|
|
1425
|
-
| 502 | `x_api_unauthorized` | X data source authentication failed. Retry |
|
|
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) |
|