x-twitter-scraper 0.12.3 → 0.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (473) hide show
  1. package/CHANGELOG.md +73 -2
  2. package/README.md +66 -51
  3. package/client.d.mts +18 -15
  4. package/client.d.mts.map +1 -1
  5. package/client.d.ts +18 -15
  6. package/client.d.ts.map +1 -1
  7. package/client.js +3 -3
  8. package/client.js.map +1 -1
  9. package/client.mjs +4 -4
  10. package/client.mjs.map +1 -1
  11. package/core/streaming.d.mts +33 -0
  12. package/core/streaming.d.mts.map +1 -0
  13. package/core/streaming.d.ts +33 -0
  14. package/core/streaming.d.ts.map +1 -0
  15. package/core/streaming.js +270 -0
  16. package/core/streaming.js.map +1 -0
  17. package/core/streaming.mjs +265 -0
  18. package/core/streaming.mjs.map +1 -0
  19. package/internal/decoders/line.d.mts +17 -0
  20. package/internal/decoders/line.d.mts.map +1 -0
  21. package/internal/decoders/line.d.ts +17 -0
  22. package/internal/decoders/line.d.ts.map +1 -0
  23. package/internal/decoders/line.js +116 -0
  24. package/internal/decoders/line.js.map +1 -0
  25. package/internal/decoders/line.mjs +111 -0
  26. package/internal/decoders/line.mjs.map +1 -0
  27. package/internal/parse.d.mts.map +1 -1
  28. package/internal/parse.d.ts.map +1 -1
  29. package/internal/parse.js +7 -0
  30. package/internal/parse.js.map +1 -1
  31. package/internal/parse.mjs +7 -0
  32. package/internal/parse.mjs.map +1 -1
  33. package/internal/tslib.js +18 -18
  34. package/package.json +23 -5
  35. package/resources/account.d.mts +35 -12
  36. package/resources/account.d.mts.map +1 -1
  37. package/resources/account.d.ts +35 -12
  38. package/resources/account.d.ts.map +1 -1
  39. package/resources/account.js +4 -3
  40. package/resources/account.js.map +1 -1
  41. package/resources/account.mjs +4 -3
  42. package/resources/account.mjs.map +1 -1
  43. package/resources/compose.d.mts +77 -21
  44. package/resources/compose.d.mts.map +1 -1
  45. package/resources/compose.d.ts +77 -21
  46. package/resources/compose.d.ts.map +1 -1
  47. package/resources/compose.js +3 -4
  48. package/resources/compose.js.map +1 -1
  49. package/resources/compose.mjs +3 -4
  50. package/resources/compose.mjs.map +1 -1
  51. package/resources/credits.d.mts +18 -10
  52. package/resources/credits.d.mts.map +1 -1
  53. package/resources/credits.d.ts +18 -10
  54. package/resources/credits.d.ts.map +1 -1
  55. package/resources/credits.js +5 -4
  56. package/resources/credits.js.map +1 -1
  57. package/resources/credits.mjs +5 -4
  58. package/resources/credits.mjs.map +1 -1
  59. package/resources/drafts.d.mts +13 -17
  60. package/resources/drafts.d.mts.map +1 -1
  61. package/resources/drafts.d.ts +13 -17
  62. package/resources/drafts.d.ts.map +1 -1
  63. package/resources/drafts.js +4 -4
  64. package/resources/drafts.mjs +4 -4
  65. package/resources/draws.d.mts +84 -28
  66. package/resources/draws.d.mts.map +1 -1
  67. package/resources/draws.d.ts +84 -28
  68. package/resources/draws.d.ts.map +1 -1
  69. package/resources/draws.js +24 -9
  70. package/resources/draws.js.map +1 -1
  71. package/resources/draws.mjs +24 -9
  72. package/resources/draws.mjs.map +1 -1
  73. package/resources/events.d.mts +2564 -21
  74. package/resources/events.d.mts.map +1 -1
  75. package/resources/events.d.ts +2564 -21
  76. package/resources/events.d.ts.map +1 -1
  77. package/resources/events.js +34 -2
  78. package/resources/events.js.map +1 -1
  79. package/resources/events.mjs +34 -2
  80. package/resources/events.mjs.map +1 -1
  81. package/resources/extractions.d.mts +410 -128
  82. package/resources/extractions.d.mts.map +1 -1
  83. package/resources/extractions.d.ts +410 -128
  84. package/resources/extractions.d.ts.map +1 -1
  85. package/resources/extractions.js +74 -12
  86. package/resources/extractions.js.map +1 -1
  87. package/resources/extractions.mjs +74 -12
  88. package/resources/extractions.mjs.map +1 -1
  89. package/resources/guest-wallets.d.mts +6 -5
  90. package/resources/guest-wallets.d.mts.map +1 -1
  91. package/resources/guest-wallets.d.ts +6 -5
  92. package/resources/guest-wallets.d.ts.map +1 -1
  93. package/resources/guest-wallets.js +2 -1
  94. package/resources/guest-wallets.js.map +1 -1
  95. package/resources/guest-wallets.mjs +2 -1
  96. package/resources/guest-wallets.mjs.map +1 -1
  97. package/resources/index.d.mts +6 -6
  98. package/resources/index.d.mts.map +1 -1
  99. package/resources/index.d.ts +6 -6
  100. package/resources/index.d.ts.map +1 -1
  101. package/resources/index.js.map +1 -1
  102. package/resources/index.mjs +1 -1
  103. package/resources/index.mjs.map +1 -1
  104. package/resources/monitors/index.d.mts +2 -2
  105. package/resources/monitors/index.d.mts.map +1 -1
  106. package/resources/monitors/index.d.ts +2 -2
  107. package/resources/monitors/index.d.ts.map +1 -1
  108. package/resources/monitors/index.js.map +1 -1
  109. package/resources/monitors/index.mjs.map +1 -1
  110. package/resources/monitors/keywords.d.mts +66 -14
  111. package/resources/monitors/keywords.d.mts.map +1 -1
  112. package/resources/monitors/keywords.d.ts +66 -14
  113. package/resources/monitors/keywords.d.ts.map +1 -1
  114. package/resources/monitors/keywords.js +16 -10
  115. package/resources/monitors/keywords.js.map +1 -1
  116. package/resources/monitors/keywords.mjs +16 -10
  117. package/resources/monitors/keywords.mjs.map +1 -1
  118. package/resources/monitors/monitors.d.mts +53 -16
  119. package/resources/monitors/monitors.d.mts.map +1 -1
  120. package/resources/monitors/monitors.d.ts +53 -16
  121. package/resources/monitors/monitors.d.ts.map +1 -1
  122. package/resources/monitors/monitors.js +12 -10
  123. package/resources/monitors/monitors.js.map +1 -1
  124. package/resources/monitors/monitors.mjs +12 -10
  125. package/resources/monitors/monitors.mjs.map +1 -1
  126. package/resources/radar.d.mts +32 -36
  127. package/resources/radar.d.mts.map +1 -1
  128. package/resources/radar.d.ts +32 -36
  129. package/resources/radar.d.ts.map +1 -1
  130. package/resources/radar.js +1 -1
  131. package/resources/radar.mjs +1 -1
  132. package/resources/shared.d.mts +1726 -233
  133. package/resources/shared.d.mts.map +1 -1
  134. package/resources/shared.d.ts +1726 -233
  135. package/resources/shared.d.ts.map +1 -1
  136. package/resources/styles.d.mts +34 -23
  137. package/resources/styles.d.mts.map +1 -1
  138. package/resources/styles.d.ts +34 -23
  139. package/resources/styles.d.ts.map +1 -1
  140. package/resources/styles.js +11 -13
  141. package/resources/styles.js.map +1 -1
  142. package/resources/styles.mjs +11 -13
  143. package/resources/styles.mjs.map +1 -1
  144. package/resources/subscribe.d.mts +1 -1
  145. package/resources/subscribe.d.ts +1 -1
  146. package/resources/subscribe.js +1 -1
  147. package/resources/subscribe.mjs +1 -1
  148. package/resources/support/index.d.mts +1 -1
  149. package/resources/support/index.d.mts.map +1 -1
  150. package/resources/support/index.d.ts +1 -1
  151. package/resources/support/index.d.ts.map +1 -1
  152. package/resources/support/index.js.map +1 -1
  153. package/resources/support/index.mjs.map +1 -1
  154. package/resources/support/support.d.mts +2 -2
  155. package/resources/support/support.d.mts.map +1 -1
  156. package/resources/support/support.d.ts +2 -2
  157. package/resources/support/support.d.ts.map +1 -1
  158. package/resources/support/support.js.map +1 -1
  159. package/resources/support/support.mjs.map +1 -1
  160. package/resources/support/tickets.d.mts +30 -10
  161. package/resources/support/tickets.d.mts.map +1 -1
  162. package/resources/support/tickets.d.ts +30 -10
  163. package/resources/support/tickets.d.ts.map +1 -1
  164. package/resources/support/tickets.js +7 -7
  165. package/resources/support/tickets.js.map +1 -1
  166. package/resources/support/tickets.mjs +7 -7
  167. package/resources/support/tickets.mjs.map +1 -1
  168. package/resources/trends.d.mts +21 -5
  169. package/resources/trends.d.mts.map +1 -1
  170. package/resources/trends.d.ts +21 -5
  171. package/resources/trends.d.ts.map +1 -1
  172. package/resources/trends.js +2 -1
  173. package/resources/trends.js.map +1 -1
  174. package/resources/trends.mjs +2 -1
  175. package/resources/trends.mjs.map +1 -1
  176. package/resources/webhooks.d.mts +80 -14
  177. package/resources/webhooks.d.mts.map +1 -1
  178. package/resources/webhooks.d.ts +80 -14
  179. package/resources/webhooks.d.ts.map +1 -1
  180. package/resources/webhooks.js +30 -11
  181. package/resources/webhooks.js.map +1 -1
  182. package/resources/webhooks.mjs +30 -11
  183. package/resources/webhooks.mjs.map +1 -1
  184. package/resources/x/account-connection-attempts.d.mts +1 -1
  185. package/resources/x/account-connection-attempts.d.ts +1 -1
  186. package/resources/x/account-connection-attempts.js +1 -1
  187. package/resources/x/account-connection-attempts.mjs +1 -1
  188. package/resources/x/account-connection-challenges.d.mts +30 -11
  189. package/resources/x/account-connection-challenges.d.mts.map +1 -1
  190. package/resources/x/account-connection-challenges.d.ts +30 -11
  191. package/resources/x/account-connection-challenges.d.ts.map +1 -1
  192. package/resources/x/account-connection-challenges.js +5 -4
  193. package/resources/x/account-connection-challenges.js.map +1 -1
  194. package/resources/x/account-connection-challenges.mjs +5 -4
  195. package/resources/x/account-connection-challenges.mjs.map +1 -1
  196. package/resources/x/accounts.d.mts +38 -10
  197. package/resources/x/accounts.d.mts.map +1 -1
  198. package/resources/x/accounts.d.ts +38 -10
  199. package/resources/x/accounts.d.ts.map +1 -1
  200. package/resources/x/accounts.js +8 -7
  201. package/resources/x/accounts.js.map +1 -1
  202. package/resources/x/accounts.mjs +8 -7
  203. package/resources/x/accounts.mjs.map +1 -1
  204. package/resources/x/analysis.d.mts +3274 -0
  205. package/resources/x/analysis.d.mts.map +1 -0
  206. package/resources/x/analysis.d.ts +3274 -0
  207. package/resources/x/analysis.d.ts.map +1 -0
  208. package/resources/x/analysis.js +132 -0
  209. package/resources/x/analysis.js.map +1 -0
  210. package/resources/x/analysis.mjs +128 -0
  211. package/resources/x/analysis.mjs.map +1 -0
  212. package/resources/x/bookmarks.d.mts +84 -9
  213. package/resources/x/bookmarks.d.mts.map +1 -1
  214. package/resources/x/bookmarks.d.ts +84 -9
  215. package/resources/x/bookmarks.d.ts.map +1 -1
  216. package/resources/x/bookmarks.js +6 -4
  217. package/resources/x/bookmarks.js.map +1 -1
  218. package/resources/x/bookmarks.mjs +6 -4
  219. package/resources/x/bookmarks.mjs.map +1 -1
  220. package/resources/x/broadcasts.d.mts +176 -0
  221. package/resources/x/broadcasts.d.mts.map +1 -0
  222. package/resources/x/broadcasts.d.ts +176 -0
  223. package/resources/x/broadcasts.d.ts.map +1 -0
  224. package/resources/x/broadcasts.js +29 -0
  225. package/resources/x/broadcasts.js.map +1 -0
  226. package/resources/x/broadcasts.mjs +25 -0
  227. package/resources/x/broadcasts.mjs.map +1 -0
  228. package/resources/x/communities/communities.d.mts +612 -128
  229. package/resources/x/communities/communities.d.mts.map +1 -1
  230. package/resources/x/communities/communities.d.ts +612 -128
  231. package/resources/x/communities/communities.d.ts.map +1 -1
  232. package/resources/x/communities/communities.js +96 -17
  233. package/resources/x/communities/communities.js.map +1 -1
  234. package/resources/x/communities/communities.mjs +96 -17
  235. package/resources/x/communities/communities.mjs.map +1 -1
  236. package/resources/x/communities/index.d.mts +2 -1
  237. package/resources/x/communities/index.d.mts.map +1 -1
  238. package/resources/x/communities/index.d.ts +2 -1
  239. package/resources/x/communities/index.d.ts.map +1 -1
  240. package/resources/x/communities/index.js +3 -1
  241. package/resources/x/communities/index.js.map +1 -1
  242. package/resources/x/communities/index.mjs +1 -0
  243. package/resources/x/communities/index.mjs.map +1 -1
  244. package/resources/x/communities/join.d.mts +46 -25
  245. package/resources/x/communities/join.d.mts.map +1 -1
  246. package/resources/x/communities/join.d.ts +46 -25
  247. package/resources/x/communities/join.d.ts.map +1 -1
  248. package/resources/x/communities/join.js +10 -7
  249. package/resources/x/communities/join.js.map +1 -1
  250. package/resources/x/communities/join.mjs +10 -7
  251. package/resources/x/communities/join.mjs.map +1 -1
  252. package/resources/x/communities/media.d.mts +197 -0
  253. package/resources/x/communities/media.d.mts.map +1 -0
  254. package/resources/x/communities/media.d.ts +197 -0
  255. package/resources/x/communities/media.d.ts.map +1 -0
  256. package/resources/x/communities/media.js +29 -0
  257. package/resources/x/communities/media.js.map +1 -0
  258. package/resources/x/communities/media.mjs +25 -0
  259. package/resources/x/communities/media.mjs.map +1 -0
  260. package/resources/x/communities/tweets.d.mts +350 -20
  261. package/resources/x/communities/tweets.d.mts.map +1 -1
  262. package/resources/x/communities/tweets.d.ts +350 -20
  263. package/resources/x/communities/tweets.d.ts.map +1 -1
  264. package/resources/x/communities/tweets.js +8 -7
  265. package/resources/x/communities/tweets.js.map +1 -1
  266. package/resources/x/communities/tweets.mjs +8 -7
  267. package/resources/x/communities/tweets.mjs.map +1 -1
  268. package/resources/x/dm.d.mts +245 -13
  269. package/resources/x/dm.d.mts.map +1 -1
  270. package/resources/x/dm.d.ts +245 -13
  271. package/resources/x/dm.d.ts.map +1 -1
  272. package/resources/x/dm.js +29 -2
  273. package/resources/x/dm.js.map +1 -1
  274. package/resources/x/dm.mjs +29 -2
  275. package/resources/x/dm.mjs.map +1 -1
  276. package/resources/x/followers.d.mts +31 -3
  277. package/resources/x/followers.d.mts.map +1 -1
  278. package/resources/x/followers.d.ts +31 -3
  279. package/resources/x/followers.d.ts.map +1 -1
  280. package/resources/x/followers.js +2 -1
  281. package/resources/x/followers.js.map +1 -1
  282. package/resources/x/followers.mjs +2 -1
  283. package/resources/x/followers.mjs.map +1 -1
  284. package/resources/x/index.d.mts +12 -8
  285. package/resources/x/index.d.mts.map +1 -1
  286. package/resources/x/index.d.ts +12 -8
  287. package/resources/x/index.d.ts.map +1 -1
  288. package/resources/x/index.js +9 -1
  289. package/resources/x/index.js.map +1 -1
  290. package/resources/x/index.mjs +5 -1
  291. package/resources/x/index.mjs.map +1 -1
  292. package/resources/x/jobs.d.mts +506 -0
  293. package/resources/x/jobs.d.mts.map +1 -0
  294. package/resources/x/jobs.d.ts +506 -0
  295. package/resources/x/jobs.d.ts.map +1 -0
  296. package/resources/x/jobs.js +60 -0
  297. package/resources/x/jobs.js.map +1 -0
  298. package/resources/x/jobs.mjs +56 -0
  299. package/resources/x/jobs.mjs.map +1 -0
  300. package/resources/x/lists.d.mts +1058 -27
  301. package/resources/x/lists.d.mts.map +1 -1
  302. package/resources/x/lists.d.ts +1058 -27
  303. package/resources/x/lists.d.ts.map +1 -1
  304. package/resources/x/lists.js +39 -9
  305. package/resources/x/lists.js.map +1 -1
  306. package/resources/x/lists.mjs +39 -9
  307. package/resources/x/lists.mjs.map +1 -1
  308. package/resources/x/media.d.mts +24 -13
  309. package/resources/x/media.d.mts.map +1 -1
  310. package/resources/x/media.d.ts +24 -13
  311. package/resources/x/media.d.ts.map +1 -1
  312. package/resources/x/media.js +2 -2
  313. package/resources/x/media.mjs +2 -2
  314. package/resources/x/profile.d.mts +60 -33
  315. package/resources/x/profile.d.mts.map +1 -1
  316. package/resources/x/profile.d.ts +60 -33
  317. package/resources/x/profile.d.ts.map +1 -1
  318. package/resources/x/profile.js +3 -3
  319. package/resources/x/profile.mjs +3 -3
  320. package/resources/x/spaces.d.mts +857 -0
  321. package/resources/x/spaces.d.mts.map +1 -0
  322. package/resources/x/spaces.d.ts +857 -0
  323. package/resources/x/spaces.d.ts.map +1 -0
  324. package/resources/x/spaces.js +58 -0
  325. package/resources/x/spaces.js.map +1 -0
  326. package/resources/x/spaces.mjs +54 -0
  327. package/resources/x/spaces.mjs.map +1 -0
  328. package/resources/x/tweets/index.d.mts +1 -1
  329. package/resources/x/tweets/index.d.mts.map +1 -1
  330. package/resources/x/tweets/index.d.ts +1 -1
  331. package/resources/x/tweets/index.d.ts.map +1 -1
  332. package/resources/x/tweets/index.js.map +1 -1
  333. package/resources/x/tweets/index.mjs.map +1 -1
  334. package/resources/x/tweets/like.d.mts +38 -20
  335. package/resources/x/tweets/like.d.mts.map +1 -1
  336. package/resources/x/tweets/like.d.ts +38 -20
  337. package/resources/x/tweets/like.d.ts.map +1 -1
  338. package/resources/x/tweets/like.js +2 -2
  339. package/resources/x/tweets/like.mjs +2 -2
  340. package/resources/x/tweets/retweet.d.mts +38 -20
  341. package/resources/x/tweets/retweet.d.mts.map +1 -1
  342. package/resources/x/tweets/retweet.d.ts +38 -20
  343. package/resources/x/tweets/retweet.d.ts.map +1 -1
  344. package/resources/x/tweets/retweet.js +2 -2
  345. package/resources/x/tweets/retweet.mjs +2 -2
  346. package/resources/x/tweets/tweets.d.mts +2639 -326
  347. package/resources/x/tweets/tweets.d.mts.map +1 -1
  348. package/resources/x/tweets/tweets.d.ts +2639 -326
  349. package/resources/x/tweets/tweets.d.ts.map +1 -1
  350. package/resources/x/tweets/tweets.js +147 -21
  351. package/resources/x/tweets/tweets.js.map +1 -1
  352. package/resources/x/tweets/tweets.mjs +147 -21
  353. package/resources/x/tweets/tweets.mjs.map +1 -1
  354. package/resources/x/users/follow.d.mts +38 -20
  355. package/resources/x/users/follow.d.mts.map +1 -1
  356. package/resources/x/users/follow.d.ts +38 -20
  357. package/resources/x/users/follow.d.ts.map +1 -1
  358. package/resources/x/users/follow.js +2 -2
  359. package/resources/x/users/follow.mjs +2 -2
  360. package/resources/x/users/index.d.mts +1 -1
  361. package/resources/x/users/index.d.mts.map +1 -1
  362. package/resources/x/users/index.d.ts +1 -1
  363. package/resources/x/users/index.d.ts.map +1 -1
  364. package/resources/x/users/index.js.map +1 -1
  365. package/resources/x/users/index.mjs.map +1 -1
  366. package/resources/x/users/users.d.mts +3068 -457
  367. package/resources/x/users/users.d.mts.map +1 -1
  368. package/resources/x/users/users.d.ts +3068 -457
  369. package/resources/x/users/users.d.ts.map +1 -1
  370. package/resources/x/users/users.js +205 -22
  371. package/resources/x/users/users.js.map +1 -1
  372. package/resources/x/users/users.mjs +205 -22
  373. package/resources/x/users/users.mjs.map +1 -1
  374. package/resources/x/write-actions.d.mts +13 -6
  375. package/resources/x/write-actions.d.mts.map +1 -1
  376. package/resources/x/write-actions.d.ts +13 -6
  377. package/resources/x/write-actions.d.ts.map +1 -1
  378. package/resources/x/write-actions.js +1 -1
  379. package/resources/x/write-actions.mjs +1 -1
  380. package/resources/x/x.d.mts +864 -27
  381. package/resources/x/x.d.mts.map +1 -1
  382. package/resources/x/x.d.ts +864 -27
  383. package/resources/x/x.d.ts.map +1 -1
  384. package/resources/x/x.js +78 -5
  385. package/resources/x/x.js.map +1 -1
  386. package/resources/x/x.mjs +80 -7
  387. package/resources/x/x.mjs.map +1 -1
  388. package/skills/x-twitter-scraper/SKILL.md +97 -350
  389. package/skills/x-twitter-scraper/metadata.json +3 -9
  390. package/skills/x-twitter-scraper/references/draws.md +24 -24
  391. package/skills/x-twitter-scraper/references/extractions.md +71 -62
  392. package/skills/x-twitter-scraper/references/mcp-setup.md +36 -39
  393. package/skills/x-twitter-scraper/references/mcp-tools.md +105 -166
  394. package/skills/x-twitter-scraper/references/python-examples.md +5 -5
  395. package/skills/x-twitter-scraper/references/security.md +8 -8
  396. package/skills/x-twitter-scraper/references/types-mcp-output-schemas.md +4 -4
  397. package/skills/x-twitter-scraper/references/types.md +0 -1
  398. package/skills/x-twitter-scraper/references/usage.md +5 -5
  399. package/skills/x-twitter-scraper/references/webhooks.md +28 -31
  400. package/skills/x-twitter-scraper/references/workflows.md +70 -71
  401. package/skills/x-twitter-scraper/skill-card.md +13 -14
  402. package/skills/x-twitter-scraper/skillspector-report.md +8 -5
  403. package/skills/xquik-account-automation/LICENSE +21 -0
  404. package/skills/xquik-account-automation/SKILL.md +91 -0
  405. package/skills/xquik-social-research/SKILL.md +49 -56
  406. package/src/client.ts +47 -4
  407. package/src/core/streaming.ts +328 -0
  408. package/src/internal/decoders/line.ts +140 -0
  409. package/src/internal/parse.ts +9 -0
  410. package/src/resources/account.ts +41 -12
  411. package/src/resources/compose.ts +77 -21
  412. package/src/resources/credits.ts +19 -10
  413. package/src/resources/drafts.ts +13 -22
  414. package/src/resources/draws.ts +94 -36
  415. package/src/resources/events.ts +3225 -68
  416. package/src/resources/extractions.ts +512 -125
  417. package/src/resources/guest-wallets.ts +6 -5
  418. package/src/resources/index.ts +24 -1
  419. package/src/resources/monitors/index.ts +2 -0
  420. package/src/resources/monitors/keywords.ts +82 -14
  421. package/src/resources/monitors/monitors.ts +66 -14
  422. package/src/resources/radar.ts +32 -36
  423. package/src/resources/shared.ts +2227 -351
  424. package/src/resources/styles.ts +43 -27
  425. package/src/resources/subscribe.ts +1 -1
  426. package/src/resources/support/index.ts +1 -0
  427. package/src/resources/support/support.ts +2 -0
  428. package/src/resources/support/tickets.ts +38 -10
  429. package/src/resources/trends.ts +23 -5
  430. package/src/resources/webhooks.ts +109 -15
  431. package/src/resources/x/account-connection-attempts.ts +1 -1
  432. package/src/resources/x/account-connection-challenges.ts +39 -11
  433. package/src/resources/x/accounts.ts +46 -10
  434. package/src/resources/x/analysis.ts +3947 -0
  435. package/src/resources/x/bookmarks.ts +103 -9
  436. package/src/resources/x/broadcasts.ts +225 -0
  437. package/src/resources/x/communities/communities.ts +743 -141
  438. package/src/resources/x/communities/index.ts +9 -0
  439. package/src/resources/x/communities/join.ts +46 -23
  440. package/src/resources/x/communities/media.ts +251 -0
  441. package/src/resources/x/communities/tweets.ts +427 -20
  442. package/src/resources/x/dm.ts +334 -11
  443. package/src/resources/x/followers.ts +35 -3
  444. package/src/resources/x/index.ts +106 -1
  445. package/src/resources/x/jobs.ts +627 -0
  446. package/src/resources/x/lists.ts +1307 -28
  447. package/src/resources/x/media.ts +24 -12
  448. package/src/resources/x/profile.ts +60 -30
  449. package/src/resources/x/spaces.ts +1076 -0
  450. package/src/resources/x/tweets/index.ts +18 -0
  451. package/src/resources/x/tweets/like.ts +38 -18
  452. package/src/resources/x/tweets/retweet.ts +38 -18
  453. package/src/resources/x/tweets/tweets.ts +3695 -843
  454. package/src/resources/x/users/follow.ts +38 -18
  455. package/src/resources/x/users/index.ts +22 -0
  456. package/src/resources/x/users/users.ts +3687 -465
  457. package/src/resources/x/write-actions.ts +13 -5
  458. package/src/resources/x/x.ts +1227 -15
  459. package/src/streaming.ts +6 -0
  460. package/src/version.ts +1 -1
  461. package/streaming.d.mts +3 -0
  462. package/streaming.d.mts.map +1 -0
  463. package/streaming.d.ts +3 -0
  464. package/streaming.d.ts.map +1 -0
  465. package/streaming.js +9 -0
  466. package/streaming.js.map +1 -0
  467. package/streaming.mjs +6 -0
  468. package/streaming.mjs.map +1 -0
  469. package/version.d.mts +1 -1
  470. package/version.d.ts +1 -1
  471. package/version.js +1 -1
  472. package/version.mjs +1 -1
  473. package/skills/x-twitter-scraper/references/types-rest-api-vs-mcp-field-naming.md +0 -15
@@ -10,40 +10,39 @@ export declare class Tweets extends APIResource {
10
10
  like: LikeAPI.Like;
11
11
  retweet: RetweetAPI.Retweet;
12
12
  /**
13
- * Create tweet
13
+ * Publishes a post through a connected X account.
14
14
  *
15
15
  * @example
16
16
  * ```ts
17
17
  * const tweet = await client.x.tweets.create({
18
18
  * account: '@elonmusk',
19
19
  * 'Idempotency-Key': 'Idempotency-Key',
20
+ * media: ['https://example.com/video.mp4'],
20
21
  * text: 'Just launched our new feature!',
21
22
  * });
22
23
  * ```
23
24
  */
24
25
  create(params: TweetCreateParams, options?: RequestOptions): APIPromise<TweetCreateResponse>;
25
26
  /**
26
- * Get tweet with full text, author, metrics and media
27
+ * Returns one public tweet with author, metrics, and media.
27
28
  *
28
29
  * @example
29
30
  * ```ts
30
31
  * const tweet = await client.x.tweets.retrieve('id');
31
32
  * ```
32
33
  */
33
- retrieve(id: string, options?: RequestOptions): APIPromise<TweetRetrieveResponse>;
34
+ retrieve(id: string, query?: TweetRetrieveParams | null | undefined, options?: RequestOptions): APIPromise<TweetRetrieveResponse>;
34
35
  /**
35
- * Get multiple tweets by IDs
36
+ * Returns public tweet records for the requested IDs.
36
37
  *
37
38
  * @example
38
39
  * ```ts
39
- * const paginatedTweets = await client.x.tweets.list({
40
- * ids: 'ids',
41
- * });
40
+ * const tweets = await client.x.tweets.list({ ids: 'ids' });
42
41
  * ```
43
42
  */
44
- list(query: TweetListParams, options?: RequestOptions): APIPromise<Shared.PaginatedTweets>;
43
+ list(query: TweetListParams, options?: RequestOptions): APIPromise<TweetListResponse>;
45
44
  /**
46
- * Delete tweet
45
+ * Deletes an authored post through a connected X account.
47
46
  *
48
47
  * @example
49
48
  * ```ts
@@ -55,9 +54,31 @@ export declare class Tweets extends APIResource {
55
54
  */
56
55
  delete(id: string, params: TweetDeleteParams, options?: RequestOptions): APIPromise<TweetDeleteResponse>;
57
56
  /**
58
- * Returns liker profiles that X makes visible for the post. X can withhold liker
59
- * identities even when the post reports likes. In that case this endpoint returns
60
- * 424 `favoriters_unavailable` instead of a misleading empty success.
57
+ * Returns whether 1 account reposted the post, read from its newest posts. A
58
+ * repost older than the posts read returns false with complete false. Each check
59
+ * costs 1 credit.
60
+ *
61
+ * @example
62
+ * ```ts
63
+ * const response = await client.x.tweets.checkRepost('id', {
64
+ * user: 'nasa',
65
+ * });
66
+ * ```
67
+ */
68
+ checkRepost(id: string, query: TweetCheckRepostParams, options?: RequestOptions): APIPromise<TweetCheckRepostResponse>;
69
+ /**
70
+ * Returns the HTML that X gives websites to embed one public tweet, with the
71
+ * tweet's link and author.
72
+ *
73
+ * @example
74
+ * ```ts
75
+ * const response = await client.x.tweets.embed('id');
76
+ * ```
77
+ */
78
+ embed(id: string, query?: TweetEmbedParams | null | undefined, options?: RequestOptions): APIPromise<TweetEmbedResponse>;
79
+ /**
80
+ * Likers your X account sees, else 424 `account_required`. X shows likers only to
81
+ * the post author.
61
82
  *
62
83
  * @example
63
84
  * ```ts
@@ -68,7 +89,30 @@ export declare class Tweets extends APIResource {
68
89
  */
69
90
  getFavoriters(id: string, query?: TweetGetFavoritersParams | null | undefined, options?: RequestOptions): APIPromise<Shared.PaginatedUsers>;
70
91
  /**
71
- * List quote tweets of a tweet
92
+ * Returns the replies the post's author hid, oldest first, with the replies to
93
+ * them. A post without hidden replies returns an empty list.
94
+ *
95
+ * @example
96
+ * ```ts
97
+ * const paginatedTweets =
98
+ * await client.x.tweets.getHiddenReplies('id');
99
+ * ```
100
+ */
101
+ getHiddenReplies(id: string, query?: TweetGetHiddenRepliesParams | null | undefined, options?: RequestOptions): APIPromise<Shared.PaginatedTweets>;
102
+ /**
103
+ * Returns engagement insights for one tweet: engagements per hour since it went
104
+ * up, per view and per follower of its author, and how far it spread. Each report
105
+ * costs 1 credit, whatever it reads.
106
+ *
107
+ * @example
108
+ * ```ts
109
+ * const response = await client.x.tweets.getInsights('id');
110
+ * ```
111
+ */
112
+ getInsights(id: string, query?: TweetGetInsightsParams | null | undefined, options?: RequestOptions): APIPromise<TweetGetInsightsResponse>;
113
+ /**
114
+ * Returns public posts quoting the tweet, newest first, replies included. Drop
115
+ * them with replies=exclude. Send queryType=Top for the quotes X ranks highest.
72
116
  *
73
117
  * @example
74
118
  * ```ts
@@ -79,9 +123,9 @@ export declare class Tweets extends APIResource {
79
123
  */
80
124
  getQuotes(id: string, query?: TweetGetQuotesParams | null | undefined, options?: RequestOptions): APIPromise<Shared.PaginatedTweets>;
81
125
  /**
82
- * Returns direct replies. Omit mode for automatic maximum coverage with resumable
83
- * pagination. Complete mode returns nested replies, diagnostics, and 424 when
84
- * direct coverage stays below 80%.
126
+ * Returns direct replies with automatic maximum coverage and pagination. A retweet
127
+ * ID returns replies to the original post. Complete mode adds nested replies,
128
+ * diagnostics, and a 424 below 80% coverage. A fully read time window returns 200.
85
129
  *
86
130
  * @example
87
131
  * ```ts
@@ -90,7 +134,22 @@ export declare class Tweets extends APIResource {
90
134
  */
91
135
  getReplies(id: string, query?: TweetGetRepliesParams | null | undefined, options?: RequestOptions): APIPromise<TweetGetRepliesResponse>;
92
136
  /**
93
- * List users who retweeted a tweet
137
+ * Returns the user IDs of a post's reposters, in the order & pages of
138
+ * /x/tweets/{id}/retweeters. Use it when you need IDs only. Each ID costs 1
139
+ * credit. A post nobody reposted returns an empty list for free.
140
+ *
141
+ * @example
142
+ * ```ts
143
+ * const response = await client.x.tweets.getRetweeterIds(
144
+ * 'id',
145
+ * );
146
+ * ```
147
+ */
148
+ getRetweeterIds(id: string, query?: TweetGetRetweeterIDsParams | null | undefined, options?: RequestOptions): APIPromise<TweetGetRetweeterIDsResponse>;
149
+ /**
150
+ * Lists reposters. includeRetweetTimestamp adds retweeted_at in Unix seconds. Null
151
+ * means no matching repost on the newest profile page or lookup failure. The
152
+ * created field means account creation. Timestamp lookups add latency.
94
153
  *
95
154
  * @example
96
155
  * ```ts
@@ -101,7 +160,19 @@ export declare class Tweets extends APIResource {
101
160
  */
102
161
  getRetweeters(id: string, query?: TweetGetRetweetersParams | null | undefined, options?: RequestOptions): APIPromise<Shared.PaginatedUsers>;
103
162
  /**
104
- * Get full conversation thread for a tweet
163
+ * Returns the caption tracks of one public tweet's videos, as X's player reads
164
+ * them. Each track has its language, name, timed cues, and full text. A tweet
165
+ * without video, or a video without captions, returns no track and costs nothing.
166
+ *
167
+ * @example
168
+ * ```ts
169
+ * const response = await client.x.tweets.getSubtitles('id');
170
+ * ```
171
+ */
172
+ getSubtitles(id: string, query?: TweetGetSubtitlesParams | null | undefined, options?: RequestOptions): APIPromise<TweetGetSubtitlesResponse>;
173
+ /**
174
+ * Returns visible posts from the selected conversation thread. Results exclude X
175
+ * ads.
105
176
  *
106
177
  * @example
107
178
  * ```ts
@@ -112,9 +183,34 @@ export declare class Tweets extends APIResource {
112
183
  */
113
184
  getThread(id: string, query?: TweetGetThreadParams | null | undefined, options?: RequestOptions): APIPromise<Shared.PaginatedTweets>;
114
185
  /**
115
- * No-mode search maximizes coverage. New cursorless `Latest` sessions return rows
116
- * newest-first across cursor pages. Existing cursors preserve their established
117
- * ordering.
186
+ * Returns the tweets X ranks highest by one metric over the last day, week or
187
+ * month, as x.com's Inspiration page shows them. Covers all of X unless you pick a
188
+ * country or a language. Pages hold up to 20 tweets, and the list ends at 100.
189
+ * Each tweet costs 1 credit.
190
+ *
191
+ * @example
192
+ * ```ts
193
+ * const paginatedTweets = await client.x.tweets.listTop();
194
+ * ```
195
+ */
196
+ listTop(query?: TweetListTopParams | null | undefined, options?: RequestOptions): APIPromise<Shared.PaginatedTweets>;
197
+ /**
198
+ * Returns where each t.co link leads, as X's own redirect says. Xquik reads the
199
+ * redirect and never visits the target site. A link t.co does not have comes back
200
+ * without `resolvedUrl` and costs nothing. A link X does not answer for in time
201
+ * comes back in `unprocessedUrls`, free. Each resolved link costs 1 credit.
202
+ *
203
+ * @example
204
+ * ```ts
205
+ * const response = await client.x.tweets.resolveLinks({
206
+ * urls: 'https://t.co/Xe1nm2pkSX',
207
+ * });
208
+ * ```
209
+ */
210
+ resolveLinks(query: TweetResolveLinksParams, options?: RequestOptions): APIPromise<TweetResolveLinksResponse>;
211
+ /**
212
+ * Tweets include authors, like counts, media, URLs & cursors. Omit mode for
213
+ * maximum coverage. Reuse next_cursor with unchanged filters.
118
214
  *
119
215
  * @example
120
216
  * ```ts
@@ -122,10 +218,22 @@ export declare class Tweets extends APIResource {
122
218
  * ```
123
219
  */
124
220
  search(query: TweetSearchParams, options?: RequestOptions): APIPromise<TweetSearchResponse>;
221
+ /**
222
+ * Returns X's own translation of one public tweet into the language you pick, with
223
+ * the links, mentions, and tags X places in the translated text.
224
+ *
225
+ * @example
226
+ * ```ts
227
+ * const response = await client.x.tweets.translate('id', {
228
+ * language: 'tr',
229
+ * });
230
+ * ```
231
+ */
232
+ translate(id: string, query: TweetTranslateParams, options?: RequestOptions): APIPromise<TweetTranslateResponse>;
125
233
  }
126
234
  /**
127
- * Tweet author profile. The lookup route always includes follower count and
128
- * verification state. Other profile fields appear when available.
235
+ * Author profile. Lookups always include follower count & verification. Other
236
+ * fields depend on availability.
129
237
  */
130
238
  export interface TweetAuthor extends Shared.UserProfile {
131
239
  followers: number;
@@ -145,18 +253,37 @@ export interface TweetDetail {
145
253
  text: string;
146
254
  viewCount: number;
147
255
  /**
148
- * Article metadata attached to a tweet.
256
+ * Describes an X Article preview and its lifecycle metadata.
149
257
  */
150
258
  article?: TweetDetail.Article;
151
259
  /**
152
- * Tweet author profile. The lookup route always includes follower count and
153
- * verification state. Other profile fields appear when available.
260
+ * Author profile. Lookups always include follower count & verification. Other
261
+ * fields depend on availability.
154
262
  */
155
263
  author?: TweetAuthor;
156
264
  /**
157
- * Public card metadata attached to a tweet.
265
+ * Why the tweet has no author. X serves a suspended or deleted account as an
266
+ * unavailable user with a reason such as Suspended or NotFound. Omitted when the
267
+ * author is available.
268
+ */
269
+ authorUnavailable?: TweetDetail.AuthorUnavailable;
270
+ /**
271
+ * Describes a public card and its referenced profiles.
158
272
  */
159
273
  card?: TweetDetail.Card;
274
+ /**
275
+ * Price charts the author attached under the post, 1 per cashtag. Absent when the
276
+ * post has none. X may send a cashtag without a chart window.
277
+ */
278
+ cashtagAttachments?: Array<TweetDetail.CashtagAttachment>;
279
+ /**
280
+ * Community ID.
281
+ */
282
+ communityId?: string;
283
+ /**
284
+ * Community name. Present when X sends it with the post.
285
+ */
286
+ communityName?: string;
160
287
  /**
161
288
  * Community Note presentation metadata returned by X.
162
289
  */
@@ -167,59 +294,78 @@ export interface TweetDetail {
167
294
  */
168
295
  contentDisclosure?: Shared.ContentDisclosure;
169
296
  /**
170
- * ID of the root tweet in the conversation thread
297
+ * Reply policy & conversation owner.
171
298
  */
299
+ conversationControl?: TweetDetail.ConversationControl;
172
300
  conversationId?: string;
173
- createdAt?: string;
174
301
  /**
175
- * Start and end offsets for rendered tweet text
302
+ * Author-published point, with longitude before latitude.
176
303
  */
304
+ coordinates?: TweetDetail.Coordinates;
305
+ createdAt?: string;
177
306
  displayTextRange?: Array<number>;
178
307
  /**
179
- * Edit history metadata returned by X.
308
+ * Lists edit-chain identifiers and the remaining edit window.
180
309
  */
181
310
  edit?: TweetDetail.Edit;
182
311
  /**
183
- * Parsed entities from the tweet text (URLs, mentions, hashtags, media)
312
+ * Lists hashtags, symbols, links, and mentions from tweet text.
184
313
  */
185
- entities?: {
186
- [key: string]: unknown;
187
- };
314
+ entities?: TweetDetail.Entities;
188
315
  /**
189
- * Tweet ID being replied to
316
+ * Marks a subscriber-only post with the creator whose subscription unlocks it.
317
+ * Non-subscribers get the preview text & the subscribe link. Omitted on public
318
+ * posts.
190
319
  */
191
- inReplyToId?: string;
320
+ exclusiveContent?: TweetDetail.ExclusiveContent;
192
321
  /**
193
- * User ID being replied to
322
+ * Author-published point, with latitude before longitude.
194
323
  */
195
- inReplyToUserId?: string;
324
+ geo?: TweetDetail.Geo;
196
325
  /**
197
- * Username being replied to
326
+ * Public metadata whose fields are defined by X.
198
327
  */
199
- inReplyToUsername?: string;
328
+ grokShareAttachment?: {
329
+ [key: string]: unknown;
330
+ };
200
331
  /**
201
- * Whether replies are limited for this tweet
332
+ * Grok's translation of the post, as X shows it.
202
333
  */
203
- isLimitedReply?: boolean;
334
+ grokTranslatedPost?: {
335
+ [key: string]: unknown;
336
+ };
204
337
  /**
205
- * Whether this is a Note Tweet (long-form post, up to 25,000 characters)
338
+ * Whether X holds Community Notes on the post, shown or not.
206
339
  */
207
- isNoteTweet?: boolean;
340
+ hasCommunityNotes?: boolean;
341
+ inReplyToId?: string;
342
+ inReplyToUserId?: string;
343
+ inReplyToUsername?: string;
208
344
  /**
209
- * Whether this tweet quotes another tweet
345
+ * The notice x.com covers the post with until the reader views it, such as X's
346
+ * public interest notice on a post that broke its rules but stays up.
210
347
  */
348
+ interstitial?: TweetDetail.Interstitial;
349
+ isLimitedReply?: boolean;
350
+ isNoteTweet?: boolean;
351
+ isPinned?: boolean;
211
352
  isQuoteStatus?: boolean;
212
- /**
213
- * Whether this tweet is a reply to another tweet
214
- */
215
353
  isReply?: boolean;
354
+ isRetweet?: boolean;
216
355
  isTranslatable?: boolean;
217
356
  /**
218
- * Tweet language code
357
+ * Public metadata whose fields are defined by X.
219
358
  */
359
+ jetfuelAttachment?: {
360
+ [key: string]: unknown;
361
+ };
220
362
  lang?: string;
221
363
  /**
222
- * Attached media items, omitted when the tweet has no media
364
+ * Public restrictions & prompts.
365
+ */
366
+ limitedActions?: Array<TweetDetail.LimitedAction>;
367
+ /**
368
+ * Media, omitted when unavailable.
223
369
  */
224
370
  media?: Array<Shared.TweetMedia>;
225
371
  /**
@@ -227,60 +373,193 @@ export interface TweetDetail {
227
373
  */
228
374
  noteTweet?: TweetDetail.NoteTweet;
229
375
  /**
230
- * Public place metadata attached to a tweet.
376
+ * A parent, quoted or retweeted tweet. It has the TweetPublicData fields and an
377
+ * author. Nesting stops after 4 levels.
378
+ */
379
+ parentTweet?: Shared.EmbeddedTweet;
380
+ /**
381
+ * Describes public place metadata on a geotagged tweet.
231
382
  */
232
383
  place?: TweetDetail.Place;
233
384
  possiblySensitive?: boolean;
385
+ /**
386
+ * Public metadata whose fields are defined by X.
387
+ */
388
+ postCta?: {
389
+ [key: string]: unknown;
390
+ };
234
391
  /**
235
392
  * Engagement counts retained from a prior tweet edit.
236
393
  */
237
394
  previousCounts?: TweetDetail.PreviousCounts;
238
395
  /**
239
- * Quoted or retweeted tweet context. Every object includes id, text, and
240
- * engagement metrics. A zero metric can mean X did not report the count. Author,
241
- * media, and conversation fields appear when available.
396
+ * A parent, quoted or retweeted tweet. It has the TweetPublicData fields and an
397
+ * author. Nesting stops after 4 levels.
242
398
  */
243
399
  quoted_tweet?: Shared.EmbeddedTweet;
400
+ quotedTweetId?: string;
401
+ /**
402
+ * The quoted post's link, kept when X withholds that post.
403
+ */
404
+ quotedTweetPermalink?: TweetDetail.QuotedTweetPermalink;
405
+ /**
406
+ * Why X shows no quoted post. Omitted when X names no reason, as its legacy
407
+ * answers never do.
408
+ */
409
+ quotedTweetUnavailable?: TweetDetail.QuotedTweetUnavailable;
244
410
  /**
245
- * Quoted or retweeted tweet context. Every object includes id, text, and
246
- * engagement metrics. A zero metric can mean X did not report the count. Author,
247
- * media, and conversation fields appear when available.
411
+ * Public post & user this reaction references.
412
+ */
413
+ reactionContext?: TweetDetail.ReactionContext;
414
+ /**
415
+ * A parent, quoted or retweeted tweet. It has the TweetPublicData fields and an
416
+ * author. Nesting stops after 4 levels.
248
417
  */
249
418
  retweeted_tweet?: Shared.EmbeddedTweet;
250
419
  /**
251
- * Client application used to post this tweet
420
+ * Repost event time in UTC. Null when unavailable; omitted for other posts.
421
+ */
422
+ retweetedAt?: string | null;
423
+ /**
424
+ * Public metadata whose fields are defined by X.
425
+ */
426
+ scopes?: {
427
+ [key: string]: unknown;
428
+ };
429
+ /**
430
+ * The app the post was sent from, as X labels it. X sends it for some posts only.
252
431
  */
253
432
  source?: string;
254
433
  /**
255
- * Tweet result type
434
+ * Game metadata attached to this post.
256
435
  */
436
+ sportsContext?: TweetDetail.SportsContext;
437
+ /**
438
+ * The Subscriber badge X shows on a reply. The reply's author subscribes to the
439
+ * creator who started the conversation. Omitted on a post without the badge.
440
+ */
441
+ subscriberBadge?: TweetDetail.SubscriberBadge;
442
+ /**
443
+ * Where `text` matches the search, on each row a search read. Offsets count code
444
+ * points of `text`, as `displayTextRange` does. Empty when X marks nothing in the
445
+ * post. X marks matches only in a post's first 280 characters.
446
+ */
447
+ textHighlights?: Array<TweetDetail.TextHighlight>;
448
+ /**
449
+ * Public visibility notice attached to an available tweet.
450
+ */
451
+ tombstone?: TweetDetail.Tombstone;
257
452
  type?: string;
258
453
  /**
259
- * Tweet permalink URL
454
+ * The author's ID when X withholds the author's profile.
455
+ */
456
+ unavailableAuthorId?: string;
457
+ /**
458
+ * User IDs that left this conversation.
260
459
  */
460
+ unmentionedUserIds?: Array<string>;
261
461
  url?: string;
262
462
  viewState?: string;
263
463
  }
264
464
  export declare namespace TweetDetail {
265
465
  /**
266
- * Article metadata attached to a tweet.
466
+ * Describes an X Article preview and its lifecycle metadata.
267
467
  */
268
468
  interface Article {
269
469
  id?: string;
470
+ /**
471
+ * Public metadata whose fields are defined by X.
472
+ */
473
+ coverMedia?: {
474
+ [key: string]: unknown;
475
+ };
270
476
  coverMediaUrl?: string;
477
+ /**
478
+ * Public metadata whose fields are defined by X.
479
+ */
480
+ lifecycleState?: {
481
+ [key: string]: unknown;
482
+ };
483
+ /**
484
+ * Public metadata whose fields are defined by X.
485
+ */
486
+ metadata?: {
487
+ [key: string]: unknown;
488
+ };
271
489
  previewText?: string;
272
490
  title?: string;
273
491
  }
274
492
  /**
275
- * Public card metadata attached to a tweet.
493
+ * Why the tweet has no author. X serves a suspended or deleted account as an
494
+ * unavailable user with a reason such as Suspended or NotFound. Omitted when the
495
+ * author is available.
496
+ */
497
+ interface AuthorUnavailable {
498
+ /**
499
+ * X's reason code.
500
+ */
501
+ reason: string;
502
+ /**
503
+ * X's notice text for the reason.
504
+ */
505
+ message?: string;
506
+ }
507
+ /**
508
+ * Describes a public card and its referenced profiles.
276
509
  */
277
510
  interface Card {
278
511
  id?: string;
512
+ /**
513
+ * Public metadata whose fields are defined by X.
514
+ */
279
515
  bindingValues?: {
280
516
  [key: string]: unknown;
281
517
  };
282
518
  name?: string;
519
+ /**
520
+ * Public metadata whose fields are defined by X.
521
+ */
522
+ platform?: {
523
+ [key: string]: unknown;
524
+ };
283
525
  url?: string;
526
+ /**
527
+ * Unresolved card user references.
528
+ */
529
+ userReferenceErrors?: Array<Card.UserReferenceError>;
530
+ userReferences?: Array<Shared.UserProfile>;
531
+ }
532
+ namespace Card {
533
+ interface UserReferenceError {
534
+ message?: string;
535
+ reason?: string;
536
+ }
537
+ }
538
+ interface CashtagAttachment {
539
+ /**
540
+ * The cashtag with its `$`.
541
+ */
542
+ cashtag: string;
543
+ /**
544
+ * Span of each candle.
545
+ */
546
+ candleSize?: string;
547
+ /**
548
+ * Time of the chart's last price.
549
+ */
550
+ endTime?: string;
551
+ /**
552
+ * X's size for the chart.
553
+ */
554
+ sizeVariant?: number;
555
+ /**
556
+ * Time of the chart's first candle.
557
+ */
558
+ startTime?: string;
559
+ /**
560
+ * Span the chart covers.
561
+ */
562
+ timeframe?: string;
284
563
  }
285
564
  /**
286
565
  * Community Note presentation metadata returned by X.
@@ -289,44 +568,584 @@ export declare namespace TweetDetail {
289
568
  id?: string;
290
569
  destinationUrl?: string;
291
570
  footer?: string;
571
+ footerIconType?: string;
572
+ iconType?: string;
573
+ /**
574
+ * Public metadata whose fields are defined by X.
575
+ */
576
+ metadata?: {
577
+ [key: string]: unknown;
578
+ };
292
579
  shortTitle?: string;
293
580
  subtitle?: string;
294
581
  title?: string;
295
582
  visualStyle?: string;
296
583
  }
297
584
  /**
298
- * Edit history metadata returned by X.
585
+ * Reply policy & conversation owner.
586
+ */
587
+ interface ConversationControl {
588
+ /**
589
+ * Regions whose accounts may reply, as country codes. Sent with the
590
+ * `country_of_origin` mode.
591
+ */
592
+ allowedCountryCodes?: Array<string>;
593
+ inviteViaMention?: boolean;
594
+ /**
595
+ * Reply policy from X's newer field, such as `my_network`, `premium` or
596
+ * `country_of_origin`. Omitted when X sends none.
597
+ */
598
+ mode?: string;
599
+ /**
600
+ * The conversation owner's account ID.
601
+ */
602
+ ownerId?: string;
603
+ ownerUsername?: string;
604
+ policy?: string;
605
+ }
606
+ /**
607
+ * Author-published point, with longitude before latitude.
608
+ */
609
+ interface Coordinates {
610
+ coordinates: Array<number>;
611
+ type: 'Point';
612
+ }
613
+ /**
614
+ * Lists edit-chain identifiers and the remaining edit window.
299
615
  */
300
616
  interface Edit {
301
617
  editableUntilMsecs?: string;
302
618
  editTweetIds?: Array<string>;
619
+ initialTweetId?: string;
303
620
  }
304
621
  /**
305
- * Complete Note Tweet content and rich-text metadata.
622
+ * Lists hashtags, symbols, links, and mentions from tweet text.
306
623
  */
307
- interface NoteTweet {
308
- text: string;
309
- id?: string;
310
- entities?: {
311
- [key: string]: unknown;
312
- };
313
- isExpandable?: boolean;
314
- richtextTags?: Array<NoteTweet.RichtextTag>;
624
+ interface Entities {
625
+ hashtags?: Array<Entities.Hashtag>;
626
+ smarttags?: Array<Entities.Smarttag>;
627
+ symbols?: Array<Entities.Symbol>;
628
+ timestamps?: Array<Entities.Timestamp>;
629
+ urls?: Array<Entities.URL>;
630
+ user_mentions?: Array<Entities.UserMention>;
315
631
  }
316
- namespace NoteTweet {
317
- interface RichtextTag {
318
- fromIndex: number;
319
- toIndex: number;
320
- types: Array<string>;
632
+ namespace Entities {
633
+ /**
634
+ * Provides hashtag text and source offsets within a tweet.
635
+ */
636
+ interface Hashtag {
637
+ text: string;
638
+ indices?: Array<number>;
639
+ /**
640
+ * X's SmartTag for a cashtag, smarttag or hashtag. Xquik leaves out X's trading
641
+ * platforms, which differ by reader.
642
+ */
643
+ tag?: Hashtag.Tag;
644
+ }
645
+ namespace Hashtag {
646
+ /**
647
+ * X's SmartTag for a cashtag, smarttag or hashtag. Xquik leaves out X's trading
648
+ * platforms, which differ by reader.
649
+ */
650
+ interface Tag {
651
+ /**
652
+ * X's ID for the SmartTag.
653
+ */
654
+ id?: string;
655
+ info?: Tag.Info;
656
+ }
657
+ namespace Tag {
658
+ interface Info {
659
+ info?: Info.Info;
660
+ }
661
+ namespace Info {
662
+ interface Info {
663
+ /**
664
+ * Whether X marks the SmartTag active.
665
+ */
666
+ active?: boolean;
667
+ name?: string;
668
+ ticker?: string;
669
+ }
670
+ }
671
+ }
672
+ }
673
+ /**
674
+ * Indexed smart-tag, cashtag, or video timestamp metadata.
675
+ */
676
+ interface Smarttag {
677
+ indices?: Array<number>;
678
+ seconds?: number;
679
+ /**
680
+ * X's SmartTag for a cashtag, smarttag or hashtag. Xquik leaves out X's trading
681
+ * platforms, which differ by reader.
682
+ */
683
+ tag?: Smarttag.Tag;
684
+ text?: string;
685
+ }
686
+ namespace Smarttag {
687
+ /**
688
+ * X's SmartTag for a cashtag, smarttag or hashtag. Xquik leaves out X's trading
689
+ * platforms, which differ by reader.
690
+ */
691
+ interface Tag {
692
+ /**
693
+ * X's ID for the SmartTag.
694
+ */
695
+ id?: string;
696
+ info?: Tag.Info;
697
+ }
698
+ namespace Tag {
699
+ interface Info {
700
+ info?: Info.Info;
701
+ }
702
+ namespace Info {
703
+ interface Info {
704
+ /**
705
+ * Whether X marks the SmartTag active.
706
+ */
707
+ active?: boolean;
708
+ name?: string;
709
+ ticker?: string;
710
+ }
711
+ }
712
+ }
713
+ }
714
+ /**
715
+ * Indexed smart-tag, cashtag, or video timestamp metadata.
716
+ */
717
+ interface Symbol {
718
+ indices?: Array<number>;
719
+ seconds?: number;
720
+ /**
721
+ * X's SmartTag for a cashtag, smarttag or hashtag. Xquik leaves out X's trading
722
+ * platforms, which differ by reader.
723
+ */
724
+ tag?: Symbol.Tag;
725
+ text?: string;
726
+ }
727
+ namespace Symbol {
728
+ /**
729
+ * X's SmartTag for a cashtag, smarttag or hashtag. Xquik leaves out X's trading
730
+ * platforms, which differ by reader.
731
+ */
732
+ interface Tag {
733
+ /**
734
+ * X's ID for the SmartTag.
735
+ */
736
+ id?: string;
737
+ info?: Tag.Info;
738
+ }
739
+ namespace Tag {
740
+ interface Info {
741
+ info?: Info.Info;
742
+ }
743
+ namespace Info {
744
+ interface Info {
745
+ /**
746
+ * Whether X marks the SmartTag active.
747
+ */
748
+ active?: boolean;
749
+ name?: string;
750
+ ticker?: string;
751
+ }
752
+ }
753
+ }
754
+ }
755
+ /**
756
+ * Indexed smart-tag, cashtag, or video timestamp metadata.
757
+ */
758
+ interface Timestamp {
759
+ indices?: Array<number>;
760
+ seconds?: number;
761
+ /**
762
+ * X's SmartTag for a cashtag, smarttag or hashtag. Xquik leaves out X's trading
763
+ * platforms, which differ by reader.
764
+ */
765
+ tag?: Timestamp.Tag;
766
+ text?: string;
767
+ }
768
+ namespace Timestamp {
769
+ /**
770
+ * X's SmartTag for a cashtag, smarttag or hashtag. Xquik leaves out X's trading
771
+ * platforms, which differ by reader.
772
+ */
773
+ interface Tag {
774
+ /**
775
+ * X's ID for the SmartTag.
776
+ */
777
+ id?: string;
778
+ info?: Tag.Info;
779
+ }
780
+ namespace Tag {
781
+ interface Info {
782
+ info?: Info.Info;
783
+ }
784
+ namespace Info {
785
+ interface Info {
786
+ /**
787
+ * Whether X marks the SmartTag active.
788
+ */
789
+ active?: boolean;
790
+ name?: string;
791
+ ticker?: string;
792
+ }
793
+ }
794
+ }
795
+ }
796
+ /**
797
+ * Provides shortened, display, and expanded URLs from tweet text.
798
+ */
799
+ interface URL {
800
+ display_url?: string;
801
+ expanded_url?: string;
802
+ indices?: Array<number>;
803
+ url?: string;
804
+ }
805
+ /**
806
+ * Provides profile identity and source offsets for a mention.
807
+ */
808
+ interface UserMention {
809
+ screen_name: string;
810
+ id_str?: string;
811
+ indices?: Array<number>;
812
+ name?: string;
321
813
  }
322
814
  }
323
815
  /**
324
- * Public place metadata attached to a tweet.
816
+ * Marks a subscriber-only post with the creator whose subscription unlocks it.
817
+ * Non-subscribers get the preview text & the subscribe link. Omitted on public
818
+ * posts.
325
819
  */
326
- interface Place {
327
- id?: string;
328
- boundingBox?: {
329
- [key: string]: unknown;
820
+ interface ExclusiveContent {
821
+ /**
822
+ * Username of the creator whose subscription unlocks the post.
823
+ */
824
+ creatorUserName: string;
825
+ /**
826
+ * Subscribe link X shows non-subscribers. Omitted when X serves the full post.
827
+ */
828
+ subscribeUrl?: string;
829
+ }
830
+ /**
831
+ * Author-published point, with latitude before longitude.
832
+ */
833
+ interface Geo {
834
+ coordinates: Array<number>;
835
+ type: 'Point';
836
+ }
837
+ /**
838
+ * The notice x.com covers the post with until the reader views it, such as X's
839
+ * public interest notice on a post that broke its rules but stays up.
840
+ */
841
+ interface Interstitial {
842
+ /**
843
+ * How x.com shows the notice. `NonCompliant` marks a post that broke X's rules.
844
+ */
845
+ displayType?: string;
846
+ text?: Interstitial.Text;
847
+ }
848
+ namespace Interstitial {
849
+ interface Text {
850
+ /**
851
+ * Links inside the notice, by character range.
852
+ */
853
+ entities?: Array<Text.Entity>;
854
+ /**
855
+ * Whether X writes it right to left.
856
+ */
857
+ rtl?: boolean;
858
+ /**
859
+ * The notice's text.
860
+ */
861
+ text?: string;
862
+ }
863
+ namespace Text {
864
+ interface Entity {
865
+ /**
866
+ * Whole number from 0.
867
+ */
868
+ fromIndex?: number;
869
+ ref?: Entity.Ref;
870
+ /**
871
+ * Whole number from 0.
872
+ */
873
+ toIndex?: number;
874
+ }
875
+ namespace Entity {
876
+ interface Ref {
877
+ type?: string;
878
+ url?: string;
879
+ urlType?: string;
880
+ }
881
+ }
882
+ }
883
+ }
884
+ interface LimitedAction {
885
+ action?: string;
886
+ prompt?: LimitedAction.Prompt;
887
+ }
888
+ namespace LimitedAction {
889
+ interface Prompt {
890
+ ctaType?: string;
891
+ headline?: string;
892
+ /**
893
+ * Public metadata whose fields are defined by X.
894
+ */
895
+ metadata?: {
896
+ [key: string]: unknown;
897
+ };
898
+ subtext?: string;
899
+ }
900
+ }
901
+ /**
902
+ * Complete Note Tweet content and rich-text metadata.
903
+ */
904
+ interface NoteTweet {
905
+ text: string;
906
+ /**
907
+ * X's global ID of the Note, base64 of `NoteTweet:<noteId>`.
908
+ */
909
+ id?: string;
910
+ /**
911
+ * Lists hashtags, symbols, links, and mentions from tweet text.
912
+ */
913
+ entities?: NoteTweet.Entities;
914
+ /**
915
+ * Inline media positions in the Note Tweet text.
916
+ */
917
+ inlineMedia?: Array<NoteTweet.InlineMedia>;
918
+ isExpandable?: boolean;
919
+ /**
920
+ * The Note's own ID, apart from the post's.
921
+ */
922
+ noteId?: string;
923
+ richtextTags?: Array<NoteTweet.RichtextTag>;
924
+ }
925
+ namespace NoteTweet {
926
+ /**
927
+ * Lists hashtags, symbols, links, and mentions from tweet text.
928
+ */
929
+ interface Entities {
930
+ hashtags?: Array<Entities.Hashtag>;
931
+ smarttags?: Array<Entities.Smarttag>;
932
+ symbols?: Array<Entities.Symbol>;
933
+ timestamps?: Array<Entities.Timestamp>;
934
+ urls?: Array<Entities.URL>;
935
+ user_mentions?: Array<Entities.UserMention>;
936
+ }
937
+ namespace Entities {
938
+ /**
939
+ * Provides hashtag text and source offsets within a tweet.
940
+ */
941
+ interface Hashtag {
942
+ text: string;
943
+ indices?: Array<number>;
944
+ /**
945
+ * X's SmartTag for a cashtag, smarttag or hashtag. Xquik leaves out X's trading
946
+ * platforms, which differ by reader.
947
+ */
948
+ tag?: Hashtag.Tag;
949
+ }
950
+ namespace Hashtag {
951
+ /**
952
+ * X's SmartTag for a cashtag, smarttag or hashtag. Xquik leaves out X's trading
953
+ * platforms, which differ by reader.
954
+ */
955
+ interface Tag {
956
+ /**
957
+ * X's ID for the SmartTag.
958
+ */
959
+ id?: string;
960
+ info?: Tag.Info;
961
+ }
962
+ namespace Tag {
963
+ interface Info {
964
+ info?: Info.Info;
965
+ }
966
+ namespace Info {
967
+ interface Info {
968
+ /**
969
+ * Whether X marks the SmartTag active.
970
+ */
971
+ active?: boolean;
972
+ name?: string;
973
+ ticker?: string;
974
+ }
975
+ }
976
+ }
977
+ }
978
+ /**
979
+ * Indexed smart-tag, cashtag, or video timestamp metadata.
980
+ */
981
+ interface Smarttag {
982
+ indices?: Array<number>;
983
+ seconds?: number;
984
+ /**
985
+ * X's SmartTag for a cashtag, smarttag or hashtag. Xquik leaves out X's trading
986
+ * platforms, which differ by reader.
987
+ */
988
+ tag?: Smarttag.Tag;
989
+ text?: string;
990
+ }
991
+ namespace Smarttag {
992
+ /**
993
+ * X's SmartTag for a cashtag, smarttag or hashtag. Xquik leaves out X's trading
994
+ * platforms, which differ by reader.
995
+ */
996
+ interface Tag {
997
+ /**
998
+ * X's ID for the SmartTag.
999
+ */
1000
+ id?: string;
1001
+ info?: Tag.Info;
1002
+ }
1003
+ namespace Tag {
1004
+ interface Info {
1005
+ info?: Info.Info;
1006
+ }
1007
+ namespace Info {
1008
+ interface Info {
1009
+ /**
1010
+ * Whether X marks the SmartTag active.
1011
+ */
1012
+ active?: boolean;
1013
+ name?: string;
1014
+ ticker?: string;
1015
+ }
1016
+ }
1017
+ }
1018
+ }
1019
+ /**
1020
+ * Indexed smart-tag, cashtag, or video timestamp metadata.
1021
+ */
1022
+ interface Symbol {
1023
+ indices?: Array<number>;
1024
+ seconds?: number;
1025
+ /**
1026
+ * X's SmartTag for a cashtag, smarttag or hashtag. Xquik leaves out X's trading
1027
+ * platforms, which differ by reader.
1028
+ */
1029
+ tag?: Symbol.Tag;
1030
+ text?: string;
1031
+ }
1032
+ namespace Symbol {
1033
+ /**
1034
+ * X's SmartTag for a cashtag, smarttag or hashtag. Xquik leaves out X's trading
1035
+ * platforms, which differ by reader.
1036
+ */
1037
+ interface Tag {
1038
+ /**
1039
+ * X's ID for the SmartTag.
1040
+ */
1041
+ id?: string;
1042
+ info?: Tag.Info;
1043
+ }
1044
+ namespace Tag {
1045
+ interface Info {
1046
+ info?: Info.Info;
1047
+ }
1048
+ namespace Info {
1049
+ interface Info {
1050
+ /**
1051
+ * Whether X marks the SmartTag active.
1052
+ */
1053
+ active?: boolean;
1054
+ name?: string;
1055
+ ticker?: string;
1056
+ }
1057
+ }
1058
+ }
1059
+ }
1060
+ /**
1061
+ * Indexed smart-tag, cashtag, or video timestamp metadata.
1062
+ */
1063
+ interface Timestamp {
1064
+ indices?: Array<number>;
1065
+ seconds?: number;
1066
+ /**
1067
+ * X's SmartTag for a cashtag, smarttag or hashtag. Xquik leaves out X's trading
1068
+ * platforms, which differ by reader.
1069
+ */
1070
+ tag?: Timestamp.Tag;
1071
+ text?: string;
1072
+ }
1073
+ namespace Timestamp {
1074
+ /**
1075
+ * X's SmartTag for a cashtag, smarttag or hashtag. Xquik leaves out X's trading
1076
+ * platforms, which differ by reader.
1077
+ */
1078
+ interface Tag {
1079
+ /**
1080
+ * X's ID for the SmartTag.
1081
+ */
1082
+ id?: string;
1083
+ info?: Tag.Info;
1084
+ }
1085
+ namespace Tag {
1086
+ interface Info {
1087
+ info?: Info.Info;
1088
+ }
1089
+ namespace Info {
1090
+ interface Info {
1091
+ /**
1092
+ * Whether X marks the SmartTag active.
1093
+ */
1094
+ active?: boolean;
1095
+ name?: string;
1096
+ ticker?: string;
1097
+ }
1098
+ }
1099
+ }
1100
+ }
1101
+ /**
1102
+ * Provides shortened, display, and expanded URLs from tweet text.
1103
+ */
1104
+ interface URL {
1105
+ display_url?: string;
1106
+ expanded_url?: string;
1107
+ indices?: Array<number>;
1108
+ url?: string;
1109
+ }
1110
+ /**
1111
+ * Provides profile identity and source offsets for a mention.
1112
+ */
1113
+ interface UserMention {
1114
+ screen_name: string;
1115
+ id_str?: string;
1116
+ indices?: Array<number>;
1117
+ name?: string;
1118
+ }
1119
+ }
1120
+ interface InlineMedia {
1121
+ /**
1122
+ * Whole number from 0.
1123
+ */
1124
+ index: number;
1125
+ mediaId: string;
1126
+ }
1127
+ interface RichtextTag {
1128
+ /**
1129
+ * Whole number from 0.
1130
+ */
1131
+ fromIndex: number;
1132
+ /**
1133
+ * Whole number from 0.
1134
+ */
1135
+ toIndex: number;
1136
+ types: Array<string>;
1137
+ }
1138
+ }
1139
+ /**
1140
+ * Describes public place metadata on a geotagged tweet.
1141
+ */
1142
+ interface Place {
1143
+ id?: string;
1144
+ /**
1145
+ * Public metadata whose fields are defined by X.
1146
+ */
1147
+ boundingBox?: {
1148
+ [key: string]: unknown;
330
1149
  };
331
1150
  country?: string;
332
1151
  countryCode?: string;
@@ -339,17 +1158,204 @@ export declare namespace TweetDetail {
339
1158
  * Engagement counts retained from a prior tweet edit.
340
1159
  */
341
1160
  interface PreviousCounts {
1161
+ /**
1162
+ * Whole number from 0.
1163
+ */
342
1164
  bookmarkCount?: number;
1165
+ /**
1166
+ * Whole number from 0.
1167
+ */
343
1168
  likeCount?: number;
1169
+ /**
1170
+ * Whole number from 0.
1171
+ */
344
1172
  quoteCount?: number;
1173
+ /**
1174
+ * Whole number from 0.
1175
+ */
345
1176
  replyCount?: number;
1177
+ /**
1178
+ * Whole number from 0.
1179
+ */
346
1180
  retweetCount?: number;
347
1181
  }
1182
+ /**
1183
+ * The quoted post's link, kept when X withholds that post.
1184
+ */
1185
+ interface QuotedTweetPermalink {
1186
+ displayUrl?: string;
1187
+ expandedUrl?: string;
1188
+ url?: string;
1189
+ }
1190
+ /**
1191
+ * Why X shows no quoted post. Omitted when X names no reason, as its legacy
1192
+ * answers never do.
1193
+ */
1194
+ interface QuotedTweetUnavailable {
1195
+ /**
1196
+ * X's reason, such as `Suspended` for a suspended author or `Protected` for an
1197
+ * author who protects their posts.
1198
+ */
1199
+ reason: string;
1200
+ }
1201
+ /**
1202
+ * Public post & user this reaction references.
1203
+ */
1204
+ interface ReactionContext {
1205
+ /**
1206
+ * Referenced post ID.
1207
+ */
1208
+ reactedToPostId?: string;
1209
+ /**
1210
+ * Public X profile.
1211
+ */
1212
+ reactedToUser?: Shared.UserProfile;
1213
+ }
1214
+ /**
1215
+ * Game metadata attached to this post.
1216
+ */
1217
+ interface SportsContext {
1218
+ /**
1219
+ * Teams & reported scores.
1220
+ */
1221
+ competitors?: Array<SportsContext.Competitor>;
1222
+ /**
1223
+ * Game ID.
1224
+ */
1225
+ gameId?: string;
1226
+ /**
1227
+ * League ID.
1228
+ */
1229
+ league?: string;
1230
+ /**
1231
+ * Scheduled Unix milliseconds, retaining the source type.
1232
+ */
1233
+ scheduledAtMs?: number | string;
1234
+ /**
1235
+ * Reported game state.
1236
+ */
1237
+ state?: string;
1238
+ /**
1239
+ * Game progress text.
1240
+ */
1241
+ statusText?: string;
1242
+ /**
1243
+ * Game title.
1244
+ */
1245
+ title?: string;
1246
+ /**
1247
+ * Game link.
1248
+ */
1249
+ url?: string;
1250
+ }
1251
+ namespace SportsContext {
1252
+ interface Competitor {
1253
+ /**
1254
+ * Team abbreviation.
1255
+ */
1256
+ abbreviation?: string;
1257
+ /**
1258
+ * Team display color.
1259
+ */
1260
+ color?: string;
1261
+ /**
1262
+ * Logo for dark backgrounds.
1263
+ */
1264
+ darkLogoUrl?: string;
1265
+ /**
1266
+ * Active competitor.
1267
+ */
1268
+ isActive?: boolean;
1269
+ /**
1270
+ * Winning competitor.
1271
+ */
1272
+ isWinner?: boolean;
1273
+ /**
1274
+ * Logo for light backgrounds.
1275
+ */
1276
+ logoUrl?: string;
1277
+ /**
1278
+ * Team name.
1279
+ */
1280
+ name?: string;
1281
+ /**
1282
+ * Score display text.
1283
+ */
1284
+ score?: string;
1285
+ /**
1286
+ * Team ID.
1287
+ */
1288
+ teamId?: string;
1289
+ }
1290
+ }
1291
+ /**
1292
+ * The Subscriber badge X shows on a reply. The reply's author subscribes to the
1293
+ * creator who started the conversation. Omitted on a post without the badge.
1294
+ */
1295
+ interface SubscriberBadge {
1296
+ /**
1297
+ * Account ID of the creator the author subscribes to.
1298
+ */
1299
+ creatorId: string;
1300
+ }
1301
+ interface TextHighlight {
1302
+ /**
1303
+ * The first code point after the match.
1304
+ */
1305
+ endIndex: number;
1306
+ /**
1307
+ * The first code point of the match.
1308
+ */
1309
+ startIndex: number;
1310
+ }
1311
+ /**
1312
+ * Public visibility notice attached to an available tweet.
1313
+ */
1314
+ interface Tombstone {
1315
+ text?: Tombstone.Text;
1316
+ /**
1317
+ * Visibility notice type.
1318
+ */
1319
+ type?: string;
1320
+ }
1321
+ namespace Tombstone {
1322
+ interface Text {
1323
+ entities?: Array<Text.Entity>;
1324
+ /**
1325
+ * Right-to-left text direction.
1326
+ */
1327
+ rtl?: boolean;
1328
+ /**
1329
+ * Human-readable notice text.
1330
+ */
1331
+ text?: string;
1332
+ }
1333
+ namespace Text {
1334
+ interface Entity {
1335
+ /**
1336
+ * Whole number from 0.
1337
+ */
1338
+ fromIndex?: number;
1339
+ ref?: Entity.Ref;
1340
+ /**
1341
+ * Whole number from 0.
1342
+ */
1343
+ toIndex?: number;
1344
+ }
1345
+ namespace Entity {
1346
+ interface Ref {
1347
+ type?: string;
1348
+ url?: string;
1349
+ urlType?: string;
1350
+ }
1351
+ }
1352
+ }
1353
+ }
348
1354
  }
349
1355
  /**
350
- * Durable write lifecycle record. Poll statusUrl until terminal is true. Reusing
351
- * the original Idempotency-Key returns this same record. Submit a new write only
352
- * when safeToRetry is true, using a new key.
1356
+ * Durable write record. Poll statusUrl until terminal is true. Reusing its
1357
+ * Idempotency-Key returns this record. Create another action only when safeToRetry
1358
+ * is true.
353
1359
  */
354
1360
  export interface TweetCreateResponse {
355
1361
  id: string;
@@ -357,7 +1363,7 @@ export interface TweetCreateResponse {
357
1363
  * Connected account selected for the write.
358
1364
  */
359
1365
  account: TweetCreateResponse.Account | null;
360
- action: 'create_tweet' | 'delete_tweet' | 'like' | 'unlike' | 'retweet' | 'unretweet' | 'follow' | 'unfollow' | 'remove_follower' | 'send_dm' | 'upload_media' | 'update_profile' | 'update_avatar' | 'update_banner' | 'create_community' | 'delete_community' | 'join_community' | 'leave_community';
1366
+ action: 'create_tweet' | 'delete_tweet' | 'like' | 'unlike' | 'retweet' | 'unretweet' | 'follow' | 'unfollow' | 'remove_follower' | 'send_dm' | 'delete_dm' | 'upload_media' | 'update_profile' | 'update_avatar' | 'update_banner' | 'create_community' | 'delete_community' | 'join_community' | 'leave_community';
361
1367
  /**
362
1368
  * plannedCredits is the approved maximum. chargedCredits comes from the settled
363
1369
  * credit ledger. Pending or failed writes are not charged.
@@ -384,7 +1390,7 @@ export interface TweetCreateResponse {
384
1390
  */
385
1391
  retryable: boolean;
386
1392
  /**
387
- * True only when no write was dispatched and a new idempotency key may be used.
1393
+ * True only when X did not get the write and a new idempotency key may be used.
388
1394
  */
389
1395
  safeToRetry: boolean;
390
1396
  sendDispatched: boolean;
@@ -423,6 +1429,10 @@ export interface TweetCreateResponse {
423
1429
  * retention deadline.
424
1430
  */
425
1431
  expiresAt?: string;
1432
+ /**
1433
+ * True when this answers a retry of an earlier request with the same
1434
+ * Idempotency-Key.
1435
+ */
426
1436
  idempotent?: boolean;
427
1437
  /**
428
1438
  * Media count, kind, size, and billing details when used.
@@ -482,6 +1492,9 @@ export declare namespace TweetCreateResponse {
482
1492
  */
483
1493
  interface NextAction {
484
1494
  type: 'poll' | 'retry' | 'verify_result' | 'fix_request';
1495
+ /**
1496
+ * Milliseconds to wait before you poll or retry.
1497
+ */
485
1498
  afterMs?: number;
486
1499
  requiresNewIdempotencyKey?: boolean;
487
1500
  url?: string;
@@ -524,15 +1537,34 @@ export interface TweetRetrieveResponse {
524
1537
  */
525
1538
  tweet: TweetDetail;
526
1539
  /**
527
- * Tweet author profile. The lookup route always includes follower count and
528
- * verification state. Other profile fields appear when available.
1540
+ * Author profile. Lookups always include follower count & verification. Other
1541
+ * fields depend on availability.
529
1542
  */
530
1543
  author?: TweetAuthor;
531
1544
  }
1545
+ export interface TweetListResponse extends Shared.PaginatedTweets {
1546
+ /**
1547
+ * Each `ids` entry that names no post, with why. Absent when every entry names a
1548
+ * post.
1549
+ */
1550
+ skipped?: Array<TweetListResponse.Skipped>;
1551
+ }
1552
+ export declare namespace TweetListResponse {
1553
+ interface Skipped {
1554
+ /**
1555
+ * The entry as sent.
1556
+ */
1557
+ entry: string;
1558
+ /**
1559
+ * Why the entry names no post.
1560
+ */
1561
+ reason: string;
1562
+ }
1563
+ }
532
1564
  /**
533
- * Durable write lifecycle record. Poll statusUrl until terminal is true. Reusing
534
- * the original Idempotency-Key returns this same record. Submit a new write only
535
- * when safeToRetry is true, using a new key.
1565
+ * Durable write record. Poll statusUrl until terminal is true. Reusing its
1566
+ * Idempotency-Key returns this record. Create another action only when safeToRetry
1567
+ * is true.
536
1568
  */
537
1569
  export interface TweetDeleteResponse {
538
1570
  id: string;
@@ -540,7 +1572,7 @@ export interface TweetDeleteResponse {
540
1572
  * Connected account selected for the write.
541
1573
  */
542
1574
  account: TweetDeleteResponse.Account | null;
543
- action: 'create_tweet' | 'delete_tweet' | 'like' | 'unlike' | 'retweet' | 'unretweet' | 'follow' | 'unfollow' | 'remove_follower' | 'send_dm' | 'upload_media' | 'update_profile' | 'update_avatar' | 'update_banner' | 'create_community' | 'delete_community' | 'join_community' | 'leave_community';
1575
+ action: 'create_tweet' | 'delete_tweet' | 'like' | 'unlike' | 'retweet' | 'unretweet' | 'follow' | 'unfollow' | 'remove_follower' | 'send_dm' | 'delete_dm' | 'upload_media' | 'update_profile' | 'update_avatar' | 'update_banner' | 'create_community' | 'delete_community' | 'join_community' | 'leave_community';
544
1576
  /**
545
1577
  * plannedCredits is the approved maximum. chargedCredits comes from the settled
546
1578
  * credit ledger. Pending or failed writes are not charged.
@@ -567,7 +1599,7 @@ export interface TweetDeleteResponse {
567
1599
  */
568
1600
  retryable: boolean;
569
1601
  /**
570
- * True only when no write was dispatched and a new idempotency key may be used.
1602
+ * True only when X did not get the write and a new idempotency key may be used.
571
1603
  */
572
1604
  safeToRetry: boolean;
573
1605
  sendDispatched: boolean;
@@ -606,6 +1638,10 @@ export interface TweetDeleteResponse {
606
1638
  * retention deadline.
607
1639
  */
608
1640
  expiresAt?: string;
1641
+ /**
1642
+ * True when this answers a retry of an earlier request with the same
1643
+ * Idempotency-Key.
1644
+ */
609
1645
  idempotent?: boolean;
610
1646
  /**
611
1647
  * Media count, kind, size, and billing details when used.
@@ -665,6 +1701,9 @@ export declare namespace TweetDeleteResponse {
665
1701
  */
666
1702
  interface NextAction {
667
1703
  type: 'poll' | 'retry' | 'verify_result' | 'fix_request';
1704
+ /**
1705
+ * Milliseconds to wait before you poll or retry.
1706
+ */
668
1707
  afterMs?: number;
669
1708
  requiresNewIdempotencyKey?: boolean;
670
1709
  url?: string;
@@ -700,44 +1739,227 @@ export declare namespace TweetDeleteResponse {
700
1739
  type: 'tweet' | 'user' | 'community';
701
1740
  }
702
1741
  }
703
- /**
704
- * Direct reply rows. No-mode requests use resumable automatic coverage. Complete
705
- * mode also returns nested replies and coverage diagnostics. Keep nested replies
706
- * separate from direct coverage.
707
- */
708
- export interface TweetGetRepliesResponse extends Shared.PaginatedTweets {
1742
+ export interface TweetCheckRepostResponse {
709
1743
  /**
710
- * Evidence for direct-reply coverage and collector behavior.
1744
+ * How many of the account's newest posts the check read.
711
1745
  */
712
- diagnostic?: TweetGetRepliesResponse.Diagnostic;
1746
+ checkedPosts: number;
713
1747
  /**
714
- * Nested replies. Excluded from direct coverage.
1748
+ * Whether the check read the account's whole timeline.
1749
+ */
1750
+ complete: boolean;
1751
+ /**
1752
+ * Whether the account reposted the post.
1753
+ */
1754
+ isRetweeted: boolean;
1755
+ /**
1756
+ * When the account reposted it, else null.
1757
+ */
1758
+ retweetedAt: string | null;
1759
+ /**
1760
+ * The ID of the account's repost, else null.
715
1761
  */
716
- nested_replies?: Array<Shared.SearchTweet>;
1762
+ retweetId: string | null;
1763
+ tweetId: string;
1764
+ userId: string;
717
1765
  }
718
- export declare namespace TweetGetRepliesResponse {
1766
+ export interface TweetEmbedResponse {
719
1767
  /**
720
- * Evidence for direct-reply coverage and collector behavior.
1768
+ * Holds the HTML that embeds one tweet on a website.
721
1769
  */
722
- interface Diagnostic {
1770
+ embed: TweetEmbedResponse.Embed;
1771
+ }
1772
+ export declare namespace TweetEmbedResponse {
1773
+ /**
1774
+ * Holds the HTML that embeds one tweet on a website.
1775
+ */
1776
+ interface Embed {
723
1777
  /**
724
- * Whether coverage met the target without truncation.
1778
+ * Display name of the tweet's author.
725
1779
  */
726
- complete: boolean;
1780
+ authorName: string;
727
1781
  /**
728
- * Unique direct replies as a percentage of the reported count.
1782
+ * Link to the author's profile.
729
1783
  */
730
- coveragePercentage: number;
1784
+ authorUrl: string;
731
1785
  /**
732
- * Cursor requests that failed.
1786
+ * Markup to place on a page. It loads X's widget script unless `omitScript` is
1787
+ * `true`.
1788
+ */
1789
+ html: string;
1790
+ /**
1791
+ * ID of the embedded tweet.
1792
+ */
1793
+ tweetId: string;
1794
+ /**
1795
+ * Link to the tweet with its author's username.
1796
+ */
1797
+ url: string;
1798
+ /**
1799
+ * Height in pixels, when X fixes it.
1800
+ */
1801
+ height?: number;
1802
+ /**
1803
+ * Width of the embed in pixels.
1804
+ */
1805
+ width?: number;
1806
+ }
1807
+ }
1808
+ export interface TweetGetInsightsResponse {
1809
+ /**
1810
+ * Engagement insights of one tweet. Engagements are likes, replies, reposts and
1811
+ * quotes. A rate is null when nothing divides it, such as a tweet without views.
1812
+ */
1813
+ insights: TweetGetInsightsResponse.Insights;
1814
+ }
1815
+ export declare namespace TweetGetInsightsResponse {
1816
+ /**
1817
+ * Engagement insights of one tweet. Engagements are likes, replies, reposts and
1818
+ * quotes. A rate is null when nothing divides it, such as a tweet without views.
1819
+ */
1820
+ interface Insights {
1821
+ /**
1822
+ * Hours since the tweet went up.
1823
+ */
1824
+ ageHours: number | null;
1825
+ /**
1826
+ * Reposts and quotes per like.
1827
+ */
1828
+ amplification: number | null;
1829
+ /**
1830
+ * ID of the author.
1831
+ */
1832
+ authorId: string | null;
1833
+ /**
1834
+ * Username of the author.
1835
+ */
1836
+ authorUserName: string | null;
1837
+ /**
1838
+ * Replies per like.
1839
+ */
1840
+ conversation: number | null;
1841
+ /**
1842
+ * When the tweet went up.
1843
+ */
1844
+ createdAt: string | null;
1845
+ /**
1846
+ * Engagements as a percent of views.
1847
+ */
1848
+ engagementPerView: number | null;
1849
+ /**
1850
+ * Engagements as a percent of the author's followers.
1851
+ */
1852
+ engagementRate: number | null;
1853
+ /**
1854
+ * Likes, replies, reposts and quotes.
1855
+ */
1856
+ engagements: number;
1857
+ /**
1858
+ * Engagements per hour since the tweet went up.
1859
+ */
1860
+ engagementsPerHour: number | null;
1861
+ /**
1862
+ * The public counts of one tweet.
1863
+ */
1864
+ metrics: Insights.Metrics;
1865
+ /**
1866
+ * ID of the tweet the insights describe.
1867
+ */
1868
+ tweetId: string;
1869
+ }
1870
+ namespace Insights {
1871
+ /**
1872
+ * The public counts of one tweet.
1873
+ */
1874
+ interface Metrics {
1875
+ /**
1876
+ * Bookmarks.
1877
+ */
1878
+ bookmarks: number;
1879
+ /**
1880
+ * Likes.
1881
+ */
1882
+ likes: number;
1883
+ /**
1884
+ * Quotes.
1885
+ */
1886
+ quotes: number;
1887
+ /**
1888
+ * Replies.
1889
+ */
1890
+ replies: number;
1891
+ /**
1892
+ * Reposts.
1893
+ */
1894
+ reposts: number;
1895
+ /**
1896
+ * Views.
1897
+ */
1898
+ views: number;
1899
+ }
1900
+ }
1901
+ }
1902
+ /**
1903
+ * Direct reply rows. No-mode requests use resumable automatic coverage. Complete
1904
+ * mode also returns nested replies and coverage diagnostics.
1905
+ */
1906
+ export interface TweetGetRepliesResponse extends Omit<Shared.PaginatedTweets, 'tweets'> {
1907
+ /**
1908
+ * Direct-reply coverage & collection evidence.
1909
+ */
1910
+ diagnostic?: TweetGetRepliesResponse.Diagnostic;
1911
+ /**
1912
+ * Present on the last automatic page. X counts this many more replies but shows
1913
+ * them to nobody. They may be hidden, protected or deleted. A retry returns the
1914
+ * same replies.
1915
+ */
1916
+ hiddenReplies?: number;
1917
+ /**
1918
+ * Present when your limit cut a complete-mode answer. The post has more replies;
1919
+ * raise limit to get them all.
1920
+ */
1921
+ limit_reached?: true;
1922
+ /**
1923
+ * Explains an answer cut by your limit.
1924
+ */
1925
+ message?: string;
1926
+ /**
1927
+ * Nested replies. Excluded from direct coverage.
1928
+ */
1929
+ nested_replies?: Array<TweetGetRepliesResponse.NestedReply>;
1930
+ /**
1931
+ * Present with latest or oldest sort. The read stopped before it held every reply
1932
+ * X shows. Rows stay sorted by date, but replies may be missing between them.
1933
+ * Retry later for a gap-free order. Complete mode and automatic pages set it
1934
+ * alike.
1935
+ */
1936
+ orderPartial?: true;
1937
+ tweets?: Array<TweetGetRepliesResponse.Tweet>;
1938
+ }
1939
+ export declare namespace TweetGetRepliesResponse {
1940
+ /**
1941
+ * Direct-reply coverage & collection evidence.
1942
+ */
1943
+ interface Diagnostic {
1944
+ /**
1945
+ * Coverage met its target, or read the whole time window, without truncation.
1946
+ * Protected accounts' replies count but aren't returned.
1947
+ */
1948
+ complete: boolean;
1949
+ /**
1950
+ * Unique direct replies / reported count, as a percentage.
1951
+ */
1952
+ coveragePercentage: number;
1953
+ /**
1954
+ * Cursor requests that failed.
733
1955
  */
734
1956
  cursorFailures: number;
735
1957
  /**
736
- * Duplicate tweet IDs removed across pages and strategies.
1958
+ * Duplicate IDs removed across pages & strategies.
737
1959
  */
738
1960
  duplicateCount: number;
739
1961
  /**
740
- * Empty pages rejected because they did not make progress.
1962
+ * Empty pages rejected for no progress.
741
1963
  */
742
1964
  emptyFalseProgressPages: number;
743
1965
  /**
@@ -745,15 +1967,15 @@ export declare namespace TweetGetRepliesResponse {
745
1967
  */
746
1968
  malformedCount: number;
747
1969
  /**
748
- * Expected response modules or fields missing from X.
1970
+ * Expected X modules or fields missing.
749
1971
  */
750
1972
  missingResponseModulesOrFields: Array<string>;
751
1973
  /**
752
- * Unique nested replies kept outside direct coverage.
1974
+ * Unique nested replies, excluded from direct coverage.
753
1975
  */
754
1976
  nestedReplyCount: number;
755
1977
  /**
756
- * Total pages attempted across all strategies.
1978
+ * Pages attempted across strategies.
757
1979
  */
758
1980
  pagesAttempted: number;
759
1981
  /**
@@ -761,45 +1983,58 @@ export declare namespace TweetGetRepliesResponse {
761
1983
  */
762
1984
  recommendedFallback: string;
763
1985
  /**
764
- * Repeated cursors rejected to prevent loops.
1986
+ * Looping cursors rejected.
765
1987
  */
766
1988
  repeatedCursorCount: number;
767
1989
  /**
768
- * Reply count reported on the source post.
1990
+ * Source post reply count.
769
1991
  */
770
1992
  reportedReplyCount: number;
771
1993
  /**
772
- * Whether the requested row limit truncated safe results.
1994
+ * Requested row limit truncated safe results.
773
1995
  */
774
1996
  responseTruncated: boolean;
775
1997
  /**
776
- * Field-presence counts across the collected direct replies.
1998
+ * Field counts across collected direct replies.
777
1999
  */
778
2000
  richness: Diagnostic.Richness;
779
2001
  /**
780
- * Per-strategy pagination and contribution evidence.
2002
+ * Every source ended. A retry returns the same rows.
2003
+ */
2004
+ sourcesEnded: boolean;
2005
+ /**
2006
+ * Pagination & contribution evidence per strategy.
781
2007
  */
782
2008
  strategiesAttempted: Array<Diagnostic.StrategiesAttempted>;
783
2009
  /**
784
- * Minimum direct replies required for the coverage target.
2010
+ * Direct replies required to meet the target.
785
2011
  */
786
2012
  targetDirectReplies: number;
787
2013
  /**
788
- * Unique replies whose parent ID equals the source post ID.
2014
+ * Unique direct replies to the source post.
789
2015
  */
790
2016
  uniqueDirectReplies: number;
791
2017
  /**
792
- * Tweets rejected because they belonged elsewhere.
2018
+ * Tweets rejected from other conversations.
793
2019
  */
794
2020
  unrelatedCount: number;
2021
+ /**
2022
+ * Replies are accounted for through the requested scope & depth. Source errors
2023
+ * remain separate.
2024
+ */
2025
+ replyScopeComplete?: boolean;
2026
+ /**
2027
+ * All child counts are known & match collected replies.
2028
+ */
2029
+ replyTreeComplete?: boolean;
795
2030
  }
796
2031
  namespace Diagnostic {
797
2032
  /**
798
- * Field-presence counts across the collected direct replies.
2033
+ * Field counts across collected direct replies.
799
2034
  */
800
2035
  interface Richness {
801
2036
  /**
802
- * Replies with article content.
2037
+ * Replies with articles.
803
2038
  */
804
2039
  article: number;
805
2040
  /**
@@ -807,15 +2042,15 @@ export declare namespace TweetGetRepliesResponse {
807
2042
  */
808
2043
  author: number;
809
2044
  /**
810
- * Replies with card metadata.
2045
+ * Replies with cards.
811
2046
  */
812
2047
  card: number;
813
2048
  /**
814
- * Replies with community-note data.
2049
+ * Replies with community notes.
815
2050
  */
816
2051
  communityNote: number;
817
2052
  /**
818
- * Replies with a creation timestamp.
2053
+ * Replies with creation timestamps.
819
2054
  */
820
2055
  createdAt: number;
821
2056
  /**
@@ -823,19 +2058,19 @@ export declare namespace TweetGetRepliesResponse {
823
2058
  */
824
2059
  engagementCounts: number;
825
2060
  /**
826
- * Replies with entity metadata.
2061
+ * Replies with entities.
827
2062
  */
828
2063
  entities: number;
829
2064
  /**
830
- * Replies with a language value.
2065
+ * Replies with language.
831
2066
  */
832
2067
  language: number;
833
2068
  /**
834
- * Replies with media metadata.
2069
+ * Replies with media.
835
2070
  */
836
2071
  media: number;
837
2072
  /**
838
- * Replies with quoted or reposted tweet data.
2073
+ * Replies with quotes or reposts.
839
2074
  */
840
2075
  quotedOrRepostedTweet: number;
841
2076
  /**
@@ -843,36 +2078,184 @@ export declare namespace TweetGetRepliesResponse {
843
2078
  */
844
2079
  text: number;
845
2080
  /**
846
- * Total unique direct replies evaluated for richness.
2081
+ * Unique direct replies evaluated.
847
2082
  */
848
2083
  totalReplies: number;
849
2084
  /**
850
- * Replies with a canonical URL.
2085
+ * Replies with canonical URLs.
851
2086
  */
852
2087
  url: number;
853
2088
  }
2089
+ /**
2090
+ * Reply counts & stop reason per strategy.
2091
+ */
854
2092
  interface StrategiesAttempted {
855
2093
  name: string;
2094
+ /**
2095
+ * Whole number from 0.
2096
+ */
856
2097
  newDirectReplies: number;
2098
+ /**
2099
+ * Whole number from 0.
2100
+ */
857
2101
  newNestedReplies: number;
2102
+ /**
2103
+ * Whole number from 0.
2104
+ */
858
2105
  pagesAttempted: number;
859
- stopReason: 'deadline' | 'empty_pages' | 'error' | 'missing_cursor' | 'no_next_page' | 'page_cap' | 'repeated_cursor';
2106
+ stopReason: 'deadline' | 'empty_pages' | 'error' | 'missing_cursor' | 'no_next_page' | 'page_cap' | 'partial_view' | 'repeated_cursor' | 'window_covered' | 'window_passed';
2107
+ /**
2108
+ * For a search of the post's conversation, the page that listed each new direct
2109
+ * reply, from 1.
2110
+ */
2111
+ newDirectReplyPages?: Array<number>;
860
2112
  }
861
2113
  }
2114
+ /**
2115
+ * Reply row. A reply the post's author hid carries hiddenByAuthor.
2116
+ */
2117
+ interface NestedReply extends Shared.SearchTweet {
2118
+ /**
2119
+ * Present on a reply the post's author hid. Complete-mode replies carry it when
2120
+ * includeHidden asks for them.
2121
+ */
2122
+ hiddenByAuthor?: true;
2123
+ }
2124
+ /**
2125
+ * Reply row. A reply the post's author hid carries hiddenByAuthor.
2126
+ */
2127
+ interface Tweet extends Shared.SearchTweet {
2128
+ /**
2129
+ * Present on a reply the post's author hid. Complete-mode replies carry it when
2130
+ * includeHidden asks for them.
2131
+ */
2132
+ hiddenByAuthor?: true;
2133
+ }
862
2134
  }
863
2135
  /**
864
- * No-mode search, user Tweet, user reply, and direct reply reads use automatic
865
- * coverage. Shape, filters, aliases, and billing stay compatible. Unprefixed
866
- * cursors remain legacy. Follow next_cursor while has_next_page is true. An empty
867
- * filtered page can still have has_next_page true.
2136
+ * A page of user IDs without profiles. Follow next_cursor while the response
2137
+ * reports more pages.
2138
+ */
2139
+ export interface TweetGetRetweeterIDsResponse {
2140
+ has_next_page: boolean;
2141
+ /**
2142
+ * X user IDs, newest relationship first.
2143
+ */
2144
+ ids: Array<string>;
2145
+ next_cursor: string;
2146
+ }
2147
+ export interface TweetGetSubtitlesResponse {
2148
+ /**
2149
+ * Holds the caption tracks of one tweet's videos.
2150
+ */
2151
+ subtitles: TweetGetSubtitlesResponse.Subtitles;
2152
+ }
2153
+ export declare namespace TweetGetSubtitlesResponse {
2154
+ /**
2155
+ * Holds the caption tracks of one tweet's videos.
2156
+ */
2157
+ interface Subtitles {
2158
+ /**
2159
+ * Caption tracks, empty when no video has captions.
2160
+ */
2161
+ tracks: Array<Subtitles.Track>;
2162
+ /**
2163
+ * ID of the tweet.
2164
+ */
2165
+ tweetId: string;
2166
+ }
2167
+ namespace Subtitles {
2168
+ /**
2169
+ * Holds one caption track of a video.
2170
+ */
2171
+ interface Track {
2172
+ /**
2173
+ * True when X transcribed the audio itself.
2174
+ */
2175
+ autoGenerated: boolean;
2176
+ /**
2177
+ * Timed captions in order.
2178
+ */
2179
+ cues: Array<Track.Cue>;
2180
+ /**
2181
+ * Every cue's text in order, as one line.
2182
+ */
2183
+ text: string;
2184
+ /**
2185
+ * True when the track holds more than 50 caption files. The cues then cover the
2186
+ * first 50.
2187
+ */
2188
+ truncated: boolean;
2189
+ /**
2190
+ * Link to the track's first WebVTT file.
2191
+ */
2192
+ url: string;
2193
+ /**
2194
+ * Language code of the track, in lower case.
2195
+ */
2196
+ language?: string;
2197
+ /**
2198
+ * Media key of the video, as media rows carry it.
2199
+ */
2200
+ mediaKey?: string;
2201
+ /**
2202
+ * Track name the uploader or X gave it.
2203
+ */
2204
+ name?: string;
2205
+ }
2206
+ namespace Track {
2207
+ interface Cue {
2208
+ /**
2209
+ * End time in milliseconds.
2210
+ */
2211
+ endMs: number;
2212
+ /**
2213
+ * Start time in milliseconds.
2214
+ */
2215
+ startMs: number;
2216
+ /**
2217
+ * Caption text, with a line break between lines.
2218
+ */
2219
+ text: string;
2220
+ }
2221
+ }
2222
+ }
2223
+ }
2224
+ export interface TweetResolveLinksResponse {
2225
+ links: Array<TweetResolveLinksResponse.Link>;
2226
+ /**
2227
+ * Links not read, in the order sent. X did not answer for them in time, or
2228
+ * available credits ran out. Send them again.
2229
+ */
2230
+ unprocessedUrls: Array<string>;
2231
+ }
2232
+ export declare namespace TweetResolveLinksResponse {
2233
+ /**
2234
+ * Pairs one t.co link with the URL it leads to.
2235
+ */
2236
+ interface Link {
2237
+ /**
2238
+ * The t.co link, as `https://t.co/<code>`.
2239
+ */
2240
+ url: string;
2241
+ /**
2242
+ * Target URL, as the link's author set it. Xquik does not check it. Absent for a
2243
+ * link t.co does not have.
2244
+ */
2245
+ resolvedUrl?: string;
2246
+ }
2247
+ }
2248
+ /**
2249
+ * Follow next_cursor while the response reports more pages. A page can hold fewer
2250
+ * rows than its limit & still report more. That report decides, not the row count.
2251
+ * A page can be empty & still report more, filtered or not. Automatic search, user
2252
+ * Tweet & reply coverage keeps shape, filters, aliases & billing. Unprefixed
2253
+ * cursors are legacy.
868
2254
  */
869
2255
  export type TweetSearchResponse = Shared.PaginatedTweets | TweetSearchResponse.TweetSearchCoverageResponse;
870
2256
  export declare namespace TweetSearchResponse {
871
2257
  /**
872
- * No-mode search, user Tweet, user reply, and direct reply reads use automatic
873
- * coverage. Shape, filters, aliases, and billing stay compatible. Unprefixed
874
- * cursors remain legacy. Follow next_cursor while has_next_page is true. An empty
875
- * filtered page can still have has_next_page true.
2258
+ * Terminal Tweet search coverage response with diagnostics.
876
2259
  */
877
2260
  interface TweetSearchCoverageResponse extends Omit<Shared.PaginatedTweets, 'has_next_page' | 'next_cursor'> {
878
2261
  /**
@@ -888,37 +2271,71 @@ export declare namespace TweetSearchResponse {
888
2271
  */
889
2272
  interface Diagnostic {
890
2273
  /**
891
- * True when every strategy exhausted its source.
2274
+ * True after all active strategies exhaust their sources. An empty read of the
2275
+ * whole search window also ends its time slices.
892
2276
  */
893
2277
  complete: boolean;
2278
+ /**
2279
+ * Whole number from 0.
2280
+ */
894
2281
  cursorFailureCount: number;
895
2282
  deadlineReached: boolean;
2283
+ /**
2284
+ * Whole number from 0.
2285
+ */
896
2286
  duplicateCount: number;
2287
+ /**
2288
+ * Whole number from 0.
2289
+ */
897
2290
  failedStrategyCount: number;
2291
+ /**
2292
+ * Whole number from 0.
2293
+ */
898
2294
  malformedCount: number;
2295
+ /**
2296
+ * Whole number from 0.
2297
+ */
899
2298
  pagesFetched: number;
900
2299
  /**
901
2300
  * Whether bounded time windows ran in parallel.
902
2301
  */
903
2302
  partitioned: boolean;
904
2303
  /**
905
- * Whether credits or the requested limit reduced output.
2304
+ * True when credits or the requested limit reduce output.
906
2305
  */
907
2306
  responseTruncated: boolean;
908
2307
  resultLimitReached: boolean;
909
2308
  returnedTweets: number;
2309
+ /**
2310
+ * Whole number from 0.
2311
+ */
910
2312
  stalledStrategyCount: number;
911
2313
  strategies: Array<Diagnostic.Strategy>;
912
2314
  strategyCount: number;
913
2315
  uniqueTweets: number;
914
2316
  }
915
2317
  namespace Diagnostic {
2318
+ /**
2319
+ * Result counts and stop reason for one Tweet search strategy.
2320
+ */
916
2321
  interface Strategy {
2322
+ /**
2323
+ * Whole number from 0.
2324
+ */
917
2325
  duplicateCount: number;
2326
+ /**
2327
+ * Whole number from 0.
2328
+ */
918
2329
  pagesFetched: number;
919
2330
  queryType: 'Latest' | 'Top';
2331
+ /**
2332
+ * Reason a coverage strategy stopped.
2333
+ */
920
2334
  stopReason: 'cursor_failure' | 'deadline' | 'exhausted' | 'failed' | 'page_limit' | 'result_limit' | 'stalled';
921
2335
  strategy: number;
2336
+ /**
2337
+ * Whole number from 0.
2338
+ */
922
2339
  uniqueAdded: number;
923
2340
  /**
924
2341
  * Non-overlapping time partition used by one strategy.
@@ -937,129 +2354,680 @@ export declare namespace TweetSearchResponse {
937
2354
  }
938
2355
  }
939
2356
  }
2357
+ export interface TweetTranslateResponse {
2358
+ /**
2359
+ * Holds X's translation of one tweet into the requested language. `entities` holds
2360
+ * the links, mentions, and tags with their offsets in the translated text, and is
2361
+ * empty when the text has none.
2362
+ */
2363
+ translation: TweetTranslateResponse.Translation;
2364
+ }
2365
+ export declare namespace TweetTranslateResponse {
2366
+ /**
2367
+ * Holds X's translation of one tweet into the requested language. `entities` holds
2368
+ * the links, mentions, and tags with their offsets in the translated text, and is
2369
+ * empty when the text has none.
2370
+ */
2371
+ interface Translation {
2372
+ /**
2373
+ * Lists hashtags, symbols, links, and mentions from tweet text.
2374
+ */
2375
+ entities: Translation.Entities;
2376
+ /**
2377
+ * Language code of the translated text, in lower case.
2378
+ */
2379
+ language: string;
2380
+ /**
2381
+ * Translated tweet text.
2382
+ */
2383
+ text: string;
2384
+ /**
2385
+ * ID of the translated tweet.
2386
+ */
2387
+ tweetId: string;
2388
+ /**
2389
+ * Language code X detects in the tweet, when it names one.
2390
+ */
2391
+ sourceLanguage?: string;
2392
+ }
2393
+ namespace Translation {
2394
+ /**
2395
+ * Lists hashtags, symbols, links, and mentions from tweet text.
2396
+ */
2397
+ interface Entities {
2398
+ hashtags?: Array<Entities.Hashtag>;
2399
+ smarttags?: Array<Entities.Smarttag>;
2400
+ symbols?: Array<Entities.Symbol>;
2401
+ timestamps?: Array<Entities.Timestamp>;
2402
+ urls?: Array<Entities.URL>;
2403
+ user_mentions?: Array<Entities.UserMention>;
2404
+ }
2405
+ namespace Entities {
2406
+ /**
2407
+ * Provides hashtag text and source offsets within a tweet.
2408
+ */
2409
+ interface Hashtag {
2410
+ text: string;
2411
+ indices?: Array<number>;
2412
+ /**
2413
+ * X's SmartTag for a cashtag, smarttag or hashtag. Xquik leaves out X's trading
2414
+ * platforms, which differ by reader.
2415
+ */
2416
+ tag?: Hashtag.Tag;
2417
+ }
2418
+ namespace Hashtag {
2419
+ /**
2420
+ * X's SmartTag for a cashtag, smarttag or hashtag. Xquik leaves out X's trading
2421
+ * platforms, which differ by reader.
2422
+ */
2423
+ interface Tag {
2424
+ /**
2425
+ * X's ID for the SmartTag.
2426
+ */
2427
+ id?: string;
2428
+ info?: Tag.Info;
2429
+ }
2430
+ namespace Tag {
2431
+ interface Info {
2432
+ info?: Info.Info;
2433
+ }
2434
+ namespace Info {
2435
+ interface Info {
2436
+ /**
2437
+ * Whether X marks the SmartTag active.
2438
+ */
2439
+ active?: boolean;
2440
+ name?: string;
2441
+ ticker?: string;
2442
+ }
2443
+ }
2444
+ }
2445
+ }
2446
+ /**
2447
+ * Indexed smart-tag, cashtag, or video timestamp metadata.
2448
+ */
2449
+ interface Smarttag {
2450
+ indices?: Array<number>;
2451
+ seconds?: number;
2452
+ /**
2453
+ * X's SmartTag for a cashtag, smarttag or hashtag. Xquik leaves out X's trading
2454
+ * platforms, which differ by reader.
2455
+ */
2456
+ tag?: Smarttag.Tag;
2457
+ text?: string;
2458
+ }
2459
+ namespace Smarttag {
2460
+ /**
2461
+ * X's SmartTag for a cashtag, smarttag or hashtag. Xquik leaves out X's trading
2462
+ * platforms, which differ by reader.
2463
+ */
2464
+ interface Tag {
2465
+ /**
2466
+ * X's ID for the SmartTag.
2467
+ */
2468
+ id?: string;
2469
+ info?: Tag.Info;
2470
+ }
2471
+ namespace Tag {
2472
+ interface Info {
2473
+ info?: Info.Info;
2474
+ }
2475
+ namespace Info {
2476
+ interface Info {
2477
+ /**
2478
+ * Whether X marks the SmartTag active.
2479
+ */
2480
+ active?: boolean;
2481
+ name?: string;
2482
+ ticker?: string;
2483
+ }
2484
+ }
2485
+ }
2486
+ }
2487
+ /**
2488
+ * Indexed smart-tag, cashtag, or video timestamp metadata.
2489
+ */
2490
+ interface Symbol {
2491
+ indices?: Array<number>;
2492
+ seconds?: number;
2493
+ /**
2494
+ * X's SmartTag for a cashtag, smarttag or hashtag. Xquik leaves out X's trading
2495
+ * platforms, which differ by reader.
2496
+ */
2497
+ tag?: Symbol.Tag;
2498
+ text?: string;
2499
+ }
2500
+ namespace Symbol {
2501
+ /**
2502
+ * X's SmartTag for a cashtag, smarttag or hashtag. Xquik leaves out X's trading
2503
+ * platforms, which differ by reader.
2504
+ */
2505
+ interface Tag {
2506
+ /**
2507
+ * X's ID for the SmartTag.
2508
+ */
2509
+ id?: string;
2510
+ info?: Tag.Info;
2511
+ }
2512
+ namespace Tag {
2513
+ interface Info {
2514
+ info?: Info.Info;
2515
+ }
2516
+ namespace Info {
2517
+ interface Info {
2518
+ /**
2519
+ * Whether X marks the SmartTag active.
2520
+ */
2521
+ active?: boolean;
2522
+ name?: string;
2523
+ ticker?: string;
2524
+ }
2525
+ }
2526
+ }
2527
+ }
2528
+ /**
2529
+ * Indexed smart-tag, cashtag, or video timestamp metadata.
2530
+ */
2531
+ interface Timestamp {
2532
+ indices?: Array<number>;
2533
+ seconds?: number;
2534
+ /**
2535
+ * X's SmartTag for a cashtag, smarttag or hashtag. Xquik leaves out X's trading
2536
+ * platforms, which differ by reader.
2537
+ */
2538
+ tag?: Timestamp.Tag;
2539
+ text?: string;
2540
+ }
2541
+ namespace Timestamp {
2542
+ /**
2543
+ * X's SmartTag for a cashtag, smarttag or hashtag. Xquik leaves out X's trading
2544
+ * platforms, which differ by reader.
2545
+ */
2546
+ interface Tag {
2547
+ /**
2548
+ * X's ID for the SmartTag.
2549
+ */
2550
+ id?: string;
2551
+ info?: Tag.Info;
2552
+ }
2553
+ namespace Tag {
2554
+ interface Info {
2555
+ info?: Info.Info;
2556
+ }
2557
+ namespace Info {
2558
+ interface Info {
2559
+ /**
2560
+ * Whether X marks the SmartTag active.
2561
+ */
2562
+ active?: boolean;
2563
+ name?: string;
2564
+ ticker?: string;
2565
+ }
2566
+ }
2567
+ }
2568
+ }
2569
+ /**
2570
+ * Provides shortened, display, and expanded URLs from tweet text.
2571
+ */
2572
+ interface URL {
2573
+ display_url?: string;
2574
+ expanded_url?: string;
2575
+ indices?: Array<number>;
2576
+ url?: string;
2577
+ }
2578
+ /**
2579
+ * Provides profile identity and source offsets for a mention.
2580
+ */
2581
+ interface UserMention {
2582
+ screen_name: string;
2583
+ id_str?: string;
2584
+ indices?: Array<number>;
2585
+ name?: string;
2586
+ }
2587
+ }
2588
+ }
2589
+ }
940
2590
  export interface TweetCreateParams {
941
2591
  /**
942
- * Body param: X account (@username or account ID)
2592
+ * Body param: X account (@username or account ID)
2593
+ */
2594
+ account: string;
2595
+ /**
2596
+ * Header param: Use one unique value per intended write. Reuse it only for an
2597
+ * identical retry. A matching retry returns the first answer again, with
2598
+ * idempotent: true added. It keeps the first status, body & Retry-After. It sends
2599
+ * nothing to X & charges nothing. While the first request runs, a retry returns
2600
+ * 202 & the action. Different input returns 409. Protection lasts at least 90
2601
+ * days.
2602
+ */
2603
+ 'Idempotency-Key': string;
2604
+ /**
2605
+ * Body param: The Community to post into, from 1 to 19 digits. The account must be
2606
+ * a member. Xquik picks the Community in X's composer, checks the post request
2607
+ * names it & reads the post after. A post X puts outside the Community is deleted
2608
+ * & fails uncharged. Not with `reply_to_tweet_id`, since X keeps replies public.
2609
+ */
2610
+ community_id?: string;
2611
+ /**
2612
+ * Body param
2613
+ */
2614
+ is_note_tweet?: boolean;
2615
+ /**
2616
+ * Body param: Publicly reachable URLs of up to 4 images or exactly 1 MP4 video up
2617
+ * to 100 MB. Media adds 2 credits per started MB across all files.
2618
+ */
2619
+ media?: Array<string>;
2620
+ /**
2621
+ * Body param: The post to reply to. Any X post ID works, from 1 to 19 digits.
2622
+ */
2623
+ reply_to_tweet_id?: string;
2624
+ /**
2625
+ * Body param: Tweet text (optional when media is provided)
2626
+ */
2627
+ text?: string;
2628
+ }
2629
+ export interface TweetRetrieveParams {
2630
+ /**
2631
+ * Fields to keep in each row, comma-separated. Use dots for nested fields, such as
2632
+ * author.username. A list keeps the field in each item. Case & underscores do not
2633
+ * matter. A row that lacks a field leaves it out. Cursors, counts & diagnostics
2634
+ * always stay. An unknown name answers 400 unknown_field with the valid names,
2635
+ * before any read. The price stays the same. SDK row types then hold only the
2636
+ * named fields.
2637
+ */
2638
+ fields?: string;
2639
+ /**
2640
+ * Fields to drop from each row, comma-separated. It takes the same names as
2641
+ * fields. With fields, it drops from the kept fields.
2642
+ */
2643
+ omit?: string;
2644
+ }
2645
+ export interface TweetListParams {
2646
+ /**
2647
+ * 1 to 100 posts, separated by commas. Each is a tweet ID or a tweet URL, such as
2648
+ * x.com/nasa/status/20. A post named twice is read once. Any other entry is
2649
+ * skipped & listed under `skipped` with why. A batch without 1 post gets 400
2650
+ * `invalid_tweet_id`.
2651
+ */
2652
+ ids: string;
2653
+ /**
2654
+ * Fields to keep in each row, comma-separated. Use dots for nested fields, such as
2655
+ * author.username. A list keeps the field in each item. Case & underscores do not
2656
+ * matter. A row that lacks a field leaves it out. Cursors, counts & diagnostics
2657
+ * always stay. An unknown name answers 400 unknown_field with the valid names,
2658
+ * before any read. The price stays the same. SDK row types then hold only the
2659
+ * named fields.
2660
+ */
2661
+ fields?: string;
2662
+ /**
2663
+ * Fields to drop from each row, comma-separated. It takes the same names as
2664
+ * fields. With fields, it drops from the kept fields.
2665
+ */
2666
+ omit?: string;
2667
+ }
2668
+ export interface TweetDeleteParams {
2669
+ /**
2670
+ * Body param: X account identifier (@username or account ID)
2671
+ */
2672
+ account: string;
2673
+ /**
2674
+ * Header param: Use one unique value per intended write. Reuse it only for an
2675
+ * identical retry. A matching retry returns the first answer again, with
2676
+ * idempotent: true added. It keeps the first status, body & Retry-After. It sends
2677
+ * nothing to X & charges nothing. While the first request runs, a retry returns
2678
+ * 202 & the action. Different input returns 409. Protection lasts at least 90
2679
+ * days.
2680
+ */
2681
+ 'Idempotency-Key': string;
2682
+ }
2683
+ export interface TweetCheckRepostParams {
2684
+ /**
2685
+ * User ID, username with or without @, or profile URL.
2686
+ */
2687
+ user: string;
2688
+ /**
2689
+ * Fields to keep in each row, comma-separated. Use dots for nested fields, such as
2690
+ * author.username. A list keeps the field in each item. Case & underscores do not
2691
+ * matter. A row that lacks a field leaves it out. Cursors, counts & diagnostics
2692
+ * always stay. An unknown name answers 400 unknown_field with the valid names,
2693
+ * before any read. The price stays the same. SDK row types then hold only the
2694
+ * named fields.
2695
+ */
2696
+ fields?: string;
2697
+ /**
2698
+ * Fields to drop from each row, comma-separated. It takes the same names as
2699
+ * fields. With fields, it drops from the kept fields.
2700
+ */
2701
+ omit?: string;
2702
+ }
2703
+ export interface TweetEmbedParams {
2704
+ /**
2705
+ * Fields to keep in each row, comma-separated. Use dots for nested fields, such as
2706
+ * author.username. A list keeps the field in each item. Case & underscores do not
2707
+ * matter. A row that lacks a field leaves it out. Cursors, counts & diagnostics
2708
+ * always stay. An unknown name answers 400 unknown_field with the valid names,
2709
+ * before any read. The price stays the same. SDK row types then hold only the
2710
+ * named fields.
2711
+ */
2712
+ fields?: string;
2713
+ /**
2714
+ * Set `true` to leave photos, videos, and link cards out.
2715
+ */
2716
+ hideMedia?: boolean;
2717
+ /**
2718
+ * Set `true` to leave the tweet this one replies to out.
2719
+ */
2720
+ hideThread?: boolean;
2721
+ /**
2722
+ * Fields to drop from each row, comma-separated. It takes the same names as
2723
+ * fields. With fields, it drops from the kept fields.
2724
+ */
2725
+ omit?: string;
2726
+ /**
2727
+ * Set `true` to leave the widget script tag out, for pages that load it once
2728
+ * themselves.
2729
+ */
2730
+ omitScript?: boolean;
2731
+ /**
2732
+ * Color theme of the embed. X uses light when left out.
2733
+ */
2734
+ theme?: 'light' | 'dark';
2735
+ }
2736
+ export interface TweetGetFavoritersParams {
2737
+ /**
2738
+ * Match any comma-separated or line-separated bio term, ignoring case.
2739
+ */
2740
+ bioContains?: string;
2741
+ /**
2742
+ * Only return profiles X marks as blue verified. X marks many business &
2743
+ * government accounts blue too. Use verifiedType for 1 badge type.
2744
+ */
2745
+ blueVerifiedOnly?: boolean;
2746
+ /**
2747
+ * Only return profiles that publish an email outside free webmail, such as Gmail.
2748
+ */
2749
+ businessEmailOnly?: boolean;
2750
+ /**
2751
+ * Pagination cursor for collection results. Also read as next_cursor, next_token,
2752
+ * pagination_token or continuation_token.
2753
+ */
2754
+ cursor?: string;
2755
+ /**
2756
+ * Only return profiles with an email at one of these domains. Separate domains
2757
+ * with commas. Subdomains match.
2758
+ */
2759
+ emailDomains?: string;
2760
+ /**
2761
+ * Fields to keep in each row, comma-separated. Use dots for nested fields, such as
2762
+ * author.username. A list keeps the field in each item. Case & underscores do not
2763
+ * matter. A row that lacks a field leaves it out. Cursors, counts & diagnostics
2764
+ * always stay. An unknown name answers 400 unknown_field with the valid names,
2765
+ * before any read. The price stays the same. SDK row types then hold only the
2766
+ * named fields.
2767
+ */
2768
+ fields?: string;
2769
+ /**
2770
+ * Only return profiles that publish an email.
2771
+ */
2772
+ hasEmail?: boolean;
2773
+ /**
2774
+ * Only return profiles with a location.
2775
+ */
2776
+ hasLocation?: boolean;
2777
+ /**
2778
+ * Only return profiles with a website.
2779
+ */
2780
+ hasWebsite?: boolean;
2781
+ /**
2782
+ * Match a location substring, ignoring case.
2783
+ */
2784
+ locationContains?: string;
2785
+ /**
2786
+ * Maximum follower count. Missing counts pass this maximum.
2787
+ */
2788
+ maxFollowers?: number;
2789
+ /**
2790
+ * Profiles may follow at most this many accounts.
2791
+ */
2792
+ maxFollowing?: number;
2793
+ /**
2794
+ * Maximum post count. maxPosts is also accepted.
2795
+ */
2796
+ maxStatuses?: number;
2797
+ /**
2798
+ * Minimum account age in whole days.
2799
+ */
2800
+ minAccountAgeDays?: number;
2801
+ /**
2802
+ * Minimum follower count. Filtering happens before billing.
2803
+ */
2804
+ minFollowers?: number;
2805
+ /**
2806
+ * Profiles must follow at least this many accounts.
2807
+ */
2808
+ minFollowing?: number;
2809
+ /**
2810
+ * Minimum post count. minPosts is also accepted.
2811
+ */
2812
+ minStatuses?: number;
2813
+ /**
2814
+ * Fields to drop from each row, comma-separated. It takes the same names as
2815
+ * fields. With fields, it drops from the kept fields.
2816
+ */
2817
+ omit?: string;
2818
+ /**
2819
+ * Profiles to request from this page (1-200, default 200). Source, filters or
2820
+ * credits can return fewer. Follow next_cursor for more pages. Aliases: limit,
2821
+ * count, max_results, maxItems, max_items & per_page.
2822
+ */
2823
+ pageSize?: number;
2824
+ /**
2825
+ * Match a username substring, ignoring case.
2826
+ */
2827
+ usernameContains?: string;
2828
+ /**
2829
+ * Only return verified profiles.
2830
+ */
2831
+ verifiedOnly?: boolean;
2832
+ /**
2833
+ * Match the verification type exactly, ignoring case.
2834
+ */
2835
+ verifiedType?: string;
2836
+ }
2837
+ export interface TweetGetHiddenRepliesParams {
2838
+ /**
2839
+ * Words or quoted phrases where any one can match. Separate with spaces, commas,
2840
+ * or lines.
2841
+ */
2842
+ anyWords?: string;
2843
+ /**
2844
+ * Only return tweets from Blue-verified authors.
2845
+ */
2846
+ blueVerifiedOnly?: boolean;
2847
+ /**
2848
+ * Cashtags separated by spaces, commas, or lines.
2849
+ */
2850
+ cashtags?: string;
2851
+ /**
2852
+ * Conversation ID filter.
2853
+ */
2854
+ conversationId?: string;
2855
+ /**
2856
+ * Pagination cursor for collection results. Also read as next_cursor, next_token,
2857
+ * pagination_token or continuation_token.
2858
+ */
2859
+ cursor?: string;
2860
+ /**
2861
+ * Match this literal phrase, including any hyphens.
2862
+ */
2863
+ exactPhrase?: string;
2864
+ /**
2865
+ * Words or quoted phrases to exclude. Separate with spaces, commas, or lines.
2866
+ */
2867
+ excludeWords?: string;
2868
+ /**
2869
+ * Fields to keep in each row, comma-separated. Use dots for nested fields, such as
2870
+ * author.username. A list keeps the field in each item. Case & underscores do not
2871
+ * matter. A row that lacks a field leaves it out. Cursors, counts & diagnostics
2872
+ * always stay. An unknown name answers 400 unknown_field with the valid names,
2873
+ * before any read. The price stays the same. SDK row types then hold only the
2874
+ * named fields.
943
2875
  */
944
- account: string;
2876
+ fields?: string;
945
2877
  /**
946
- * Header param: Generate one unique value for each intended write. Reuse it only
947
- * when retrying the exact same account, action, target, and payload. A reused key
948
- * returns the original action. Reusing it with different input returns 409. Replay
949
- * protection remains active for at least 90 days.
2878
+ * Filter by author username.
950
2879
  */
951
- 'Idempotency-Key': string;
2880
+ fromUser?: string;
952
2881
  /**
953
- * Body param
2882
+ * Hashtags separated by spaces, commas, or lines.
954
2883
  */
955
- community_id?: string;
2884
+ hashtags?: string;
956
2885
  /**
957
- * Body param
2886
+ * Only replies to this tweet ID.
958
2887
  */
959
- is_note_tweet?: boolean;
2888
+ inReplyToTweetId?: string;
960
2889
  /**
961
- * Body param: Array of public media URLs to attach. Supports up to 4 images or
962
- * exactly 1 MP4 video up to 100 MB. Each URL must be publicly reachable. Attached
963
- * media adds 2 credits per started MB across all files.
2890
+ * Filter by language. Alias `lang` is accepted.
964
2891
  */
965
- media?: Array<string>;
2892
+ language?: string;
966
2893
  /**
967
- * Body param
2894
+ * Maximum likes threshold. maxLikes & max_likes also work.
968
2895
  */
969
- reply_to_tweet_id?: string;
2896
+ maxFaves?: number;
970
2897
  /**
971
- * Body param: Tweet text (optional when media is provided)
2898
+ * Return Tweets at or below this ID.
972
2899
  */
973
- text?: string;
974
- }
975
- export interface TweetListParams {
2900
+ maxId?: string;
976
2901
  /**
977
- * Comma-separated tweet IDs (max 100)
2902
+ * Maximum quotes threshold.
978
2903
  */
979
- ids: string;
980
- }
981
- export interface TweetDeleteParams {
2904
+ maxQuotes?: number;
982
2905
  /**
983
- * Body param: X account identifier (@username or account ID)
2906
+ * Maximum replies threshold.
984
2907
  */
985
- account: string;
2908
+ maxReplies?: number;
986
2909
  /**
987
- * Header param: Generate one unique value for each intended write. Reuse it only
988
- * when retrying the exact same account, action, target, and payload. A reused key
989
- * returns the original action. Reusing it with different input returns 409. Replay
990
- * protection remains active for at least 90 days.
2910
+ * Maximum retweets threshold.
991
2911
  */
992
- 'Idempotency-Key': string;
993
- }
994
- export interface TweetGetFavoritersParams {
2912
+ maxRetweets?: number;
995
2913
  /**
996
- * Match any comma-separated or line-separated bio term, ignoring case.
2914
+ * Filter media. Aliases: has_video, has_media.
997
2915
  */
998
- bioContains?: string;
2916
+ mediaType?: 'images' | 'videos' | 'gifs' | 'media' | 'links' | 'none';
999
2917
  /**
1000
- * Pagination cursor for favoriters
2918
+ * Filter tweets mentioning a username.
1001
2919
  */
1002
- cursor?: string;
2920
+ mentioning?: string;
1003
2921
  /**
1004
- * Only return profiles with a location.
2922
+ * Minimum bookmark count threshold.
1005
2923
  */
1006
- hasLocation?: boolean;
2924
+ minBookmarks?: number;
1007
2925
  /**
1008
- * Only return profiles with a website.
2926
+ * Minimum likes. Aliases: minFaves, min_likes, min_faves.
1009
2927
  */
1010
- hasWebsite?: boolean;
2928
+ minLikes?: number;
1011
2929
  /**
1012
- * Match a location substring, ignoring case.
2930
+ * Minimum quote count threshold.
1013
2931
  */
1014
- locationContains?: string;
2932
+ minQuotes?: number;
1015
2933
  /**
1016
- * Maximum follower count. Missing counts pass this maximum.
2934
+ * Minimum replies threshold.
1017
2935
  */
1018
- maxFollowers?: number;
2936
+ minReplies?: number;
1019
2937
  /**
1020
- * Maximum following count.
2938
+ * Minimum retweets threshold.
1021
2939
  */
1022
- maxFollowing?: number;
2940
+ minRetweets?: number;
1023
2941
  /**
1024
- * Maximum post count. maxPosts is also accepted.
2942
+ * Minimum view count threshold.
1025
2943
  */
1026
- maxStatuses?: number;
2944
+ minViews?: number;
1027
2945
  /**
1028
- * Minimum account age in whole days.
2946
+ * Only return native reposts.
1029
2947
  */
1030
- minAccountAgeDays?: number;
2948
+ nativeRetweets?: boolean;
1031
2949
  /**
1032
- * Minimum follower count. Filtering happens before billing.
2950
+ * Fields to drop from each row, comma-separated. It takes the same names as
2951
+ * fields. With fields, it drops from the kept fields.
1033
2952
  */
1034
- minFollowers?: number;
2953
+ omit?: string;
1035
2954
  /**
1036
- * Minimum following count.
2955
+ * Items per page (1-100, default 20). Source, filters or credits can return fewer.
2956
+ * Follow next_cursor for more pages. Aliases: limit, count, max_results, maxItems,
2957
+ * max_items & per_page.
1037
2958
  */
1038
- minFollowing?: number;
2959
+ pageSize?: number;
1039
2960
  /**
1040
- * Minimum post count. minPosts is also accepted.
2961
+ * Only when the caller requests a quote mode.
1041
2962
  */
1042
- minStatuses?: number;
2963
+ quotes?: 'include' | 'exclude' | 'only';
1043
2964
  /**
1044
- * Maximum user profiles requested from this page (20-200, default 200). Source,
1045
- * filters, or credits can return fewer profiles. Keep requesting next_cursor while
1046
- * has_next_page is true. Deprecated aliases remain accepted.
2965
+ * Only quotes of this tweet ID.
1047
2966
  */
1048
- pageSize?: number;
2967
+ quotesOfTweetId?: string;
1049
2968
  /**
1050
- * Match a username substring, ignoring case.
2969
+ * Reply mode. Exclude keeps own-thread replies.
1051
2970
  */
1052
- usernameContains?: string;
2971
+ replies?: 'include' | 'exclude' | 'only';
1053
2972
  /**
1054
- * Only return verified profiles.
2973
+ * Only when the caller requests a repost mode.
2974
+ */
2975
+ retweets?: 'include' | 'exclude' | 'only';
2976
+ /**
2977
+ * Only retweets of this tweet ID.
2978
+ */
2979
+ retweetsOfTweetId?: string;
2980
+ /**
2981
+ * Start date in YYYY-MM-DD format, as a UTC day.
2982
+ */
2983
+ sinceDate?: string;
2984
+ /**
2985
+ * Return Tweets whose IDs exceed this ID.
2986
+ */
2987
+ sinceId?: string;
2988
+ /**
2989
+ * Filter replies sent to a username.
2990
+ */
2991
+ toUser?: string;
2992
+ /**
2993
+ * End date in YYYY-MM-DD format, as a UTC day, inclusive, so its own posts count.
2994
+ */
2995
+ untilDate?: string;
2996
+ /**
2997
+ * URL substring or domain filter.
2998
+ */
2999
+ url?: string;
3000
+ /**
3001
+ * Only return tweets from verified authors.
1055
3002
  */
1056
3003
  verifiedOnly?: boolean;
1057
3004
  /**
1058
- * Match the verification type exactly, ignoring case.
3005
+ * Keeps Tweets from a recent window, such as 90m or 7d. Use a whole number & s, m,
3006
+ * h or d.
1059
3007
  */
1060
- verifiedType?: string;
3008
+ withinTime?: string;
3009
+ }
3010
+ export interface TweetGetInsightsParams {
3011
+ /**
3012
+ * Fields to keep in each row, comma-separated. Use dots for nested fields, such as
3013
+ * author.username. A list keeps the field in each item. Case & underscores do not
3014
+ * matter. A row that lacks a field leaves it out. Cursors, counts & diagnostics
3015
+ * always stay. An unknown name answers 400 unknown_field with the valid names,
3016
+ * before any read. The price stays the same. SDK row types then hold only the
3017
+ * named fields.
3018
+ */
3019
+ fields?: string;
3020
+ /**
3021
+ * Fields to drop from each row, comma-separated. It takes the same names as
3022
+ * fields. With fields, it drops from the kept fields.
3023
+ */
3024
+ omit?: string;
1061
3025
  }
1062
3026
  export interface TweetGetQuotesParams {
3027
+ /**
3028
+ * Raw advanced search query appended as-is.
3029
+ */
3030
+ advancedQuery?: string;
1063
3031
  /**
1064
3032
  * Words or quoted phrases where any one can match. Separate with spaces, commas,
1065
3033
  * or lines.
@@ -1070,7 +3038,12 @@ export interface TweetGetQuotesParams {
1070
3038
  */
1071
3039
  blueVerifiedOnly?: boolean;
1072
3040
  /**
1073
- * Match the Tweet card name.
3041
+ * Geo bounding box, e.g. -74.1 40.6 -73.9 40.8.
3042
+ */
3043
+ boundingBox?: string;
3044
+ /**
3045
+ * Keep only Tweets with this card type, such as poll2choice_text_only. Tweet
3046
+ * search checks each Tweet's card.
1074
3047
  */
1075
3048
  cardName?: string;
1076
3049
  /**
@@ -1082,27 +3055,40 @@ export interface TweetGetQuotesParams {
1082
3055
  */
1083
3056
  conversationId?: string;
1084
3057
  /**
1085
- * Pagination cursor for quote tweets
3058
+ * Cursor from the previous response. Existing unprefixed cursors keep legacy
3059
+ * standard behavior. Pages can be empty before more rows; follow next_cursor. Also
3060
+ * read as next_cursor, next_token, pagination_token or continuation_token.
1086
3061
  */
1087
3062
  cursor?: string;
1088
3063
  /**
1089
- * Exact phrase to match.
3064
+ * Match this literal phrase, including any hyphens.
1090
3065
  */
1091
3066
  exactPhrase?: string;
1092
3067
  /**
1093
- * Exclude a source application.
3068
+ * X search no longer supports excludeSource. A Tweet search with it answers 424 &
3069
+ * charges nothing.
1094
3070
  */
1095
3071
  excludeSource?: string;
1096
3072
  /**
1097
3073
  * Words or quoted phrases to exclude. Separate with spaces, commas, or lines.
1098
3074
  */
1099
3075
  excludeWords?: string;
3076
+ /**
3077
+ * Fields to keep in each row, comma-separated. Use dots for nested fields, such as
3078
+ * author.username. A list keeps the field in each item. Case & underscores do not
3079
+ * matter. A row that lacks a field leaves it out. Cursors, counts & diagnostics
3080
+ * always stay. An unknown name answers 400 unknown_field with the valid names,
3081
+ * before any read. The price stays the same. SDK row types then hold only the
3082
+ * named fields.
3083
+ */
3084
+ fields?: string;
1100
3085
  /**
1101
3086
  * Filter by author username.
1102
3087
  */
1103
3088
  fromUser?: string;
1104
3089
  /**
1105
- * Match latitude, longitude, and radius.
3090
+ * X search no longer supports geocode. A Tweet search with it answers 424 &
3091
+ * charges nothing.
1106
3092
  */
1107
3093
  geocode?: string;
1108
3094
  /**
@@ -1110,7 +3096,9 @@ export interface TweetGetQuotesParams {
1110
3096
  */
1111
3097
  hashtags?: string;
1112
3098
  /**
1113
- * Include reply quotes (default false)
3099
+ * Keep replies that quote the post. Automatic pages keep them unless this is
3100
+ * false. Standard pages keep them only when it is true. Explicit replies takes
3101
+ * precedence.
1114
3102
  */
1115
3103
  includeReplies?: boolean;
1116
3104
  /**
@@ -1118,15 +3106,23 @@ export interface TweetGetQuotesParams {
1118
3106
  */
1119
3107
  inReplyToTweetId?: string;
1120
3108
  /**
1121
- * Language code filter, e.g. en or tr.
3109
+ * Words the Tweets must match, in X search syntax.
3110
+ */
3111
+ keywords?: string;
3112
+ /**
3113
+ * Filter by language. Alias `lang` is accepted.
1122
3114
  */
1123
3115
  language?: string;
1124
3116
  /**
1125
- * Maximum likes threshold. maxLikes is also accepted.
3117
+ * Search within a list ID.
3118
+ */
3119
+ listId?: string;
3120
+ /**
3121
+ * Maximum likes threshold. maxLikes & max_likes also work.
1126
3122
  */
1127
3123
  maxFaves?: number;
1128
3124
  /**
1129
- * Return Tweets older than this Tweet ID.
3125
+ * Return Tweets at or below this ID.
1130
3126
  */
1131
3127
  maxId?: string;
1132
3128
  /**
@@ -1142,7 +3138,7 @@ export interface TweetGetQuotesParams {
1142
3138
  */
1143
3139
  maxRetweets?: number;
1144
3140
  /**
1145
- * Filter by media type.
3141
+ * Filter media. Aliases: has_video, has_media.
1146
3142
  */
1147
3143
  mediaType?: 'images' | 'videos' | 'gifs' | 'media' | 'links' | 'none';
1148
3144
  /**
@@ -1154,9 +3150,13 @@ export interface TweetGetQuotesParams {
1154
3150
  */
1155
3151
  minBookmarks?: number;
1156
3152
  /**
1157
- * Minimum likes threshold. minLikes is also accepted.
3153
+ * @deprecated Use minLikes instead. The API still reads minFaves.
1158
3154
  */
1159
3155
  minFaves?: number;
3156
+ /**
3157
+ * Minimum likes. Aliases: minFaves, min_likes, min_faves.
3158
+ */
3159
+ minLikes?: number;
1160
3160
  /**
1161
3161
  * Minimum quote count threshold.
1162
3162
  */
@@ -1173,6 +3173,11 @@ export interface TweetGetQuotesParams {
1173
3173
  * Minimum view count threshold.
1174
3174
  */
1175
3175
  minViews?: number;
3176
+ /**
3177
+ * Optional legacy pagination override. Search-only filters such as keywords apply
3178
+ * only without it.
3179
+ */
3180
+ mode?: 'standard';
1176
3181
  /**
1177
3182
  * Only return native reposts.
1178
3183
  */
@@ -1182,17 +3187,41 @@ export interface TweetGetQuotesParams {
1182
3187
  */
1183
3188
  near?: string;
1184
3189
  /**
1185
- * Only return news results.
3190
+ * X no longer searches filter:news.
1186
3191
  */
1187
3192
  news?: boolean;
1188
3193
  /**
1189
- * Maximum page items (1-100, default 20). Source, filters, or credits can reduce
1190
- * results. Continue while has_next_page is true. Deprecated limit and count
1191
- * aliases remain accepted.
3194
+ * Fields to drop from each row, comma-separated. It takes the same names as
3195
+ * fields. With fields, it drops from the kept fields.
3196
+ */
3197
+ omit?: string;
3198
+ /**
3199
+ * Automatic pages accept 1-300 Tweets, standard pages 1-100. Default 20. Follow
3200
+ * next_cursor for more pages. Aliases: limit, count, max_results, maxItems,
3201
+ * max_items & per_page.
1192
3202
  */
1193
3203
  pageSize?: number;
1194
3204
  /**
1195
- * Quote mode.
3205
+ * Search within a place ID.
3206
+ */
3207
+ place?: string;
3208
+ /**
3209
+ * Search within a country code.
3210
+ */
3211
+ placeCountry?: string;
3212
+ /**
3213
+ * Geo point radius, e.g. -73.99 40.73 25mi.
3214
+ */
3215
+ pointRadius?: string;
3216
+ /**
3217
+ * Latest for newest first, or Top for the quotes X ranks highest. Top is X's
3218
+ * ranking, not a count order, & a later page can hold a quote X ranks higher. Any
3219
+ * case. Alias sort, which also takes Recency & Relevance. Send the same value with
3220
+ * each cursor. Standard pages list Latest.
3221
+ */
3222
+ queryType?: 'Latest' | 'Top';
3223
+ /**
3224
+ * Only when the caller requests a quote mode.
1196
3225
  */
1197
3226
  quotes?: 'include' | 'exclude' | 'only';
1198
3227
  /**
@@ -1200,11 +3229,11 @@ export interface TweetGetQuotesParams {
1200
3229
  */
1201
3230
  quotesOfTweetId?: string;
1202
3231
  /**
1203
- * Reply mode.
3232
+ * Reply mode. Exclude keeps own-thread replies.
1204
3233
  */
1205
3234
  replies?: 'include' | 'exclude' | 'only';
1206
3235
  /**
1207
- * Retweet mode.
3236
+ * Only when the caller requests a repost mode.
1208
3237
  */
1209
3238
  retweets?: 'include' | 'exclude' | 'only';
1210
3239
  /**
@@ -1216,19 +3245,21 @@ export interface TweetGetQuotesParams {
1216
3245
  */
1217
3246
  safe?: boolean;
1218
3247
  /**
1219
- * Start date in YYYY-MM-DD format.
3248
+ * Start date in YYYY-MM-DD format, as a UTC day.
1220
3249
  */
1221
3250
  sinceDate?: string;
1222
3251
  /**
1223
- * Return Tweets newer than this Tweet ID.
3252
+ * Return Tweets whose IDs exceed this ID.
1224
3253
  */
1225
3254
  sinceId?: string;
1226
3255
  /**
1227
- * Unix timestamp - return quotes posted after this time
3256
+ * Inclusive ISO bound for Tweet creation time, such as 2026-09-25T19:20:41Z. Unix
3257
+ * seconds also work. A time without an offset is UTC.
1228
3258
  */
1229
3259
  sinceTime?: string;
1230
3260
  /**
1231
- * Match the source application.
3261
+ * X search no longer supports source. A Tweet search with it answers 424 & charges
3262
+ * nothing.
1232
3263
  */
1233
3264
  source?: string;
1234
3265
  /**
@@ -1236,11 +3267,12 @@ export interface TweetGetQuotesParams {
1236
3267
  */
1237
3268
  toUser?: string;
1238
3269
  /**
1239
- * End date in YYYY-MM-DD format.
3270
+ * End date in YYYY-MM-DD format, as a UTC day, inclusive, so its own posts count.
1240
3271
  */
1241
3272
  untilDate?: string;
1242
3273
  /**
1243
- * Unix timestamp - return quotes posted before this time
3274
+ * Exclusive ISO bound for Tweet creation time. Unix seconds also work. A time
3275
+ * without an offset is UTC.
1244
3276
  */
1245
3277
  untilTime?: string;
1246
3278
  /**
@@ -1252,15 +3284,21 @@ export interface TweetGetQuotesParams {
1252
3284
  */
1253
3285
  verifiedOnly?: boolean;
1254
3286
  /**
1255
- * Set the radius for the near filter.
3287
+ * X search no longer supports within. A Tweet search with it answers 424 & charges
3288
+ * nothing. Use near alone.
1256
3289
  */
1257
3290
  within?: string;
1258
3291
  /**
1259
- * Match Tweets inside a recent time window.
3292
+ * Keeps Tweets from a recent window, such as 90m or 7d. Use a whole number & s, m,
3293
+ * h or d.
1260
3294
  */
1261
3295
  withinTime?: string;
1262
3296
  }
1263
3297
  export interface TweetGetRepliesParams {
3298
+ /**
3299
+ * Legacy cursor alias. Prefer cursor.
3300
+ */
3301
+ after?: string;
1264
3302
  /**
1265
3303
  * Words or quoted phrases where any one can match. Separate with spaces, commas,
1266
3304
  * or lines.
@@ -1271,7 +3309,7 @@ export interface TweetGetRepliesParams {
1271
3309
  */
1272
3310
  blueVerifiedOnly?: boolean;
1273
3311
  /**
1274
- * Match the Tweet card name.
3312
+ * @deprecated This endpoint no longer documents this filter. Remove it.
1275
3313
  */
1276
3314
  cardName?: string;
1277
3315
  /**
@@ -1283,12 +3321,13 @@ export interface TweetGetRepliesParams {
1283
3321
  */
1284
3322
  conversationId?: string;
1285
3323
  /**
1286
- * Cursor from the previous response. Xquik cursors resume automatic coverage.
1287
- * Existing unprefixed cursors keep legacy standard behavior.
3324
+ * Cursor from the previous response. Existing unprefixed cursors keep legacy
3325
+ * standard behavior. Pages can be empty before more rows; follow next_cursor. Also
3326
+ * read as next_cursor, next_token, pagination_token or continuation_token.
1288
3327
  */
1289
3328
  cursor?: string;
1290
3329
  /**
1291
- * Exact phrase to match.
3330
+ * Match this literal phrase, including any hyphens.
1292
3331
  */
1293
3332
  exactPhrase?: string;
1294
3333
  /**
@@ -1296,19 +3335,28 @@ export interface TweetGetRepliesParams {
1296
3335
  */
1297
3336
  excludeOriginalAuthor?: boolean;
1298
3337
  /**
1299
- * Exclude a source application.
3338
+ * @deprecated This endpoint no longer documents this filter. Remove it.
1300
3339
  */
1301
3340
  excludeSource?: string;
1302
3341
  /**
1303
3342
  * Words or quoted phrases to exclude. Separate with spaces, commas, or lines.
1304
3343
  */
1305
3344
  excludeWords?: string;
3345
+ /**
3346
+ * Fields to keep in each row, comma-separated. Use dots for nested fields, such as
3347
+ * author.username. A list keeps the field in each item. Case & underscores do not
3348
+ * matter. A row that lacks a field leaves it out. Cursors, counts & diagnostics
3349
+ * always stay. An unknown name answers 400 unknown_field with the valid names,
3350
+ * before any read. The price stays the same. SDK row types then hold only the
3351
+ * named fields.
3352
+ */
3353
+ fields?: string;
1306
3354
  /**
1307
3355
  * Filter by author username.
1308
3356
  */
1309
3357
  fromUser?: string;
1310
3358
  /**
1311
- * Match latitude, longitude, and radius.
3359
+ * @deprecated This endpoint no longer documents this filter. Remove it.
1312
3360
  */
1313
3361
  geocode?: string;
1314
3362
  /**
@@ -1319,6 +3367,12 @@ export interface TweetGetRepliesParams {
1319
3367
  * Only return replies containing media.
1320
3368
  */
1321
3369
  hasMediaOnly?: boolean;
3370
+ /**
3371
+ * Complete mode only. Adds the replies the post's author hid, each with
3372
+ * hiddenByAuthor true. They count toward limit like any reply. A paged read
3373
+ * answers 400. Get its hidden replies from GET /x/tweets/{id}/hidden-replies.
3374
+ */
3375
+ includeHidden?: boolean;
1322
3376
  /**
1323
3377
  * Include the source post and count it toward limit.
1324
3378
  */
@@ -1328,13 +3382,12 @@ export interface TweetGetRepliesParams {
1328
3382
  */
1329
3383
  inReplyToTweetId?: string;
1330
3384
  /**
1331
- * Language code filter, e.g. en or tr.
3385
+ * Filter by language. Alias `lang` is accepted.
1332
3386
  */
1333
3387
  language?: string;
1334
3388
  /**
1335
- * With mode=complete, maximum combined direct and nested reply rows (1-25000,
1336
- * default 25000). Automatic pages accept 1-300. Standard pages accept 1-100.
1337
- * Prefer pageSize outside complete mode.
3389
+ * Complete mode defaults to 25,000 combined direct & nested replies; set another
3390
+ * total with limit. Automatic pages accept 1-300, standard pages 1-100.
1338
3391
  */
1339
3392
  limit?: number;
1340
3393
  /**
@@ -1342,11 +3395,11 @@ export interface TweetGetRepliesParams {
1342
3395
  */
1343
3396
  maxDepth?: number;
1344
3397
  /**
1345
- * Maximum likes threshold. maxLikes is also accepted.
3398
+ * Maximum likes threshold. maxLikes & max_likes also work.
1346
3399
  */
1347
3400
  maxFaves?: number;
1348
3401
  /**
1349
- * Return Tweets older than this Tweet ID.
3402
+ * Return Tweets at or below this ID.
1350
3403
  */
1351
3404
  maxId?: string;
1352
3405
  /**
@@ -1362,7 +3415,7 @@ export interface TweetGetRepliesParams {
1362
3415
  */
1363
3416
  maxRetweets?: number;
1364
3417
  /**
1365
- * Filter by media type.
3418
+ * Filter media. Aliases: has_video, has_media.
1366
3419
  */
1367
3420
  mediaType?: 'images' | 'videos' | 'gifs' | 'media' | 'links' | 'none';
1368
3421
  /**
@@ -1374,9 +3427,13 @@ export interface TweetGetRepliesParams {
1374
3427
  */
1375
3428
  minBookmarks?: number;
1376
3429
  /**
1377
- * Minimum likes threshold. minLikes is also accepted.
3430
+ * @deprecated Use minLikes instead. The API still reads minFaves.
1378
3431
  */
1379
3432
  minFaves?: number;
3433
+ /**
3434
+ * Minimum likes. Aliases: minFaves, min_likes, min_faves.
3435
+ */
3436
+ minLikes?: number;
1380
3437
  /**
1381
3438
  * Minimum quote count threshold.
1382
3439
  */
@@ -1394,10 +3451,8 @@ export interface TweetGetRepliesParams {
1394
3451
  */
1395
3452
  minViews?: number;
1396
3453
  /**
1397
- * Optional advanced override. Omit mode for automatic maximum direct reply
1398
- * coverage with pagination. Standard keeps legacy pagination. Complete returns
1399
- * direct and nested replies with diagnostics, scope, depth, sorting, and
1400
- * original-post controls.
3454
+ * Override automatic coverage. Standard uses legacy pagination. Complete adds
3455
+ * nested replies, diagnostics, scope, depth, and original-post controls.
1401
3456
  */
1402
3457
  mode?: 'standard' | 'complete';
1403
3458
  /**
@@ -1405,20 +3460,26 @@ export interface TweetGetRepliesParams {
1405
3460
  */
1406
3461
  nativeRetweets?: boolean;
1407
3462
  /**
1408
- * Match a place name.
3463
+ * @deprecated This endpoint no longer documents this filter. Remove it.
1409
3464
  */
1410
3465
  near?: string;
1411
3466
  /**
1412
- * Only return news results.
3467
+ * @deprecated This endpoint no longer documents this filter. Remove it.
1413
3468
  */
1414
3469
  news?: boolean;
1415
3470
  /**
1416
- * Automatic pages accept 1-300 Tweets. Standard pages keep 1-100. Default 20.
1417
- * Continue while has_next_page is true. Deprecated aliases remain accepted.
3471
+ * Fields to drop from each row, comma-separated. It takes the same names as
3472
+ * fields. With fields, it drops from the kept fields.
3473
+ */
3474
+ omit?: string;
3475
+ /**
3476
+ * Automatic pages accept 1-300 Tweets, standard pages 1-100. Default 20. Follow
3477
+ * next_cursor for more pages. Aliases: limit, count, max_results, maxItems,
3478
+ * max_items & per_page.
1418
3479
  */
1419
3480
  pageSize?: number;
1420
3481
  /**
1421
- * Quote mode.
3482
+ * Only when the caller requests a quote mode.
1422
3483
  */
1423
3484
  quotes?: 'include' | 'exclude' | 'only';
1424
3485
  /**
@@ -1426,11 +3487,11 @@ export interface TweetGetRepliesParams {
1426
3487
  */
1427
3488
  quotesOfTweetId?: string;
1428
3489
  /**
1429
- * Reply mode.
3490
+ * Reply mode. Exclude keeps own-thread replies.
1430
3491
  */
1431
3492
  replies?: 'include' | 'exclude' | 'only';
1432
3493
  /**
1433
- * Retweet mode.
3494
+ * Only when the caller requests a repost mode.
1434
3495
  */
1435
3496
  retweets?: 'include' | 'exclude' | 'only';
1436
3497
  /**
@@ -1438,7 +3499,7 @@ export interface TweetGetRepliesParams {
1438
3499
  */
1439
3500
  retweetsOfTweetId?: string;
1440
3501
  /**
1441
- * Enable the safe-search filter.
3502
+ * @deprecated This endpoint no longer documents this filter. Remove it.
1442
3503
  */
1443
3504
  safe?: boolean;
1444
3505
  /**
@@ -1446,23 +3507,29 @@ export interface TweetGetRepliesParams {
1446
3507
  */
1447
3508
  scope?: 'all' | 'direct' | 'nested';
1448
3509
  /**
1449
- * Start date in YYYY-MM-DD format.
3510
+ * Start date in YYYY-MM-DD format, as a UTC day.
1450
3511
  */
1451
3512
  sinceDate?: string;
1452
3513
  /**
1453
- * Return Tweets newer than this Tweet ID.
3514
+ * Return Tweets whose IDs exceed this ID.
1454
3515
  */
1455
3516
  sinceId?: string;
1456
3517
  /**
1457
- * Unix timestamp - return replies posted after this time
3518
+ * Inclusive ISO bound for Tweet creation time, such as 2026-09-25T19:20:41Z. Unix
3519
+ * seconds also work. A time without an offset is UTC.
1458
3520
  */
1459
3521
  sinceTime?: string;
1460
3522
  /**
1461
- * Sort the selected replies before applying limit.
3523
+ * Sorts the selected replies before limit applies. Complete mode defaults to
3524
+ * relevance. Automatic pages list the newest first unless you set sort; standard
3525
+ * pages ignore it. With likes, each page is sorted by likes. A later page can hold
3526
+ * a reply with more likes. The order is final on the last page. Latest & oldest
3527
+ * sort every row by date. They read the whole thread first, for up to 20 s. An
3528
+ * answer that stopped before every reply X shows sets orderPartial.
1462
3529
  */
1463
3530
  sort?: 'relevance' | 'latest' | 'oldest' | 'likes';
1464
3531
  /**
1465
- * Match the source application.
3532
+ * @deprecated This endpoint no longer documents this filter. Remove it.
1466
3533
  */
1467
3534
  source?: string;
1468
3535
  /**
@@ -1470,11 +3537,12 @@ export interface TweetGetRepliesParams {
1470
3537
  */
1471
3538
  toUser?: string;
1472
3539
  /**
1473
- * End date in YYYY-MM-DD format.
3540
+ * End date in YYYY-MM-DD format, as a UTC day, inclusive, so its own posts count.
1474
3541
  */
1475
3542
  untilDate?: string;
1476
3543
  /**
1477
- * Unix timestamp - return replies posted before this time
3544
+ * Exclusive ISO bound for Tweet creation time. Unix seconds also work. A time
3545
+ * without an offset is UTC.
1478
3546
  */
1479
3547
  untilTime?: string;
1480
3548
  /**
@@ -1486,23 +3554,70 @@ export interface TweetGetRepliesParams {
1486
3554
  */
1487
3555
  verifiedOnly?: boolean;
1488
3556
  /**
1489
- * Set the radius for the near filter.
3557
+ * @deprecated This endpoint no longer documents this filter. Remove it.
1490
3558
  */
1491
3559
  within?: string;
1492
3560
  /**
1493
- * Match Tweets inside a recent time window.
3561
+ * Keeps Tweets from a recent window, such as 90m or 7d. Use a whole number & s, m,
3562
+ * h or d.
1494
3563
  */
1495
3564
  withinTime?: string;
1496
3565
  }
3566
+ export interface TweetGetRetweeterIDsParams {
3567
+ /**
3568
+ * Pagination cursor for collection results. Also read as next_cursor, next_token,
3569
+ * pagination_token or continuation_token.
3570
+ */
3571
+ cursor?: string;
3572
+ /**
3573
+ * Profiles to request from this page (1-200, default 200). Source, filters or
3574
+ * credits can return fewer. Follow next_cursor for more pages. Aliases: limit,
3575
+ * count, max_results, maxItems, max_items & per_page.
3576
+ */
3577
+ pageSize?: number;
3578
+ }
1497
3579
  export interface TweetGetRetweetersParams {
1498
3580
  /**
1499
3581
  * Match any comma-separated or line-separated bio term, ignoring case.
1500
3582
  */
1501
3583
  bioContains?: string;
1502
3584
  /**
1503
- * Pagination cursor for retweeters
3585
+ * Only return profiles X marks as blue verified. X marks many business &
3586
+ * government accounts blue too. Use verifiedType for 1 badge type.
3587
+ */
3588
+ blueVerifiedOnly?: boolean;
3589
+ /**
3590
+ * Only return profiles that publish an email outside free webmail, such as Gmail.
3591
+ */
3592
+ businessEmailOnly?: boolean;
3593
+ /**
3594
+ * Pagination cursor for collection results. Also read as next_cursor, next_token,
3595
+ * pagination_token or continuation_token.
1504
3596
  */
1505
3597
  cursor?: string;
3598
+ /**
3599
+ * Only return profiles with an email at one of these domains. Separate domains
3600
+ * with commas. Subdomains match.
3601
+ */
3602
+ emailDomains?: string;
3603
+ /**
3604
+ * Add each row's full profile, as GET /x/users/{id} returns it. Pages take several
3605
+ * seconds longer.
3606
+ */
3607
+ enrichProfiles?: boolean;
3608
+ /**
3609
+ * Fields to keep in each row, comma-separated. Use dots for nested fields, such as
3610
+ * author.username. A list keeps the field in each item. Case & underscores do not
3611
+ * matter. A row that lacks a field leaves it out. Cursors, counts & diagnostics
3612
+ * always stay. An unknown name answers 400 unknown_field with the valid names,
3613
+ * before any read. The price stays the same. SDK row types then hold only the
3614
+ * named fields.
3615
+ */
3616
+ fields?: string;
3617
+ /**
3618
+ * Only return profiles that publish an email.
3619
+ */
3620
+ hasEmail?: boolean;
1506
3621
  /**
1507
3622
  * Only return profiles with a location.
1508
3623
  */
@@ -1511,6 +3626,10 @@ export interface TweetGetRetweetersParams {
1511
3626
  * Only return profiles with a website.
1512
3627
  */
1513
3628
  hasWebsite?: boolean;
3629
+ /**
3630
+ * Look up repost event times.
3631
+ */
3632
+ includeRetweetTimestamp?: boolean;
1514
3633
  /**
1515
3634
  * Match a location substring, ignoring case.
1516
3635
  */
@@ -1520,7 +3639,7 @@ export interface TweetGetRetweetersParams {
1520
3639
  */
1521
3640
  maxFollowers?: number;
1522
3641
  /**
1523
- * Maximum following count.
3642
+ * Profiles may follow at most this many accounts.
1524
3643
  */
1525
3644
  maxFollowing?: number;
1526
3645
  /**
@@ -1536,7 +3655,7 @@ export interface TweetGetRetweetersParams {
1536
3655
  */
1537
3656
  minFollowers?: number;
1538
3657
  /**
1539
- * Minimum following count.
3658
+ * Profiles must follow at least this many accounts.
1540
3659
  */
1541
3660
  minFollowing?: number;
1542
3661
  /**
@@ -1544,9 +3663,14 @@ export interface TweetGetRetweetersParams {
1544
3663
  */
1545
3664
  minStatuses?: number;
1546
3665
  /**
1547
- * Maximum user profiles requested from this page (20-200, default 200). Source,
1548
- * filters, or credits can return fewer profiles. Keep requesting next_cursor while
1549
- * has_next_page is true. Deprecated aliases remain accepted.
3666
+ * Fields to drop from each row, comma-separated. It takes the same names as
3667
+ * fields. With fields, it drops from the kept fields.
3668
+ */
3669
+ omit?: string;
3670
+ /**
3671
+ * Profiles to request from this page (1-200, default 200). Source, filters or
3672
+ * credits can return fewer. Follow next_cursor for more pages. Aliases: limit,
3673
+ * count, max_results, maxItems, max_items & per_page.
1550
3674
  */
1551
3675
  pageSize?: number;
1552
3676
  /**
@@ -1562,6 +3686,22 @@ export interface TweetGetRetweetersParams {
1562
3686
  */
1563
3687
  verifiedType?: string;
1564
3688
  }
3689
+ export interface TweetGetSubtitlesParams {
3690
+ /**
3691
+ * Fields to keep in each row, comma-separated. Use dots for nested fields, such as
3692
+ * author.username. A list keeps the field in each item. Case & underscores do not
3693
+ * matter. A row that lacks a field leaves it out. Cursors, counts & diagnostics
3694
+ * always stay. An unknown name answers 400 unknown_field with the valid names,
3695
+ * before any read. The price stays the same. SDK row types then hold only the
3696
+ * named fields.
3697
+ */
3698
+ fields?: string;
3699
+ /**
3700
+ * Fields to drop from each row, comma-separated. It takes the same names as
3701
+ * fields. With fields, it drops from the kept fields.
3702
+ */
3703
+ omit?: string;
3704
+ }
1565
3705
  export interface TweetGetThreadParams {
1566
3706
  /**
1567
3707
  * Words or quoted phrases where any one can match. Separate with spaces, commas,
@@ -1581,17 +3721,27 @@ export interface TweetGetThreadParams {
1581
3721
  */
1582
3722
  conversationId?: string;
1583
3723
  /**
1584
- * Pagination cursor for thread tweets
3724
+ * Pagination cursor for collection results. Also read as next_cursor, next_token,
3725
+ * pagination_token or continuation_token.
1585
3726
  */
1586
3727
  cursor?: string;
1587
3728
  /**
1588
- * Exact phrase to match.
3729
+ * Match this literal phrase, including any hyphens.
1589
3730
  */
1590
3731
  exactPhrase?: string;
1591
3732
  /**
1592
3733
  * Words or quoted phrases to exclude. Separate with spaces, commas, or lines.
1593
3734
  */
1594
3735
  excludeWords?: string;
3736
+ /**
3737
+ * Fields to keep in each row, comma-separated. Use dots for nested fields, such as
3738
+ * author.username. A list keeps the field in each item. Case & underscores do not
3739
+ * matter. A row that lacks a field leaves it out. Cursors, counts & diagnostics
3740
+ * always stay. An unknown name answers 400 unknown_field with the valid names,
3741
+ * before any read. The price stays the same. SDK row types then hold only the
3742
+ * named fields.
3743
+ */
3744
+ fields?: string;
1595
3745
  /**
1596
3746
  * Filter by author username.
1597
3747
  */
@@ -1605,13 +3755,17 @@ export interface TweetGetThreadParams {
1605
3755
  */
1606
3756
  inReplyToTweetId?: string;
1607
3757
  /**
1608
- * Language code filter, e.g. en or tr.
3758
+ * Filter by language. Alias `lang` is accepted.
1609
3759
  */
1610
3760
  language?: string;
1611
3761
  /**
1612
- * Maximum likes threshold. maxLikes is also accepted.
3762
+ * Maximum likes threshold. maxLikes & max_likes also work.
1613
3763
  */
1614
3764
  maxFaves?: number;
3765
+ /**
3766
+ * Return Tweets at or below this ID.
3767
+ */
3768
+ maxId?: string;
1615
3769
  /**
1616
3770
  * Maximum quotes threshold.
1617
3771
  */
@@ -1625,7 +3779,7 @@ export interface TweetGetThreadParams {
1625
3779
  */
1626
3780
  maxRetweets?: number;
1627
3781
  /**
1628
- * Filter by media type.
3782
+ * Filter media. Aliases: has_video, has_media.
1629
3783
  */
1630
3784
  mediaType?: 'images' | 'videos' | 'gifs' | 'media' | 'links' | 'none';
1631
3785
  /**
@@ -1637,9 +3791,13 @@ export interface TweetGetThreadParams {
1637
3791
  */
1638
3792
  minBookmarks?: number;
1639
3793
  /**
1640
- * Minimum likes threshold. minLikes is also accepted.
3794
+ * @deprecated Use minLikes instead. The API still reads minFaves.
1641
3795
  */
1642
3796
  minFaves?: number;
3797
+ /**
3798
+ * Minimum likes. Aliases: minFaves, min_likes, min_faves.
3799
+ */
3800
+ minLikes?: number;
1643
3801
  /**
1644
3802
  * Minimum quote count threshold.
1645
3803
  */
@@ -1657,13 +3815,22 @@ export interface TweetGetThreadParams {
1657
3815
  */
1658
3816
  minViews?: number;
1659
3817
  /**
1660
- * Maximum page items (1-100, default 20). Source, filters, or credits can reduce
1661
- * results. Continue while has_next_page is true. Deprecated limit and count
1662
- * aliases remain accepted.
3818
+ * Only return native reposts.
3819
+ */
3820
+ nativeRetweets?: boolean;
3821
+ /**
3822
+ * Fields to drop from each row, comma-separated. It takes the same names as
3823
+ * fields. With fields, it drops from the kept fields.
3824
+ */
3825
+ omit?: string;
3826
+ /**
3827
+ * Items per page (1-100, default 20). Source, filters or credits can return fewer.
3828
+ * Follow next_cursor for more pages. Aliases: limit, count, max_results, maxItems,
3829
+ * max_items & per_page.
1663
3830
  */
1664
3831
  pageSize?: number;
1665
3832
  /**
1666
- * Quote mode.
3833
+ * Only when the caller requests a quote mode.
1667
3834
  */
1668
3835
  quotes?: 'include' | 'exclude' | 'only';
1669
3836
  /**
@@ -1671,11 +3838,11 @@ export interface TweetGetThreadParams {
1671
3838
  */
1672
3839
  quotesOfTweetId?: string;
1673
3840
  /**
1674
- * Reply mode.
3841
+ * Reply mode. Exclude keeps own-thread replies.
1675
3842
  */
1676
3843
  replies?: 'include' | 'exclude' | 'only';
1677
3844
  /**
1678
- * Retweet mode.
3845
+ * Only when the caller requests a repost mode.
1679
3846
  */
1680
3847
  retweets?: 'include' | 'exclude' | 'only';
1681
3848
  /**
@@ -1683,15 +3850,19 @@ export interface TweetGetThreadParams {
1683
3850
  */
1684
3851
  retweetsOfTweetId?: string;
1685
3852
  /**
1686
- * Start date in YYYY-MM-DD format.
3853
+ * Start date in YYYY-MM-DD format, as a UTC day.
1687
3854
  */
1688
3855
  sinceDate?: string;
3856
+ /**
3857
+ * Return Tweets whose IDs exceed this ID.
3858
+ */
3859
+ sinceId?: string;
1689
3860
  /**
1690
3861
  * Filter replies sent to a username.
1691
3862
  */
1692
3863
  toUser?: string;
1693
3864
  /**
1694
- * End date in YYYY-MM-DD format.
3865
+ * End date in YYYY-MM-DD format, as a UTC day, inclusive, so its own posts count.
1695
3866
  */
1696
3867
  untilDate?: string;
1697
3868
  /**
@@ -1702,10 +3873,90 @@ export interface TweetGetThreadParams {
1702
3873
  * Only return tweets from verified authors.
1703
3874
  */
1704
3875
  verifiedOnly?: boolean;
3876
+ /**
3877
+ * Keeps Tweets from a recent window, such as 90m or 7d. Use a whole number & s, m,
3878
+ * h or d.
3879
+ */
3880
+ withinTime?: string;
3881
+ }
3882
+ export interface TweetListTopParams {
3883
+ /**
3884
+ * Only tweets from one country, as a 2- or 3-letter ISO 3166 code, such as US or
3885
+ * USA. Send country or language, not both.
3886
+ */
3887
+ country?: string;
3888
+ /**
3889
+ * Pagination cursor for collection results. Also read as next_cursor, next_token,
3890
+ * pagination_token or continuation_token.
3891
+ */
3892
+ cursor?: string;
3893
+ /**
3894
+ * Fields to keep in each row, comma-separated. Use dots for nested fields, such as
3895
+ * author.username. A list keeps the field in each item. Case & underscores do not
3896
+ * matter. A row that lacks a field leaves it out. Cursors, counts & diagnostics
3897
+ * always stay. An unknown name answers 400 unknown_field with the valid names,
3898
+ * before any read. The price stays the same. SDK row types then hold only the
3899
+ * named fields.
3900
+ */
3901
+ fields?: string;
3902
+ /**
3903
+ * Only tweets in one language, as a 2-letter code, such as en. Send country or
3904
+ * language, not both.
3905
+ */
3906
+ language?: string;
3907
+ /**
3908
+ * What to rank tweets by. Defaults to likes. Singular names work too, such as
3909
+ * like.
3910
+ */
3911
+ metric?: 'likes' | 'replies' | 'quotes' | 'bookmarks' | 'shares' | 'views';
3912
+ /**
3913
+ * Fields to drop from each row, comma-separated. It takes the same names as
3914
+ * fields. With fields, it drops from the kept fields.
3915
+ */
3916
+ omit?: string;
3917
+ /**
3918
+ * Items per page (1-100, default 20). Source, filters or credits can return fewer.
3919
+ * Follow next_cursor for more pages. Aliases: limit, count, max_results, maxItems,
3920
+ * max_items & per_page.
3921
+ */
3922
+ pageSize?: number;
3923
+ /**
3924
+ * How far back to look. Defaults to day. Also takes 24h, 7d, 30d, daily, weekly
3925
+ * and monthly.
3926
+ */
3927
+ window?: 'day' | 'week' | 'month';
3928
+ }
3929
+ export interface TweetResolveLinksParams {
3930
+ /**
3931
+ * 1 to 100 links of the form `https://t.co/Xe1nm2pkSX`, separated by commas. Any
3932
+ * other link is refused.
3933
+ */
3934
+ urls: string;
3935
+ /**
3936
+ * Fields to keep in each row, comma-separated. Use dots for nested fields, such as
3937
+ * author.username. A list keeps the field in each item. Case & underscores do not
3938
+ * matter. A row that lacks a field leaves it out. Cursors, counts & diagnostics
3939
+ * always stay. An unknown name answers 400 unknown_field with the valid names,
3940
+ * before any read. The price stays the same. SDK row types then hold only the
3941
+ * named fields.
3942
+ */
3943
+ fields?: string;
3944
+ /**
3945
+ * Fields to drop from each row, comma-separated. It takes the same names as
3946
+ * fields. With fields, it drops from the kept fields.
3947
+ */
3948
+ omit?: string;
1705
3949
  }
1706
3950
  export interface TweetSearchParams {
1707
3951
  /**
1708
- * Query, Tweet ID, or status URL. Valid inline bounds apply per page.
3952
+ * Query, Tweet ID, or URL. Alias query. Hyphens negate terms. Use exactPhrase for
3953
+ * literals. Valid bounds apply per page. `since:` & `until:` dates are UTC days,
3954
+ * written YYYY-MM-DD. 25/12/2026 & 12/25/2026 also work, since each has 1 reading.
3955
+ * 04/01/2026 has 2 & answers 424 with the form to write. `since_time:` &
3956
+ * `until_time:` take Unix seconds or an ISO 8601 time. `list:` takes a public
3957
+ * List's ID. A private List answers 404 list_not_found. X searches up to 512
3958
+ * characters. A longer query answers 424 before any read, unless a term of its
3959
+ * first OR group fits alone.
1709
3960
  */
1710
3961
  q: string;
1711
3962
  /**
@@ -1726,7 +3977,8 @@ export interface TweetSearchParams {
1726
3977
  */
1727
3978
  boundingBox?: string;
1728
3979
  /**
1729
- * Match the Tweet card name.
3980
+ * Keep only Tweets with this card type, such as poll2choice_text_only. Tweet
3981
+ * search checks each Tweet's card.
1730
3982
  */
1731
3983
  cardName?: string;
1732
3984
  /**
@@ -1738,28 +3990,40 @@ export interface TweetSearchParams {
1738
3990
  */
1739
3991
  conversationId?: string;
1740
3992
  /**
1741
- * Cursor from the previous response. Xquik cursors resume automatic coverage.
1742
- * Existing unprefixed cursors keep legacy standard behavior.
3993
+ * Cursor from the previous response. Existing unprefixed cursors keep legacy
3994
+ * standard behavior. Pages can be empty before more rows; follow next_cursor. Also
3995
+ * read as next_cursor, next_token, pagination_token or continuation_token.
1743
3996
  */
1744
3997
  cursor?: string;
1745
3998
  /**
1746
- * Exact phrase to match.
3999
+ * Match this literal phrase, including any hyphens.
1747
4000
  */
1748
4001
  exactPhrase?: string;
1749
4002
  /**
1750
- * Exclude a source application.
4003
+ * X search no longer supports excludeSource. A Tweet search with it answers 424 &
4004
+ * charges nothing.
1751
4005
  */
1752
4006
  excludeSource?: string;
1753
4007
  /**
1754
4008
  * Words or quoted phrases to exclude. Separate with spaces, commas, or lines.
1755
4009
  */
1756
4010
  excludeWords?: string;
4011
+ /**
4012
+ * Fields to keep in each row, comma-separated. Use dots for nested fields, such as
4013
+ * author.username. A list keeps the field in each item. Case & underscores do not
4014
+ * matter. A row that lacks a field leaves it out. Cursors, counts & diagnostics
4015
+ * always stay. An unknown name answers 400 unknown_field with the valid names,
4016
+ * before any read. The price stays the same. SDK row types then hold only the
4017
+ * named fields.
4018
+ */
4019
+ fields?: string;
1757
4020
  /**
1758
4021
  * Filter by author username.
1759
4022
  */
1760
4023
  fromUser?: string;
1761
4024
  /**
1762
- * Match latitude, longitude, and radius.
4025
+ * X search no longer supports geocode. A Tweet search with it answers 424 &
4026
+ * charges nothing.
1763
4027
  */
1764
4028
  geocode?: string;
1765
4029
  /**
@@ -1771,13 +4035,18 @@ export interface TweetSearchParams {
1771
4035
  */
1772
4036
  inReplyToTweetId?: string;
1773
4037
  /**
1774
- * Language code filter, e.g. en or tr.
4038
+ * Words the Tweets must match, in X search syntax.
4039
+ */
4040
+ keywords?: string;
4041
+ /**
4042
+ * Filter by language. Alias `lang` is accepted.
1775
4043
  */
1776
4044
  language?: string;
1777
4045
  /**
1778
- * Result upper bound. Omit it for the existing 20-row page size. Explicit coverage
1779
- * defaults to 2000 and allows 10000. For paid requests, remaining credits can
1780
- * reduce results. Zero affordable results returns 402.
4046
+ * Most unique matches to return after filtering. Default 20; explicit coverage
4047
+ * defaults to 2000. At the deadline it returns kept rows & diagnostics. Only
4048
+ * returned rows are billed; credits can cut results, & 0 affordable rows returns
4049
+ * 402. Aliases: pageSize, count, max_results, maxItems, max_items & per_page.
1781
4050
  */
1782
4051
  limit?: number;
1783
4052
  /**
@@ -1785,11 +4054,11 @@ export interface TweetSearchParams {
1785
4054
  */
1786
4055
  listId?: string;
1787
4056
  /**
1788
- * Maximum likes threshold. maxLikes is also accepted.
4057
+ * Maximum likes threshold. maxLikes & max_likes also work.
1789
4058
  */
1790
4059
  maxFaves?: number;
1791
4060
  /**
1792
- * Return Tweets older than this Tweet ID.
4061
+ * Return Tweets at or below this ID.
1793
4062
  */
1794
4063
  maxId?: string;
1795
4064
  /**
@@ -1805,7 +4074,7 @@ export interface TweetSearchParams {
1805
4074
  */
1806
4075
  maxRetweets?: number;
1807
4076
  /**
1808
- * Filter by media type.
4077
+ * Filter media. Aliases: has_video, has_media.
1809
4078
  */
1810
4079
  mediaType?: 'images' | 'videos' | 'gifs' | 'media' | 'links' | 'none';
1811
4080
  /**
@@ -1817,9 +4086,13 @@ export interface TweetSearchParams {
1817
4086
  */
1818
4087
  minBookmarks?: number;
1819
4088
  /**
1820
- * Minimum likes threshold. minLikes is also accepted.
4089
+ * @deprecated Use minLikes instead. The API still reads minFaves.
1821
4090
  */
1822
4091
  minFaves?: number;
4092
+ /**
4093
+ * Minimum likes. Aliases: minFaves, min_likes, min_faves.
4094
+ */
4095
+ minLikes?: number;
1823
4096
  /**
1824
4097
  * Minimum quote count threshold.
1825
4098
  */
@@ -1850,9 +4123,14 @@ export interface TweetSearchParams {
1850
4123
  */
1851
4124
  near?: string;
1852
4125
  /**
1853
- * Only return news results.
4126
+ * X no longer searches filter:news.
1854
4127
  */
1855
4128
  news?: boolean;
4129
+ /**
4130
+ * Fields to drop from each row, comma-separated. It takes the same names as
4131
+ * fields. With fields, it drops from the kept fields.
4132
+ */
4133
+ omit?: string;
1856
4134
  /**
1857
4135
  * Search within a place ID.
1858
4136
  */
@@ -1866,11 +4144,17 @@ export interface TweetSearchParams {
1866
4144
  */
1867
4145
  pointRadius?: string;
1868
4146
  /**
1869
- * Sort order - Latest (chronological) or Top (engagement-ranked)
4147
+ * Latest lists posts newest first. Top keeps X's engagement ranking within each
4148
+ * read. Xquik reads several of X's views, so a later page can hold a post X ranks
4149
+ * higher. Top skips posts X shows above a ranked reply that cannot match the
4150
+ * query. They cost nothing. Any case works. Photos, Videos & Media read Latest
4151
+ * with mediaType images, videos or media, unless mediaType is set. People & Lists
4152
+ * answer 400 & point to /x/users/search & /x/lists/search. Aliases result_type,
4153
+ * sort_order, type, search_type, product, category & section.
1870
4154
  */
1871
- queryType?: 'Latest' | 'Top';
4155
+ queryType?: string;
1872
4156
  /**
1873
- * Quote mode.
4157
+ * Only when the caller requests a quote mode.
1874
4158
  */
1875
4159
  quotes?: 'include' | 'exclude' | 'only';
1876
4160
  /**
@@ -1878,11 +4162,11 @@ export interface TweetSearchParams {
1878
4162
  */
1879
4163
  quotesOfTweetId?: string;
1880
4164
  /**
1881
- * Reply mode.
4165
+ * Reply mode. Exclude keeps own-thread replies.
1882
4166
  */
1883
4167
  replies?: 'include' | 'exclude' | 'only';
1884
4168
  /**
1885
- * Retweet mode.
4169
+ * Only when the caller requests a repost mode.
1886
4170
  */
1887
4171
  retweets?: 'include' | 'exclude' | 'only';
1888
4172
  /**
@@ -1894,19 +4178,23 @@ export interface TweetSearchParams {
1894
4178
  */
1895
4179
  safe?: boolean;
1896
4180
  /**
1897
- * Start date in YYYY-MM-DD format.
4181
+ * Start date as a UTC day, written YYYY-MM-DD. 25/12/2026 & 12/25/2026 also work,
4182
+ * since each has 1 reading. A date that fits both orders reads month first, so
4183
+ * 04/01/2026 is 1 April.
1898
4184
  */
1899
4185
  sinceDate?: string;
1900
4186
  /**
1901
- * Return Tweets newer than this Tweet ID.
4187
+ * Return Tweets whose IDs exceed this ID.
1902
4188
  */
1903
4189
  sinceId?: string;
1904
4190
  /**
1905
- * Inclusive ISO bound.
4191
+ * Inclusive ISO bound for Tweet creation time, such as 2026-09-25T19:20:41Z. Unix
4192
+ * seconds also work. A time without an offset is UTC.
1906
4193
  */
1907
4194
  sinceTime?: string;
1908
4195
  /**
1909
- * Match the source application.
4196
+ * X search no longer supports source. A Tweet search with it answers 424 & charges
4197
+ * nothing.
1910
4198
  */
1911
4199
  source?: string;
1912
4200
  /**
@@ -1914,11 +4202,13 @@ export interface TweetSearchParams {
1914
4202
  */
1915
4203
  toUser?: string;
1916
4204
  /**
1917
- * End date in YYYY-MM-DD format.
4205
+ * End date as a UTC day, inclusive, so its own posts count. It takes the same date
4206
+ * forms as sinceDate.
1918
4207
  */
1919
4208
  untilDate?: string;
1920
4209
  /**
1921
- * Exclusive ISO bound.
4210
+ * Exclusive ISO bound for Tweet creation time. Unix seconds also work. A time
4211
+ * without an offset is UTC.
1922
4212
  */
1923
4213
  untilTime?: string;
1924
4214
  /**
@@ -1930,16 +4220,39 @@ export interface TweetSearchParams {
1930
4220
  */
1931
4221
  verifiedOnly?: boolean;
1932
4222
  /**
1933
- * Set the radius for the near filter.
4223
+ * X search no longer supports within. A Tweet search with it answers 424 & charges
4224
+ * nothing. Use near alone.
1934
4225
  */
1935
4226
  within?: string;
1936
4227
  /**
1937
- * Match Tweets inside a recent time window.
4228
+ * Keeps Tweets from a recent window, such as 90m or 7d. Use a whole number & s, m,
4229
+ * h or d.
1938
4230
  */
1939
4231
  withinTime?: string;
1940
4232
  }
4233
+ export interface TweetTranslateParams {
4234
+ /**
4235
+ * Language code to translate into, such as `en`, `tr`, `pt-br`, or `zh-tw`. Upper
4236
+ * and lower case both work.
4237
+ */
4238
+ language: string;
4239
+ /**
4240
+ * Fields to keep in each row, comma-separated. Use dots for nested fields, such as
4241
+ * author.username. A list keeps the field in each item. Case & underscores do not
4242
+ * matter. A row that lacks a field leaves it out. Cursors, counts & diagnostics
4243
+ * always stay. An unknown name answers 400 unknown_field with the valid names,
4244
+ * before any read. The price stays the same. SDK row types then hold only the
4245
+ * named fields.
4246
+ */
4247
+ fields?: string;
4248
+ /**
4249
+ * Fields to drop from each row, comma-separated. It takes the same names as
4250
+ * fields. With fields, it drops from the kept fields.
4251
+ */
4252
+ omit?: string;
4253
+ }
1941
4254
  export declare namespace Tweets {
1942
- export { type TweetAuthor as TweetAuthor, type TweetDetail as TweetDetail, type TweetCreateResponse as TweetCreateResponse, type TweetRetrieveResponse as TweetRetrieveResponse, type TweetDeleteResponse as TweetDeleteResponse, type TweetGetRepliesResponse as TweetGetRepliesResponse, type TweetSearchResponse as TweetSearchResponse, type TweetCreateParams as TweetCreateParams, type TweetListParams as TweetListParams, type TweetDeleteParams as TweetDeleteParams, type TweetGetFavoritersParams as TweetGetFavoritersParams, type TweetGetQuotesParams as TweetGetQuotesParams, type TweetGetRepliesParams as TweetGetRepliesParams, type TweetGetRetweetersParams as TweetGetRetweetersParams, type TweetGetThreadParams as TweetGetThreadParams, type TweetSearchParams as TweetSearchParams, };
4255
+ export { type TweetAuthor as TweetAuthor, type TweetDetail as TweetDetail, type TweetCreateResponse as TweetCreateResponse, type TweetRetrieveResponse as TweetRetrieveResponse, type TweetListResponse as TweetListResponse, type TweetDeleteResponse as TweetDeleteResponse, type TweetCheckRepostResponse as TweetCheckRepostResponse, type TweetEmbedResponse as TweetEmbedResponse, type TweetGetInsightsResponse as TweetGetInsightsResponse, type TweetGetRepliesResponse as TweetGetRepliesResponse, type TweetGetRetweeterIDsResponse as TweetGetRetweeterIDsResponse, type TweetGetSubtitlesResponse as TweetGetSubtitlesResponse, type TweetResolveLinksResponse as TweetResolveLinksResponse, type TweetSearchResponse as TweetSearchResponse, type TweetTranslateResponse as TweetTranslateResponse, type TweetCreateParams as TweetCreateParams, type TweetRetrieveParams as TweetRetrieveParams, type TweetListParams as TweetListParams, type TweetDeleteParams as TweetDeleteParams, type TweetCheckRepostParams as TweetCheckRepostParams, type TweetEmbedParams as TweetEmbedParams, type TweetGetFavoritersParams as TweetGetFavoritersParams, type TweetGetHiddenRepliesParams as TweetGetHiddenRepliesParams, type TweetGetInsightsParams as TweetGetInsightsParams, type TweetGetQuotesParams as TweetGetQuotesParams, type TweetGetRepliesParams as TweetGetRepliesParams, type TweetGetRetweeterIDsParams as TweetGetRetweeterIDsParams, type TweetGetRetweetersParams as TweetGetRetweetersParams, type TweetGetSubtitlesParams as TweetGetSubtitlesParams, type TweetGetThreadParams as TweetGetThreadParams, type TweetListTopParams as TweetListTopParams, type TweetResolveLinksParams as TweetResolveLinksParams, type TweetSearchParams as TweetSearchParams, type TweetTranslateParams as TweetTranslateParams, };
1943
4256
  export { Like as Like, type LikeCreateResponse as LikeCreateResponse, type LikeDeleteResponse as LikeDeleteResponse, type LikeCreateParams as LikeCreateParams, type LikeDeleteParams as LikeDeleteParams, };
1944
4257
  export { Retweet as Retweet, type RetweetCreateResponse as RetweetCreateResponse, type RetweetDeleteResponse as RetweetDeleteResponse, type RetweetCreateParams as RetweetCreateParams, type RetweetDeleteParams as RetweetDeleteParams, };
1945
4258
  }