twitter-developer-api 2.5.3
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/.claude-plugin/marketplace.json +60 -0
- package/.claude-plugin/plugin.json +45 -0
- package/.codex-plugin/plugin.json +61 -0
- package/.mcp.json +8 -0
- package/LICENSE +21 -0
- package/README.md +279 -0
- package/assets/icon.svg +1 -0
- package/commands/post.md +15 -0
- package/commands/search.md +16 -0
- package/commands/trending.md +17 -0
- package/commands/user.md +19 -0
- package/context7.json +33 -0
- package/logo.png +0 -0
- package/openclaw.plugin.json +25 -0
- package/package.json +79 -0
- package/scripts/check-versions.mjs +381 -0
- package/scripts/release-guard/content-policy.mjs +337 -0
- package/scripts/release-guard/frontmatter.mjs +148 -0
- package/scripts/release-guard/policy.mjs +223 -0
- package/server.json +18 -0
- package/skills/x-twitter-scraper/SKILL.md +387 -0
- package/skills/x-twitter-scraper/metadata.json +38 -0
- package/skills/x-twitter-scraper/references/api-endpoints-api-keys.md +31 -0
- package/skills/x-twitter-scraper/references/api-endpoints-compose.md +33 -0
- package/skills/x-twitter-scraper/references/api-endpoints-credits.md +11 -0
- package/skills/x-twitter-scraper/references/api-endpoints-drafts.md +86 -0
- package/skills/x-twitter-scraper/references/api-endpoints-draws.md +75 -0
- package/skills/x-twitter-scraper/references/api-endpoints-error-codes.md +37 -0
- package/skills/x-twitter-scraper/references/api-endpoints-events.md +48 -0
- package/skills/x-twitter-scraper/references/api-endpoints-extractions.md +97 -0
- package/skills/x-twitter-scraper/references/api-endpoints-monitors.md +74 -0
- package/skills/x-twitter-scraper/references/api-endpoints-radar.md +49 -0
- package/skills/x-twitter-scraper/references/api-endpoints-support.md +47 -0
- package/skills/x-twitter-scraper/references/api-endpoints-trends.md +25 -0
- package/skills/x-twitter-scraper/references/api-endpoints-tweet-style-cache.md +155 -0
- package/skills/x-twitter-scraper/references/api-endpoints-webhooks.md +74 -0
- package/skills/x-twitter-scraper/references/api-endpoints-x-accounts.md +42 -0
- package/skills/x-twitter-scraper/references/api-endpoints-x-api.md +206 -0
- package/skills/x-twitter-scraper/references/api-endpoints-x-media.md +40 -0
- package/skills/x-twitter-scraper/references/api-endpoints-x-write.md +204 -0
- package/skills/x-twitter-scraper/references/api-endpoints.md +30 -0
- package/skills/x-twitter-scraper/references/draws.md +57 -0
- package/skills/x-twitter-scraper/references/extractions.md +237 -0
- package/skills/x-twitter-scraper/references/mcp-setup.md +273 -0
- package/skills/x-twitter-scraper/references/mcp-tools.md +174 -0
- package/skills/x-twitter-scraper/references/python-examples.md +182 -0
- package/skills/x-twitter-scraper/references/security.md +124 -0
- package/skills/x-twitter-scraper/references/types-account-identity.md +9 -0
- package/skills/x-twitter-scraper/references/types-account.md +26 -0
- package/skills/x-twitter-scraper/references/types-api-keys.md +22 -0
- package/skills/x-twitter-scraper/references/types-bookmarks-and-timeline.md +46 -0
- package/skills/x-twitter-scraper/references/types-credits.md +11 -0
- package/skills/x-twitter-scraper/references/types-download-media.md +22 -0
- package/skills/x-twitter-scraper/references/types-draws.md +60 -0
- package/skills/x-twitter-scraper/references/types-error.md +10 -0
- package/skills/x-twitter-scraper/references/types-events.md +43 -0
- package/skills/x-twitter-scraper/references/types-extractions.md +106 -0
- package/skills/x-twitter-scraper/references/types-mcp-add-webhook.md +14 -0
- package/skills/x-twitter-scraper/references/types-mcp-check-follow.md +10 -0
- package/skills/x-twitter-scraper/references/types-mcp-compose-tweet.md +31 -0
- package/skills/x-twitter-scraper/references/types-mcp-estimate-extraction.md +15 -0
- package/skills/x-twitter-scraper/references/types-mcp-get-account.md +26 -0
- package/skills/x-twitter-scraper/references/types-mcp-get-draw.md +30 -0
- package/skills/x-twitter-scraper/references/types-mcp-get-events.md +19 -0
- package/skills/x-twitter-scraper/references/types-mcp-get-trends.md +16 -0
- package/skills/x-twitter-scraper/references/types-mcp-get-user-info.md +16 -0
- package/skills/x-twitter-scraper/references/types-mcp-list-monitors.md +15 -0
- package/skills/x-twitter-scraper/references/types-mcp-lookup-tweet.md +25 -0
- package/skills/x-twitter-scraper/references/types-mcp-output-schemas.md +22 -0
- package/skills/x-twitter-scraper/references/types-mcp-refine-tweet.md +13 -0
- package/skills/x-twitter-scraper/references/types-mcp-run-draw.md +18 -0
- package/skills/x-twitter-scraper/references/types-mcp-run-extraction.md +12 -0
- package/skills/x-twitter-scraper/references/types-mcp-score-tweet.md +16 -0
- package/skills/x-twitter-scraper/references/types-mcp-search-tweets.md +17 -0
- package/skills/x-twitter-scraper/references/types-mcp-test-webhook.md +11 -0
- package/skills/x-twitter-scraper/references/types-monitors.md +20 -0
- package/skills/x-twitter-scraper/references/types-radar.md +40 -0
- package/skills/x-twitter-scraper/references/types-request-bodies.md +30 -0
- package/skills/x-twitter-scraper/references/types-rest-api-vs-mcp-field-naming.md +15 -0
- package/skills/x-twitter-scraper/references/types-support.md +25 -0
- package/skills/x-twitter-scraper/references/types-trends.md +18 -0
- package/skills/x-twitter-scraper/references/types-tweet-drafts.md +20 -0
- package/skills/x-twitter-scraper/references/types-tweet-style-cache.md +50 -0
- package/skills/x-twitter-scraper/references/types-user-activity.md +35 -0
- package/skills/x-twitter-scraper/references/types-webhooks.md +38 -0
- package/skills/x-twitter-scraper/references/types-x-accounts.md +16 -0
- package/skills/x-twitter-scraper/references/types-x-api.md +69 -0
- package/skills/x-twitter-scraper/references/types-x-articles.md +21 -0
- package/skills/x-twitter-scraper/references/types-x-write.md +39 -0
- package/skills/x-twitter-scraper/references/types.md +48 -0
- package/skills/x-twitter-scraper/references/usage.md +50 -0
- package/skills/x-twitter-scraper/references/webhooks.md +243 -0
- package/skills/x-twitter-scraper/references/workflows.md +202 -0
- package/skills/x-twitter-scraper/skill-card.md +76 -0
- package/skills/x-twitter-scraper/skillspector-report.md +17 -0
- package/skills/xquik-social-research/LICENSE +21 -0
- package/skills/xquik-social-research/SKILL.md +77 -0
- package/skills.sh.json +77 -0
- package/start.sh +2 -0
- package/stub-server.mjs +209 -0
- package/task-guides/check-mutuals.md +55 -0
- package/task-guides/clean-followers.md +71 -0
- package/task-guides/export-tweets-csv.md +70 -0
- package/task-guides/extract-followers.md +83 -0
- package/task-guides/find-bangers.md +61 -0
- package/task-guides/find-influencers.md +72 -0
- package/task-guides/find-viral-tweets.md +80 -0
- package/task-guides/follow-unfollow.md +83 -0
- package/task-guides/for-you-feed.md +63 -0
- package/task-guides/going-viral.md +68 -0
- package/task-guides/grow-followers.md +66 -0
- package/task-guides/monitor-accounts.md +81 -0
- package/task-guides/optimize-tweets.md +80 -0
- package/task-guides/post-tweets.md +108 -0
- package/task-guides/run-giveaway.md +90 -0
- package/task-guides/search-tweets.md +122 -0
- package/task-guides/send-dms.md +92 -0
- package/task-guides/top-replies.md +71 -0
- package/task-guides/track-competitors.md +73 -0
- package/task-guides/track-hashtags.md +86 -0
- package/task-guides/track-mentions.md +88 -0
- package/task-guides/trending-news.md +68 -0
- package/task-guides/tweet-analytics.md +129 -0
- package/task-guides/tweet-ideas.md +65 -0
- package/task-guides/tweet-replies.md +82 -0
- package/task-guides/tweet-style.md +72 -0
- package/task-guides/tweet-webhooks.md +84 -0
- package/task-guides/update-x-profile.md +75 -0
- package/task-guides/user-tweets.md +148 -0
- package/task-guides/who-liked.md +68 -0
- package/task-guides/who-quoted.md +68 -0
- package/task-guides/who-retweeted.md +67 -0
- package/task-guides/write-threads.md +72 -0
- package/task-guides/write-tweets.md +84 -0
- package/task-guides/x-articles.md +84 -0
- package/task-guides/x-bookmarks.md +63 -0
- package/task-guides/x-communities.md +71 -0
- package/task-guides/x-lists.md +70 -0
- package/task-guides/x-spaces.md +67 -0
- package/task-guides/x-trends.md +74 -0
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Xquik REST API Endpoints: API Keys
|
|
2
|
+
|
|
3
|
+
Session auth only. These endpoints do not accept API key auth.
|
|
4
|
+
|
|
5
|
+
### Create API Key
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
POST /api-keys
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
**Body:** `{ "name": "My Key" }` (optional)
|
|
12
|
+
|
|
13
|
+
**Response:** Returns `fullKey` (shown only once), `prefix`, `name`, `id`, `createdAt`.
|
|
14
|
+
|
|
15
|
+
### List API Keys
|
|
16
|
+
|
|
17
|
+
```
|
|
18
|
+
GET /api-keys
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Returns all keys with `id`, `name`, `prefix`, `isActive`, `createdAt`, `lastUsedAt`. Full key is never exposed.
|
|
22
|
+
|
|
23
|
+
### Revoke API Key
|
|
24
|
+
|
|
25
|
+
```
|
|
26
|
+
delete request to `/api-keys/{id}`
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Permanent and irreversible. The key stops working immediately.
|
|
30
|
+
|
|
31
|
+
---
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Xquik REST API Endpoints: Compose
|
|
2
|
+
|
|
3
|
+
### Compose Tweet
|
|
4
|
+
|
|
5
|
+
```
|
|
6
|
+
POST /compose
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
Compose, refine, and score tweets with Xquik style signals. Three-step workflow.
|
|
10
|
+
|
|
11
|
+
**Body:**
|
|
12
|
+
|
|
13
|
+
| Field | Type | Required | Description |
|
|
14
|
+
|-------|------|----------|-------------|
|
|
15
|
+
| `step` | string | Yes | `compose`, `refine`, or `score` |
|
|
16
|
+
| `topic` | string | No | Tweet topic (compose, refine) |
|
|
17
|
+
| `goal` | string | No | `engagement`, `followers`, `authority`, `conversation` |
|
|
18
|
+
| `styleUsername` | string | No | Cached style username for voice matching (compose) |
|
|
19
|
+
| `tone` | string | No | Desired tone (refine) |
|
|
20
|
+
| `additionalContext` | string | No | Extra context or URLs (refine) |
|
|
21
|
+
| `callToAction` | string | No | Desired CTA (refine) |
|
|
22
|
+
| `mediaType` | string | No | `photo`, `video`, `none` (refine) |
|
|
23
|
+
| `draft` | string | No | Tweet text to evaluate (score) |
|
|
24
|
+
| `hasLink` | boolean | No | Link attached (score) |
|
|
25
|
+
| `hasMedia` | boolean | No | Media attached (score) |
|
|
26
|
+
|
|
27
|
+
**Response (step=compose):** Returns `contentRules`, `scorerWeights`, `followUpQuestions`, `algorithmInsights`, `engagementMultipliers`, `topPenalties`.
|
|
28
|
+
|
|
29
|
+
**Response (step=refine):** Returns `compositionGuidance`, `examplePatterns`.
|
|
30
|
+
|
|
31
|
+
**Response (step=score):** Returns `totalChecks`, `passedCount`, `topSuggestion`, `checklist[]` with `factor`, `passed`, `suggestion`.
|
|
32
|
+
|
|
33
|
+
---
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# Xquik REST API Endpoints: Drafts
|
|
2
|
+
|
|
3
|
+
### Create Draft
|
|
4
|
+
|
|
5
|
+
`POST /drafts`
|
|
6
|
+
|
|
7
|
+
Save a tweet draft for later.
|
|
8
|
+
|
|
9
|
+
**Request body:**
|
|
10
|
+
|
|
11
|
+
| Field | Type | Required | Description |
|
|
12
|
+
|-------|------|----------|-------------|
|
|
13
|
+
| `text` | string | Yes | The draft tweet text |
|
|
14
|
+
| `topic` | string | No | Topic the tweet is about |
|
|
15
|
+
| `goal` | string | No | Optimization goal: `engagement`, `followers`, `authority`, `conversation` |
|
|
16
|
+
|
|
17
|
+
**Response (201):**
|
|
18
|
+
|
|
19
|
+
```json
|
|
20
|
+
{
|
|
21
|
+
"id": "123",
|
|
22
|
+
"text": "draft text",
|
|
23
|
+
"topic": "product launch",
|
|
24
|
+
"goal": "engagement",
|
|
25
|
+
"createdAt": "2026-02-24T10:30:00.000Z",
|
|
26
|
+
"updatedAt": "2026-02-24T10:30:00.000Z"
|
|
27
|
+
}
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
### List Drafts
|
|
33
|
+
|
|
34
|
+
`GET /drafts`
|
|
35
|
+
|
|
36
|
+
List saved tweet drafts with cursor pagination.
|
|
37
|
+
|
|
38
|
+
**Query parameters:**
|
|
39
|
+
|
|
40
|
+
| Parameter | Type | Required | Default | Description |
|
|
41
|
+
|-----------|------|----------|---------|-------------|
|
|
42
|
+
| `limit` | number | No | 50 | Results per page (max 50) |
|
|
43
|
+
| `afterCursor` | string | No | - | Pagination cursor from previous response |
|
|
44
|
+
|
|
45
|
+
**Response (200):**
|
|
46
|
+
|
|
47
|
+
```json
|
|
48
|
+
{
|
|
49
|
+
"drafts": [
|
|
50
|
+
{
|
|
51
|
+
"id": "123",
|
|
52
|
+
"text": "draft text",
|
|
53
|
+
"topic": "product launch",
|
|
54
|
+
"goal": "engagement",
|
|
55
|
+
"createdAt": "2026-02-24T10:30:00.000Z",
|
|
56
|
+
"updatedAt": "2026-02-24T10:30:00.000Z"
|
|
57
|
+
}
|
|
58
|
+
],
|
|
59
|
+
"afterCursor": "cursor_string",
|
|
60
|
+
"hasMore": true
|
|
61
|
+
}
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
### Get Draft
|
|
67
|
+
|
|
68
|
+
`GET /drafts/{id}`
|
|
69
|
+
|
|
70
|
+
Get a specific draft by ID.
|
|
71
|
+
|
|
72
|
+
**Response (200):** Single draft object.
|
|
73
|
+
|
|
74
|
+
**Errors:** `400 invalid_id`, `404 draft_not_found`
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
### Delete Draft
|
|
79
|
+
|
|
80
|
+
delete request to `/drafts/{id}`
|
|
81
|
+
|
|
82
|
+
Delete a draft. Returns `204 No Content`.
|
|
83
|
+
|
|
84
|
+
**Errors:** `400 invalid_id`, `404 draft_not_found`
|
|
85
|
+
|
|
86
|
+
---
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# Xquik REST API Endpoints: Draws
|
|
2
|
+
|
|
3
|
+
### Create Draw
|
|
4
|
+
|
|
5
|
+
```
|
|
6
|
+
POST /draws
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
Run a giveaway draw from a tweet. Picks random winners from replies.
|
|
10
|
+
|
|
11
|
+
**Body:**
|
|
12
|
+
```json
|
|
13
|
+
{
|
|
14
|
+
"tweetUrl": "https://x.com/user/status/1893456789012345678",
|
|
15
|
+
"winnerCount": 3,
|
|
16
|
+
"backupCount": 2,
|
|
17
|
+
"uniqueAuthorsOnly": true,
|
|
18
|
+
"mustRetweet": true,
|
|
19
|
+
"mustFollowUsername": "burakbayir",
|
|
20
|
+
"filterMinFollowers": 100,
|
|
21
|
+
"filterAccountAgeDays": 30,
|
|
22
|
+
"filterLanguage": "en",
|
|
23
|
+
"requiredKeywords": ["giveaway"],
|
|
24
|
+
"requiredHashtags": ["#contest"],
|
|
25
|
+
"requiredMentions": ["@xquik"]
|
|
26
|
+
}
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
All filter fields are optional. Only `tweetUrl` is required.
|
|
30
|
+
|
|
31
|
+
**Response:**
|
|
32
|
+
```json
|
|
33
|
+
{
|
|
34
|
+
"id": "42",
|
|
35
|
+
"tweetId": "1893456789012345678",
|
|
36
|
+
"tweetUrl": "https://x.com/user/status/1893456789012345678",
|
|
37
|
+
"tweetText": "Like & RT to enter! Picking 3 winners tomorrow.",
|
|
38
|
+
"tweetAuthorUsername": "xquik",
|
|
39
|
+
"tweetLikeCount": 4200,
|
|
40
|
+
"tweetRetweetCount": 1800,
|
|
41
|
+
"tweetReplyCount": 1500,
|
|
42
|
+
"tweetQuoteCount": 120,
|
|
43
|
+
"status": "completed",
|
|
44
|
+
"totalEntries": 1500,
|
|
45
|
+
"validEntries": 890,
|
|
46
|
+
"createdAt": "2026-02-24T10:00:00.000Z",
|
|
47
|
+
"drawnAt": "2026-02-24T10:01:00.000Z"
|
|
48
|
+
}
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### List Draws
|
|
52
|
+
|
|
53
|
+
```
|
|
54
|
+
GET /draws
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
Cursor-paginated. Returns compact draw objects.
|
|
58
|
+
|
|
59
|
+
### Get Draw
|
|
60
|
+
|
|
61
|
+
```
|
|
62
|
+
GET /draws/{id}
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Returns full draw details including winners.
|
|
66
|
+
|
|
67
|
+
### Export Draw
|
|
68
|
+
|
|
69
|
+
```
|
|
70
|
+
GET /draws/{id}/export?format=csv&type=winners
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
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).
|
|
74
|
+
|
|
75
|
+
---
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Xquik REST API Endpoints: Error Codes
|
|
2
|
+
|
|
3
|
+
| Status | Code | Meaning |
|
|
4
|
+
|--------|------|---------|
|
|
5
|
+
| 400 | `invalid_input` | Request body failed validation |
|
|
6
|
+
| 400 | `invalid_id` | Path parameter is not a valid ID |
|
|
7
|
+
| 400 | `invalid_json` | Invalid JSON in request body |
|
|
8
|
+
| 400 | `invalid_tweet_url` | Tweet URL format is invalid |
|
|
9
|
+
| 400 | `invalid_tweet_id` | Tweet ID is empty or invalid |
|
|
10
|
+
| 400 | `invalid_username` | X username is empty or invalid |
|
|
11
|
+
| 400 | `invalid_tool_type` | Extraction tool type not recognized |
|
|
12
|
+
| 400 | `invalid_format` | Export format not `csv`, `json`, `md`, `md-document`, `pdf`, `txt`, or `xlsx` |
|
|
13
|
+
| 400 | `invalid_params` | Export query parameters are missing or invalid |
|
|
14
|
+
| 400 | `missing_query` | Required query parameter is missing |
|
|
15
|
+
| 400 | `missing_params` | Required query parameters are missing |
|
|
16
|
+
| 400 | `no_media` | Tweet has no downloadable media |
|
|
17
|
+
| 400 | `webhook_inactive` | Webhook is disabled (test-webhook only) |
|
|
18
|
+
| 401 | `unauthenticated` | Missing or invalid API key |
|
|
19
|
+
| 403 | `account_needs_reauth` | X account session expired; use dashboard re-auth flow |
|
|
20
|
+
| 402 | `no_subscription` | No active plan |
|
|
21
|
+
| 402 | `subscription_inactive` | Plan is not active |
|
|
22
|
+
| 402 | `no_credits` | No credit balance record exists |
|
|
23
|
+
| 402 | `insufficient_credits` | Credit balance is too low |
|
|
24
|
+
| 403 | `api_key_limit_reached` | API key limit reached (100 max) |
|
|
25
|
+
| 404 | `not_found` | Resource does not exist |
|
|
26
|
+
| 404 | `user_not_found` | X user not found |
|
|
27
|
+
| 404 | `tweet_not_found` | Tweet not found |
|
|
28
|
+
| 404 | `style_not_found` | No cached style found |
|
|
29
|
+
| 404 | `draft_not_found` | Draft not found |
|
|
30
|
+
| 409 | `monitor_already_exists` | Duplicate monitor for same username |
|
|
31
|
+
| 422 | `login_failed` | Account connection failed; use dashboard re-auth flow |
|
|
32
|
+
| 429 | - | Rate limited. Retry with backoff |
|
|
33
|
+
| 429 | `x_api_rate_limited` | X data source rate limited. Retry |
|
|
34
|
+
| 500 | `internal_error` | Server error |
|
|
35
|
+
| 502 | `stream_registration_failed` | Stream registration failed. Retry |
|
|
36
|
+
| 502 | `x_api_unavailable` | X data source temporarily unavailable |
|
|
37
|
+
| 502 | `x_api_unauthorized` | X data source authentication failed. Retry |
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# Xquik REST API Endpoints: Events
|
|
2
|
+
|
|
3
|
+
### List Events
|
|
4
|
+
|
|
5
|
+
```
|
|
6
|
+
GET /events
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
**Query parameters:**
|
|
10
|
+
|
|
11
|
+
| Param | Type | Description |
|
|
12
|
+
|-------|------|-------------|
|
|
13
|
+
| `monitorId` | string | Filter by monitor ID |
|
|
14
|
+
| `eventType` | string | Filter by event type |
|
|
15
|
+
| `limit` | number | Results per page (1-100, default 50) |
|
|
16
|
+
| `after` | string | Cursor for next page |
|
|
17
|
+
|
|
18
|
+
**Response:**
|
|
19
|
+
```json
|
|
20
|
+
{
|
|
21
|
+
"events": [
|
|
22
|
+
{
|
|
23
|
+
"id": "9010",
|
|
24
|
+
"type": "tweet.new",
|
|
25
|
+
"monitorId": "7",
|
|
26
|
+
"username": "elonmusk",
|
|
27
|
+
"occurredAt": "2026-02-24T16:45:00.000Z",
|
|
28
|
+
"data": {
|
|
29
|
+
"tweetId": "1893556789012345678",
|
|
30
|
+
"text": "Hello world",
|
|
31
|
+
"metrics": { "likes": 3200, "retweets": 890, "replies": 245 }
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
],
|
|
35
|
+
"hasMore": true,
|
|
36
|
+
"nextCursor": "MjAyNi0wMi0yNFQxNjozMDowMC4wMDBa..."
|
|
37
|
+
}
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### Get Event
|
|
41
|
+
|
|
42
|
+
```
|
|
43
|
+
GET /events/{id}
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
Returns a single event with full details.
|
|
47
|
+
|
|
48
|
+
---
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
# Xquik REST API Endpoints: Extractions
|
|
2
|
+
|
|
3
|
+
### Create Extraction
|
|
4
|
+
|
|
5
|
+
```
|
|
6
|
+
POST /extractions
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
Run a bulk data extraction job. See `references/extractions.md` for all 23 tool types.
|
|
10
|
+
|
|
11
|
+
**Body:**
|
|
12
|
+
```json
|
|
13
|
+
{
|
|
14
|
+
"toolType": "reply_extractor",
|
|
15
|
+
"targetTweetId": "1893704267862470862",
|
|
16
|
+
"resultsLimit": 500
|
|
17
|
+
}
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
`resultsLimit` (optional): Maximum results to extract. Stops early instead of fetching all data. Useful for controlling usage.
|
|
21
|
+
|
|
22
|
+
**Tweet Search Filters** (`tweet_search_extractor` only):
|
|
23
|
+
|
|
24
|
+
| Field | Type | Description |
|
|
25
|
+
|-------|------|-------------|
|
|
26
|
+
| `fromUser` | string | Author username |
|
|
27
|
+
| `toUser` | string | Directed to user |
|
|
28
|
+
| `mentioning` | string | Mentions user |
|
|
29
|
+
| `language` | string | Language code (e.g., `en`) |
|
|
30
|
+
| `sinceDate` | string | Start date (YYYY-MM-DD) |
|
|
31
|
+
| `untilDate` | string | End date (YYYY-MM-DD) |
|
|
32
|
+
| `mediaType` | string | `images`, `videos`, `gifs`, or `media` |
|
|
33
|
+
| `minFaves` | number | Minimum likes |
|
|
34
|
+
| `minRetweets` | number | Minimum retweets |
|
|
35
|
+
| `minReplies` | number | Minimum replies |
|
|
36
|
+
| `verifiedOnly` | boolean | Verified authors only |
|
|
37
|
+
| `replies` | string | `include`, `exclude`, or `only` |
|
|
38
|
+
| `retweets` | string | `include`, `exclude`, or `only` |
|
|
39
|
+
| `exactPhrase` | string | Exact match text |
|
|
40
|
+
| `excludeWords` | string | Comma-separated words to exclude |
|
|
41
|
+
| `advancedQuery` | string | Raw X search operators appended to query |
|
|
42
|
+
|
|
43
|
+
These filters are converted to X search operators and combined with `searchQuery`.
|
|
44
|
+
|
|
45
|
+
**Response:**
|
|
46
|
+
```json
|
|
47
|
+
{
|
|
48
|
+
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
|
|
49
|
+
"toolType": "reply_extractor",
|
|
50
|
+
"status": "running"
|
|
51
|
+
}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### Estimate Extraction
|
|
55
|
+
|
|
56
|
+
```
|
|
57
|
+
POST /extractions/estimate
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Preview usage before running. Same body as create.
|
|
61
|
+
|
|
62
|
+
**Response:**
|
|
63
|
+
```json
|
|
64
|
+
{
|
|
65
|
+
"allowed": true,
|
|
66
|
+
"creditsAvailable": "50000",
|
|
67
|
+
"creditsRequired": "150",
|
|
68
|
+
"source": "replyCount",
|
|
69
|
+
"estimatedResults": 150
|
|
70
|
+
}
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### List Extractions
|
|
74
|
+
|
|
75
|
+
```
|
|
76
|
+
GET /extractions
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
Cursor-paginated. Filter by `status` and `toolType`.
|
|
80
|
+
|
|
81
|
+
### Get Extraction
|
|
82
|
+
|
|
83
|
+
```
|
|
84
|
+
GET /extractions/{id}
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
Returns job details with paginated results (up to 1,000 per page).
|
|
88
|
+
|
|
89
|
+
### Export Extraction
|
|
90
|
+
|
|
91
|
+
```
|
|
92
|
+
GET /extractions/{id}/export?format=csv
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
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.
|
|
96
|
+
|
|
97
|
+
---
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# Xquik REST API Endpoints: Monitors
|
|
2
|
+
|
|
3
|
+
### Create Monitor
|
|
4
|
+
|
|
5
|
+
```
|
|
6
|
+
POST /monitors
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
**Body:**
|
|
10
|
+
```json
|
|
11
|
+
{
|
|
12
|
+
"username": "elonmusk",
|
|
13
|
+
"eventTypes": ["tweet.new", "tweet.reply", "tweet.quote"]
|
|
14
|
+
}
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
**Response:**
|
|
18
|
+
```json
|
|
19
|
+
{
|
|
20
|
+
"id": "7",
|
|
21
|
+
"username": "elonmusk",
|
|
22
|
+
"xUserId": "44196397",
|
|
23
|
+
"eventTypes": ["tweet.new", "tweet.reply", "tweet.quote"],
|
|
24
|
+
"createdAt": "2026-02-24T10:30:00.000Z"
|
|
25
|
+
}
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Event types: `tweet.new`, `tweet.quote`, `tweet.reply`, `tweet.retweet`, `webhook.test`.
|
|
29
|
+
|
|
30
|
+
Returns `409 monitor_already_exists` if the username is already monitored.
|
|
31
|
+
|
|
32
|
+
### List Monitors
|
|
33
|
+
|
|
34
|
+
```
|
|
35
|
+
GET /monitors
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
Returns all monitors (up to 200, no pagination). Response includes `monitors` array and `total` count.
|
|
39
|
+
|
|
40
|
+
### Get Monitor
|
|
41
|
+
|
|
42
|
+
```
|
|
43
|
+
GET /monitors/{id}
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### Update Monitor
|
|
47
|
+
|
|
48
|
+
```
|
|
49
|
+
PATCH /monitors/{id}
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
**Body:** `{ "eventTypes": [...], "isActive": true|false }` (both optional)
|
|
53
|
+
|
|
54
|
+
### Delete Monitor
|
|
55
|
+
|
|
56
|
+
```
|
|
57
|
+
delete request to `/monitors/{id}`
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Stops tracking and deletes all associated data.
|
|
61
|
+
|
|
62
|
+
### Keyword Monitors
|
|
63
|
+
|
|
64
|
+
```
|
|
65
|
+
GET /monitors/keywords
|
|
66
|
+
POST /monitors/keywords
|
|
67
|
+
GET /monitors/keywords/{id}
|
|
68
|
+
PATCH /monitors/keywords/{id}
|
|
69
|
+
delete request to `/monitors/keywords/{id}`
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
Create and manage ongoing keyword monitors. Treat these as persistent resources: confirm the keyword query, event delivery plan, and ongoing usage before creating or enabling one.
|
|
73
|
+
|
|
74
|
+
---
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# Xquik REST API Endpoints: Radar
|
|
2
|
+
|
|
3
|
+
### List Radar Items
|
|
4
|
+
|
|
5
|
+
```
|
|
6
|
+
GET /radar
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
Get trending topics and news from supported trend and news sources.
|
|
10
|
+
|
|
11
|
+
**Query parameters:**
|
|
12
|
+
|
|
13
|
+
| Param | Type | Description |
|
|
14
|
+
|-------|------|-------------|
|
|
15
|
+
| `source` | string | Filter by public source: `google_trends`, `hacker_news`, `polymarket`, `wikipedia`, `github`, `reddit`. Omit to include all supported sources |
|
|
16
|
+
| `category` | string | Filter by category: `general`, `tech`, `dev`, `science`, `culture`, `politics`, `business`, `entertainment` |
|
|
17
|
+
| `limit` | number | Items per page (1-100, default 50) |
|
|
18
|
+
| `hours` | number | Look-back window in hours (1-72, default 6) |
|
|
19
|
+
| `region` | string | Region code: `US`, `GB`, `TR`, `ES`, `DE`, `FR`, `JP`, `IN`, `BR`, `CA`, `MX`, `global` (default) |
|
|
20
|
+
|
|
21
|
+
**Response:**
|
|
22
|
+
```json
|
|
23
|
+
{
|
|
24
|
+
"items": [
|
|
25
|
+
{
|
|
26
|
+
"id": "12345",
|
|
27
|
+
"title": "Claude 4.6 Released",
|
|
28
|
+
"description": "Anthropic releases Claude 4.6...",
|
|
29
|
+
"url": "https://example.com/article",
|
|
30
|
+
"imageUrl": "https://example.com/image.png",
|
|
31
|
+
"source": "hacker_news",
|
|
32
|
+
"sourceId": "hn_12345",
|
|
33
|
+
"category": "tech",
|
|
34
|
+
"region": "global",
|
|
35
|
+
"language": "en",
|
|
36
|
+
"score": 450,
|
|
37
|
+
"metadata": { "points": 450, "numberComments": 132, "author": "pgdev" },
|
|
38
|
+
"publishedAt": "2026-03-05T10:00:00.000Z",
|
|
39
|
+
"createdAt": "2026-03-05T10:05:00.000Z"
|
|
40
|
+
}
|
|
41
|
+
],
|
|
42
|
+
"hasMore": true,
|
|
43
|
+
"nextCursor": "NDUwfDIwMjYtMDMtMDRUMDg6MzA6MDAuMDAwWnwxMjM0NQ=="
|
|
44
|
+
}
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Fields: `id`, `title`, `description?`, `url?`, `imageUrl?`, `source`, `sourceId`, `category`, `region`, `language`, `score`, `metadata`, `publishedAt`, `createdAt`. Response includes `hasMore` and `nextCursor` for pagination.
|
|
48
|
+
|
|
49
|
+
---
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# Xquik REST API Endpoints: Support
|
|
2
|
+
|
|
3
|
+
### Create Ticket
|
|
4
|
+
|
|
5
|
+
```
|
|
6
|
+
POST /support/tickets
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
**Body:** `{ "subject": "...", "body": "..." }`
|
|
10
|
+
|
|
11
|
+
**Response (201):** `{ id, subject, status, createdAt }`
|
|
12
|
+
|
|
13
|
+
### List Tickets
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
GET /support/tickets
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Returns all tickets for the authenticated user.
|
|
20
|
+
|
|
21
|
+
### Get Ticket
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
GET /support/tickets/{id}
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
Returns ticket with messages.
|
|
28
|
+
|
|
29
|
+
### Update Ticket
|
|
30
|
+
|
|
31
|
+
```
|
|
32
|
+
PATCH /support/tickets/{id}
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Update ticket status.
|
|
36
|
+
|
|
37
|
+
### Reply to Ticket
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
POST /support/tickets/{id}/messages
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
**Body:** `{ "body": "..." }`
|
|
44
|
+
|
|
45
|
+
Add a message to an existing ticket.
|
|
46
|
+
|
|
47
|
+
---
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Xquik REST API Endpoints: Trends
|
|
2
|
+
|
|
3
|
+
### List Trends
|
|
4
|
+
|
|
5
|
+
```
|
|
6
|
+
GET /x/trends?woeid=1&count=30
|
|
7
|
+
GET /trends?woeid=1&count=30
|
|
8
|
+
```
|
|
9
|
+
|
|
10
|
+
Metered. Plan access required. `/trends` is an alias of `/x/trends`. Cached, refreshes every 15 minutes.
|
|
11
|
+
|
|
12
|
+
**WOEIDs:** 1 (Worldwide), 23424977 (US), 23424975 (UK), 23424969 (Turkey), 23424950 (Spain), 23424829 (Germany), 23424819 (France), 23424856 (Japan), 23424848 (India), 23424768 (Brazil), 23424775 (Canada), 23424900 (Mexico).
|
|
13
|
+
|
|
14
|
+
**Response:**
|
|
15
|
+
```json
|
|
16
|
+
{
|
|
17
|
+
"trends": [
|
|
18
|
+
{ "name": "#AI", "description": "...", "rank": 1, "query": "#AI" }
|
|
19
|
+
],
|
|
20
|
+
"total": 30,
|
|
21
|
+
"woeid": 1
|
|
22
|
+
}
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
---
|