@xquik/tweetclaw 1.5.4 → 1.6.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.
package/README.md CHANGED
@@ -3,6 +3,8 @@
3
3
  [![npm](https://img.shields.io/npm/v/@xquik/tweetclaw)](https://www.npmjs.com/package/@xquik/tweetclaw)
4
4
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
5
5
  ![GitHub stars](https://img.shields.io/github/stars/Xquik-dev/tweetclaw)
6
+ [![Glama MCP server](https://glama.ai/mcp/servers/Xquik-dev/x-twitter-scraper/badges/score.svg)](https://glama.ai/mcp/servers/Xquik-dev/x-twitter-scraper)
7
+ [![Smithery](https://smithery.ai/badge/xquik/x-twitter-scraper)](https://smithery.ai/servers/xquik/x-twitter-scraper)
6
8
 
7
9
  Post tweets, reply, like, retweet, follow, DM & more - directly from your chat. Full X/Twitter automation for [OpenClaw](https://github.com/openclaw/openclaw).
8
10
 
@@ -38,18 +40,18 @@ TweetClaw uses Xquik's credit-based pricing. 1 credit = $0.00015.
38
40
  | Extraction (followers, following, verified followers) | 1/result | $0.00015/result |
39
41
  | Extraction (articles) | 5/result | $0.00075/result |
40
42
  | Draw | 1/entry | $0.00015/entry |
41
- | Monitors, webhooks, radar, compose, drafts, integrations | 0 | **Free** |
43
+ | Monitors, webhooks, radar, compose, drafts | 0 | **Free** |
42
44
 
43
45
  ### Pay-Per-Use (No Subscription)
44
46
 
45
47
  Two options:
46
48
 
47
- - **Credits**: Top up credits via the API ($10 minimum). 1 credit = $0.00015. Works with all 122 endpoints.
49
+ - **Credits**: Top up credits via the API ($10 minimum). 1 credit = $0.00015. Works with all 111 endpoints.
48
50
  - **MPP**: 32 read-only X-API endpoints accept anonymous on-chain payments via Machine Payments Protocol. No account needed. SDK: `npm i mppx viem`.
49
51
 
50
52
  ### Free Operations
51
53
 
52
- Tweet composition, style analysis, drafts, curated radar (7 sources), account management, integrations, automations, support tickets - all free, no credits consumed.
54
+ Tweet composition, style analysis, drafts, curated radar (7 sources), account management, support tickets - all free, no credits consumed.
53
55
 
54
56
  ## Install
55
57
 
@@ -59,7 +61,7 @@ openclaw plugins install @xquik/tweetclaw
59
61
 
60
62
  ## Configure
61
63
 
62
- ### Option A: API key (full access, 122 endpoints)
64
+ ### Option A: API key (full access, 111 endpoints)
63
65
 
64
66
  Get an API key at [dashboard.xquik.com](https://dashboard.xquik.com/). Store it in an environment variable and configure TweetClaw to use it:
65
67
 
@@ -71,7 +73,7 @@ openclaw config set plugins.entries.tweetclaw.config.apiKey "$XQUIK_API_KEY"
71
73
 
72
74
  ### Option B: Credits (pay-per-use, no subscription)
73
75
 
74
- Top up credits from the Xquik dashboard or via `POST /credits/topup`. All 122 endpoints available. 1 credit = $0.00015.
76
+ Top up credits from the Xquik dashboard or via `POST /credits/topup`. All 111 endpoints available. 1 credit = $0.00015.
75
77
 
76
78
  ### Option C: MPP pay-per-use (no account needed, 32 read-only endpoints)
77
79
 
@@ -152,7 +154,7 @@ You: "Monitor @elonmusk for new tweets and follower changes"
152
154
 
153
155
  ## API Coverage
154
156
 
155
- 122 endpoints across 12 categories:
157
+ 111 endpoints across 11 categories:
156
158
 
157
159
  | Category | Examples | Cost |
158
160
  |----------|---------|------|
@@ -163,7 +165,6 @@ You: "Monitor @elonmusk for new tweets and follower changes"
163
165
  | **Extraction** | Run extraction jobs (23 tool types: replies, followers, communities, favoriters, user_likes, user_media, etc.) | 1-5 credits/result |
164
166
  | **Draws** | Run giveaway draws on tweets, export results | 1 credit/entry |
165
167
  | **Monitoring** | Create monitors, view events, manage webhooks | Free |
166
- | **Automations** | Create flows, add steps, test runs, inbound webhooks | Free |
167
168
  | **Account** | Manage API keys, subscription, connected X accounts | Free |
168
169
  | **Credits** | Check balance, top up credits | Free |
169
170
  | **Trends** | X trending topics, curated radar from 7 sources | 3 credits / Free |
@@ -174,6 +175,7 @@ You: "Monitor @elonmusk for new tweets and follower changes"
174
175
  - [Xquik Platform](https://xquik.com)
175
176
  - [API Documentation](https://docs.xquik.com)
176
177
  - [Billing & Pricing](https://docs.xquik.com/guides/billing)
178
+ - Framework guides: [Mastra](https://docs.xquik.com/guides/mastra), [CrewAI](https://docs.xquik.com/guides/crewai), [LangChain](https://docs.xquik.com/guides/langchain), [Pydantic AI](https://docs.xquik.com/guides/pydantic-ai), [Google ADK](https://docs.xquik.com/guides/google-adk), [Microsoft Agent Framework](https://docs.xquik.com/guides/microsoft-agent-framework), [Composio migration](https://docs.xquik.com/guides/composio-migration)
177
179
  - [npm Package](https://www.npmjs.com/package/@xquik/tweetclaw)
178
180
  - [OpenClaw](https://github.com/openclaw/openclaw)
179
181
 
@@ -1,15 +1,15 @@
1
1
  {
2
2
  "id": "tweetclaw",
3
3
  "name": "TweetClaw",
4
- "version": "1.5.4",
5
- "description": "Post tweets, reply, like, retweet, follow, DM from your chat - full X/Twitter automation powered by Xquik. 122 endpoints, reads from $0.00015/call.",
4
+ "version": "1.6.1",
5
+ "description": "Post tweets, reply, like, retweet, follow, DM from your chat - full X/Twitter automation powered by Xquik. 111 endpoints, reads from $0.00015/call.",
6
6
  "primaryCredential": "apiKey",
7
7
  "alternateCredentials": ["tempoSigningKey"],
8
8
  "configSchema": {
9
9
  "type": "object",
10
10
  "additionalProperties": false,
11
11
  "properties": {
12
- "apiKey": { "type": "string", "minLength": 1, "description": "Xquik API key (get one at dashboard.xquik.com). Required for full access to all 122 endpoints." },
12
+ "apiKey": { "type": "string", "minLength": 1, "description": "Xquik API key (get one at dashboard.xquik.com). Required for full access to all 111 endpoints." },
13
13
  "tempoSigningKey": { "type": "string", "minLength": 1, "description": "MPP signing key for pay-per-use mode. No account needed. 32 read-only X-API endpoints." },
14
14
  "baseUrl": { "type": "string", "default": "https://xquik.com" },
15
15
  "pollingInterval": { "type": "number", "default": 60, "description": "Event polling interval in seconds" },
@@ -21,7 +21,7 @@
21
21
  ]
22
22
  },
23
23
  "uiHints": {
24
- "apiKey": { "label": "Xquik API Key", "sensitive": true, "placeholder": "xq_...", "help": "Full access to all 122 endpoints. Generate at dashboard.xquik.com." },
24
+ "apiKey": { "label": "Xquik API Key", "sensitive": true, "placeholder": "xq_...", "help": "Full access to all 111 endpoints. Generate at dashboard.xquik.com." },
25
25
  "tempoSigningKey": { "label": "MPP Signing Key", "sensitive": true, "placeholder": "0x...", "help": "Pay-per-use mode via Machine Payments Protocol. No account needed. 32 read-only X-API endpoints only." },
26
26
  "baseUrl": { "label": "API Base URL", "placeholder": "https://xquik.com", "advanced": true, "help": "Only change if using a self-hosted Xquik instance." },
27
27
  "pollingInterval": { "label": "Event Poll Interval (seconds)", "advanced": true, "help": "How often to check for new monitor events. Default: 60 seconds." },
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@xquik/tweetclaw",
3
- "version": "1.5.4",
4
- "description": "Post tweets, reply, like, retweet, follow, DM & more from OpenClaw - full X/Twitter automation via Xquik. 122 endpoints, reads from $0.00015/call.",
3
+ "version": "1.6.1",
4
+ "description": "Post tweets, reply, like, retweet, follow, DM & more from OpenClaw - full X/Twitter automation via Xquik. 111 endpoints, reads from $0.00015/call.",
5
5
  "license": "MIT",
6
6
  "type": "module",
7
7
  "repository": {
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: tweetclaw
3
- description: "OpenClaw plugin for X/Twitter automation. Post tweets, reply, like, retweet, follow, DM, search, extract data, run giveaways, monitor accounts, automate flows via Xquik. 122 endpoints, 2 tools (explore + tweetclaw), 2 commands (/xstatus, /xtrends), background event poller. Reads from $0.00015/call - 33x cheaper than the official X API."
3
+ description: "OpenClaw plugin for X/Twitter automation. Post tweets, reply, like, retweet, follow, DM, search, extract data, run giveaways, monitor accounts via Xquik. 111 endpoints, 2 tools (explore + tweetclaw), 2 commands (/xstatus, /xtrends), background event poller. Reads from $0.00015/call - 33x cheaper than the official X API."
4
4
  homepage: https://xquik.com
5
5
  read_when:
6
6
  - Posting, replying, liking, retweeting, or following on X/Twitter
@@ -41,7 +41,7 @@ TweetClaw uses Xquik's credit-based pricing. 1 credit = $0.00015.
41
41
  | Extraction (followers, following, verified followers) | 1/result | $0.00015/result |
42
42
  | Extraction (articles) | 5/result | $0.00075/result |
43
43
  | Draw | 1/entry | $0.00015/entry |
44
- | Monitors, webhooks, radar, compose, drafts, integrations | 0 | **Free** |
44
+ | Monitors, webhooks, radar, compose, drafts | 0 | **Free** |
45
45
 
46
46
  ### vs Official X API
47
47
 
@@ -55,11 +55,22 @@ TweetClaw uses Xquik's credit-based pricing. 1 credit = $0.00015.
55
55
 
56
56
  ### Pay-Per-Use (No Subscription)
57
57
 
58
- - **Credits**: Top up via `POST /api/v1/credits/topup` ($10 minimum). Works with all 122 endpoints.
58
+ - **Credits**: Top up via `POST /api/v1/credits/topup` ($10 minimum). Works with all 111 endpoints.
59
59
  - **MPP**: 32 read-only endpoints accept anonymous on-chain payments. No account needed. SDK: `npm i mppx viem`.
60
60
 
61
61
  MPP pricing: tweet lookup ($0.00015), tweet search ($0.00015/tweet), user lookup ($0.00015), user tweets ($0.00015/tweet), follower check ($0.00105), article ($0.00105), media download ($0.00015/media), trends ($0.00045), X trends ($0.00045), quotes ($0.00015/tweet), replies ($0.00015/tweet), retweeters ($0.00015/user), favoriters ($0.00015/user), thread ($0.00015/tweet), user likes ($0.00015/tweet), user media ($0.00015/tweet), community info ($0.00015), community members ($0.00015/user), community moderators ($0.00015/user), community tweets ($0.00015/tweet), community search ($0.00015/community), communities tweets ($0.00015/tweet), list followers ($0.00015/user), list members ($0.00015/user), list tweets ($0.00015/tweet), users batch ($0.00015/user), users search ($0.00015/user), user followers ($0.00015/user), followers you know ($0.00015/user), user following ($0.00015/user), user mentions ($0.00015/tweet), verified followers ($0.00015/user).
62
62
 
63
+ ## Documentation
64
+
65
+ Prefer retrieval from docs for current limits, pricing, and API signatures:
66
+
67
+ | Source | Use for |
68
+ |--------|---------|
69
+ | [docs.xquik.com](https://docs.xquik.com) | Full docs home |
70
+ | [API reference](https://docs.xquik.com/api-reference/overview) | Endpoint parameters, response shapes |
71
+ | [Billing guide](https://docs.xquik.com/guides/billing) | Credit costs, subscription tiers, pay-per-use pricing |
72
+ | Framework guides: [Mastra](https://docs.xquik.com/guides/mastra), [CrewAI](https://docs.xquik.com/guides/crewai), [LangChain](https://docs.xquik.com/guides/langchain), [Pydantic AI](https://docs.xquik.com/guides/pydantic-ai), [Google ADK](https://docs.xquik.com/guides/google-adk), [Microsoft Agent Framework](https://docs.xquik.com/guides/microsoft-agent-framework), [Composio migration](https://docs.xquik.com/guides/composio-migration) | Framework-specific integration recipes |
73
+
63
74
  ## When to Use
64
75
 
65
76
  Use TweetClaw when the user wants to:
@@ -80,8 +91,6 @@ Use TweetClaw when the user wants to:
80
91
  - Analyze a user's writing style
81
92
  - Check trending topics on X
82
93
  - Download tweet media (images, videos, GIFs)
83
- - Set up Telegram alerts for monitor events
84
- - Create and manage automation flows (triggers, steps, test runs)
85
94
  - Check credit balance or top up credits
86
95
  - Open and manage support tickets
87
96
  - Read X Articles (long-form posts)
@@ -114,7 +123,7 @@ Configure the signing key in your OpenClaw plugin config:
114
123
 
115
124
  ## Tools
116
125
 
117
- TweetClaw registers 2 tools that cover the entire Xquik API (122 endpoints):
126
+ TweetClaw registers 2 tools that cover the entire Xquik API (111 endpoints):
118
127
 
119
128
  ### `explore` (free, no network)
120
129
 
@@ -287,13 +296,6 @@ You: "How many credits do I have?" or "Top up my credits"
287
296
  Agent uses tweetclaw -> GET /api/v1/credits or POST /api/v1/credits/topup
288
297
  ```
289
298
 
290
- ### Create an automation flow (free)
291
-
292
- ```
293
- You: "Create an automation that sends a DM when I get a new follower"
294
- Agent uses tweetclaw -> creates flow with monitor_event trigger, adds send_dm step, tests it
295
- ```
296
-
297
299
  ### Read an X Article
298
300
 
299
301
  ```
@@ -320,7 +322,6 @@ Agent uses tweetclaw -> creates ticket with subject and description
320
322
  | Extraction | Reply/follower/community extraction (23 tools) | 1-5 credits/result |
321
323
  | Draws | Giveaway draws, export results | 1 credit/entry |
322
324
  | Monitoring | Create monitors, view events, webhooks | Free |
323
- | Automations | Create flows, add steps, test runs, inbound webhooks | Free |
324
325
  | Account | API keys, subscription, connected X accounts | Free |
325
326
  | Credits | Check balance, top up | Free |
326
327
  | Trends | X trending topics, curated radar from 7 sources | 3 credits / Free |
package/src/api-spec.ts CHANGED
@@ -3,10 +3,7 @@ import type { EndpointInfo, EndpointParameter } from './types.js';
3
3
  const RESPONSE_SUCCESS = '{ success: true }';
4
4
  const DESCRIPTION_PAGINATION_CURSOR = 'Pagination cursor';
5
5
  const DESCRIPTION_STYLE_USERNAME = 'X username of cached style';
6
- const DESCRIPTION_EXPORT_FORMAT = 'Export format (csv, xlsx, md)';
7
- const CATEGORY_BOT = 'bot';
8
- const DESCRIPTION_PLATFORM_USER_ID = 'Platform user ID';
9
- const CATEGORY_INTEGRATIONS = 'integrations';
6
+ const DESCRIPTION_EXPORT_FORMAT = 'Export format (csv, json, md, md-document, pdf, txt, xlsx)';
10
7
  const CATEGORY_X_ACCOUNTS = 'x-accounts';
11
8
 
12
9
  const PAGINATION_PARAMS: readonly EndpointParameter[] = [
@@ -45,9 +42,6 @@ const PARAM_DRAW_ID: EndpointParameter =
45
42
  const PARAM_EXTRACTION_ID: EndpointParameter =
46
43
  { description: 'Extraction public ID', in: 'path', name: 'id', required: true, type: 'string' };
47
44
 
48
- const PARAM_INTEGRATION_ID: EndpointParameter =
49
- { description: 'Integration ID', in: 'path', name: 'id', required: true, type: 'string' };
50
-
51
45
  const PARAM_X_ACCOUNT: EndpointParameter =
52
46
  { description: 'X account (@username or account ID)', in: 'body', name: 'account', required: true, type: 'string' };
53
47
 
@@ -87,13 +81,9 @@ const PARAM_MEDIA_URL: EndpointParameter =
87
81
  { description: 'URL to download media from (alternative to file, HTTPS only)', in: 'body', name: 'url', required: false, type: 'string' };
88
82
 
89
83
  const RESPONSE_COMMUNITY_ACTION = '{ communityId, communityName, success: true }';
90
- const CATEGORY_AUTOMATIONS = 'automations';
91
84
  const CATEGORY_SUPPORT = 'support';
92
85
  const CATEGORY_X_WRITE = 'x-write';
93
86
 
94
- const PARAM_AUTOMATION_SLUG: EndpointParameter =
95
- { description: 'Flow slug', in: 'path', name: 'slug', required: true, type: 'string' };
96
-
97
87
  const PARAM_TICKET_ID: EndpointParameter =
98
88
  { description: 'Ticket public ID', in: 'path', name: 'id', required: true, type: 'string' };
99
89
 
@@ -686,134 +676,6 @@ const API_SPEC: readonly EndpointInfo[] = [
686
676
  summary: 'Get trending items by source',
687
677
  },
688
678
 
689
- // --- Bot ---
690
- {
691
- category: CATEGORY_BOT,
692
- free: true,
693
- method: 'POST',
694
- parameters: [
695
- { description: 'Platform name (telegram)', in: 'body', name: 'platform', required: true, type: 'string' },
696
- { description: DESCRIPTION_PLATFORM_USER_ID, in: 'body', name: 'platformUserId', required: true, type: 'string' },
697
- ],
698
- path: '/api/v1/bot/platform-links',
699
- responseShape: '{ id, platform, platformUserId, createdAt }',
700
- summary: 'Link a platform user to an Xquik account',
701
- },
702
- {
703
- category: CATEGORY_BOT,
704
- free: true,
705
- method: 'DELETE',
706
- parameters: [
707
- { description: 'Platform name (telegram)', in: 'body', name: 'platform', required: true, type: 'string' },
708
- { description: DESCRIPTION_PLATFORM_USER_ID, in: 'body', name: 'platformUserId', required: true, type: 'string' },
709
- ],
710
- path: '/api/v1/bot/platform-links',
711
- responseShape: RESPONSE_SUCCESS,
712
- summary: 'Unlink a platform user from an Xquik account',
713
- },
714
- {
715
- category: CATEGORY_BOT,
716
- free: true,
717
- method: 'GET',
718
- parameters: [
719
- { description: 'Platform name', in: 'query', name: 'platform', required: true, type: 'string' },
720
- { description: DESCRIPTION_PLATFORM_USER_ID, in: 'query', name: 'platformUserId', required: true, type: 'string' },
721
- ],
722
- path: '/api/v1/bot/platform-links/lookup',
723
- responseShape: '{ userId }',
724
- summary: 'Look up an Xquik user by platform identity',
725
- },
726
- {
727
- category: CATEGORY_BOT,
728
- free: true,
729
- method: 'POST',
730
- parameters: [
731
- { description: DESCRIPTION_PLATFORM_USER_ID, in: 'body', name: 'platformUserId', required: true, type: 'string' },
732
- { description: 'Input token count', in: 'body', name: 'inputTokens', required: true, type: 'number' },
733
- { description: 'Output token count', in: 'body', name: 'outputTokens', required: true, type: 'number' },
734
- ],
735
- path: '/api/v1/bot/usage',
736
- responseShape: RESPONSE_SUCCESS,
737
- summary: 'Track bot token usage',
738
- },
739
-
740
- // --- Integrations ---
741
- {
742
- category: CATEGORY_INTEGRATIONS,
743
- free: true,
744
- method: 'GET',
745
- path: '/api/v1/integrations',
746
- responseShape: '{ integrations: [{ id, type, name, config, eventTypes, isActive, ... }] }',
747
- summary: 'List all integrations (Telegram push notifications)',
748
- },
749
- {
750
- category: CATEGORY_INTEGRATIONS,
751
- free: true,
752
- method: 'POST',
753
- parameters: [
754
- { description: 'Integration type (telegram)', in: 'body', name: 'type', required: true, type: 'string' },
755
- { description: 'Display name', in: 'body', name: 'name', required: true, type: 'string' },
756
- { description: 'Config with chatId', in: 'body', name: 'config', required: true, type: 'object' },
757
- { description: 'Event types to subscribe to', in: 'body', name: 'eventTypes', required: true, type: 'string[]' },
758
- ],
759
- path: '/api/v1/integrations',
760
- responseShape: '{ id, type, name, config, eventTypes, isActive, ... }',
761
- summary: 'Create a new integration for push notifications',
762
- },
763
- {
764
- category: CATEGORY_INTEGRATIONS,
765
- free: true,
766
- method: 'GET',
767
- parameters: [PARAM_INTEGRATION_ID],
768
- path: '/api/v1/integrations/:id',
769
- responseShape: '{ id, type, name, config, eventTypes, filters, isActive, ... }',
770
- summary: 'Get integration details',
771
- },
772
- {
773
- category: CATEGORY_INTEGRATIONS,
774
- free: true,
775
- method: 'PATCH',
776
- parameters: [
777
- PARAM_INTEGRATION_ID,
778
- { description: 'Display name', in: 'body', name: 'name', required: false, type: 'string' },
779
- { description: 'Event types', in: 'body', name: 'eventTypes', required: false, type: 'string[]' },
780
- { description: 'Active status', in: 'body', name: 'isActive', required: false, type: 'boolean' },
781
- { description: 'Silent notifications', in: 'body', name: 'silentPush', required: false, type: 'boolean' },
782
- ],
783
- path: '/api/v1/integrations/:id',
784
- responseShape: '{ id, type, name, config, eventTypes, isActive, ... }',
785
- summary: 'Update an integration',
786
- },
787
- {
788
- category: CATEGORY_INTEGRATIONS,
789
- free: true,
790
- method: 'DELETE',
791
- parameters: [PARAM_INTEGRATION_ID],
792
- path: '/api/v1/integrations/:id',
793
- responseShape: '{ success: true }',
794
- summary: 'Delete an integration',
795
- },
796
- {
797
- category: CATEGORY_INTEGRATIONS,
798
- free: true,
799
- method: 'GET',
800
- parameters: [
801
- PARAM_INTEGRATION_ID,
802
- { description: 'Max items', in: 'query', name: 'limit', required: false, type: 'number' },
803
- ],
804
- path: '/api/v1/integrations/:id/deliveries',
805
- responseShape: '{ deliveries: [{ id, eventType, status, attempts, createdAt, ... }] }',
806
- summary: 'List delivery history for an integration',
807
- },
808
- {
809
- category: CATEGORY_INTEGRATIONS,
810
- free: true,
811
- method: 'POST',
812
- parameters: [PARAM_INTEGRATION_ID],
813
- path: '/api/v1/integrations/:id/test',
814
- responseShape: '{ success: true }',
815
- summary: 'Send a test delivery to the integration',
816
- },
817
679
 
818
680
  // --- X Account Management ---
819
681
  {
@@ -1059,145 +921,6 @@ const API_SPEC: readonly EndpointInfo[] = [
1059
921
  summary: 'Leave community',
1060
922
  },
1061
923
 
1062
- // --- Automations ---
1063
- {
1064
- category: CATEGORY_AUTOMATIONS,
1065
- free: true,
1066
- method: 'GET',
1067
- path: '/api/v1/automations',
1068
- responseShape: '{ items: [{ id, name, slug, triggerType, triggerConfig, isActive, runCount, lastRunAt, createdAt, updatedAt }] }',
1069
- summary: 'List all automation flows',
1070
- },
1071
- {
1072
- category: CATEGORY_AUTOMATIONS,
1073
- free: true,
1074
- method: 'POST',
1075
- parameters: [
1076
- { description: 'Flow name', in: 'body', name: 'name', required: true, type: 'string' },
1077
- { description: 'Trigger type: monitor_event, schedule, search, webhook_inbound', in: 'body', name: 'triggerType', required: true, type: 'string' },
1078
- { description: 'Trigger-specific configuration', in: 'body', name: 'triggerConfig', required: true, type: 'object' },
1079
- { description: 'Template slug to scaffold from', in: 'body', name: 'templateSlug', required: false, type: 'string' },
1080
- ],
1081
- path: '/api/v1/automations',
1082
- responseShape: '{ id, name, slug, triggerType, triggerConfig, isActive, createdAt, updatedAt }',
1083
- summary: 'Create a new automation flow',
1084
- },
1085
- {
1086
- category: CATEGORY_AUTOMATIONS,
1087
- free: true,
1088
- method: 'GET',
1089
- parameters: [PARAM_AUTOMATION_SLUG],
1090
- path: '/api/v1/automations/:slug',
1091
- responseShape: '{ id, name, slug, triggerType, triggerConfig, isActive, steps, recentRuns, createdAt, updatedAt }',
1092
- summary: 'Get flow details with steps and recent runs',
1093
- },
1094
- {
1095
- category: CATEGORY_AUTOMATIONS,
1096
- free: true,
1097
- method: 'PATCH',
1098
- parameters: [
1099
- PARAM_AUTOMATION_SLUG,
1100
- { description: 'Current updatedAt for optimistic concurrency', in: 'body', name: 'expectedUpdatedAt', required: true, type: 'string' },
1101
- { description: 'Updated flow name', in: 'body', name: 'name', required: false, type: 'string' },
1102
- { description: 'Updated trigger type', in: 'body', name: 'triggerType', required: false, type: 'string' },
1103
- { description: 'Updated trigger config', in: 'body', name: 'triggerConfig', required: false, type: 'object' },
1104
- { description: 'Activate or deactivate', in: 'body', name: 'isActive', required: false, type: 'boolean' },
1105
- ],
1106
- path: '/api/v1/automations/:slug',
1107
- responseShape: '{ id, name, slug, triggerType, triggerConfig, isActive, createdAt, updatedAt }',
1108
- summary: 'Update flow name, trigger, or active status',
1109
- },
1110
- {
1111
- category: CATEGORY_AUTOMATIONS,
1112
- free: true,
1113
- method: 'DELETE',
1114
- parameters: [PARAM_AUTOMATION_SLUG],
1115
- path: '/api/v1/automations/:slug',
1116
- responseShape: RESPONSE_SUCCESS,
1117
- summary: 'Delete a flow and all its steps',
1118
- },
1119
- {
1120
- category: CATEGORY_AUTOMATIONS,
1121
- free: true,
1122
- method: 'POST',
1123
- parameters: [
1124
- PARAM_AUTOMATION_SLUG,
1125
- { description: 'Step type: action, condition, extraction', in: 'body', name: 'stepType', required: true, type: 'string' },
1126
- { description: 'Branch: main, if_true, if_false', in: 'body', name: 'branch', required: true, type: 'string' },
1127
- { description: 'Step-specific configuration', in: 'body', name: 'config', required: true, type: 'object' },
1128
- { description: 'Order position in branch', in: 'body', name: 'position', required: false, type: 'number' },
1129
- { description: 'Parent step ID for condition branches', in: 'body', name: 'parentStepId', required: false, type: 'string' },
1130
- { description: 'Action type: create_tweet, follow, like, reply_tweet, retweet, send_dm, send_email, send_telegram, unfollow', in: 'body', name: 'actionType', required: false, type: 'string' },
1131
- { description: 'Extraction tool type', in: 'body', name: 'extractionType', required: false, type: 'string' },
1132
- { description: 'Variable name for extraction output', in: 'body', name: 'outputName', required: false, type: 'string' },
1133
- ],
1134
- path: '/api/v1/automations/:slug/steps',
1135
- responseShape: '{ id, flowId, stepType, actionType, extractionType, branch, config, position, createdAt }',
1136
- summary: 'Add an action, condition, or extraction step to a flow',
1137
- },
1138
- {
1139
- category: CATEGORY_AUTOMATIONS,
1140
- free: true,
1141
- method: 'PATCH',
1142
- parameters: [
1143
- PARAM_AUTOMATION_SLUG,
1144
- { description: 'Step ID to update', in: 'body', name: 'stepId', required: true, type: 'string' },
1145
- { description: 'Updated step config', in: 'body', name: 'config', required: false, type: 'object' },
1146
- { description: 'Updated step type', in: 'body', name: 'stepType', required: false, type: 'string' },
1147
- { description: 'Updated branch', in: 'body', name: 'branch', required: false, type: 'string' },
1148
- { description: 'Updated position', in: 'body', name: 'position', required: false, type: 'number' },
1149
- { description: 'Updated action type', in: 'body', name: 'actionType', required: false, type: 'string' },
1150
- { description: 'Updated extraction type', in: 'body', name: 'extractionType', required: false, type: 'string' },
1151
- { description: 'Updated output variable name', in: 'body', name: 'outputName', required: false, type: 'string' },
1152
- ],
1153
- path: '/api/v1/automations/:slug/steps',
1154
- responseShape: '{ id, flowId, stepType, actionType, extractionType, branch, config, position, createdAt }',
1155
- summary: 'Update a step configuration or position',
1156
- },
1157
- {
1158
- category: CATEGORY_AUTOMATIONS,
1159
- free: true,
1160
- method: 'DELETE',
1161
- parameters: [
1162
- PARAM_AUTOMATION_SLUG,
1163
- { description: 'Step ID to delete', in: 'body', name: 'stepId', required: true, type: 'string' },
1164
- ],
1165
- path: '/api/v1/automations/:slug/steps',
1166
- responseShape: RESPONSE_SUCCESS,
1167
- summary: 'Remove a step from a flow',
1168
- },
1169
- {
1170
- category: CATEGORY_AUTOMATIONS,
1171
- free: true,
1172
- method: 'PATCH',
1173
- parameters: [
1174
- PARAM_AUTOMATION_SLUG,
1175
- { description: 'Array of { stepId, positionX, positionY } (max 10)', in: 'body', name: 'positions', required: true, type: 'array' },
1176
- ],
1177
- path: '/api/v1/automations/:slug/steps/positions',
1178
- responseShape: RESPONSE_SUCCESS,
1179
- summary: 'Batch update canvas positions for flow steps',
1180
- },
1181
- {
1182
- category: CATEGORY_AUTOMATIONS,
1183
- free: true,
1184
- method: 'POST',
1185
- parameters: [PARAM_AUTOMATION_SLUG],
1186
- path: '/api/v1/automations/:slug/test',
1187
- responseShape: '{ status, result, runId, error? }',
1188
- summary: 'Test run a flow with synthetic trigger data',
1189
- },
1190
- {
1191
- category: CATEGORY_AUTOMATIONS,
1192
- free: true,
1193
- method: 'POST',
1194
- parameters: [
1195
- { description: 'Inbound webhook token', in: 'path', name: 'token', required: true, type: 'string' },
1196
- ],
1197
- path: '/api/v1/webhooks/inbound/:token',
1198
- responseShape: '{ accepted: true, flowId }',
1199
- summary: 'Trigger a flow via inbound webhook (no auth required, token acts as auth)',
1200
- },
1201
924
 
1202
925
  // --- Support ---
1203
926
  {
@@ -245,21 +245,7 @@ async () => {
245
245
  }
246
246
  \`\`\`
247
247
 
248
- ### 16. Set up Telegram alerts for monitor events (FREE)
249
- \`\`\`javascript
250
- async () => {
251
- return xquik.request('/api/v1/integrations', {
252
- method: 'POST',
253
- body: {
254
- type: 'telegram',
255
- chatId: '123456789',
256
- eventTypes: ['tweet.new', 'tweet.reply', 'draw.completed', 'extraction.completed']
257
- }
258
- });
259
- }
260
- \`\`\`
261
-
262
- ### 17. Community actions (create, join, leave)
248
+ ### 16. Community actions (create, join, leave)
263
249
  \`\`\`javascript
264
250
  async () => {
265
251
  // Join a community
@@ -273,14 +259,14 @@ async () => {
273
259
  }
274
260
  \`\`\`
275
261
 
276
- ### 18. Subscribe (FREE - returns checkout URL)
262
+ ### 17. Subscribe (FREE - returns checkout URL)
277
263
  \`\`\`javascript
278
264
  async () => {
279
265
  return xquik.request('/api/v1/subscribe', { method: 'POST' });
280
266
  }
281
267
  \`\`\`
282
268
 
283
- ### 19. Draft & optimize tweet text (3-step compose flow, FREE)
269
+ ### 18. Draft & optimize tweet text (3-step compose flow, FREE)
284
270
  \`\`\`javascript
285
271
  async () => {
286
272
  // Use this ONLY when the user wants help WRITING tweet text.
@@ -297,7 +283,7 @@ async () => {
297
283
  \`\`\`
298
284
 
299
285
  ## Cost
300
- - Free: /api/v1/compose, /api/v1/styles (cached lookup/save/delete/compare), /api/v1/drafts, /api/v1/radar, /api/v1/subscribe, /api/v1/account, /api/v1/api-keys, /api/v1/bot/*, /api/v1/integrations/*, /api/v1/x/accounts, /api/v1/automations/*, /api/v1/support/*
286
+ - Free: /api/v1/compose, /api/v1/styles (cached lookup/save/delete/compare), /api/v1/drafts, /api/v1/radar, /api/v1/subscribe, /api/v1/account, /api/v1/api-keys, /api/v1/x/accounts, /api/v1/support/*
301
287
  - MPP pay-per-use (no account/subscription needed, 32 endpoints): GET /api/v1/x/tweets/:id ($0.00015/call), GET /api/v1/x/tweets/search ($0.00015/tweet), GET /api/v1/x/tweets/:id/quotes ($0.00015/tweet), GET /api/v1/x/tweets/:id/replies ($0.00015/tweet), GET /api/v1/x/tweets/:id/retweeters ($0.00015/user), GET /api/v1/x/tweets/:id/favoriters ($0.00015/user), GET /api/v1/x/tweets/:id/thread ($0.00015/tweet), GET /api/v1/x/users/:username ($0.00015/call), GET /api/v1/x/users/:id/tweets ($0.00015/tweet), GET /api/v1/x/users/:id/likes ($0.00015/tweet), GET /api/v1/x/users/:id/media ($0.00015/tweet), GET /api/v1/x/followers/check ($0.00105/call), GET /api/v1/x/articles/:tweetId ($0.00105/call), POST /api/v1/x/media/download ($0.00015/media), GET /api/v1/trends ($0.00045/call), GET /api/v1/x/trends ($0.00045/call), GET /api/v1/x/communities/:id/info ($0.00015/call), GET /api/v1/x/communities/:id/members ($0.00015/user), GET /api/v1/x/communities/:id/moderators ($0.00015/user), GET /api/v1/x/communities/:id/tweets ($0.00015/tweet), GET /api/v1/x/communities/search ($0.00015/community), GET /api/v1/x/communities/tweets ($0.00015/tweet), GET /api/v1/x/lists/:id/followers ($0.00015/user), GET /api/v1/x/lists/:id/members ($0.00015/user), GET /api/v1/x/lists/:id/tweets ($0.00015/tweet), GET /api/v1/x/users/batch ($0.00015/user), GET /api/v1/x/users/search ($0.00015/user), GET /api/v1/x/users/:id/followers ($0.00015/user), GET /api/v1/x/users/:id/followers-you-know ($0.00015/user), GET /api/v1/x/users/:id/following ($0.00015/user), GET /api/v1/x/users/:id/mentions ($0.00015/tweet), GET /api/v1/x/users/:id/verified-followers ($0.00015/user)
302
288
  - Subscription required: /api/v1/styles (X API refresh when cache >7 days), /api/v1/x/profile, /api/v1/x/communities, /api/v1/x/dm, /api/v1/extractions, /api/v1/draws, /api/v1/monitors, /api/v1/events, /api/v1/webhooks, /api/v1/styles/:username/performance, /api/v1/trending/:source
303
289
  - Write actions (subscription required): POST /api/v1/x/tweets, DELETE /api/v1/x/tweets/:id, POST|DELETE /api/v1/x/tweets/:id/like, POST /api/v1/x/tweets/:id/retweet, POST|DELETE /api/v1/x/users/:id/follow, POST /api/v1/x/dm/:userId, POST /api/v1/x/media, PATCH /api/v1/x/profile, PATCH /api/v1/x/profile/avatar, PATCH /api/v1/x/profile/banner, POST|DELETE /api/v1/x/communities, POST|DELETE /api/v1/x/communities/:id/join