x-developer 2.4.13 → 2.5.0

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