x-developer 2.4.16 → 2.5.1

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