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,1007 +1,48 @@
1
1
  # Xquik TypeScript Type Definitions
2
2
 
3
- Copy-pasteable TypeScript types for all Xquik API objects.
4
-
5
- ## Contents
6
-
7
- - [Account](#account)
8
- - [API Keys](#api-keys)
9
- - [Credits](#credits)
10
- - [Monitors](#monitors)
11
- - [Events](#events)
12
- - [Webhooks](#webhooks)
13
- - [Draws](#draws)
14
- - [Extractions](#extractions)
15
- - [X API](#x-api)
16
- - [Trends](#trends)
17
- - [Support](#support)
18
- - [Error](#error)
19
- - [Request Bodies](#request-bodies)
20
- - [MCP Output Schemas](#mcp-output-schemas)
21
-
22
- ```typescript
23
- // ─── Account ─────────────────────────────────────────────
24
-
25
- interface Account {
26
- plan: "active" | "inactive";
27
- monitorsAllowed: number;
28
- monitorsUsed: number;
29
- monitorUsage: {
30
- activeDailyEstimate: string;
31
- activeHourlyBurn: string;
32
- creditsPerActiveMonitorDay: string;
33
- creditsPerActiveMonitorHour: string;
34
- eventsIncluded: boolean;
35
- instantCheckIntervalSeconds: number;
36
- unlimitedSlots: boolean;
37
- };
38
- creditInfo?: {
39
- balance: string;
40
- lifetimePurchased: string;
41
- lifetimeUsed: string;
42
- };
43
- xUsername?: string;
44
- }
45
-
46
- // ─── Credits ────────────────────────────────────────────
47
-
48
- interface CreditBalance {
49
- balance: string; // Current credit balance, bigint string
50
- lifetimePurchased: string; // Total credits purchased, bigint string
51
- lifetimeUsed: string; // Total credits consumed, bigint string
52
- }
53
-
54
- // ─── API Keys ────────────────────────────────────────────
55
-
56
- interface ApiKeyCreated {
57
- id: string;
58
- fullKey: string;
59
- prefix: string;
60
- name: string;
61
- createdAt: string;
62
- }
63
-
64
- interface ApiKey {
65
- id: string;
66
- name: string;
67
- prefix: string;
68
- isActive: boolean;
69
- createdAt: string;
70
- lastUsedAt?: string;
71
- }
72
-
73
- // ─── Monitors ────────────────────────────────────────────
74
-
75
- interface Monitor {
76
- id: string;
77
- username: string;
78
- xUserId: string;
79
- eventTypes: EventType[];
80
- isActive: boolean;
81
- createdAt: string;
82
- }
83
-
84
- type EventType =
85
- | "tweet.new"
86
- | "tweet.quote"
87
- | "tweet.reply"
88
- | "tweet.retweet";
89
-
90
- // ─── Events ──────────────────────────────────────────────
91
-
92
- interface Event {
93
- id: string;
94
- type: EventType;
95
- monitorId: string;
96
- username: string;
97
- occurredAt: string;
98
- data: EventData;
99
- xEventId?: string;
100
- }
101
-
102
- // Tweet events (tweet.new, tweet.reply, tweet.quote, tweet.retweet)
103
- interface TweetEventData {
104
- tweetId: string;
105
- text: string;
106
- metrics: {
107
- likes: number;
108
- retweets: number;
109
- replies: number;
110
- };
111
- // tweet.quote only
112
- quotedTweetId?: string;
113
- quotedUsername?: string;
114
- // tweet.reply only
115
- inReplyToTweetId?: string;
116
- inReplyToUsername?: string;
117
- // tweet.retweet only
118
- retweetedTweetId?: string;
119
- retweetedUsername?: string;
120
- }
121
-
122
- type EventData = TweetEventData;
123
-
124
- interface EventList {
125
- events: Event[];
126
- hasMore: boolean;
127
- nextCursor?: string;
128
- }
129
-
130
- // ─── Webhooks ────────────────────────────────────────────
131
-
132
- interface WebhookCreated {
133
- id: string;
134
- url: string;
135
- eventTypes: EventType[];
136
- secret: string;
137
- createdAt: string;
138
- }
139
-
140
- interface Webhook {
141
- id: string;
142
- url: string;
143
- eventTypes: EventType[];
144
- isActive: boolean;
145
- createdAt: string;
146
- }
147
-
148
- interface Delivery {
149
- id: string;
150
- streamEventId: string;
151
- status: "pending" | "delivered" | "failed" | "exhausted";
152
- attempts: number;
153
- lastStatusCode?: number;
154
- lastError?: string;
155
- createdAt: string;
156
- deliveredAt?: string;
157
- }
158
-
159
- interface WebhookPayload {
160
- eventType: EventType;
161
- username: string;
162
- data: EventData;
163
- }
164
-
165
- // ─── Draws ───────────────────────────────────────────────
166
-
167
- interface Draw {
168
- id: string;
169
- tweetId: string;
170
- tweetUrl: string;
171
- tweetText: string;
172
- tweetAuthorUsername: string;
173
- tweetLikeCount: number;
174
- tweetRetweetCount: number;
175
- tweetReplyCount: number;
176
- tweetQuoteCount: number;
177
- status: "pending" | "running" | "completed" | "failed";
178
- totalEntries: number;
179
- validEntries: number;
180
- createdAt: string;
181
- drawnAt?: string;
182
- }
183
-
184
- interface DrawListItem {
185
- id: string;
186
- tweetUrl: string;
187
- status: "pending" | "running" | "completed" | "failed";
188
- totalEntries: number;
189
- validEntries: number;
190
- createdAt: string;
191
- drawnAt?: string;
192
- }
193
-
194
- interface DrawWinner {
195
- position: number;
196
- authorUsername: string;
197
- tweetId: string;
198
- isBackup: boolean;
199
- }
200
-
201
- interface DrawList {
202
- draws: DrawListItem[];
203
- hasMore: boolean;
204
- nextCursor?: string;
205
- }
206
-
207
- interface CreateDrawRequest {
208
- tweetUrl: string;
209
- winnerCount?: number;
210
- backupCount?: number;
211
- uniqueAuthorsOnly?: boolean;
212
- mustRetweet?: boolean;
213
- mustFollowUsername?: string;
214
- filterMinFollowers?: number;
215
- filterAccountAgeDays?: number;
216
- filterLanguage?: string;
217
- requiredKeywords?: string[];
218
- requiredHashtags?: string[];
219
- requiredMentions?: string[];
220
- }
221
-
222
- // ─── Extractions ─────────────────────────────────────────
223
-
224
- type ExtractionToolType =
225
- | "article_extractor"
226
- | "community_extractor"
227
- | "community_moderator_explorer"
228
- | "community_post_extractor"
229
- | "community_search"
230
- | "favoriters"
231
- | "follower_explorer"
232
- | "following_explorer"
233
- | "list_follower_explorer"
234
- | "list_member_extractor"
235
- | "list_post_extractor"
236
- | "mention_extractor"
237
- | "people_search"
238
- | "post_extractor"
239
- | "quote_extractor"
240
- | "reply_extractor"
241
- | "repost_extractor"
242
- | "space_explorer"
243
- | "thread_extractor"
244
- | "tweet_search_extractor"
245
- | "user_likes"
246
- | "user_media"
247
- | "verified_follower_explorer";
248
-
249
- interface ExtractionJob {
250
- id: string;
251
- toolType: ExtractionToolType;
252
- status: "pending" | "running" | "completed" | "failed";
253
- totalResults: number;
254
- targetTweetId?: string;
255
- targetUsername?: string;
256
- targetUserId?: string;
257
- targetCommunityId?: string;
258
- targetListId?: string;
259
- targetSpaceId?: string;
260
- searchQuery?: string;
261
- resultsLimit?: number; // Max results to extract. Stops early instead of fetching all. Omit for all.
262
- errorMessage?: string;
263
- createdAt: string;
264
- completedAt?: string;
265
- }
266
-
267
- interface ExtractionResult {
268
- id: string;
269
- xUserId: string;
270
- xUsername?: string;
271
- xDisplayName?: string;
272
- xFollowersCount?: number;
273
- xVerified?: boolean;
274
- xProfileImageUrl?: string;
275
- tweetId?: string;
276
- tweetText?: string;
277
- tweetCreatedAt?: string;
278
- createdAt: string;
279
- }
280
-
281
- interface ExtractionList {
282
- extractions: ExtractionJob[];
283
- hasMore: boolean;
284
- nextCursor?: string;
285
- }
286
-
287
- interface ExtractionEstimate {
288
- allowed: boolean;
289
- creditsAvailable: string;
290
- creditsRequired: string;
291
- source: "replyCount" | "retweetCount" | "quoteCount" | "followers" | "unknown";
292
- estimatedResults: number;
293
- resolvedXUserId?: string;
294
- error?: string;
295
- }
296
-
297
- interface CreateExtractionRequest {
298
- toolType: ExtractionToolType;
299
- targetTweetId?: string;
300
- targetUsername?: string;
301
- targetCommunityId?: string;
302
- targetListId?: string;
303
- targetSpaceId?: string;
304
- searchQuery?: string;
305
- resultsLimit?: number; // Max results to extract. Stops early instead of fetching all. Omit for all.
306
- // Tweet search filters (tweet_search_extractor only)
307
- fromUser?: string;
308
- toUser?: string;
309
- mentioning?: string;
310
- language?: string;
311
- sinceDate?: string; // YYYY-MM-DD
312
- untilDate?: string; // YYYY-MM-DD
313
- mediaType?: 'images' | 'videos' | 'gifs' | 'media';
314
- minFaves?: number;
315
- minRetweets?: number;
316
- minReplies?: number;
317
- verifiedOnly?: boolean;
318
- replies?: 'include' | 'exclude' | 'only';
319
- retweets?: 'include' | 'exclude' | 'only';
320
- exactPhrase?: string;
321
- excludeWords?: string;
322
- advancedQuery?: string;
323
- }
324
-
325
- // ─── X API ───────────────────────────────────────────────
326
-
327
- interface TweetMediaItem {
328
- mediaUrl: string;
329
- type: string; // "photo" | "video" | "animated_gif"
330
- url: string;
331
- }
332
-
333
- interface Tweet {
334
- id: string;
335
- text: string;
336
- createdAt?: string;
337
- retweetCount: number;
338
- replyCount: number;
339
- likeCount: number;
340
- quoteCount: number;
341
- viewCount: number;
342
- bookmarkCount: number;
343
- media?: TweetMediaItem[];
344
- }
345
-
346
- interface TweetAuthor {
347
- id: string;
348
- username: string;
349
- followers: number;
350
- verified: boolean;
351
- profilePicture?: string;
352
- }
353
-
354
- interface TweetSearchResult {
355
- id: string;
356
- text: string;
357
- createdAt: string;
358
- likeCount: number; // Omitted if unavailable
359
- retweetCount: number; // Omitted if unavailable
360
- replyCount: number; // Omitted if unavailable
361
- media?: TweetMediaItem[];
362
- author: {
363
- id: string;
364
- username: string;
365
- name: string;
366
- verified: boolean;
367
- };
368
- }
369
-
370
- interface UserProfile {
371
- id: string;
372
- username: string;
373
- name: string;
374
- description?: string;
375
- followers?: number;
376
- following?: number;
377
- verified?: boolean;
378
- profilePicture?: string;
379
- location?: string;
380
- createdAt?: string;
381
- statusesCount?: number;
382
- }
383
-
384
- interface FollowerCheck {
385
- sourceUsername: string;
386
- targetUsername: string;
387
- isFollowing: boolean;
388
- isFollowedBy: boolean;
389
- }
390
-
391
- // ─── User Activity ──────────────────────────────────────
392
-
393
- interface UserTweetsResponse {
394
- tweets: Tweet[];
395
- has_next_page: boolean;
396
- next_cursor?: string;
397
- }
398
-
399
- interface UserLikesResponse {
400
- tweets: Tweet[];
401
- has_next_page: boolean;
402
- next_cursor?: string;
403
- }
404
-
405
- interface UserMediaResponse {
406
- tweets: Tweet[];
407
- has_next_page: boolean;
408
- next_cursor?: string;
409
- }
410
-
411
- interface TweetFavoritersResponse {
412
- users: UserProfile[];
413
- has_next_page: boolean;
414
- next_cursor?: string;
415
- }
416
-
417
- interface FollowersYouKnowResponse {
418
- users: UserProfile[];
419
- has_next_page: boolean;
420
- next_cursor?: string;
421
- }
422
-
423
- // ─── Bookmarks & Timeline ───────────────────────────────
424
-
425
- interface BookmarksResponse {
426
- tweets: Tweet[];
427
- has_next_page: boolean;
428
- next_cursor?: string;
429
- }
430
-
431
- interface BookmarkFolder {
432
- id: string;
433
- name: string;
434
- }
435
-
436
- interface BookmarkFoldersResponse {
437
- folders: BookmarkFolder[];
438
- }
439
-
440
- interface NotificationsResponse {
441
- notifications: Notification[];
442
- has_next_page: boolean;
443
- next_cursor?: string;
444
- }
445
-
446
- interface TimelineResponse {
447
- tweets: Tweet[];
448
- has_next_page: boolean;
449
- next_cursor?: string;
450
- }
451
-
452
- interface DmHistoryResponse {
453
- messages: DmMessage[];
454
- has_next_page: boolean;
455
- next_cursor?: string;
456
- }
457
-
458
- interface DmMessage {
459
- id: string;
460
- text: string;
461
- senderId: string;
462
- createdAt: string;
463
- media?: TweetMediaItem[];
464
- }
465
-
466
- // ─── X Articles ─────────────────────────────────────────
467
-
468
- interface Article {
469
- title: string;
470
- coverImage?: string;
471
- bodyHtml: string;
472
- likeCount: number;
473
- retweetCount: number;
474
- replyCount: number;
475
- viewCount: number;
476
- bookmarkCount: number;
477
- author: {
478
- id: string;
479
- username: string;
480
- name: string;
481
- };
482
- }
483
-
484
- // ─── Radar ───────────────────────────────────────────────
485
-
486
- type RadarSource =
487
- | "github"
488
- | "google_trends"
489
- | "hacker_news"
490
- | "polymarket"
491
- | "reddit"
492
- | "trustmrr"
493
- | "wikipedia";
494
-
495
- type RadarCategory =
496
- | "general"
497
- | "tech"
498
- | "dev"
499
- | "science"
500
- | "culture"
501
- | "politics"
502
- | "business"
503
- | "entertainment";
504
-
505
- interface RadarItem {
506
- id: string;
507
- title: string;
508
- description?: string;
509
- url?: string;
510
- imageUrl?: string;
511
- source: RadarSource;
512
- sourceId: string;
513
- category: RadarCategory;
514
- region: string;
515
- language: string;
516
- score: number;
517
- metadata: Record<string, unknown>;
518
- publishedAt: string;
519
- createdAt: string;
520
- }
521
-
522
- // ─── Download Media ─────────────────────────────────────
523
-
524
- interface DownloadMediaRequest {
525
- tweetInput?: string; // Tweet URL or numeric tweet ID (single mode)
526
- tweetIds?: string[]; // Array of tweet URLs or IDs (bulk mode, max 50). Exactly 1 of tweetInput or tweetIds required.
527
- }
528
-
529
- interface DownloadMediaSingleResponse {
530
- tweetId: string; // Resolved tweet ID
531
- galleryUrl: string; // Shareable gallery page URL
532
- cacheHit: boolean; // true if served from cache (no usage consumed)
533
- }
534
-
535
- interface DownloadMediaBulkResponse {
536
- galleryUrl: string; // Combined gallery page URL
537
- totalTweets: number; // Number of tweets processed
538
- totalMedia: number; // Total media items downloaded
539
- }
540
-
541
- // ─── Trends ──────────────────────────────────────────────
542
-
543
- interface Trend {
544
- name: string;
545
- description?: string;
546
- rank?: number;
547
- query?: string;
548
- }
549
-
550
- interface TrendList {
551
- trends: Trend[];
552
- total: number;
553
- woeid: number;
554
- }
555
-
556
- // ─── Support ────────────────────────────────────────────
557
-
558
- interface SupportTicket {
559
- id: string;
560
- subject: string;
561
- status: string;
562
- createdAt: string;
563
- updatedAt: string;
564
- }
565
-
566
- interface SupportMessage {
567
- id: string;
568
- body: string;
569
- sender: string;
570
- createdAt: string;
571
- }
572
-
573
- interface CreateTicketRequest {
574
- subject: string;
575
- body: string;
576
- }
577
-
578
- // ─── Error ───────────────────────────────────────────────
579
-
580
- interface ApiError {
581
- error: string;
582
- limit?: number;
583
- }
584
-
585
- // ─── Request Bodies ──────────────────────────────────────
586
-
587
- interface CreateMonitorRequest {
588
- username: string;
589
- eventTypes: EventType[];
590
- }
591
-
592
- interface UpdateMonitorRequest {
593
- eventTypes?: EventType[];
594
- isActive?: boolean;
595
- }
596
-
597
- interface CreateWebhookRequest {
598
- url: string;
599
- eventTypes: EventType[];
600
- }
601
-
602
- interface UpdateWebhookRequest {
603
- url?: string;
604
- eventTypes?: EventType[];
605
- isActive?: boolean;
606
- }
607
-
608
- interface CreateApiKeyRequest {
609
- name?: string;
610
- }
611
-
612
- // --- Tweet Style Cache ---
613
-
614
- interface TweetStyleCache {
615
- xUsername: string;
616
- tweetCount: number;
617
- isOwnAccount: boolean;
618
- fetchedAt: string; // ISO 8601
619
- tweets: CachedTweet[];
620
- }
621
-
622
- interface CachedTweet {
623
- id: string;
624
- text: string;
625
- authorUsername: string;
626
- createdAt: string; // ISO 8601
627
- media?: TweetMediaItem[];
628
- }
629
-
630
- interface TweetStyleSummary {
631
- xUsername: string;
632
- tweetCount: number;
633
- isOwnAccount: boolean;
634
- fetchedAt: string;
635
- }
636
-
637
- interface StyleComparison {
638
- style1: TweetStyleCache;
639
- style2: TweetStyleCache;
640
- }
641
-
642
- interface StylePerformance {
643
- xUsername: string;
644
- tweetCount: number;
645
- tweets: PerformanceTweet[];
646
- }
647
-
648
- interface PerformanceTweet {
649
- id: string;
650
- text: string;
651
- likeCount: number;
652
- retweetCount: number;
653
- replyCount: number;
654
- quoteCount: number;
655
- viewCount: number;
656
- bookmarkCount: number;
657
- }
658
-
659
- // --- Tweet Drafts ---
660
-
661
- interface TweetDraft {
662
- id: string;
663
- text: string;
664
- topic?: string;
665
- goal?: "engagement" | "followers" | "authority" | "conversation";
666
- createdAt: string; // ISO 8601
667
- updatedAt: string; // ISO 8601
668
- }
669
-
670
- interface TweetDraftList {
671
- drafts: TweetDraft[];
672
- afterCursor: string | null;
673
- hasMore: boolean;
674
- }
675
-
676
- // --- Account Identity ---
677
-
678
- interface XIdentityResponse {
679
- success: boolean;
680
- xUsername: string;
681
- }
682
- ```
683
-
684
- ## REST API vs MCP Field Naming
685
-
686
- The REST API and MCP server use different field names for the same data. Map these when switching between interfaces:
687
-
688
- | Type | REST API Field | MCP Field |
689
- |------|---------------|-----------|
690
- | **Monitor** | `username` | `xUsername` |
691
- | **Event** | `type` | `eventType` |
692
- | **Event** | `data` | `eventData` |
693
- | **Event** | `monitorId` | `monitoredAccountId` |
694
- | **UserProfile** | `followers` | `followersCount` |
695
- | **UserProfile** | `following` | `followingCount` |
696
- | **FollowerCheck** | `isFollowing` / `isFollowedBy` | `following` / `followedBy` |
697
-
698
- **MCP `get-user-info` returns a subset** of the full `UserProfile` type. Fields not returned by MCP: `verified`, `location`, `createdAt`, `statusesCount`. Use the REST API `GET /x/users/{id}` for the complete profile.
699
-
700
- ## MCP Output Schemas
701
-
702
- MCP tools return structured data with these shapes. Field names differ from the REST API (see mapping table above).
703
-
704
- ```typescript
705
- // ─── MCP: get-user-info ─────────────────────────────────
706
-
707
- interface McpUserInfo {
708
- username: string; // X username (without @)
709
- name: string; // Display name
710
- description: string; // User bio text
711
- followersCount: number; // Number of followers
712
- followingCount: number; // Number of accounts followed
713
- profilePicture: string; // Profile picture URL
714
- // Not returned: verified, location, createdAt, statusesCount
715
- // Use REST GET /x/users/{id} for the full profile
716
- }
717
-
718
- // ─── MCP: search-tweets ─────────────────────────────────
719
-
720
- interface McpSearchResult {
721
- tweets: {
722
- id: string; // Tweet ID (use with lookup-tweet for full metrics)
723
- text: string; // Full tweet text
724
- authorUsername: string; // X username of the tweet author
725
- authorName: string; // Display name of the tweet author
726
- createdAt: string; // ISO 8601 timestamp when tweet was posted
727
- media?: { mediaUrl: string; type: string; url: string }[]; // Attached photos/videos
728
- // No engagement metrics. Use lookup-tweet for those
729
- }[];
730
- }
731
-
732
- // ─── MCP: lookup-tweet ──────────────────────────────────
733
-
734
- interface McpTweetLookup {
735
- tweet: {
736
- id: string; // Tweet ID
737
- text: string; // Tweet text
738
- likeCount: number; // Number of likes
739
- retweetCount: number; // Number of retweets
740
- replyCount: number; // Number of replies
741
- quoteCount: number; // Number of quote tweets
742
- viewCount: number; // Number of views
743
- bookmarkCount: number; // Number of bookmarks
744
- media?: { mediaUrl: string; type: string; url: string }[]; // Attached photos/videos
745
- };
746
- author?: { // Tweet author details
747
- id: string; // Author user ID
748
- username: string; // Author X username
749
- followers: number; // Author follower count
750
- verified: boolean; // Whether the author is verified
751
- };
752
- }
753
-
754
- // ─── MCP: check-follow ─────────────────────────────────
755
-
756
- interface McpFollowCheck {
757
- following: boolean; // Whether the source follows the target
758
- followedBy: boolean; // Whether the target follows the source
759
- }
760
-
761
- // ─── MCP: get-events ────────────────────────────────────
762
-
763
- interface McpEventList {
764
- events: {
765
- id: string; // Event ID (use with get-event for full details)
766
- xUsername: string; // Username of the monitored account
767
- eventType: string; // Event type (tweet.new, tweet.reply, etc.)
768
- eventData: unknown; // Full event payload (tweet text, author, metrics)
769
- monitoredAccountId: string; // ID of the monitored account
770
- createdAt: string; // ISO 8601 when event was recorded
771
- occurredAt: string; // ISO 8601 when event occurred on X
772
- }[];
773
- hasMore: boolean; // Whether more results are available
774
- nextCursor?: string; // Pass as afterCursor to fetch the next page
775
- }
776
-
777
- // ─── MCP: list-monitors ─────────────────────────────────
778
-
779
- interface McpMonitorList {
780
- monitors: {
781
- id: string; // Monitor ID (use with remove-monitor, get-events monitorId filter)
782
- xUsername: string; // Monitored X username
783
- eventTypes: string[]; // Subscribed event types
784
- isActive: boolean; // Whether the monitor is currently active
785
- createdAt: string; // ISO 8601 timestamp
786
- }[];
787
- }
788
-
789
- // ─── MCP: add-webhook ───────────────────────────────────
790
-
791
- interface McpWebhookCreated {
792
- id: string; // Webhook ID
793
- url: string; // HTTPS endpoint URL
794
- eventTypes: string[]; // Event types delivered to this webhook
795
- isActive: boolean; // Whether the webhook is active
796
- createdAt: string; // ISO 8601 timestamp
797
- secret: string; // HMAC signing secret for verifying webhook payloads. Store securely.
798
- }
799
-
800
- // ─── MCP: test-webhook ──────────────────────────────────
801
-
802
- interface McpWebhookTest {
803
- success: boolean;
804
- statusCode: number;
805
- error?: string;
806
- }
807
-
808
- // ─── MCP: run-extraction ────────────────────────────────
809
-
810
- interface McpExtractionJob {
811
- id: string; // Extraction job ID (use with get-extraction for results)
812
- toolType: string; // Extraction tool type used
813
- status: string; // Job status
814
- totalResults: number; // Number of results extracted
815
- }
816
-
817
- // ─── MCP: estimate-extraction ───────────────────────────
818
-
819
- interface McpExtractionEstimate {
820
- allowed?: boolean; // Whether the extraction is allowed within budget
821
- estimatedResults?: number; // Estimated number of results
822
- creditsRequired?: string; // Required credits, bigint string
823
- creditsAvailable?: string; // Available credits, bigint string
824
- source?: string; // Data source used for estimation
825
- resolvedXUserId?: string; // Resolved user ID for username-based estimates
826
- error?: string; // Error message if estimation failed
827
- }
828
-
829
- // ─── MCP: run-draw ──────────────────────────────────────
830
-
831
- interface McpDrawResult {
832
- id: string; // Draw ID (use with get-draw for full details)
833
- tweetId: string; // Giveaway tweet ID
834
- totalEntries: number; // Total reply count before filtering
835
- validEntries: number; // Valid entries after filtering
836
- winners: {
837
- position: number; // Winner position (1-based)
838
- authorUsername: string; // X username of the winner
839
- tweetId: string; // Tweet ID of the winning reply
840
- isBackup: boolean; // Whether this is a backup winner
841
- }[];
842
- }
843
-
844
- // ─── MCP: get-draw ──────────────────────────────────────
845
-
846
- interface McpDrawDetails {
847
- draw: {
848
- id: string; // Draw ID
849
- status: string; // Draw status (completed, failed)
850
- createdAt: string; // ISO 8601 timestamp
851
- drawnAt?: string; // ISO 8601 timestamp when winners were drawn
852
- totalEntries: number; // Total reply count before filtering
853
- validEntries: number; // Entries remaining after filters applied
854
- tweetId: string; // Giveaway tweet ID
855
- tweetUrl: string; // Full URL of the giveaway tweet
856
- tweetText: string; // Giveaway tweet text
857
- tweetAuthorUsername: string; // Username of the giveaway tweet author
858
- tweetLikeCount: number; // Tweet like count at draw time
859
- tweetRetweetCount: number; // Tweet retweet count at draw time
860
- tweetReplyCount: number; // Tweet reply count at draw time
861
- tweetQuoteCount: number; // Tweet quote count at draw time
862
- };
863
- winners: {
864
- position: number; // Winner position (1-based)
865
- authorUsername: string; // X username of the winner
866
- tweetId: string; // Tweet ID of the winning reply
867
- isBackup: boolean; // Whether this is a backup winner
868
- }[];
869
- }
870
-
871
- // ─── MCP: get-account ───────────────────────────────────
872
-
873
- interface McpAccount {
874
- plan: "active" | "inactive";
875
- monitorsAllowed: number; // Deprecated; monitor slots are unlimited
876
- monitorsUsed: number; // Number of active monitors
877
- monitorUsage: {
878
- activeDailyEstimate: string;
879
- activeHourlyBurn: string;
880
- creditsPerActiveMonitorDay: string;
881
- creditsPerActiveMonitorHour: string;
882
- eventsIncluded: boolean;
883
- instantCheckIntervalSeconds: number;
884
- unlimitedSlots: boolean;
885
- };
886
- creditInfo?: {
887
- balance: string;
888
- lifetimePurchased: string;
889
- lifetimeUsed: string;
890
- };
891
- xUsername?: string;
892
- }
893
-
894
- // ─── MCP: get-trends ────────────────────────────────────
895
-
896
- interface McpTrends {
897
- woeid: number;
898
- total: number;
899
- trends: {
900
- name: string; // Trend name or hashtag
901
- rank?: number; // Trend rank position
902
- description?: string; // Trend description or context
903
- query?: string; // Search query to find tweets for this trend
904
- }[];
905
- }
906
-
907
- // ─── MCP: compose-tweet ────────────────────────────────
908
-
909
- interface McpComposeTweet {
910
- algorithmInsights: {
911
- name: string; // Signal name from PhoenixScores
912
- polarity: "positive" | "negative"; // Whether this signal helps or hurts ranking
913
- description: string; // What this signal measures
914
- }[];
915
- contentRules: {
916
- rule: string; // Actionable content rule
917
- description: string; // Why this rule matters based on algorithm architecture
918
- }[];
919
- engagementMultipliers: {
920
- action: string; // Engagement action (e.g. reply chain, quote tweet)
921
- multiplier: string; // Relative value compared to a like (e.g. "27x a like")
922
- source: string; // Data source for this multiplier
923
- }[];
924
- engagementVelocity: string; // How early engagement velocity affects distribution
925
- followUpQuestions: string[]; // Questions for the AI to ask the user before composing
926
- scorerWeights: {
927
- signal: string; // Signal name in the scoring model
928
- weight: number; // Weight applied to predicted probability
929
- context: string; // Practical meaning of this weight
930
- }[];
931
- topPenalties: string[]; // Most severe negative signals to avoid
932
- source: string; // Attribution to algorithm source code
933
- }
934
-
935
- // ─── MCP: refine-tweet ─────────────────────────────────
936
-
937
- interface McpRefineTweet {
938
- compositionGuidance: string[]; // Targeted guidance based on user preferences
939
- examplePatterns: {
940
- pattern: string; // Tweet structure template
941
- description: string; // What this pattern achieves
942
- }[];
943
- }
944
-
945
- // ─── MCP: score-tweet ──────────────────────────────────
946
-
947
- interface McpScoreTweet {
948
- totalChecks: number; // Total number of checks performed
949
- passedCount: number; // Number of checks that passed
950
- topSuggestion: string; // Highest-impact improvement suggestion
951
- checklist: {
952
- factor: string; // What was checked
953
- passed: boolean; // Whether the check passed
954
- suggestion?: string; // Improvement suggestion (present only if failed)
955
- }[];
956
- }
957
-
958
- // ─── X Accounts (Connected) ──────────────────────────
959
-
960
- interface ConnectedXAccount {
961
- id: string; // Unique account ID
962
- username: string; // X username
963
- displayName?: string; // Display name on X
964
- isActive: boolean; // Whether the connection is active
965
- createdAt: string; // ISO 8601 timestamp
966
- }
967
-
968
- // Connecting an X account is done by the user in the Xquik dashboard,
969
- // not through this skill. The skill never handles X login material.
970
-
971
- // ─── X Write ──────────────────────────────────────────
972
-
973
- interface CreateTweetRequest {
974
- account: string; // Connected X username or account ID
975
- text?: string; // Tweet text (required unless media is provided)
976
- reply_to_tweet_id?: string; // Tweet ID to reply to
977
- attachment_url?: string; // URL to attach as card
978
- community_id?: string; // Community ID to post into
979
- is_note_tweet?: boolean; // Long-form note tweet (up to 25,000 chars)
980
- media?: string[]; // Public image URLs, such as mediaUrl from POST /x/media
981
- }
982
-
983
- interface CreateTweetResponse {
984
- tweetId: string; // ID of the newly created tweet
985
- success: boolean; // Always true on success
986
- }
987
-
988
- interface WriteActionRequest {
989
- account: string; // Connected X username or account ID
990
- }
991
-
992
- interface SendDmRequest {
993
- account: string; // Connected X username or account ID
994
- text: string; // Message text
995
- media_ids?: string[]; // Media IDs to attach
996
- reply_to_message_id?: string; // Message ID to reply to
997
- }
998
-
999
- interface UpdateProfileRequest {
1000
- account: string; // Connected X username or account ID
1001
- name?: string; // Display name
1002
- description?: string; // Bio
1003
- location?: string; // Location
1004
- url?: string; // Website URL
1005
- }
1006
-
1007
- ```
3
+ Routing index for TypeScript response and request shapes. Load only the type section needed for the user task.
4
+
5
+ | Need | Reference |
6
+ |---|---|
7
+ | Account | [account.md](types-account.md) |
8
+ | Credits | [credits.md](types-credits.md) |
9
+ | API Keys | [api-keys.md](types-api-keys.md) |
10
+ | Monitors | [monitors.md](types-monitors.md) |
11
+ | Events | [events.md](types-events.md) |
12
+ | Webhooks | [webhooks.md](types-webhooks.md) |
13
+ | Draws | [draws.md](types-draws.md) |
14
+ | Extractions | [extractions.md](types-extractions.md) |
15
+ | X API | [x-api.md](types-x-api.md) |
16
+ | User Activity | [user-activity.md](types-user-activity.md) |
17
+ | Bookmarks & Timeline | [bookmarks-and-timeline.md](types-bookmarks-and-timeline.md) |
18
+ | X Articles | [x-articles.md](types-x-articles.md) |
19
+ | Radar | [radar.md](types-radar.md) |
20
+ | Download Media | [download-media.md](types-download-media.md) |
21
+ | Trends | [trends.md](types-trends.md) |
22
+ | Support | [support.md](types-support.md) |
23
+ | Error | [error.md](types-error.md) |
24
+ | Request Bodies | [request-bodies.md](types-request-bodies.md) |
25
+ | Tweet Style Cache | [tweet-style-cache.md](types-tweet-style-cache.md) |
26
+ | Tweet Drafts | [tweet-drafts.md](types-tweet-drafts.md) |
27
+ | Account Identity | [account-identity.md](types-account-identity.md) |
28
+ | REST API vs MCP Field Naming | [rest-api-vs-mcp-field-naming.md](types-rest-api-vs-mcp-field-naming.md) |
29
+ | MCP Output Schemas | [mcp-output-schemas.md](types-mcp-output-schemas.md) |
30
+ | MCP: get-user-info | [mcp-get-user-info.md](types-mcp-get-user-info.md) |
31
+ | MCP: search-tweets | [mcp-search-tweets.md](types-mcp-search-tweets.md) |
32
+ | MCP: lookup-tweet | [mcp-lookup-tweet.md](types-mcp-lookup-tweet.md) |
33
+ | MCP: check-follow | [mcp-check-follow.md](types-mcp-check-follow.md) |
34
+ | MCP: get-events | [mcp-get-events.md](types-mcp-get-events.md) |
35
+ | MCP: list-monitors | [mcp-list-monitors.md](types-mcp-list-monitors.md) |
36
+ | MCP: add-webhook | [mcp-add-webhook.md](types-mcp-add-webhook.md) |
37
+ | MCP: test-webhook | [mcp-test-webhook.md](types-mcp-test-webhook.md) |
38
+ | MCP: run-extraction | [mcp-run-extraction.md](types-mcp-run-extraction.md) |
39
+ | MCP: estimate-extraction | [mcp-estimate-extraction.md](types-mcp-estimate-extraction.md) |
40
+ | MCP: run-draw | [mcp-run-draw.md](types-mcp-run-draw.md) |
41
+ | MCP: get-draw | [mcp-get-draw.md](types-mcp-get-draw.md) |
42
+ | MCP: get-account | [mcp-get-account.md](types-mcp-get-account.md) |
43
+ | MCP: get-trends | [mcp-get-trends.md](types-mcp-get-trends.md) |
44
+ | MCP: compose-tweet | [mcp-compose-tweet.md](types-mcp-compose-tweet.md) |
45
+ | MCP: refine-tweet | [mcp-refine-tweet.md](types-mcp-refine-tweet.md) |
46
+ | MCP: score-tweet | [mcp-score-tweet.md](types-mcp-score-tweet.md) |
47
+ | X Accounts (Connected) | [x-accounts.md](types-x-accounts.md) |
48
+ | X Write | [x-write.md](types-x-write.md) |