x-developer 2.3.1 → 2.4.4

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 (54) hide show
  1. package/README.md +6 -10
  2. package/openclaw.plugin.json +2 -2
  3. package/package.json +6 -3
  4. package/skills/check-mutuals/SKILL.md +50 -0
  5. package/skills/clean-followers/SKILL.md +66 -0
  6. package/skills/export-tweets-csv/SKILL.md +65 -0
  7. package/skills/extract-followers/SKILL.md +78 -0
  8. package/skills/find-bangers/SKILL.md +56 -0
  9. package/skills/find-influencers/SKILL.md +67 -0
  10. package/skills/find-viral-tweets/SKILL.md +75 -0
  11. package/skills/follow-unfollow/SKILL.md +79 -0
  12. package/skills/for-you-feed/SKILL.md +57 -0
  13. package/skills/going-viral/SKILL.md +64 -0
  14. package/skills/grow-followers/SKILL.md +61 -0
  15. package/skills/monitor-accounts/SKILL.md +77 -0
  16. package/skills/optimize-tweets/SKILL.md +73 -0
  17. package/skills/post-tweets/SKILL.md +105 -0
  18. package/skills/run-giveaway/SKILL.md +88 -0
  19. package/skills/search-tweets/SKILL.md +119 -0
  20. package/skills/send-dms/SKILL.md +88 -0
  21. package/skills/top-replies/SKILL.md +66 -0
  22. package/skills/track-competitors/SKILL.md +67 -0
  23. package/skills/track-hashtags/SKILL.md +81 -0
  24. package/skills/track-mentions/SKILL.md +83 -0
  25. package/skills/trending-news/SKILL.md +63 -0
  26. package/skills/tweet-analytics/SKILL.md +131 -0
  27. package/skills/tweet-ideas/SKILL.md +59 -0
  28. package/skills/tweet-replies/SKILL.md +77 -0
  29. package/skills/tweet-style/SKILL.md +68 -0
  30. package/skills/tweet-webhooks/SKILL.md +79 -0
  31. package/skills/update-x-profile/SKILL.md +71 -0
  32. package/skills/user-tweets/SKILL.md +125 -0
  33. package/skills/who-liked/SKILL.md +63 -0
  34. package/skills/who-quoted/SKILL.md +63 -0
  35. package/skills/who-retweeted/SKILL.md +62 -0
  36. package/skills/write-threads/SKILL.md +69 -0
  37. package/skills/write-tweets/SKILL.md +75 -0
  38. package/skills/x-articles/SKILL.md +79 -0
  39. package/skills/x-bookmarks/SKILL.md +57 -0
  40. package/skills/x-communities/SKILL.md +66 -0
  41. package/skills/x-lists/SKILL.md +65 -0
  42. package/skills/x-spaces/SKILL.md +62 -0
  43. package/skills/x-trends/SKILL.md +67 -0
  44. package/skills/x-twitter-scraper/SKILL.md +72 -60
  45. package/skills/x-twitter-scraper/metadata.json +2 -2
  46. package/skills/x-twitter-scraper/references/api-endpoints.md +7 -251
  47. package/skills/x-twitter-scraper/references/extractions.md +1 -1
  48. package/skills/x-twitter-scraper/references/mcp-setup.md +15 -8
  49. package/skills/x-twitter-scraper/references/mcp-tools.md +2 -7
  50. package/skills/x-twitter-scraper/references/pricing.md +2 -2
  51. package/skills/x-twitter-scraper/references/python-examples.md +0 -2
  52. package/skills/x-twitter-scraper/references/types.md +4 -171
  53. package/skills/x-twitter-scraper/references/webhooks.md +2 -2
  54. package/skills/x-twitter-scraper/references/workflows.md +3 -5
@@ -24,8 +24,6 @@ All requests require the `x-api-key` header. All responses are JSON. HTTPS only.
24
24
  - [Subscribe](#subscribe)
25
25
  - [X Accounts (Connected)](#x-accounts-connected)
26
26
  - [X Write](#x-write)
27
- - [Integrations](#integrations)
28
- - [Automations](#automations)
29
27
  - [Credits](#credits)
30
28
  - [Support](#support)
31
29
 
@@ -126,7 +124,7 @@ POST /monitors
126
124
  }
127
125
  ```
128
126
 
129
- Event types: `tweet.new`, `tweet.quote`, `tweet.reply`, `tweet.retweet`, `follower.gained`, `follower.lost`.
127
+ Event types: `tweet.new`, `tweet.quote`, `tweet.reply`, `tweet.retweet`, `webhook.test`.
130
128
 
131
129
  Returns `409 monitor_already_exists` if the username is already monitored.
132
130
 
@@ -358,7 +356,7 @@ Returns full draw details including winners.
358
356
  GET /draws/{id}/export?format=csv&type=winners
359
357
  ```
360
358
 
361
- Formats: `csv`, `xlsx`, `md`. Types: `winners` (default), `entries`. Entry exports capped at 50,000 rows.
359
+ Formats: `csv`, `json`, `md`, `md-document`, `pdf`, `txt`, `xlsx`. Types: `winners` (default), `entries`. Entry exports capped at 100,000 rows (PDF capped at 10,000).
362
360
 
363
361
  ---
364
362
 
@@ -456,7 +454,7 @@ Returns job details with paginated results (up to 1,000 per page).
456
454
  GET /extractions/{id}/export?format=csv
457
455
  ```
458
456
 
459
- Formats: `csv`, `xlsx`, `md`. 50,000 row limit. Exports include enrichment columns not in the API response.
457
+ Formats: `csv`, `json`, `md`, `md-document`, `pdf`, `txt`, `xlsx`. 100,000 row limit (PDF 10,000). Exports include enrichment columns not in the API response.
460
458
 
461
459
  ---
462
460
 
@@ -1048,6 +1046,8 @@ Returns a checkout URL for subscribing or managing the subscription. If already
1048
1046
 
1049
1047
  Manage connected X accounts for write actions. All endpoints are free (no usage cost).
1050
1048
 
1049
+ **Connecting or re-authenticating an X account is done by the user in the Xquik dashboard** at [xquik.com/dashboard/account](https://xquik.com/dashboard/account), not via this skill. The skill never handles X login credentials. The agent should direct the user to the dashboard when a new account needs to be connected or an existing session needs to be refreshed.
1050
+
1051
1051
  ### List X Accounts
1052
1052
 
1053
1053
  ```
@@ -1056,28 +1056,6 @@ GET /x/accounts
1056
1056
 
1057
1057
  Returns all connected X accounts. Response: `{ accounts: [{ id, username, displayName, isActive, createdAt }] }`.
1058
1058
 
1059
- ### Connect X Account
1060
-
1061
- ```
1062
- POST /x/accounts
1063
- ```
1064
-
1065
- **Body:**
1066
-
1067
- | Field | Type | Required | Description |
1068
- |-------|------|----------|-------------|
1069
- | `username` | string | Yes | X username (`@` auto-stripped) |
1070
- | `email` | string | Yes | Email associated with the X account |
1071
- | `password` | string | Yes | Account password (encrypted at rest) |
1072
- | `totp_secret` | string | No | TOTP base32 secret for 2FA accounts |
1073
- | `proxy_country` | string | No | Preferred proxy region (e.g. `"US"`, `"TR"`) |
1074
-
1075
- **Response (201):** `{ id, username, isActive, createdAt }`
1076
-
1077
- **Errors:** `409 account_already_connected`, `422 login_failed`
1078
-
1079
- **Security:** This is a credential proxy endpoint. The agent transmits the user's X credentials to Xquik over HTTPS for session establishment. Credentials are encrypted at rest and never returned in responses. Before calling: (1) confirm with the user that they want to connect this account, (2) show which fields will be sent, (3) never log or retain credentials after the call.
1080
-
1081
1059
  ### Get X Account
1082
1060
 
1083
1061
  ```
@@ -1092,23 +1070,7 @@ Returns `{ id, username, displayName, isActive, createdAt }`.
1092
1070
  DELETE /x/accounts/{id}
1093
1071
  ```
1094
1072
 
1095
- Permanently removes the account and deletes stored credentials. Returns `{ success: true }`.
1096
-
1097
- ### Re-authenticate X Account
1098
-
1099
- ```
1100
- POST /x/accounts/{id}/reauth
1101
- ```
1102
-
1103
- Use when a session expires or X requires re-verification.
1104
-
1105
- **Body:** `{ "password": "...", "totp_secret": "..." }` (password required, totp_secret optional)
1106
-
1107
- **Response:** `{ success: true }`
1108
-
1109
- **Errors:** `422 reauth_failed`
1110
-
1111
- **Security:** Same credential proxy rules as POST /x/accounts — confirm with user, never log or retain credentials.
1073
+ Permanently removes the account from Xquik. Returns `{ success: true }`. Before calling, confirm with the user.
1112
1074
 
1113
1075
  ---
1114
1076
 
@@ -1289,208 +1251,6 @@ DELETE /x/communities/{id}/join
1289
1251
 
1290
1252
  ---
1291
1253
 
1292
- ## Integrations
1293
-
1294
- Manage third-party integrations (currently Telegram) that receive monitor event notifications. All endpoints are free (no usage cost).
1295
-
1296
- ### Create Integration
1297
-
1298
- ```
1299
- POST /integrations
1300
- ```
1301
-
1302
- **Body:**
1303
-
1304
- | Field | Type | Required | Description |
1305
- |-------|------|----------|-------------|
1306
- | `type` | string | Yes | Integration type: `"telegram"` |
1307
- | `name` | string | Yes | Human-readable name |
1308
- | `config` | object | Yes | Type-specific config. Telegram: `{ chatId: "-1001234567890" }` |
1309
- | `eventTypes` | string[] | Yes | Event types: `tweet.new`, `tweet.quote`, `tweet.reply`, `tweet.retweet`, `draw.completed`, `extraction.completed`, `extraction.failed` |
1310
-
1311
- **Response (201):** `{ id, type, name, config, eventTypes, isActive, createdAt }`
1312
-
1313
- ### List Integrations
1314
-
1315
- ```
1316
- GET /integrations
1317
- ```
1318
-
1319
- Returns all integrations. Response: `{ integrations: [...] }`.
1320
-
1321
- ### Get Integration
1322
-
1323
- ```
1324
- GET /integrations/{id}
1325
- ```
1326
-
1327
- Returns a single integration with full details.
1328
-
1329
- ### Update Integration
1330
-
1331
- ```
1332
- PATCH /integrations/{id}
1333
- ```
1334
-
1335
- **Body:** `{ "name": "...", "eventTypes": [...], "isActive": true|false, "silentPush": false, "scopeAllMonitors": true, "filters": {}, "messageTemplate": {} }` (all optional, at least 1 required)
1336
-
1337
- ### Delete Integration
1338
-
1339
- ```
1340
- DELETE /integrations/{id}
1341
- ```
1342
-
1343
- Permanently removes the integration. Returns `204 No Content`.
1344
-
1345
- ### Test Integration
1346
-
1347
- ```
1348
- POST /integrations/{id}/test
1349
- ```
1350
-
1351
- Sends a test notification. Returns success or failure status.
1352
-
1353
- **Errors:** `502 delivery_failed`
1354
-
1355
- ### List Deliveries
1356
-
1357
- ```
1358
- GET /integrations/{id}/deliveries
1359
- ```
1360
-
1361
- View delivery attempts and statuses. Statuses: `pending`, `delivered`, `failed`, `exhausted`.
1362
-
1363
- **Query:** `limit` (default 50).
1364
-
1365
- ---
1366
-
1367
- ## Automations
1368
-
1369
- Trigger-driven workflow automation. Create flows with triggers (monitor events, schedules, search, inbound webhooks) and action steps.
1370
-
1371
- ### List Automations
1372
-
1373
- ```
1374
- GET /automations
1375
- ```
1376
-
1377
- Returns all flows. Response: `{ items: [{ id, name, slug, triggerType, triggerConfig, isActive, runCount, lastRunAt, minIntervalSeconds, pausedReason, templateSlug, xAccountId, createdAt, updatedAt }] }`.
1378
-
1379
- ### Create Automation
1380
-
1381
- ```
1382
- POST /automations
1383
- ```
1384
-
1385
- **Body:**
1386
- ```json
1387
- {
1388
- "name": "New Follower Welcome",
1389
- "triggerType": "monitor_event",
1390
- "triggerConfig": { "eventType": "follower.gained" },
1391
- "templateSlug": "welcome-dm"
1392
- }
1393
- ```
1394
-
1395
- Trigger types: `monitor_event`, `schedule`, `search`, `webhook_inbound`.
1396
-
1397
- **Response (201):** Flow object with `id`, `slug`, `isActive: false`.
1398
-
1399
- Flows are created inactive. Add steps, then activate via `PATCH /automations/{slug}`.
1400
-
1401
- Free: 2 flows. Subscribers: 10 flows.
1402
-
1403
- ### Get Automation
1404
-
1405
- ```
1406
- GET /automations/{slug}
1407
- ```
1408
-
1409
- Returns flow with steps and 20 most recent runs.
1410
-
1411
- ### Update Automation
1412
-
1413
- ```
1414
- PATCH /automations/{slug}
1415
- ```
1416
-
1417
- **Body:** `{ "expectedUpdatedAt": "...", "name": "...", "triggerType": "...", "triggerConfig": {...}, "isActive": true|false }`. `expectedUpdatedAt` required (optimistic concurrency). Returns `409 conflict` if stale.
1418
-
1419
- Activation requires an active subscription and at least 1 action step.
1420
-
1421
- ### Delete Automation
1422
-
1423
- ```
1424
- DELETE /automations/{slug}
1425
- ```
1426
-
1427
- Deletes the flow and all its steps. Returns `{ success: true }`.
1428
-
1429
- ### Add Step
1430
-
1431
- ```
1432
- POST /automations/{slug}/steps
1433
- ```
1434
-
1435
- **Body:**
1436
- ```json
1437
- {
1438
- "stepType": "action",
1439
- "actionType": "send_dm",
1440
- "branch": "main",
1441
- "config": { "message": "Welcome!" },
1442
- "position": 0
1443
- }
1444
- ```
1445
-
1446
- Step types: `action`, `condition`, `extraction`. Max 10 steps per flow.
1447
-
1448
- Action types: `create_tweet`, `follow`, `like`, `reply_tweet`, `retweet`, `send_dm`, `send_email`, `send_telegram`, `unfollow`.
1449
-
1450
- Extraction types: all 23 extraction tool types (kebab-case, e.g. `reply-extractor`). Requires `outputName` for variable reference in later steps.
1451
-
1452
- ### Update Step
1453
-
1454
- ```
1455
- PATCH /automations/{slug}/steps
1456
- ```
1457
-
1458
- **Body:** `{ "stepId": "101", "config": {...}, "positionX": 250, "positionY": 100 }`. `stepId` required.
1459
-
1460
- ### Delete Step
1461
-
1462
- ```
1463
- DELETE /automations/{slug}/steps
1464
- ```
1465
-
1466
- **Body:** `{ "stepId": "101" }`.
1467
-
1468
- ### Update Step Positions
1469
-
1470
- ```
1471
- PATCH /automations/{slug}/steps/positions
1472
- ```
1473
-
1474
- Batch update canvas positions: `{ "positions": [{ "stepId": "101", "positionX": 250, "positionY": 100 }] }`.
1475
-
1476
- ### Test Automation
1477
-
1478
- ```
1479
- POST /automations/{slug}/test
1480
- ```
1481
-
1482
- Not yet implemented. Returns `{ status: "not_implemented" }`.
1483
-
1484
- ### Inbound Webhook Trigger
1485
-
1486
- ```
1487
- POST /webhooks/inbound/{token}
1488
- ```
1489
-
1490
- No auth header required. The URL token identifies the flow. Accepts any JSON body as trigger payload. Rate limited per flow (60/hour) and per user (300/hour).
1491
-
1492
- ---
1493
-
1494
1254
  ## Credits
1495
1255
 
1496
1256
  ### Get Credit Balance
@@ -1570,7 +1330,7 @@ Add a message to an existing ticket.
1570
1330
  | 400 | `invalid_tweet_id` | Tweet ID is empty or invalid |
1571
1331
  | 400 | `invalid_username` | X username is empty or invalid |
1572
1332
  | 400 | `invalid_tool_type` | Extraction tool type not recognized |
1573
- | 400 | `invalid_format` | Export format not `csv`, `xlsx`, or `md` |
1333
+ | 400 | `invalid_format` | Export format not `csv`, `json`, `md`, `md-document`, `pdf`, `txt`, or `xlsx` |
1574
1334
  | 400 | `invalid_params` | Export query parameters are missing or invalid |
1575
1335
  | 400 | `missing_query` | Required query parameter is missing |
1576
1336
  | 400 | `missing_params` | Required query parameters are missing |
@@ -1588,15 +1348,12 @@ Add a message to an existing ticket.
1588
1348
  | 402 | `no_addon` | No monitor addon on subscription |
1589
1349
  | 403 | `monitor_limit_reached` | Plan monitor limit exceeded |
1590
1350
  | 403 | `api_key_limit_reached` | API key limit reached (100 max) |
1591
- | 403 | `flow_limit_reached` | Flow limit reached (free: 2, subscriber: 10) |
1592
- | 403 | `step_limit_reached` | Step limit reached (10 per flow) |
1593
1351
  | 404 | `not_found` | Resource does not exist |
1594
1352
  | 404 | `user_not_found` | X user not found |
1595
1353
  | 404 | `tweet_not_found` | Tweet not found |
1596
1354
  | 404 | `style_not_found` | No cached style found |
1597
1355
  | 404 | `draft_not_found` | Draft not found |
1598
1356
  | 409 | `monitor_already_exists` | Duplicate monitor for same username |
1599
- | 409 | `conflict` | Concurrent edit conflict (automation updates) |
1600
1357
  | 422 | `login_failed` | X credential verification failed |
1601
1358
  | 429 | - | Rate limited. Retry with backoff |
1602
1359
  | 429 | `x_api_rate_limited` | X data source rate limited. Retry |
@@ -1604,4 +1361,3 @@ Add a message to an existing ticket.
1604
1361
  | 502 | `stream_registration_failed` | Stream registration failed. Retry |
1605
1362
  | 502 | `x_api_unavailable` | X data source temporarily unavailable |
1606
1363
  | 502 | `x_api_unauthorized` | X data source authentication failed. Retry |
1607
- | 502 | `delivery_failed` | Integration test delivery failed |
@@ -202,7 +202,7 @@ Returns paginated results (up to 1,000 per page). Each result includes:
202
202
  GET /extractions/{id}/export?format=csv
203
203
  ```
204
204
 
205
- Formats: `csv`, `xlsx`, `md`. 50,000 row limit.
205
+ Formats: `csv`, `json`, `md`, `md-document`, `pdf`, `txt`, `xlsx`. 100,000 row limit (10,000 for PDF).
206
206
 
207
207
  Exports include enrichment columns not present in the API response.
208
208
 
@@ -8,7 +8,7 @@ Connect AI agents and IDEs to Xquik via the Model Context Protocol. The MCP serv
8
8
  | Endpoint | `https://xquik.com/mcp` |
9
9
  | Auth header | `x-api-key` |
10
10
 
11
- > **Security:** Use a scoped, revocable API key — not your primary account key. Where your platform supports environment variable interpolation (e.g., `${XQUIK_API_KEY}`), prefer that over hardcoding. Rotate keys periodically from the [dashboard](https://dashboard.xquik.com/account). Never commit API keys to version control.
11
+ > **Security:** Use a scoped, revocable API key - not your primary account key. Where your platform supports environment variable interpolation (e.g., `${XQUIK_API_KEY}`), prefer that over hardcoding. Rotate keys periodically from the [dashboard](https://dashboard.xquik.com/account). Never commit API keys to version control.
12
12
 
13
13
  ## Claude.ai (Web)
14
14
 
@@ -16,19 +16,24 @@ Claude.ai supports MCP connectors natively via OAuth. Add Xquik as a connector f
16
16
 
17
17
  ## Claude Desktop
18
18
 
19
- Claude Desktop only supports stdio transport. Use `mcp-remote` as a bridge (requires [Node.js](https://nodejs.org)).
19
+ Claude Desktop only supports stdio transport, so it needs a local stdio-to-HTTP bridge. The recommended setup avoids runtime package fetches: **install the bridge globally first, then invoke the pinned binary directly.**
20
20
 
21
- > **About `mcp-remote`:** [`mcp-remote`](https://www.npmjs.com/package/mcp-remote) is an open-source stdio-to-HTTP bridge maintained by the MCP ecosystem (MIT license, [source on GitHub](https://github.com/geelen/mcp-remote)). It translates Claude Desktop's stdio transport to StreamableHTTP — it does not execute arbitrary code, access your filesystem, or modify your system. The version is pinned (`@0.1.38`) to prevent supply-chain drift. If you prefer not to use `npx`, install it globally first: `npm install -g mcp-remote@0.1.38`, then replace `"command": "npx"` with `"command": "mcp-remote"` and remove the version from args.
21
+ > **About `mcp-remote`:** [`mcp-remote`](https://www.npmjs.com/package/mcp-remote) is an open-source stdio-to-HTTP bridge (MIT license, [source on GitHub](https://github.com/geelen/mcp-remote)) maintained by the MCP ecosystem. It translates stdio to StreamableHTTP - it does not execute arbitrary code, access your filesystem, or modify your system. Always pin the version (`@0.1.38`) and audit the package on npm before installing.
22
22
 
23
- Add to `claude_desktop_config.json`:
23
+ ### Step 1: Install the bridge globally (one-time, audited)
24
+
25
+ ```bash
26
+ npm install -g mcp-remote@0.1.38
27
+ ```
28
+
29
+ ### Step 2: Add to `claude_desktop_config.json`
24
30
 
25
31
  ```json
26
32
  {
27
33
  "mcpServers": {
28
34
  "xquik": {
29
- "command": "npx",
35
+ "command": "mcp-remote",
30
36
  "args": [
31
- "mcp-remote@0.1.38",
32
37
  "https://xquik.com/mcp",
33
38
  "--header",
34
39
  "x-api-key:${XQUIK_API_KEY}"
@@ -38,7 +43,9 @@ Add to `claude_desktop_config.json`:
38
43
  }
39
44
  ```
40
45
 
41
- > Replace `${XQUIK_API_KEY}` with your actual API key, or set the environment variable before launching Claude Desktop.
46
+ > Set the `XQUIK_API_KEY` environment variable before launching Claude Desktop, or replace `${XQUIK_API_KEY}` with your actual API key.
47
+
48
+ > **Prefer a hosted option?** Claude.ai (web) supports Xquik natively via OAuth - see the section above. No local bridge required.
42
49
 
43
50
  ## Claude Code
44
51
 
@@ -175,7 +182,7 @@ The MCP server (v2) at `https://xquik.com/mcp` provides 2 structured API tools:
175
182
  | `explore` | Search the API endpoint catalog (read-only, no network calls) | Free |
176
183
  | `xquik` | Execute API calls against your account | Varies by endpoint |
177
184
 
178
- The agent sends structured API requests through the MCP server, which handles authentication and execution within the same first-party infrastructure as the REST API. All 122 REST API endpoints across 12 categories are accessible: account, automations, bot, composition, extraction, integrations, media, monitoring, support, twitter, x-accounts, and x-write.
185
+ The agent sends structured API requests through the MCP server, which handles authentication and execution within the same first-party infrastructure as the REST API. All 111 REST API endpoints across 10 categories are accessible: account, composition, credits, extraction, media, monitoring, support, twitter, x-accounts, and x-write.
179
186
 
180
187
  ## After Setup
181
188
 
@@ -18,7 +18,7 @@ interface EndpointInfo {
18
18
  method: string;
19
19
  path: string;
20
20
  summary: string;
21
- category: string; // account, automations, bot, composition, credits, extraction, integrations, media, monitoring, support, twitter, x-accounts, x-write
21
+ category: string; // account, composition, credits, extraction, media, monitoring, support, twitter, x-accounts, x-write
22
22
  free: boolean;
23
23
  parameters?: Array<{ name: string; in: 'query' | 'path' | 'body'; required: boolean; type: string; description: string }>;
24
24
  responseShape?: string;
@@ -86,10 +86,6 @@ Use `explore` first to find endpoints, then `xquik` to call them.
86
86
  | Follow/unfollow | `POST`/`DELETE /api/v1/x/users/{id}/follow` |
87
87
  | Send a DM | `POST /api/v1/x/dm/{userId}` |
88
88
  | Upload media | `POST /api/v1/x/media` |
89
- | Create automation flow | `POST /api/v1/automations` |
90
- | List automation flows | `GET /api/v1/automations` |
91
- | Add step to flow | `POST /api/v1/automations/{slug}/steps` |
92
- | Activate/deactivate flow | `PATCH /api/v1/automations/{slug}` |
93
89
  | Open support ticket | `POST /api/v1/support/tickets` |
94
90
  | List support tickets | `GET /api/v1/support/tickets` |
95
91
  | Get user's recent tweets | `GET /api/v1/x/users/{id}/tweets` |
@@ -118,7 +114,6 @@ Use `POST /api/v1/extractions` ONLY for bulk data that simpler endpoints cannot
118
114
  | **Analyze tweet style** | `POST /styles` -> `GET /styles/{username}` -> `POST /compose` with `styleUsername` |
119
115
  | **Post a tweet** | `GET /x/accounts` -> `POST /x/tweets` with `account` + `text` |
120
116
  | **Get trending news** | `GET /radar` (free, all 7 sources, via `xquik` tool) -> `POST /compose` with trending topic |
121
- | **Create automation** | `POST /automations` -> `POST /automations/{slug}/steps` -> `PATCH /automations/{slug}` (activate) |
122
117
  | **Open support ticket** | `POST /support/tickets` -> `GET /support/tickets/{id}` |
123
118
 
124
119
  ## Common Mistakes
@@ -147,5 +142,5 @@ These are NOT available via the MCP server:
147
142
 
148
143
  ## Cost Reference
149
144
 
150
- - **Free**: account info, compose (all steps), styles (cached lookup/save/delete/compare), drafts, radar (via `xquik` tool, all 7 sources), subscribe, API keys, bot endpoints, integrations, X account management, automations (create, list, update, delete, steps), support tickets, credits (balance check, top up)
145
+ - **Free**: account info, compose (all steps), styles (cached lookup/save/delete/compare), drafts, radar (via `xquik` tool, all 7 sources), subscribe, API keys, X account management, support tickets, credits (balance check, top up)
151
146
  - **Subscription required**: tweet search, user lookup, tweet lookup, follow check, media download (first only, cached free), extractions, draws, style analysis (X API refresh), performance analysis, trends, all write actions (tweet, like, retweet, follow, DM, profile, media upload, communities)
@@ -62,7 +62,7 @@ Draws: 1 credit per participant. Extraction cost depends on the tool type:
62
62
 
63
63
  ### Free operations ($0)
64
64
 
65
- Monitors, webhooks, integrations, account status, radar (7 sources), extraction/draw history, cost estimates, tweet composition (compose, refine, score), style cache management, drafts, support tickets, API key management, X account management.
65
+ Monitors, webhooks, account status, radar (7 sources), extraction/draw history, cost estimates, tweet composition (compose, refine, score), style cache management, drafts, support tickets, API key management, X account management.
66
66
 
67
67
  ## Price Comparison vs Official X API
68
68
 
@@ -80,7 +80,7 @@ Monitors, webhooks, integrations, account status, radar (7 sources), extraction/
80
80
 
81
81
  Two options without a monthly subscription:
82
82
 
83
- **Credits**: Top up credits via `POST /credits/topup` ($10 minimum). 1 credit = $0.00015. Works with all 122 endpoints.
83
+ **Credits**: Top up credits via `POST /credits/topup` ($10 minimum). 1 credit = $0.00015. Works with all 111 endpoints.
84
84
 
85
85
  **MPP**: 32 X-API endpoints accept anonymous on-chain payments. No account needed.
86
86
 
@@ -126,8 +126,6 @@ EVENT_HANDLERS = {
126
126
  "tweet.reply": lambda u, d: print(f"Reply from @{u}: {d['text']}"),
127
127
  "tweet.quote": lambda u, d: print(f"Quote from @{u}: {d['text']}"),
128
128
  "tweet.retweet": lambda u, d: print(f"Retweet by @{u}"),
129
- "follower.gained": lambda u, d: print(f"@{u} gained follower: @{d['followerUsername']}"),
130
- "follower.lost": lambda u, d: print(f"@{u} lost follower: @{d['followerUsername']}"),
131
129
  }
132
130
 
133
131
  @app.route("/webhook", methods=["POST"])
@@ -14,7 +14,6 @@ Copy-pasteable TypeScript types for all Xquik API objects.
14
14
  - [Extractions](#extractions)
15
15
  - [X API](#x-api)
16
16
  - [Trends](#trends)
17
- - [Automations](#automations)
18
17
  - [Support](#support)
19
18
  - [Error](#error)
20
19
  - [Request Bodies](#request-bodies)
@@ -82,9 +81,7 @@ type EventType =
82
81
  | "tweet.new"
83
82
  | "tweet.quote"
84
83
  | "tweet.reply"
85
- | "tweet.retweet"
86
- | "follower.gained"
87
- | "follower.lost";
84
+ | "tweet.retweet";
88
85
 
89
86
  // ─── Events ──────────────────────────────────────────────
90
87
 
@@ -118,16 +115,7 @@ interface TweetEventData {
118
115
  retweetedUsername?: string;
119
116
  }
120
117
 
121
- // Follower events (follower.gained, follower.lost)
122
- interface FollowerEventData {
123
- followerId: string;
124
- followerUsername: string;
125
- followerName: string;
126
- followerFollowersCount: number;
127
- followerVerified: boolean;
128
- }
129
-
130
- type EventData = TweetEventData | FollowerEventData;
118
+ type EventData = TweetEventData;
131
119
 
132
120
  interface EventList {
133
121
  events: Event[];
@@ -557,98 +545,6 @@ interface TrendList {
557
545
  woeid: number;
558
546
  }
559
547
 
560
- // ─── Automations ────────────────────────────────────────
561
-
562
- type TriggerType = "monitor_event" | "schedule" | "search" | "webhook_inbound";
563
-
564
- type StepType = "action" | "condition" | "extraction";
565
-
566
- type ActionType =
567
- | "create_tweet"
568
- | "follow"
569
- | "like"
570
- | "reply_tweet"
571
- | "retweet"
572
- | "send_dm"
573
- | "send_email"
574
- | "send_telegram"
575
- | "unfollow";
576
-
577
- interface AutomationFlow {
578
- id: string;
579
- name: string;
580
- slug: string;
581
- triggerType: TriggerType;
582
- triggerConfig: Record<string, unknown>;
583
- isActive: boolean;
584
- runCount: string;
585
- lastRunAt: string | null;
586
- minIntervalSeconds: number;
587
- pausedReason: string | null;
588
- templateSlug: string | null;
589
- xAccountId: string | null;
590
- createdAt: string;
591
- updatedAt: string;
592
- }
593
-
594
- interface AutomationStep {
595
- id: string;
596
- flowId: string;
597
- stepType: StepType;
598
- actionType: ActionType | null;
599
- extractionType: string | null;
600
- branch: "main" | "if_true" | "if_false";
601
- config: Record<string, unknown>;
602
- position: number;
603
- positionX: number | null;
604
- positionY: number | null;
605
- parentStepId: string | null;
606
- outputName: string | null;
607
- createdAt: string;
608
- }
609
-
610
- interface AutomationRun {
611
- id: string;
612
- status: string;
613
- startedAt: string;
614
- completedAt: string | null;
615
- errorMessage: string | null;
616
- triggeredBy: string;
617
- }
618
-
619
- interface AutomationDetail extends AutomationFlow {
620
- steps: AutomationStep[];
621
- recentRuns: AutomationRun[];
622
- }
623
-
624
- interface CreateAutomationRequest {
625
- name: string;
626
- triggerType: TriggerType;
627
- triggerConfig: Record<string, unknown>;
628
- templateSlug?: string;
629
- }
630
-
631
- interface UpdateAutomationRequest {
632
- expectedUpdatedAt: string;
633
- name?: string;
634
- triggerType?: TriggerType;
635
- triggerConfig?: Record<string, unknown>;
636
- isActive?: boolean;
637
- triggerPositionX?: number | null;
638
- triggerPositionY?: number | null;
639
- }
640
-
641
- interface AddStepRequest {
642
- stepType: StepType;
643
- branch: "main" | "if_true" | "if_false";
644
- config: Record<string, unknown>;
645
- position?: number;
646
- parentStepId?: string;
647
- actionType?: ActionType;
648
- extractionType?: string;
649
- outputName?: string;
650
- }
651
-
652
548
  // ─── Support ────────────────────────────────────────────
653
549
 
654
550
  interface SupportTicket {
@@ -1058,18 +954,8 @@ interface ConnectedXAccount {
1058
954
  createdAt: string; // ISO 8601 timestamp
1059
955
  }
1060
956
 
1061
- interface ConnectXAccountRequest {
1062
- username: string; // X username (@ auto-stripped)
1063
- email: string; // Email associated with X account
1064
- password: string; // Password (encrypted at rest)
1065
- totp_secret?: string; // TOTP base32 secret for 2FA accounts
1066
- proxy_country?: string; // Preferred proxy region (e.g. "US")
1067
- }
1068
-
1069
- interface ReauthXAccountRequest {
1070
- password: string; // Current password
1071
- totp_secret?: string; // TOTP secret if 2FA enabled
1072
- }
957
+ // Connecting an X account is done by the user in the Xquik dashboard,
958
+ // not through this skill. The skill never handles X login credentials.
1073
959
 
1074
960
  // ─── X Write ──────────────────────────────────────────
1075
961
 
@@ -1107,57 +993,4 @@ interface UpdateProfileRequest {
1107
993
  url?: string; // Website URL
1108
994
  }
1109
995
 
1110
- // ─── Integrations ─────────────────────────────────────
1111
-
1112
- // Integration event types differ from monitor event types:
1113
- // includes system events (draw/extraction) but NOT follower events
1114
- type IntegrationEventType =
1115
- | "tweet.new"
1116
- | "tweet.quote"
1117
- | "tweet.reply"
1118
- | "tweet.retweet"
1119
- | "draw.completed"
1120
- | "extraction.completed"
1121
- | "extraction.failed";
1122
-
1123
- interface Integration {
1124
- id: string; // Unique integration ID
1125
- type: string; // Integration type ("telegram")
1126
- name: string; // Human-readable name
1127
- config: Record<string, unknown>; // Type-specific config (Telegram: { chatId })
1128
- eventTypes: IntegrationEventType[]; // Subscribed event types
1129
- isActive: boolean; // Whether the integration is active
1130
- createdAt: string; // ISO 8601 timestamp
1131
- updatedAt: string; // ISO 8601 timestamp
1132
- }
1133
-
1134
- interface CreateIntegrationRequest {
1135
- type: string; // "telegram"
1136
- name: string; // Human-readable name
1137
- config: { chatId: string }; // Telegram config
1138
- eventTypes: IntegrationEventType[]; // Event types to subscribe to
1139
- }
1140
-
1141
- interface UpdateIntegrationRequest {
1142
- name?: string; // New name
1143
- eventTypes?: string[]; // New event types
1144
- isActive?: boolean; // Activate/deactivate
1145
- silentPush?: boolean; // Silent notifications
1146
- scopeAllMonitors?: boolean; // Scope to all monitors
1147
- filters?: Record<string, unknown>; // Filters
1148
- messageTemplate?: Record<string, unknown>; // Custom message template
1149
- }
1150
-
1151
- interface IntegrationDelivery {
1152
- id: string; // Delivery ID
1153
- integrationId: string; // Integration ID
1154
- sourceType: string; // "monitor_event" | "extraction" | "draw"
1155
- sourceId: string; // Source record ID
1156
- eventType: string; // Event type
1157
- status: string; // "pending" | "delivered" | "failed" | "exhausted"
1158
- lastError?: string; // Last error message
1159
- attempts: number; // Delivery attempt count
1160
- deliveredAt?: string; // ISO 8601 timestamp
1161
- createdAt: string; // ISO 8601 timestamp
1162
- }
1163
996
  ```