twitter-developer-api 2.5.3 → 2.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +4 -4
- package/.claude-plugin/plugin.json +5 -28
- package/.codex-plugin/plugin.json +5 -29
- package/README.de.md +505 -0
- package/README.es.md +504 -0
- package/README.fr.md +507 -0
- package/README.it.md +499 -0
- package/README.ja.md +493 -0
- package/README.ko.md +494 -0
- package/README.md +511 -221
- package/README.tr.md +502 -0
- package/README.zh-CN.md +484 -0
- package/assets/logo-400.png +0 -0
- package/commands/post.md +16 -9
- package/commands/search.md +5 -8
- package/commands/trending.md +7 -7
- package/commands/user.md +4 -10
- package/context7.json +11 -13
- package/docker-mcp-registry/xquik/readme.md +1 -0
- package/docker-mcp-registry/xquik/server.yaml +23 -0
- package/docker-mcp-registry/xquik/tools.json +1 -0
- package/glama.json +4 -0
- package/mcp.json +9 -0
- package/openclaw.plugin.json +4 -4
- package/package.json +32 -13
- package/plugin.json +22 -0
- package/registry.json +60 -0
- package/server.json +21 -2
- package/skills/x-twitter-scraper/LICENSE +21 -0
- package/skills/x-twitter-scraper/SKILL.md +175 -350
- package/skills/x-twitter-scraper/metadata.json +19 -9
- package/skills/x-twitter-scraper/references/compare-faq.md +101 -0
- package/skills/x-twitter-scraper/references/extractions.md +65 -216
- package/skills/x-twitter-scraper/references/mcp.md +24 -0
- package/skills/x-twitter-scraper/references/monitors-webhooks.md +167 -0
- package/skills/x-twitter-scraper/references/reads.md +416 -0
- package/skills/x-twitter-scraper/references/writes.md +111 -0
- package/skills/xquik-mcp/SKILL.md +75 -0
- package/skills/xquik-mcp/references/mcp-setup.md +255 -0
- package/skills/xquik-social-research/SKILL.md +66 -68
- package/skills.sh.json +6 -68
- package/start.sh +4 -1
- package/stub-server.mjs +125 -135
- package/task-guides/check-mutuals.md +11 -11
- package/task-guides/clean-followers.md +17 -17
- package/task-guides/export-tweets-csv.md +26 -17
- package/task-guides/extract-followers.md +20 -20
- package/task-guides/find-bangers.md +18 -16
- package/task-guides/find-influencers.md +18 -15
- package/task-guides/find-viral-tweets.md +22 -22
- package/task-guides/follow-unfollow.md +24 -18
- package/task-guides/for-you-feed.md +12 -12
- package/task-guides/going-viral.md +20 -19
- package/task-guides/grow-followers.md +18 -16
- package/task-guides/monitor-accounts.md +24 -25
- package/task-guides/optimize-tweets.md +18 -17
- package/task-guides/post-tweets.md +37 -32
- package/task-guides/run-giveaway.md +16 -16
- package/task-guides/search-tweets.md +33 -22
- package/task-guides/send-dms.md +31 -22
- package/task-guides/top-replies.md +36 -20
- package/task-guides/track-competitors.md +22 -22
- package/task-guides/track-hashtags.md +24 -25
- package/task-guides/track-mentions.md +25 -24
- package/task-guides/trending-news.md +22 -17
- package/task-guides/tweet-analytics.md +27 -27
- package/task-guides/tweet-ideas.md +11 -11
- package/task-guides/tweet-replies.md +72 -24
- package/task-guides/tweet-style.md +12 -12
- package/task-guides/tweet-webhooks.md +29 -25
- package/task-guides/update-x-profile.md +22 -19
- package/task-guides/user-tweets.md +45 -34
- package/task-guides/who-liked.md +12 -12
- package/task-guides/who-quoted.md +13 -13
- package/task-guides/who-retweeted.md +13 -13
- package/task-guides/write-threads.md +14 -18
- package/task-guides/write-tweets.md +19 -19
- package/task-guides/x-articles.md +19 -14
- package/task-guides/x-bookmarks.md +12 -12
- package/task-guides/x-communities.md +12 -12
- package/task-guides/x-lists.md +11 -11
- package/task-guides/x-spaces.md +12 -12
- package/task-guides/x-trends.md +19 -19
- package/x-twitter-scraper.json +10 -0
- package/scripts/check-versions.mjs +0 -381
- package/scripts/release-guard/content-policy.mjs +0 -337
- package/scripts/release-guard/frontmatter.mjs +0 -148
- package/scripts/release-guard/policy.mjs +0 -223
- package/skills/x-twitter-scraper/references/api-endpoints-api-keys.md +0 -31
- package/skills/x-twitter-scraper/references/api-endpoints-compose.md +0 -33
- package/skills/x-twitter-scraper/references/api-endpoints-credits.md +0 -11
- package/skills/x-twitter-scraper/references/api-endpoints-drafts.md +0 -86
- package/skills/x-twitter-scraper/references/api-endpoints-draws.md +0 -75
- package/skills/x-twitter-scraper/references/api-endpoints-error-codes.md +0 -37
- package/skills/x-twitter-scraper/references/api-endpoints-events.md +0 -48
- package/skills/x-twitter-scraper/references/api-endpoints-extractions.md +0 -97
- package/skills/x-twitter-scraper/references/api-endpoints-monitors.md +0 -74
- package/skills/x-twitter-scraper/references/api-endpoints-radar.md +0 -49
- package/skills/x-twitter-scraper/references/api-endpoints-support.md +0 -47
- package/skills/x-twitter-scraper/references/api-endpoints-trends.md +0 -25
- package/skills/x-twitter-scraper/references/api-endpoints-tweet-style-cache.md +0 -155
- package/skills/x-twitter-scraper/references/api-endpoints-webhooks.md +0 -74
- package/skills/x-twitter-scraper/references/api-endpoints-x-accounts.md +0 -42
- package/skills/x-twitter-scraper/references/api-endpoints-x-api.md +0 -206
- package/skills/x-twitter-scraper/references/api-endpoints-x-media.md +0 -40
- package/skills/x-twitter-scraper/references/api-endpoints-x-write.md +0 -204
- package/skills/x-twitter-scraper/references/api-endpoints.md +0 -30
- package/skills/x-twitter-scraper/references/draws.md +0 -57
- package/skills/x-twitter-scraper/references/mcp-setup.md +0 -273
- package/skills/x-twitter-scraper/references/mcp-tools.md +0 -174
- package/skills/x-twitter-scraper/references/python-examples.md +0 -182
- package/skills/x-twitter-scraper/references/security.md +0 -124
- package/skills/x-twitter-scraper/references/types-account-identity.md +0 -9
- package/skills/x-twitter-scraper/references/types-account.md +0 -26
- package/skills/x-twitter-scraper/references/types-api-keys.md +0 -22
- package/skills/x-twitter-scraper/references/types-bookmarks-and-timeline.md +0 -46
- package/skills/x-twitter-scraper/references/types-credits.md +0 -11
- package/skills/x-twitter-scraper/references/types-download-media.md +0 -22
- package/skills/x-twitter-scraper/references/types-draws.md +0 -60
- package/skills/x-twitter-scraper/references/types-error.md +0 -10
- package/skills/x-twitter-scraper/references/types-events.md +0 -43
- package/skills/x-twitter-scraper/references/types-extractions.md +0 -106
- package/skills/x-twitter-scraper/references/types-mcp-add-webhook.md +0 -14
- package/skills/x-twitter-scraper/references/types-mcp-check-follow.md +0 -10
- package/skills/x-twitter-scraper/references/types-mcp-compose-tweet.md +0 -31
- package/skills/x-twitter-scraper/references/types-mcp-estimate-extraction.md +0 -15
- package/skills/x-twitter-scraper/references/types-mcp-get-account.md +0 -26
- package/skills/x-twitter-scraper/references/types-mcp-get-draw.md +0 -30
- package/skills/x-twitter-scraper/references/types-mcp-get-events.md +0 -19
- package/skills/x-twitter-scraper/references/types-mcp-get-trends.md +0 -16
- package/skills/x-twitter-scraper/references/types-mcp-get-user-info.md +0 -16
- package/skills/x-twitter-scraper/references/types-mcp-list-monitors.md +0 -15
- package/skills/x-twitter-scraper/references/types-mcp-lookup-tweet.md +0 -25
- package/skills/x-twitter-scraper/references/types-mcp-output-schemas.md +0 -22
- package/skills/x-twitter-scraper/references/types-mcp-refine-tweet.md +0 -13
- package/skills/x-twitter-scraper/references/types-mcp-run-draw.md +0 -18
- package/skills/x-twitter-scraper/references/types-mcp-run-extraction.md +0 -12
- package/skills/x-twitter-scraper/references/types-mcp-score-tweet.md +0 -16
- package/skills/x-twitter-scraper/references/types-mcp-search-tweets.md +0 -17
- package/skills/x-twitter-scraper/references/types-mcp-test-webhook.md +0 -11
- package/skills/x-twitter-scraper/references/types-monitors.md +0 -20
- package/skills/x-twitter-scraper/references/types-radar.md +0 -40
- package/skills/x-twitter-scraper/references/types-request-bodies.md +0 -30
- package/skills/x-twitter-scraper/references/types-rest-api-vs-mcp-field-naming.md +0 -15
- package/skills/x-twitter-scraper/references/types-support.md +0 -25
- package/skills/x-twitter-scraper/references/types-trends.md +0 -18
- package/skills/x-twitter-scraper/references/types-tweet-drafts.md +0 -20
- package/skills/x-twitter-scraper/references/types-tweet-style-cache.md +0 -50
- package/skills/x-twitter-scraper/references/types-user-activity.md +0 -35
- package/skills/x-twitter-scraper/references/types-webhooks.md +0 -38
- package/skills/x-twitter-scraper/references/types-x-accounts.md +0 -16
- package/skills/x-twitter-scraper/references/types-x-api.md +0 -69
- package/skills/x-twitter-scraper/references/types-x-articles.md +0 -21
- package/skills/x-twitter-scraper/references/types-x-write.md +0 -39
- package/skills/x-twitter-scraper/references/types.md +0 -48
- package/skills/x-twitter-scraper/references/usage.md +0 -50
- package/skills/x-twitter-scraper/references/webhooks.md +0 -243
- package/skills/x-twitter-scraper/references/workflows.md +0 -202
- package/skills/x-twitter-scraper/skill-card.md +0 -76
- package/skills/x-twitter-scraper/skillspector-report.md +0 -17
|
@@ -1,223 +0,0 @@
|
|
|
1
|
-
/** Each entry: path (relative to root) + extractor returning the version string. */
|
|
2
|
-
function parseJsonVersion(raw) {
|
|
3
|
-
return JSON.parse(raw).version;
|
|
4
|
-
}
|
|
5
|
-
|
|
6
|
-
export const versionSurfaces = [
|
|
7
|
-
{ path: "server.json", get: parseJsonVersion },
|
|
8
|
-
{ path: "openclaw.plugin.json", get: parseJsonVersion },
|
|
9
|
-
{ path: ".codex-plugin/plugin.json", get: parseJsonVersion },
|
|
10
|
-
{ path: ".claude-plugin/plugin.json", get: parseJsonVersion },
|
|
11
|
-
{
|
|
12
|
-
path: ".claude-plugin/marketplace.json",
|
|
13
|
-
get: (j) => {
|
|
14
|
-
const m = JSON.parse(j);
|
|
15
|
-
return [m.metadata?.version, ...(m.plugins ?? []).map((p) => p.version)];
|
|
16
|
-
},
|
|
17
|
-
},
|
|
18
|
-
{
|
|
19
|
-
path: "skills/x-twitter-scraper/metadata.json",
|
|
20
|
-
get: parseJsonVersion,
|
|
21
|
-
},
|
|
22
|
-
{
|
|
23
|
-
path: "skills/x-twitter-scraper/SKILL.md",
|
|
24
|
-
get: (t) => {
|
|
25
|
-
const match = /^\s*version:\s*"([^"]+)"/m.exec(t);
|
|
26
|
-
return match?.[1];
|
|
27
|
-
},
|
|
28
|
-
},
|
|
29
|
-
{
|
|
30
|
-
path: "stub-server.mjs",
|
|
31
|
-
get: (t) => /version:\s*"([^"]+)"/.exec(t)?.[1],
|
|
32
|
-
},
|
|
33
|
-
];
|
|
34
|
-
|
|
35
|
-
export const skillFrontmatterExpectations = {
|
|
36
|
-
scalars: {
|
|
37
|
-
author: "Xquik <support@xquik.com>",
|
|
38
|
-
compatibility:
|
|
39
|
-
"Requires internet access to call the first-party Xquik REST API.",
|
|
40
|
-
"metadata.author": "Xquik",
|
|
41
|
-
"metadata.capabilities.network.allowed": true,
|
|
42
|
-
"metadata.capabilities.shell.allowed": false,
|
|
43
|
-
"metadata.capabilities.filesystem.read": false,
|
|
44
|
-
"metadata.capabilities.filesystem.write": false,
|
|
45
|
-
"metadata.capabilities.mcp.allowed": true,
|
|
46
|
-
"metadata.capabilities.mcp.transport": "native-http-or-oauth-only",
|
|
47
|
-
"metadata.capabilities.codeExecution.allowed": false,
|
|
48
|
-
"metadata.capabilities.localNetwork.allowed": false,
|
|
49
|
-
"metadata.openclaw.primaryEnv": "XQUIK_API_KEY",
|
|
50
|
-
"metadata.openclaw.homepage": "https://docs.xquik.com",
|
|
51
|
-
"metadata.security.credentialsHandledByAgent": "api-key-only",
|
|
52
|
-
"metadata.security.credentialsTransmitted": "xquik-api-key-only",
|
|
53
|
-
"metadata.security.xLoginSecretsHandled": false,
|
|
54
|
-
"metadata.security.passwordsCollected": false,
|
|
55
|
-
"metadata.security.totpCollected": false,
|
|
56
|
-
"metadata.security.sessionCookiesCollected": false,
|
|
57
|
-
"metadata.security.contentIsolation": "enforced",
|
|
58
|
-
"metadata.security.inputValidation": "enforced",
|
|
59
|
-
"metadata.security.outputSanitization": "enforced",
|
|
60
|
-
"metadata.security.writeConfirmation": "required",
|
|
61
|
-
"metadata.security.persistentResourceConfirmation": "required",
|
|
62
|
-
"metadata.security.accountChangeExecution": false,
|
|
63
|
-
"metadata.security.autonomousPlanChanges": false,
|
|
64
|
-
"metadata.security.planChanges": "dashboard-only",
|
|
65
|
-
"metadata.security.creditChanges": "dashboard-only",
|
|
66
|
-
"metadata.security.mcpTransport": "native-http-or-oauth-only",
|
|
67
|
-
"metadata.security.thirdPartyContentIsolation": "explicit-boundary-markers",
|
|
68
|
-
"metadata.security.executionModel": "api-only",
|
|
69
|
-
"metadata.security.codeExecution": "none",
|
|
70
|
-
"metadata.security.localFileAccess": "none",
|
|
71
|
-
"metadata.security.localNetworkAccess": "none",
|
|
72
|
-
"metadata.security.auditLogging": "enabled",
|
|
73
|
-
"metadata.security.rateLimiting": "per-method-tier",
|
|
74
|
-
"metadata.security.usageConfirmation": "required",
|
|
75
|
-
"metadata.security.securityReference": "references/security.md",
|
|
76
|
-
},
|
|
77
|
-
arrays: {
|
|
78
|
-
tags: ["twitter", "x", "social-media", "api-development", "scraping"],
|
|
79
|
-
"metadata.capabilities.network.hosts": ["xquik.com", "docs.xquik.com"],
|
|
80
|
-
"metadata.capabilities.environment.required": ["XQUIK_API_KEY"],
|
|
81
|
-
"metadata.capabilities.environment.optional": ["XQUIK_WEBHOOK_SECRET"],
|
|
82
|
-
"metadata.openclaw.requires.env": ["XQUIK_API_KEY"],
|
|
83
|
-
"metadata.security.allowedHosts": ["xquik.com", "docs.xquik.com"],
|
|
84
|
-
},
|
|
85
|
-
enums: {
|
|
86
|
-
"metadata.security.contentTrust": ["mixed"],
|
|
87
|
-
},
|
|
88
|
-
};
|
|
89
|
-
|
|
90
|
-
export const taskGuideFrontmatterExpectations = {
|
|
91
|
-
scalars: {
|
|
92
|
-
"metadata.internal": true,
|
|
93
|
-
"metadata.author": "Xquik",
|
|
94
|
-
"metadata.openclaw.primaryEnv": "XQUIK_API_KEY",
|
|
95
|
-
"metadata.openclaw.homepage": "https://docs.xquik.com",
|
|
96
|
-
"metadata.security.contentIsolation": "enforced",
|
|
97
|
-
"metadata.security.promptInjectionDefense": true,
|
|
98
|
-
"metadata.security.writeConfirmation": "required",
|
|
99
|
-
"metadata.security.usageConfirmation": "required",
|
|
100
|
-
"metadata.security.planChanges": "dashboard-only",
|
|
101
|
-
"metadata.security.creditChanges": "dashboard-only",
|
|
102
|
-
"metadata.security.executionModel": "api-only",
|
|
103
|
-
"metadata.security.codeExecution": "none",
|
|
104
|
-
"metadata.security.credentialProxy": false,
|
|
105
|
-
},
|
|
106
|
-
arrays: {
|
|
107
|
-
"metadata.openclaw.requires.env": ["XQUIK_API_KEY"],
|
|
108
|
-
},
|
|
109
|
-
enums: {
|
|
110
|
-
"metadata.security.contentTrust": ["trusted", "mixed", "untrusted"],
|
|
111
|
-
},
|
|
112
|
-
};
|
|
113
|
-
|
|
114
|
-
export const manifestReferences = [
|
|
115
|
-
[".codex-plugin/plugin.json", "skills"],
|
|
116
|
-
[".codex-plugin/plugin.json", "mcpServers"],
|
|
117
|
-
[".codex-plugin/plugin.json", "interface.composerIcon"],
|
|
118
|
-
[".claude-plugin/plugin.json", "skills"],
|
|
119
|
-
[".claude-plugin/plugin.json", "mcpServers"],
|
|
120
|
-
["openclaw.plugin.json", "skills"],
|
|
121
|
-
];
|
|
122
|
-
|
|
123
|
-
export const jsonFieldExpectations = [
|
|
124
|
-
{
|
|
125
|
-
path: "package.json",
|
|
126
|
-
fields: {
|
|
127
|
-
name: "x-developer",
|
|
128
|
-
"author.name": "Xquik",
|
|
129
|
-
"author.url": "https://docs.xquik.com",
|
|
130
|
-
homepage: "https://docs.xquik.com",
|
|
131
|
-
license: "MIT",
|
|
132
|
-
"repository.url": "git+https://github.com/Xquik-dev/x-twitter-scraper.git",
|
|
133
|
-
"bugs.url": "https://github.com/Xquik-dev/x-twitter-scraper/issues",
|
|
134
|
-
},
|
|
135
|
-
},
|
|
136
|
-
{
|
|
137
|
-
path: "openclaw.plugin.json",
|
|
138
|
-
fields: {
|
|
139
|
-
id: "x-developer",
|
|
140
|
-
name: "X Developer API",
|
|
141
|
-
"skills.0": "./skills",
|
|
142
|
-
"providerAuthEnvVars.xquik.0": "XQUIK_API_KEY",
|
|
143
|
-
"uiHints.apiKey.sensitive": true,
|
|
144
|
-
"configSchema.additionalProperties": false,
|
|
145
|
-
},
|
|
146
|
-
},
|
|
147
|
-
{
|
|
148
|
-
path: ".codex-plugin/plugin.json",
|
|
149
|
-
fields: {
|
|
150
|
-
name: "x-twitter-scraper",
|
|
151
|
-
"author.name": "Xquik",
|
|
152
|
-
homepage: "https://docs.xquik.com",
|
|
153
|
-
repository: "https://github.com/Xquik-dev/x-twitter-scraper",
|
|
154
|
-
license: "MIT",
|
|
155
|
-
skills: "./skills/",
|
|
156
|
-
mcpServers: "./.mcp.json",
|
|
157
|
-
"interface.developerName": "Xquik",
|
|
158
|
-
"interface.websiteURL": "https://docs.xquik.com",
|
|
159
|
-
"interface.privacyPolicyURL": "https://xquik.com/privacy",
|
|
160
|
-
"interface.termsOfServiceURL": "https://xquik.com/terms",
|
|
161
|
-
},
|
|
162
|
-
},
|
|
163
|
-
{
|
|
164
|
-
path: ".claude-plugin/plugin.json",
|
|
165
|
-
fields: {
|
|
166
|
-
name: "x-twitter-scraper",
|
|
167
|
-
"author.name": "Xquik",
|
|
168
|
-
homepage: "https://docs.xquik.com",
|
|
169
|
-
repository: "https://github.com/Xquik-dev/x-twitter-scraper",
|
|
170
|
-
license: "MIT",
|
|
171
|
-
skills: "./skills/",
|
|
172
|
-
mcpServers: "./.mcp.json",
|
|
173
|
-
"userConfig.api_key.sensitive": true,
|
|
174
|
-
},
|
|
175
|
-
},
|
|
176
|
-
{
|
|
177
|
-
path: ".claude-plugin/marketplace.json",
|
|
178
|
-
fields: {
|
|
179
|
-
name: "x-twitter-scraper",
|
|
180
|
-
"owner.name": "Xquik",
|
|
181
|
-
"owner.email": "support@xquik.com",
|
|
182
|
-
"plugins.0.name": "x-twitter-scraper",
|
|
183
|
-
"plugins.0.homepage": "https://docs.xquik.com",
|
|
184
|
-
"plugins.0.repository": "https://github.com/Xquik-dev/x-twitter-scraper",
|
|
185
|
-
"plugins.0.license": "MIT",
|
|
186
|
-
},
|
|
187
|
-
},
|
|
188
|
-
{
|
|
189
|
-
path: "server.json",
|
|
190
|
-
fields: {
|
|
191
|
-
name: "com.xquik/mcp",
|
|
192
|
-
title: "Xquik MCP Server",
|
|
193
|
-
"repository.url": "https://github.com/Xquik-dev/x-twitter-scraper",
|
|
194
|
-
"repository.source": "github",
|
|
195
|
-
websiteUrl: "https://docs.xquik.com/mcp/overview",
|
|
196
|
-
"remotes.0.type": "streamable-http",
|
|
197
|
-
"remotes.0.url": "https://xquik.com/mcp",
|
|
198
|
-
},
|
|
199
|
-
},
|
|
200
|
-
{
|
|
201
|
-
path: "skills/x-twitter-scraper/metadata.json",
|
|
202
|
-
fields: {
|
|
203
|
-
organization: "Xquik",
|
|
204
|
-
homepage: "https://docs.xquik.com",
|
|
205
|
-
repository: "https://github.com/Xquik-dev/x-twitter-scraper",
|
|
206
|
-
license: "MIT",
|
|
207
|
-
"security.defaultMode": "read-only-public-data",
|
|
208
|
-
"security.localExecution": false,
|
|
209
|
-
"security.localFileAccess": false,
|
|
210
|
-
"security.localNetworkAccess": false,
|
|
211
|
-
"security.untrustedContentBoundaries": true,
|
|
212
|
-
},
|
|
213
|
-
},
|
|
214
|
-
];
|
|
215
|
-
|
|
216
|
-
export const markdownRoots = [
|
|
217
|
-
".github",
|
|
218
|
-
"commands",
|
|
219
|
-
"docker-mcp-registry",
|
|
220
|
-
"mcpize",
|
|
221
|
-
"skills",
|
|
222
|
-
"task-guides",
|
|
223
|
-
];
|
|
@@ -1,31 +0,0 @@
|
|
|
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
|
-
---
|
|
@@ -1,33 +0,0 @@
|
|
|
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
|
-
---
|
|
@@ -1,86 +0,0 @@
|
|
|
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
|
-
---
|
|
@@ -1,75 +0,0 @@
|
|
|
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
|
-
---
|
|
@@ -1,37 +0,0 @@
|
|
|
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 |
|
|
@@ -1,48 +0,0 @@
|
|
|
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
|
-
---
|
|
@@ -1,97 +0,0 @@
|
|
|
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
|
-
---
|