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.
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 +11 -0
  5. package/README.md +148 -100
  6. package/assets/icon.svg +1 -0
  7. package/commands/post.md +15 -0
  8. package/commands/search.md +16 -0
  9. package/commands/trending.md +17 -0
  10. package/commands/user.md +19 -0
  11. package/context7.json +33 -0
  12. package/logo.png +0 -0
  13. package/openclaw.plugin.json +2 -2
  14. package/package.json +31 -8
  15. package/scripts/check-versions.mjs +381 -0
  16. package/scripts/release-guard/content-policy.mjs +337 -0
  17. package/scripts/release-guard/frontmatter.mjs +148 -0
  18. package/scripts/release-guard/policy.mjs +227 -0
  19. package/server.json +33 -0
  20. package/skills/x-twitter-scraper/SKILL.md +214 -44
  21. package/skills/x-twitter-scraper/metadata.json +30 -6
  22. package/skills/x-twitter-scraper/references/api-endpoints-api-keys.md +31 -0
  23. package/skills/x-twitter-scraper/references/api-endpoints-compose.md +33 -0
  24. package/skills/x-twitter-scraper/references/api-endpoints-credits.md +11 -0
  25. package/skills/x-twitter-scraper/references/api-endpoints-drafts.md +86 -0
  26. package/skills/x-twitter-scraper/references/api-endpoints-draws.md +75 -0
  27. package/skills/x-twitter-scraper/references/api-endpoints-error-codes.md +37 -0
  28. package/skills/x-twitter-scraper/references/api-endpoints-events.md +48 -0
  29. package/skills/x-twitter-scraper/references/api-endpoints-extractions.md +97 -0
  30. package/skills/x-twitter-scraper/references/api-endpoints-monitors.md +74 -0
  31. package/skills/x-twitter-scraper/references/api-endpoints-radar.md +49 -0
  32. package/skills/x-twitter-scraper/references/api-endpoints-support.md +47 -0
  33. package/skills/x-twitter-scraper/references/api-endpoints-trends.md +25 -0
  34. package/skills/x-twitter-scraper/references/api-endpoints-tweet-style-cache.md +155 -0
  35. package/skills/x-twitter-scraper/references/api-endpoints-webhooks.md +74 -0
  36. package/skills/x-twitter-scraper/references/api-endpoints-x-accounts.md +42 -0
  37. package/skills/x-twitter-scraper/references/api-endpoints-x-api.md +206 -0
  38. package/skills/x-twitter-scraper/references/api-endpoints-x-media.md +40 -0
  39. package/skills/x-twitter-scraper/references/api-endpoints-x-write.md +204 -0
  40. package/skills/x-twitter-scraper/references/api-endpoints.md +26 -1421
  41. package/skills/x-twitter-scraper/references/draws.md +2 -2
  42. package/skills/x-twitter-scraper/references/extractions.md +9 -1
  43. package/skills/x-twitter-scraper/references/mcp-setup.md +41 -24
  44. package/skills/x-twitter-scraper/references/mcp-tools.md +36 -27
  45. package/skills/x-twitter-scraper/references/python-examples.md +70 -38
  46. package/skills/x-twitter-scraper/references/security.md +47 -14
  47. package/skills/x-twitter-scraper/references/types-account-identity.md +9 -0
  48. package/skills/x-twitter-scraper/references/types-account.md +26 -0
  49. package/skills/x-twitter-scraper/references/types-api-keys.md +22 -0
  50. package/skills/x-twitter-scraper/references/types-bookmarks-and-timeline.md +46 -0
  51. package/skills/x-twitter-scraper/references/types-credits.md +11 -0
  52. package/skills/x-twitter-scraper/references/types-download-media.md +22 -0
  53. package/skills/x-twitter-scraper/references/types-draws.md +60 -0
  54. package/skills/x-twitter-scraper/references/types-error.md +10 -0
  55. package/skills/x-twitter-scraper/references/types-events.md +43 -0
  56. package/skills/x-twitter-scraper/references/types-extractions.md +106 -0
  57. package/skills/x-twitter-scraper/references/types-mcp-add-webhook.md +14 -0
  58. package/skills/x-twitter-scraper/references/types-mcp-check-follow.md +10 -0
  59. package/skills/x-twitter-scraper/references/types-mcp-compose-tweet.md +31 -0
  60. package/skills/x-twitter-scraper/references/types-mcp-estimate-extraction.md +15 -0
  61. package/skills/x-twitter-scraper/references/types-mcp-get-account.md +26 -0
  62. package/skills/x-twitter-scraper/references/types-mcp-get-draw.md +30 -0
  63. package/skills/x-twitter-scraper/references/types-mcp-get-events.md +19 -0
  64. package/skills/x-twitter-scraper/references/types-mcp-get-trends.md +16 -0
  65. package/skills/x-twitter-scraper/references/types-mcp-get-user-info.md +16 -0
  66. package/skills/x-twitter-scraper/references/types-mcp-list-monitors.md +15 -0
  67. package/skills/x-twitter-scraper/references/types-mcp-lookup-tweet.md +25 -0
  68. package/skills/x-twitter-scraper/references/types-mcp-output-schemas.md +22 -0
  69. package/skills/x-twitter-scraper/references/types-mcp-refine-tweet.md +13 -0
  70. package/skills/x-twitter-scraper/references/types-mcp-run-draw.md +18 -0
  71. package/skills/x-twitter-scraper/references/types-mcp-run-extraction.md +12 -0
  72. package/skills/x-twitter-scraper/references/types-mcp-score-tweet.md +16 -0
  73. package/skills/x-twitter-scraper/references/types-mcp-search-tweets.md +17 -0
  74. package/skills/x-twitter-scraper/references/types-mcp-test-webhook.md +11 -0
  75. package/skills/x-twitter-scraper/references/types-monitors.md +20 -0
  76. package/skills/x-twitter-scraper/references/types-radar.md +40 -0
  77. package/skills/x-twitter-scraper/references/types-request-bodies.md +30 -0
  78. package/skills/x-twitter-scraper/references/types-rest-api-vs-mcp-field-naming.md +15 -0
  79. package/skills/x-twitter-scraper/references/types-support.md +25 -0
  80. package/skills/x-twitter-scraper/references/types-trends.md +18 -0
  81. package/skills/x-twitter-scraper/references/types-tweet-drafts.md +20 -0
  82. package/skills/x-twitter-scraper/references/types-tweet-style-cache.md +50 -0
  83. package/skills/x-twitter-scraper/references/types-user-activity.md +35 -0
  84. package/skills/x-twitter-scraper/references/types-webhooks.md +38 -0
  85. package/skills/x-twitter-scraper/references/types-x-accounts.md +16 -0
  86. package/skills/x-twitter-scraper/references/types-x-api.md +69 -0
  87. package/skills/x-twitter-scraper/references/types-x-articles.md +21 -0
  88. package/skills/x-twitter-scraper/references/types-x-write.md +39 -0
  89. package/skills/x-twitter-scraper/references/types.md +46 -1038
  90. package/skills/x-twitter-scraper/references/usage.md +50 -0
  91. package/skills/x-twitter-scraper/references/webhooks.md +78 -48
  92. package/skills/x-twitter-scraper/references/workflows.md +50 -40
  93. package/skills/x-twitter-scraper/skill-card.md +76 -0
  94. package/skills/x-twitter-scraper/skillspector-report.md +17 -0
  95. package/skills/xquik-social-research/LICENSE +21 -0
  96. package/skills/xquik-social-research/SKILL.md +77 -0
  97. package/skills.sh.json +77 -0
  98. package/start.sh +2 -0
  99. package/stub-server.mjs +209 -0
  100. package/task-guides/check-mutuals.md +55 -0
  101. package/task-guides/clean-followers.md +71 -0
  102. package/task-guides/export-tweets-csv.md +70 -0
  103. package/task-guides/extract-followers.md +83 -0
  104. package/task-guides/find-bangers.md +61 -0
  105. package/task-guides/find-influencers.md +72 -0
  106. package/task-guides/find-viral-tweets.md +80 -0
  107. package/task-guides/follow-unfollow.md +83 -0
  108. package/task-guides/for-you-feed.md +63 -0
  109. package/task-guides/going-viral.md +68 -0
  110. package/task-guides/grow-followers.md +66 -0
  111. package/task-guides/monitor-accounts.md +81 -0
  112. package/task-guides/optimize-tweets.md +80 -0
  113. package/task-guides/post-tweets.md +108 -0
  114. package/task-guides/run-giveaway.md +90 -0
  115. package/task-guides/search-tweets.md +122 -0
  116. package/task-guides/send-dms.md +92 -0
  117. package/task-guides/top-replies.md +71 -0
  118. package/task-guides/track-competitors.md +73 -0
  119. package/task-guides/track-hashtags.md +86 -0
  120. package/task-guides/track-mentions.md +88 -0
  121. package/task-guides/trending-news.md +68 -0
  122. package/task-guides/tweet-analytics.md +129 -0
  123. package/task-guides/tweet-ideas.md +65 -0
  124. package/task-guides/tweet-replies.md +82 -0
  125. package/task-guides/tweet-style.md +72 -0
  126. package/task-guides/tweet-webhooks.md +84 -0
  127. package/task-guides/update-x-profile.md +75 -0
  128. package/task-guides/user-tweets.md +148 -0
  129. package/task-guides/who-liked.md +68 -0
  130. package/task-guides/who-quoted.md +68 -0
  131. package/task-guides/who-retweeted.md +67 -0
  132. package/task-guides/write-threads.md +72 -0
  133. package/task-guides/write-tweets.md +84 -0
  134. package/task-guides/x-articles.md +84 -0
  135. package/task-guides/x-bookmarks.md +63 -0
  136. package/task-guides/x-communities.md +71 -0
  137. package/task-guides/x-lists.md +70 -0
  138. package/task-guides/x-spaces.md +67 -0
  139. package/task-guides/x-trends.md +74 -0
  140. package/skills/x-twitter-scraper/references/pricing.md +0 -145
@@ -1,1425 +1,30 @@
1
1
  # Xquik REST API Endpoints
2
2
 
3
- Base URL: `https://xquik.com/api/v1`
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
- **Response (step=compose):** Returns `contentRules`, `scorerWeights`, `followUpQuestions`, `algorithmInsights`, `engagementMultipliers`, `topPenalties`.
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
- | Status | Code | Meaning |
1392
- |--------|------|---------|
1393
- | 400 | `invalid_input` | Request body failed validation |
1394
- | 400 | `invalid_id` | Path parameter is not a valid ID |
1395
- | 400 | `invalid_json` | Invalid JSON in request body |
1396
- | 400 | `invalid_tweet_url` | Tweet URL format is invalid |
1397
- | 400 | `invalid_tweet_id` | Tweet ID is empty or invalid |
1398
- | 400 | `invalid_username` | X username is empty or invalid |
1399
- | 400 | `invalid_tool_type` | Extraction tool type not recognized |
1400
- | 400 | `invalid_format` | Export format not `csv`, `json`, `md`, `md-document`, `pdf`, `txt`, or `xlsx` |
1401
- | 400 | `invalid_params` | Export query parameters are missing or invalid |
1402
- | 400 | `missing_query` | Required query parameter is missing |
1403
- | 400 | `missing_params` | Required query parameters are missing |
1404
- | 400 | `no_media` | Tweet has no downloadable media |
1405
- | 400 | `webhook_inactive` | Webhook is disabled (test-webhook only) |
1406
- | 401 | `unauthenticated` | Missing or invalid API key |
1407
- | 403 | `account_needs_reauth` | X account session expired; use dashboard re-auth flow |
1408
- | 402 | `no_subscription` | No active subscription |
1409
- | 402 | `subscription_inactive` | Subscription is not active |
1410
- | 402 | `no_credits` | No credit balance record exists |
1411
- | 402 | `insufficient_credits` | Credit balance is too low |
1412
- | 403 | `api_key_limit_reached` | API key limit reached (100 max) |
1413
- | 404 | `not_found` | Resource does not exist |
1414
- | 404 | `user_not_found` | X user not found |
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) |