x-twitter-scraper 0.12.4 → 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 (466) hide show
  1. package/CHANGELOG.md +65 -0
  2. package/README.md +30 -9
  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 +99 -344
  389. package/skills/x-twitter-scraper/metadata.json +2 -2
  390. package/skills/x-twitter-scraper/references/mcp-setup.md +12 -15
  391. package/skills/x-twitter-scraper/references/mcp-tools.md +105 -166
  392. package/skills/x-twitter-scraper/references/types-mcp-output-schemas.md +4 -4
  393. package/skills/x-twitter-scraper/references/types.md +0 -1
  394. package/skills/x-twitter-scraper/skill-card.md +5 -6
  395. package/skills/x-twitter-scraper/skillspector-report.md +6 -3
  396. package/skills/xquik-account-automation/LICENSE +21 -0
  397. package/skills/xquik-account-automation/SKILL.md +91 -0
  398. package/skills/xquik-social-research/SKILL.md +48 -55
  399. package/src/client.ts +47 -4
  400. package/src/core/streaming.ts +328 -0
  401. package/src/internal/decoders/line.ts +140 -0
  402. package/src/internal/parse.ts +9 -0
  403. package/src/resources/account.ts +41 -12
  404. package/src/resources/compose.ts +77 -21
  405. package/src/resources/credits.ts +19 -10
  406. package/src/resources/drafts.ts +13 -22
  407. package/src/resources/draws.ts +94 -36
  408. package/src/resources/events.ts +3225 -68
  409. package/src/resources/extractions.ts +512 -125
  410. package/src/resources/guest-wallets.ts +6 -5
  411. package/src/resources/index.ts +24 -1
  412. package/src/resources/monitors/index.ts +2 -0
  413. package/src/resources/monitors/keywords.ts +82 -14
  414. package/src/resources/monitors/monitors.ts +66 -14
  415. package/src/resources/radar.ts +32 -36
  416. package/src/resources/shared.ts +2227 -351
  417. package/src/resources/styles.ts +43 -27
  418. package/src/resources/subscribe.ts +1 -1
  419. package/src/resources/support/index.ts +1 -0
  420. package/src/resources/support/support.ts +2 -0
  421. package/src/resources/support/tickets.ts +38 -10
  422. package/src/resources/trends.ts +23 -5
  423. package/src/resources/webhooks.ts +109 -15
  424. package/src/resources/x/account-connection-attempts.ts +1 -1
  425. package/src/resources/x/account-connection-challenges.ts +39 -11
  426. package/src/resources/x/accounts.ts +46 -10
  427. package/src/resources/x/analysis.ts +3947 -0
  428. package/src/resources/x/bookmarks.ts +103 -9
  429. package/src/resources/x/broadcasts.ts +225 -0
  430. package/src/resources/x/communities/communities.ts +743 -141
  431. package/src/resources/x/communities/index.ts +9 -0
  432. package/src/resources/x/communities/join.ts +46 -23
  433. package/src/resources/x/communities/media.ts +251 -0
  434. package/src/resources/x/communities/tweets.ts +427 -20
  435. package/src/resources/x/dm.ts +334 -11
  436. package/src/resources/x/followers.ts +35 -3
  437. package/src/resources/x/index.ts +106 -1
  438. package/src/resources/x/jobs.ts +627 -0
  439. package/src/resources/x/lists.ts +1307 -28
  440. package/src/resources/x/media.ts +24 -12
  441. package/src/resources/x/profile.ts +60 -30
  442. package/src/resources/x/spaces.ts +1076 -0
  443. package/src/resources/x/tweets/index.ts +18 -0
  444. package/src/resources/x/tweets/like.ts +38 -18
  445. package/src/resources/x/tweets/retweet.ts +38 -18
  446. package/src/resources/x/tweets/tweets.ts +3695 -843
  447. package/src/resources/x/users/follow.ts +38 -18
  448. package/src/resources/x/users/index.ts +22 -0
  449. package/src/resources/x/users/users.ts +3687 -465
  450. package/src/resources/x/write-actions.ts +13 -5
  451. package/src/resources/x/x.ts +1227 -15
  452. package/src/streaming.ts +6 -0
  453. package/src/version.ts +1 -1
  454. package/streaming.d.mts +3 -0
  455. package/streaming.d.mts.map +1 -0
  456. package/streaming.d.ts +3 -0
  457. package/streaming.d.ts.map +1 -0
  458. package/streaming.js +9 -0
  459. package/streaming.js.map +1 -0
  460. package/streaming.mjs +6 -0
  461. package/streaming.mjs.map +1 -0
  462. package/version.d.mts +1 -1
  463. package/version.d.ts +1 -1
  464. package/version.js +1 -1
  465. package/version.mjs +1 -1
  466. package/skills/x-twitter-scraper/references/types-rest-api-vs-mcp-field-naming.md +0 -15
@@ -4,294 +4,387 @@
4
4
 
5
5
  // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
6
6
 
7
- /**
8
- * Content disclosure metadata shown by X when a tweet is labeled as paid
9
- * partnership content or AI-generated media.
10
- */
11
- export interface ContentDisclosure {
12
- advertising?: ContentDisclosure.Advertising;
13
-
14
- aiGenerated?: ContentDisclosure.AIGenerated;
15
- }
16
-
17
- export namespace ContentDisclosure {
18
- export interface Advertising {
19
- /**
20
- * True when X labels the tweet as paid promotion content.
21
- */
22
- isPaidPromotion?: boolean;
23
- }
24
-
25
- export interface AIGenerated {
26
- /**
27
- * Source of the AI-generated media disclosure.
28
- */
29
- detectionSource?: string;
30
-
31
- /**
32
- * True when X labels the tweet as containing AI-generated media.
33
- */
34
- hasAiGeneratedMedia?: boolean;
35
- }
36
- }
7
+ import * as Shared from './shared';
37
8
 
38
9
  /**
39
- * Quoted or retweeted tweet context. Every object includes id, text, and
40
- * engagement metrics. A zero metric can mean X did not report the count. Author,
41
- * media, and conversation fields appear when available.
10
+ * Public X Community, as every Community read returns it.
42
11
  */
43
- export interface EmbeddedTweet {
12
+ export interface Community {
13
+ /**
14
+ * Unique community identifier
15
+ */
44
16
  id: string;
45
17
 
46
- bookmarkCount: number;
47
-
48
- likeCount: number;
49
-
50
- quoteCount: number;
51
-
52
- replyCount: number;
53
-
54
- retweetCount: number;
55
-
56
- text: string;
57
-
58
- viewCount: number;
59
-
60
18
  /**
61
- * Article metadata attached to a tweet.
19
+ * Whether the community is marked sensitive
62
20
  */
63
- article?: EmbeddedTweet.Article;
21
+ is_nsfw: boolean;
64
22
 
65
23
  /**
66
- * X user profile with bio, follower counts, and verification status.
24
+ * Total member count
67
25
  */
68
- author?: UserProfile;
26
+ member_count: number;
69
27
 
70
28
  /**
71
- * Public card metadata attached to a tweet.
29
+ * Display name of the community
72
30
  */
73
- card?: EmbeddedTweet.Card;
31
+ name: string;
74
32
 
75
33
  /**
76
- * Community Note presentation metadata returned by X.
34
+ * Public X profile.
77
35
  */
78
- communityNote?: EmbeddedTweet.CommunityNote;
36
+ admin?: UserProfile;
79
37
 
80
38
  /**
81
- * Content disclosure metadata shown by X when a tweet is labeled as paid
82
- * partnership content or AI-generated media.
39
+ * The banner X shows for a community, with its size & colors.
83
40
  */
84
- contentDisclosure?: ContentDisclosure;
85
-
86
- conversationId?: string;
87
-
88
- createdAt?: string;
89
-
90
- displayTextRange?: Array<number>;
41
+ banner?: Community.Banner;
91
42
 
92
43
  /**
93
- * Edit history metadata returned by X.
44
+ * Community banner image URL
94
45
  */
95
- edit?: EmbeddedTweet.Edit;
96
-
97
- entities?: { [key: string]: unknown };
98
-
99
- inReplyToId?: string;
100
-
101
- inReplyToUserId?: string;
102
-
103
- inReplyToUsername?: string;
104
-
105
- isLimitedReply?: boolean;
106
-
107
- isNoteTweet?: boolean;
108
-
109
- isQuoteStatus?: boolean;
110
-
111
- isReply?: boolean;
112
-
113
- isTranslatable?: boolean;
114
-
115
- lang?: string;
116
-
117
- media?: Array<TweetMedia>;
46
+ banner_url?: string;
118
47
 
119
48
  /**
120
- * Complete Note Tweet content and rich-text metadata.
49
+ * Community creation timestamp
121
50
  */
122
- noteTweet?: EmbeddedTweet.NoteTweet;
51
+ created_at?: string;
123
52
 
124
53
  /**
125
- * Public place metadata attached to a tweet.
54
+ * The creator's public profile, or the ID, username and badge alone when X sends
55
+ * no profile
126
56
  */
127
- place?: EmbeddedTweet.Place;
128
-
129
- possiblySensitive?: boolean;
57
+ creator?: UserProfile | Community.UnionMember1;
130
58
 
131
59
  /**
132
- * Engagement counts retained from a prior tweet edit.
60
+ * About text for the community
133
61
  */
134
- previousCounts?: EmbeddedTweet.PreviousCounts;
62
+ description?: string;
135
63
 
136
64
  /**
137
- * Quoted or retweeted tweet context. Every object includes id, text, and
138
- * engagement metrics. A zero metric can mean X did not report the count. Author,
139
- * media, and conversation fields appear when available.
65
+ * Invitation policy
140
66
  */
141
- quoted_tweet?: EmbeddedTweet;
67
+ invites_policy?: string;
142
68
 
143
69
  /**
144
- * Quoted or retweeted tweet context. Every object includes id, text, and
145
- * engagement metrics. A zero metric can mean X did not report the count. Author,
146
- * media, and conversation fields appear when available.
70
+ * Join policy (open or restricted)
147
71
  */
148
- retweeted_tweet?: EmbeddedTweet;
149
-
150
- source?: string;
72
+ join_policy?: string;
151
73
 
152
- type?: string;
153
-
154
- url?: string;
155
-
156
- viewState?: string;
157
- }
74
+ /**
75
+ * The members X previews beside the member count. A keyword or topic result gives
76
+ * each member's ID & picture only.
77
+ */
78
+ membersFacepile?: Array<UserProfile | Community.CommunityMemberPreview>;
158
79
 
159
- export namespace EmbeddedTweet {
160
80
  /**
161
- * Article metadata attached to a tweet.
81
+ * Total moderator count
162
82
  */
163
- export interface Article {
164
- id?: string;
83
+ moderator_count?: number;
165
84
 
166
- coverMediaUrl?: string;
85
+ /**
86
+ * Primary topic. Its id is absent when X lists the community in a keyword or topic
87
+ * result.
88
+ */
89
+ primary_topic?: Community.PrimaryTopic;
167
90
 
168
- previewText?: string;
91
+ /**
92
+ * What the community asks a user who joins
93
+ */
94
+ question?: string;
169
95
 
170
- title?: string;
171
- }
96
+ /**
97
+ * Community rules
98
+ */
99
+ rules?: Array<Community.Rule>;
172
100
 
173
101
  /**
174
- * Public card metadata attached to a tweet.
102
+ * Tags X finds the community by
175
103
  */
176
- export interface Card {
177
- id?: string;
104
+ searchTags?: Array<string>;
105
+ }
178
106
 
179
- bindingValues?: { [key: string]: unknown };
107
+ export namespace Community {
108
+ /**
109
+ * The banner X shows for a community, with its size & colors.
110
+ */
111
+ export interface Banner {
112
+ /**
113
+ * Banner image URL at its original size
114
+ */
115
+ url: string;
180
116
 
181
- name?: string;
117
+ /**
118
+ * Main colors of the banner, largest share first
119
+ */
120
+ colors?: Array<Banner.Color>;
182
121
 
183
- url?: string;
184
- }
122
+ /**
123
+ * Area X keeps in view when it crops the banner, in pixels from the top left
124
+ */
125
+ focus?: Banner.Focus;
185
126
 
186
- /**
187
- * Community Note presentation metadata returned by X.
188
- */
189
- export interface CommunityNote {
190
- id?: string;
127
+ /**
128
+ * Banner height in pixels
129
+ */
130
+ height?: number;
191
131
 
192
- destinationUrl?: string;
132
+ /**
133
+ * Banner width in pixels
134
+ */
135
+ width?: number;
136
+ }
193
137
 
194
- footer?: string;
138
+ export namespace Banner {
139
+ export interface Color {
140
+ /**
141
+ * Blue value of the color
142
+ */
143
+ blue: number;
144
+
145
+ /**
146
+ * Green value of the color
147
+ */
148
+ green: number;
149
+
150
+ /**
151
+ * Share of the banner in this color
152
+ */
153
+ percentage: number;
154
+
155
+ /**
156
+ * Red value of the color
157
+ */
158
+ red: number;
159
+ }
195
160
 
196
- shortTitle?: string;
161
+ /**
162
+ * Area X keeps in view when it crops the banner, in pixels from the top left
163
+ */
164
+ export interface Focus {
165
+ /**
166
+ * Height of the area
167
+ */
168
+ height?: number;
169
+
170
+ /**
171
+ * Distance from the left edge
172
+ */
173
+ left?: number;
174
+
175
+ /**
176
+ * Distance from the top edge
177
+ */
178
+ top?: number;
179
+
180
+ /**
181
+ * Width of the area
182
+ */
183
+ width?: number;
184
+ }
185
+ }
197
186
 
198
- subtitle?: string;
187
+ export interface UnionMember1 {
188
+ /**
189
+ * Numeric X user ID of the creator
190
+ */
191
+ id: string;
199
192
 
200
- title?: string;
193
+ /**
194
+ * X username of the creator
195
+ */
196
+ username: string;
201
197
 
202
- visualStyle?: string;
198
+ /**
199
+ * Whether X shows the creator a badge
200
+ */
201
+ verified: boolean;
203
202
  }
204
203
 
205
204
  /**
206
- * Edit history metadata returned by X.
205
+ * A member X previews by ID & profile picture only.
207
206
  */
208
- export interface Edit {
209
- editableUntilMsecs?: string;
207
+ export interface CommunityMemberPreview {
208
+ /**
209
+ * Numeric X user ID of the member
210
+ */
211
+ id: string;
210
212
 
211
- editTweetIds?: Array<string>;
213
+ /**
214
+ * Profile picture URL of the member
215
+ */
216
+ profilePicture?: string;
212
217
  }
213
218
 
214
219
  /**
215
- * Complete Note Tweet content and rich-text metadata.
220
+ * Primary topic. Its id is absent when X lists the community in a keyword or topic
221
+ * result.
216
222
  */
217
- export interface NoteTweet {
218
- text: string;
223
+ export interface PrimaryTopic {
224
+ /**
225
+ * Topic name X shows on the community
226
+ */
227
+ name: string;
219
228
 
229
+ /**
230
+ * Topic ID that /x/communities/popular takes
231
+ */
220
232
  id?: string;
221
-
222
- entities?: { [key: string]: unknown };
223
-
224
- isExpandable?: boolean;
225
-
226
- richtextTags?: Array<NoteTweet.RichtextTag>;
227
233
  }
228
234
 
229
- export namespace NoteTweet {
230
- export interface RichtextTag {
231
- fromIndex: number;
235
+ export interface Rule {
236
+ /**
237
+ * Rule ID
238
+ */
239
+ id?: string;
232
240
 
233
- toIndex: number;
241
+ /**
242
+ * What the rule asks of members
243
+ */
244
+ description?: string;
234
245
 
235
- types: Array<string>;
236
- }
246
+ /**
247
+ * Rule title
248
+ */
249
+ name?: string;
237
250
  }
251
+ }
238
252
 
253
+ /**
254
+ * 1 page of X Communities, in X's order.
255
+ */
256
+ export interface CommunityPage {
239
257
  /**
240
- * Public place metadata attached to a tweet.
258
+ * Communities in X's order
241
259
  */
242
- export interface Place {
243
- id?: string;
260
+ communities: Array<Community>;
244
261
 
245
- boundingBox?: { [key: string]: unknown };
262
+ /**
263
+ * Whether another page of communities follows
264
+ */
265
+ has_next_page: boolean;
246
266
 
247
- country?: string;
267
+ /**
268
+ * Cursor for the next page of communities. Empty at the end.
269
+ */
270
+ next_cursor: string;
271
+ }
248
272
 
249
- countryCode?: string;
273
+ /**
274
+ * A topic X groups communities under, with its subtopics.
275
+ */
276
+ export interface CommunityTopic {
277
+ /**
278
+ * Topic ID. Pass it as topicId to /x/communities/popular.
279
+ */
280
+ id: string;
250
281
 
251
- fullName?: string;
282
+ /**
283
+ * Topic name, which topic on /x/communities/popular takes
284
+ */
285
+ name: string;
252
286
 
253
- name?: string;
287
+ /**
288
+ * Narrower topics inside this topic
289
+ */
290
+ subtopics: Array<CommunityTopic.Subtopic>;
291
+ }
254
292
 
255
- placeType?: string;
293
+ export namespace CommunityTopic {
294
+ export interface Subtopic {
295
+ /**
296
+ * Subtopic ID, which topicId also takes
297
+ */
298
+ id: string;
256
299
 
257
- url?: string;
300
+ /**
301
+ * Subtopic name, which topic also takes
302
+ */
303
+ name: string;
258
304
  }
305
+ }
259
306
 
260
- /**
261
- * Engagement counts retained from a prior tweet edit.
262
- */
263
- export interface PreviousCounts {
264
- bookmarkCount?: number;
307
+ /**
308
+ * Content disclosure metadata shown by X when a tweet is labeled as paid
309
+ * partnership content or AI-generated media.
310
+ */
311
+ export interface ContentDisclosure {
312
+ advertising?: ContentDisclosure.Advertising;
265
313
 
266
- likeCount?: number;
314
+ aiGenerated?: ContentDisclosure.AIGenerated;
315
+ }
267
316
 
268
- quoteCount?: number;
317
+ export namespace ContentDisclosure {
318
+ export interface Advertising {
319
+ /**
320
+ * True when X labels the tweet as paid promotion content.
321
+ */
322
+ isPaidPromotion?: boolean;
323
+ }
269
324
 
270
- replyCount?: number;
325
+ export interface AIGenerated {
326
+ /**
327
+ * How X detected AI media. X omits it for self-declared posts.
328
+ */
329
+ detectionSource?: string;
271
330
 
272
- retweetCount?: number;
331
+ /**
332
+ * True when X labels the tweet as containing AI-generated media.
333
+ */
334
+ hasAiGeneratedMedia?: boolean;
273
335
  }
274
336
  }
275
337
 
276
338
  /**
277
- * Error response. Default v1 returns a legacy string error code. Send
278
- * `xquik-api-contract: 2026-04-29` to receive the structured best-practice error
279
- * object.
339
+ * A parent, quoted or retweeted tweet. It has the TweetPublicData fields and an
340
+ * author. Nesting stops after 4 levels.
280
341
  */
281
- export interface Error {
282
- error:
283
- | 'internal_error'
284
- | 'account_already_connected'
342
+ export interface EmbeddedTweet {
343
+ id: string;
344
+
345
+ bookmarkCount: number;
346
+
347
+ likeCount: number;
348
+
349
+ quoteCount: number;
350
+
351
+ replyCount: number;
352
+
353
+ retweetCount: number;
354
+
355
+ text: string;
356
+
357
+ viewCount: number;
358
+
359
+ /**
360
+ * Public X profile.
361
+ */
362
+ author?: UserProfile;
363
+
364
+ [k: string]: unknown;
365
+ }
366
+
367
+ /**
368
+ * Error response. Default v1 returns a legacy string code. Send
369
+ * `xquik-api-contract: 2026-04-29` for the structured best-practice error object.
370
+ */
371
+ export interface Error {
372
+ error:
373
+ | 'internal_error'
374
+ | 'account_already_connected'
285
375
  | 'account_needs_reauth'
286
376
  | 'account_not_found'
287
377
  | 'account_required'
288
378
  | 'account_restricted'
289
379
  | 'api_key_limit_reached'
290
380
  | 'article_not_found'
381
+ | 'closed'
291
382
  | 'dm_not_permitted'
292
383
  | 'invalid_format'
293
384
  | 'invalid_id'
294
385
  | 'invalid_input'
386
+ | 'invalid_media_url'
387
+ | 'invalid_message_id'
295
388
  | 'invalid_params'
296
389
  | 'invalid_tool_type'
297
390
  | 'invalid_tweet_id'
@@ -301,9 +394,11 @@ export interface Error {
301
394
  | 'invalid_username'
302
395
  | 'invalid_json'
303
396
  | 'insufficient_credits'
397
+ | 'job_not_found'
304
398
  | 'login_cooldown'
305
399
  | 'login_failed'
306
400
  | 'media_download_failed'
401
+ | 'media_too_large'
307
402
  | 'missing_params'
308
403
  | 'missing_query'
309
404
  | 'monitor_already_exists'
@@ -322,43 +417,67 @@ export interface Error {
322
417
  | 'unsupported_field'
323
418
  | 'user_not_found'
324
419
  | 'body_too_large'
420
+ | 'bookmark_folders_unavailable'
421
+ | 'broadcast_not_found'
325
422
  | 'checkout_unavailable'
326
423
  | 'connection_challenge_expired'
327
424
  | 'connection_challenge_inactive'
328
425
  | 'coverage_cursor_gone'
329
426
  | 'coverage_cursor_unavailable'
427
+ | 'cursor_account_unavailable'
330
428
  | 'draft_not_found'
429
+ | 'draw_too_large'
430
+ | 'expired'
331
431
  | 'favoriters_unavailable'
332
432
  | 'forbidden'
333
433
  | 'guest_wallet_unavailable'
334
434
  | 'guest_wallets_disabled'
335
435
  | 'guest_wallets_unavailable'
336
436
  | 'idempotency_conflict'
437
+ | 'idempotency_in_progress'
337
438
  | 'idempotency_key_conflict'
439
+ | 'invalid_broadcast_id'
338
440
  | 'invalid_community_id'
441
+ | 'invalid_community_topic'
339
442
  | 'invalid_complete_replies_request'
340
443
  | 'invalid_coverage_cursor'
341
444
  | 'invalid_coverage_request'
445
+ | 'invalid_cursor'
342
446
  | 'invalid_idempotency_key'
447
+ | 'invalid_job_filter'
448
+ | 'invalid_job_id'
343
449
  | 'invalid_list_id'
344
450
  | 'invalid_output_options'
345
451
  | 'invalid_payment_amount'
346
452
  | 'invalid_range'
347
453
  | 'invalid_reply_options'
454
+ | 'invalid_space_id'
455
+ | 'likes_unavailable'
456
+ | 'list_not_found'
348
457
  | 'login_rate_limited'
349
458
  | 'login_service_unavailable'
350
459
  | 'missing_idempotency_key'
351
460
  | 'missing_ids'
461
+ | 'missing_url'
352
462
  | 'no_cached_style'
463
+ | 'pagination_stalled'
353
464
  | 'passkey_required'
354
465
  | 'rate_limited'
355
466
  | 'read_request_timeout'
467
+ | 'replay_unavailable'
356
468
  | 'replies_incomplete'
469
+ | 'retweeters_incomplete'
470
+ | 'search_unavailable'
471
+ | 'space_canceled'
472
+ | 'space_not_ended'
357
473
  | 'support_media_rate_limit'
358
474
  | 'support_request_rate_limit'
475
+ | 'telegram_unavailable'
359
476
  | 'too_many_ids'
477
+ | 'too_many_streams'
360
478
  | 'too_many_tweets'
361
479
  | 'unknown_field'
480
+ | 'unsupported_media_combination'
362
481
  | 'unsupported_media_type'
363
482
  | 'webhook_inactive'
364
483
  | 'write_tracking_unavailable'
@@ -370,20 +489,31 @@ export interface Error {
370
489
  | 'x_api_unavailable'
371
490
  | 'x_api_unauthorized'
372
491
  | 'x_auth_failure'
492
+ | 'x_automation_refused'
493
+ | 'x_community_not_joined'
494
+ | 'x_community_not_selectable'
495
+ | 'x_community_post_public'
496
+ | 'x_community_post_removed'
373
497
  | 'x_content_too_long'
374
498
  | 'x_daily_limit'
375
499
  | 'x_dm_not_allowed'
500
+ | 'x_dm_not_deleted'
501
+ | 'x_dm_not_sent'
376
502
  | 'x_duplicate_action'
377
503
  | 'x_login_auth_failed'
378
504
  | 'x_login_challenge'
379
505
  | 'x_login_denied'
380
506
  | 'x_login_failed'
381
- | 'x_login_proxy_error'
382
507
  | 'x_login_rate_limited'
383
508
  | 'x_login_service_unavailable'
384
509
  | 'x_login_suspended'
510
+ | 'x_image_invalid'
511
+ | 'x_media_rejected'
512
+ | 'x_post_not_sent'
385
513
  | 'x_rate_limited'
386
514
  | 'x_rejected'
515
+ | 'x_reply_not_allowed'
516
+ | 'x_reply_target_unavailable'
387
517
  | 'x_target_not_found'
388
518
  | 'x_transient_error'
389
519
  | 'x_user_lookup_failed'
@@ -391,13 +521,28 @@ export interface Error {
391
521
  | 'x_write_failed'
392
522
  | Error.StructuredError;
393
523
 
524
+ /**
525
+ * With unknown_field: the valid names where the first unknown name in fields or
526
+ * omit stopped.
527
+ */
528
+ allowedFields?: Array<string>;
529
+
530
+ /**
531
+ * With unknown_field: each unknown name in fields or omit, with the name it most
532
+ * likely meant.
533
+ */
534
+ fieldErrors?: Array<Error.FieldError>;
535
+
394
536
  /**
395
537
  * Human-readable error guidance.
396
538
  */
397
539
  message?: string;
398
540
 
399
541
  /**
400
- * Machine-readable reason for a login cooldown.
542
+ * Machine-readable reason. A login failure names its cause, such as
543
+ * temporary_issue. A user_not_found answer names why X shows no profile: not_found
544
+ * or suspended. A tweet_not_found answer names why X shows no post, when X said:
545
+ * deleted, author_suspended or protected.
401
546
  */
402
547
  reason?: string;
403
548
 
@@ -423,10 +568,13 @@ export namespace Error {
423
568
  | 'account_restricted'
424
569
  | 'api_key_limit_reached'
425
570
  | 'article_not_found'
571
+ | 'closed'
426
572
  | 'dm_not_permitted'
427
573
  | 'invalid_format'
428
574
  | 'invalid_id'
429
575
  | 'invalid_input'
576
+ | 'invalid_media_url'
577
+ | 'invalid_message_id'
430
578
  | 'invalid_params'
431
579
  | 'invalid_tool_type'
432
580
  | 'invalid_tweet_id'
@@ -436,9 +584,11 @@ export namespace Error {
436
584
  | 'invalid_username'
437
585
  | 'invalid_json'
438
586
  | 'insufficient_credits'
587
+ | 'job_not_found'
439
588
  | 'login_cooldown'
440
589
  | 'login_failed'
441
590
  | 'media_download_failed'
591
+ | 'media_too_large'
442
592
  | 'missing_params'
443
593
  | 'missing_query'
444
594
  | 'monitor_already_exists'
@@ -457,43 +607,67 @@ export namespace Error {
457
607
  | 'unsupported_field'
458
608
  | 'user_not_found'
459
609
  | 'body_too_large'
610
+ | 'bookmark_folders_unavailable'
611
+ | 'broadcast_not_found'
460
612
  | 'checkout_unavailable'
461
613
  | 'connection_challenge_expired'
462
614
  | 'connection_challenge_inactive'
463
615
  | 'coverage_cursor_gone'
464
616
  | 'coverage_cursor_unavailable'
617
+ | 'cursor_account_unavailable'
465
618
  | 'draft_not_found'
619
+ | 'draw_too_large'
620
+ | 'expired'
466
621
  | 'favoriters_unavailable'
467
622
  | 'forbidden'
468
623
  | 'guest_wallet_unavailable'
469
624
  | 'guest_wallets_disabled'
470
625
  | 'guest_wallets_unavailable'
471
626
  | 'idempotency_conflict'
627
+ | 'idempotency_in_progress'
472
628
  | 'idempotency_key_conflict'
629
+ | 'invalid_broadcast_id'
473
630
  | 'invalid_community_id'
631
+ | 'invalid_community_topic'
474
632
  | 'invalid_complete_replies_request'
475
633
  | 'invalid_coverage_cursor'
476
634
  | 'invalid_coverage_request'
635
+ | 'invalid_cursor'
477
636
  | 'invalid_idempotency_key'
637
+ | 'invalid_job_filter'
638
+ | 'invalid_job_id'
478
639
  | 'invalid_list_id'
479
640
  | 'invalid_output_options'
480
641
  | 'invalid_payment_amount'
481
642
  | 'invalid_range'
482
643
  | 'invalid_reply_options'
644
+ | 'invalid_space_id'
645
+ | 'likes_unavailable'
646
+ | 'list_not_found'
483
647
  | 'login_rate_limited'
484
648
  | 'login_service_unavailable'
485
649
  | 'missing_idempotency_key'
486
650
  | 'missing_ids'
651
+ | 'missing_url'
487
652
  | 'no_cached_style'
653
+ | 'pagination_stalled'
488
654
  | 'passkey_required'
489
655
  | 'rate_limited'
490
656
  | 'read_request_timeout'
657
+ | 'replay_unavailable'
491
658
  | 'replies_incomplete'
659
+ | 'retweeters_incomplete'
660
+ | 'search_unavailable'
661
+ | 'space_canceled'
662
+ | 'space_not_ended'
492
663
  | 'support_media_rate_limit'
493
664
  | 'support_request_rate_limit'
665
+ | 'telegram_unavailable'
494
666
  | 'too_many_ids'
667
+ | 'too_many_streams'
495
668
  | 'too_many_tweets'
496
669
  | 'unknown_field'
670
+ | 'unsupported_media_combination'
497
671
  | 'unsupported_media_type'
498
672
  | 'webhook_inactive'
499
673
  | 'write_tracking_unavailable'
@@ -505,20 +679,31 @@ export namespace Error {
505
679
  | 'x_api_unavailable'
506
680
  | 'x_api_unauthorized'
507
681
  | 'x_auth_failure'
682
+ | 'x_automation_refused'
683
+ | 'x_community_not_joined'
684
+ | 'x_community_not_selectable'
685
+ | 'x_community_post_public'
686
+ | 'x_community_post_removed'
508
687
  | 'x_content_too_long'
509
688
  | 'x_daily_limit'
510
689
  | 'x_dm_not_allowed'
690
+ | 'x_dm_not_deleted'
691
+ | 'x_dm_not_sent'
511
692
  | 'x_duplicate_action'
512
693
  | 'x_login_auth_failed'
513
694
  | 'x_login_challenge'
514
695
  | 'x_login_denied'
515
696
  | 'x_login_failed'
516
- | 'x_login_proxy_error'
517
697
  | 'x_login_rate_limited'
518
698
  | 'x_login_service_unavailable'
519
699
  | 'x_login_suspended'
700
+ | 'x_image_invalid'
701
+ | 'x_media_rejected'
702
+ | 'x_post_not_sent'
520
703
  | 'x_rate_limited'
521
704
  | 'x_rejected'
705
+ | 'x_reply_not_allowed'
706
+ | 'x_reply_target_unavailable'
522
707
  | 'x_target_not_found'
523
708
  | 'x_transient_error'
524
709
  | 'x_user_lookup_failed'
@@ -536,10 +721,40 @@ export namespace Error {
536
721
  | 'permission_error'
537
722
  | 'rate_limit_error';
538
723
  }
724
+
725
+ export interface FieldError {
726
+ code: 'unknown_field';
727
+
728
+ /**
729
+ * The name as the request wrote it.
730
+ */
731
+ field: string;
732
+
733
+ /**
734
+ * What to send instead.
735
+ */
736
+ message: string;
737
+
738
+ /**
739
+ * The parameter that held the name.
740
+ */
741
+ path: 'query.fields' | 'query.omit';
742
+
743
+ /**
744
+ * The closest valid name, when 1 is close.
745
+ */
746
+ suggestion?: string;
747
+ }
539
748
  }
540
749
 
541
750
  /**
542
- * Type of monitor event fired when account activity occurs.
751
+ * Type of monitor event fired when account activity occurs. tweet.deleted fires
752
+ * once X confirms the account deleted a post the monitor saw. Its data is the post
753
+ * as last seen. broadcast.started & space.started fire when the account posts its
754
+ * running live video or Space. Their data is that post. A live the account does
755
+ * not post is not seen. following.added & following.removed fire when the account
756
+ * follows or unfollows someone, with that account's profile. Keyword monitors take
757
+ * the 10 post types only.
543
758
  */
544
759
  export type EventType =
545
760
  | 'tweet.new'
@@ -562,13 +777,19 @@ export type EventType =
562
777
  | 'profile.verified.changed'
563
778
  | 'profile.protected.changed'
564
779
  | 'profile.pinned_tweet.changed'
565
- | 'profile.unavailable.changed';
780
+ | 'profile.unavailable.changed'
781
+ | 'tweet.deleted'
782
+ | 'broadcast.started'
783
+ | 'space.started'
784
+ | 'following.added'
785
+ | 'following.removed';
566
786
 
567
787
  /**
568
- * No-mode search, user Tweet, user reply, and direct reply reads use automatic
569
- * coverage. Shape, filters, aliases, and billing stay compatible. Unprefixed
570
- * cursors remain legacy. Follow next_cursor while has_next_page is true. An empty
571
- * filtered page can still have has_next_page true.
788
+ * Follow next_cursor while the response reports more pages. A page can hold fewer
789
+ * rows than its limit & still report more. That report decides, not the row count.
790
+ * A page can be empty & still report more, filtered or not. Automatic search, user
791
+ * Tweet & reply coverage keeps shape, filters, aliases & billing. Unprefixed
792
+ * cursors are legacy.
572
793
  */
573
794
  export interface PaginatedTweets {
574
795
  has_next_page: boolean;
@@ -576,14 +797,74 @@ export interface PaginatedTweets {
576
797
  next_cursor: string;
577
798
 
578
799
  tweets: Array<SearchTweet>;
800
+
801
+ /**
802
+ * Whole number from 0.
803
+ */
804
+ filtered_count?: number;
805
+
806
+ /**
807
+ * How far back a filtered Latest search has read, in UTC. Every newer post was
808
+ * checked, so an empty page still moves this time back.
809
+ */
810
+ readBackTo?: string;
811
+
812
+ /**
813
+ * What X shows beside a search's posts that is the same for every reader. Present
814
+ * on a search for a cashtag X has a card for, such as $BTC.
815
+ */
816
+ searchContext?: PaginatedTweets.SearchContext;
817
+
818
+ /**
819
+ * Search q as X ran it, when Xquik fixed it.
820
+ */
821
+ searchedQuery?: string;
822
+
823
+ /**
824
+ * Present on a last page whose sources all read past its start time.
825
+ */
826
+ windowComplete?: true;
827
+ }
828
+
829
+ export namespace PaginatedTweets {
830
+ /**
831
+ * What X shows beside a search's posts that is the same for every reader. Present
832
+ * on a search for a cashtag X has a card for, such as $BTC.
833
+ */
834
+ export interface SearchContext {
835
+ /**
836
+ * X's card for the cashtag the search names.
837
+ */
838
+ smartTag: SearchContext.SmartTag;
839
+ }
840
+
841
+ export namespace SearchContext {
842
+ /**
843
+ * X's card for the cashtag the search names.
844
+ */
845
+ export interface SmartTag {
846
+ /**
847
+ * The ticker X matched.
848
+ */
849
+ id: string;
850
+
851
+ /**
852
+ * Whether X lists the ticker as active.
853
+ */
854
+ active?: boolean;
855
+
856
+ /**
857
+ * Whether X charts the ticker with open, high, low & close prices.
858
+ */
859
+ supportsOhlc?: boolean;
860
+ }
861
+ }
579
862
  }
580
863
 
581
864
  /**
582
- * Paginated user profiles. No-mode follower, following, and verified follower
583
- * requests merge independent views automatically. Response fields, page size,
584
- * aliases, filters, and per-returned-profile billing stay unchanged. Existing
585
- * unprefixed cursors retain legacy behavior. Follow next_cursor while
586
- * has_next_page is true.
865
+ * Profile coverage preserves shape, billing, aliases, and filters. Follow
866
+ * next_cursor while the response reports more pages. Unprefixed cursors remain
867
+ * legacy.
587
868
  */
588
869
  export interface PaginatedUsers {
589
870
  has_next_page: boolean;
@@ -591,11 +872,15 @@ export interface PaginatedUsers {
591
872
  next_cursor: string;
592
873
 
593
874
  users: Array<UserProfile>;
875
+
876
+ /**
877
+ * Whole number from 0.
878
+ */
879
+ filtered_count?: number;
594
880
  }
595
881
 
596
882
  /**
597
- * Tweet returned from search results with inline author info. A zero metric can
598
- * mean X did not report the count.
883
+ * Search tweet with author. Zero metrics may mean X omitted counts.
599
884
  */
600
885
  export interface SearchTweet {
601
886
  id: string;
@@ -615,20 +900,43 @@ export interface SearchTweet {
615
900
  viewCount: number;
616
901
 
617
902
  /**
618
- * Article metadata attached to a tweet.
903
+ * Describes an X Article preview and its lifecycle metadata.
619
904
  */
620
905
  article?: SearchTweet.Article;
621
906
 
622
907
  /**
623
- * X user profile with bio, follower counts, and verification status.
908
+ * Public X profile.
624
909
  */
625
910
  author?: UserProfile;
626
911
 
627
912
  /**
628
- * Public card metadata attached to a tweet.
913
+ * Why the tweet has no author. X serves a suspended or deleted account as an
914
+ * unavailable user with a reason such as Suspended or NotFound. Omitted when the
915
+ * author is available.
916
+ */
917
+ authorUnavailable?: SearchTweet.AuthorUnavailable;
918
+
919
+ /**
920
+ * Describes a public card and its referenced profiles.
629
921
  */
630
922
  card?: SearchTweet.Card;
631
923
 
924
+ /**
925
+ * Price charts the author attached under the post, 1 per cashtag. Absent when the
926
+ * post has none. X may send a cashtag without a chart window.
927
+ */
928
+ cashtagAttachments?: Array<SearchTweet.CashtagAttachment>;
929
+
930
+ /**
931
+ * Community ID.
932
+ */
933
+ communityId?: string;
934
+
935
+ /**
936
+ * Community name. Present when X sends it with the post.
937
+ */
938
+ communityName?: string;
939
+
632
940
  /**
633
941
  * Community Note presentation metadata returned by X.
634
942
  */
@@ -640,175 +948,755 @@ export interface SearchTweet {
640
948
  */
641
949
  contentDisclosure?: ContentDisclosure;
642
950
 
643
- /**
644
- * Root tweet ID for the search result conversation
645
- */
646
- conversationId?: string;
951
+ /**
952
+ * Reply policy & conversation owner.
953
+ */
954
+ conversationControl?: SearchTweet.ConversationControl;
955
+
956
+ conversationId?: string;
957
+
958
+ /**
959
+ * Author-published point, with longitude before latitude.
960
+ */
961
+ coordinates?: SearchTweet.Coordinates;
962
+
963
+ createdAt?: string;
964
+
965
+ displayTextRange?: Array<number>;
966
+
967
+ /**
968
+ * Lists edit-chain identifiers and the remaining edit window.
969
+ */
970
+ edit?: SearchTweet.Edit;
971
+
972
+ /**
973
+ * Lists hashtags, symbols, links, and mentions from tweet text.
974
+ */
975
+ entities?: SearchTweet.Entities;
976
+
977
+ /**
978
+ * Marks a subscriber-only post with the creator whose subscription unlocks it.
979
+ * Non-subscribers get the preview text & the subscribe link. Omitted on public
980
+ * posts.
981
+ */
982
+ exclusiveContent?: SearchTweet.ExclusiveContent;
983
+
984
+ /**
985
+ * Author-published point, with latitude before longitude.
986
+ */
987
+ geo?: SearchTweet.Geo;
988
+
989
+ /**
990
+ * Public metadata whose fields are defined by X.
991
+ */
992
+ grokShareAttachment?: { [key: string]: unknown };
993
+
994
+ /**
995
+ * Grok's translation of the post, as X shows it.
996
+ */
997
+ grokTranslatedPost?: { [key: string]: unknown };
998
+
999
+ /**
1000
+ * Whether X holds Community Notes on the post, shown or not.
1001
+ */
1002
+ hasCommunityNotes?: boolean;
1003
+
1004
+ inReplyToId?: string;
1005
+
1006
+ inReplyToUserId?: string;
1007
+
1008
+ inReplyToUsername?: string;
1009
+
1010
+ /**
1011
+ * The notice x.com covers the post with until the reader views it, such as X's
1012
+ * public interest notice on a post that broke its rules but stays up.
1013
+ */
1014
+ interstitial?: SearchTweet.Interstitial;
1015
+
1016
+ isLimitedReply?: boolean;
1017
+
1018
+ isNoteTweet?: boolean;
1019
+
1020
+ isPinned?: boolean;
1021
+
1022
+ isQuoteStatus?: boolean;
1023
+
1024
+ isReply?: boolean;
1025
+
1026
+ isRetweet?: boolean;
1027
+
1028
+ isTranslatable?: boolean;
1029
+
1030
+ /**
1031
+ * Public metadata whose fields are defined by X.
1032
+ */
1033
+ jetfuelAttachment?: { [key: string]: unknown };
1034
+
1035
+ lang?: string;
1036
+
1037
+ /**
1038
+ * Public restrictions & prompts.
1039
+ */
1040
+ limitedActions?: Array<SearchTweet.LimitedAction>;
1041
+
1042
+ /**
1043
+ * Media, omitted when unavailable.
1044
+ */
1045
+ media?: Array<TweetMedia>;
1046
+
1047
+ /**
1048
+ * Complete Note Tweet content and rich-text metadata.
1049
+ */
1050
+ noteTweet?: SearchTweet.NoteTweet;
1051
+
1052
+ /**
1053
+ * A parent, quoted or retweeted tweet. It has the TweetPublicData fields and an
1054
+ * author. Nesting stops after 4 levels.
1055
+ */
1056
+ parentTweet?: EmbeddedTweet;
1057
+
1058
+ /**
1059
+ * Describes public place metadata on a geotagged tweet.
1060
+ */
1061
+ place?: SearchTweet.Place;
1062
+
1063
+ possiblySensitive?: boolean;
1064
+
1065
+ /**
1066
+ * Public metadata whose fields are defined by X.
1067
+ */
1068
+ postCta?: { [key: string]: unknown };
1069
+
1070
+ /**
1071
+ * Engagement counts retained from a prior tweet edit.
1072
+ */
1073
+ previousCounts?: SearchTweet.PreviousCounts;
1074
+
1075
+ /**
1076
+ * A parent, quoted or retweeted tweet. It has the TweetPublicData fields and an
1077
+ * author. Nesting stops after 4 levels.
1078
+ */
1079
+ quoted_tweet?: EmbeddedTweet;
1080
+
1081
+ quotedTweetId?: string;
1082
+
1083
+ /**
1084
+ * The quoted post's link, kept when X withholds that post.
1085
+ */
1086
+ quotedTweetPermalink?: SearchTweet.QuotedTweetPermalink;
1087
+
1088
+ /**
1089
+ * Why X shows no quoted post. Omitted when X names no reason, as its legacy
1090
+ * answers never do.
1091
+ */
1092
+ quotedTweetUnavailable?: SearchTweet.QuotedTweetUnavailable;
1093
+
1094
+ /**
1095
+ * Public post & user this reaction references.
1096
+ */
1097
+ reactionContext?: SearchTweet.ReactionContext;
1098
+
1099
+ /**
1100
+ * A parent, quoted or retweeted tweet. It has the TweetPublicData fields and an
1101
+ * author. Nesting stops after 4 levels.
1102
+ */
1103
+ retweeted_tweet?: EmbeddedTweet;
1104
+
1105
+ /**
1106
+ * Repost event time in UTC. Null when unavailable; omitted for other posts.
1107
+ */
1108
+ retweetedAt?: string | null;
1109
+
1110
+ /**
1111
+ * Public metadata whose fields are defined by X.
1112
+ */
1113
+ scopes?: { [key: string]: unknown };
1114
+
1115
+ /**
1116
+ * The app the post was sent from, as X labels it. X sends it for some posts only.
1117
+ */
1118
+ source?: string;
1119
+
1120
+ /**
1121
+ * Game metadata attached to this post.
1122
+ */
1123
+ sportsContext?: SearchTweet.SportsContext;
1124
+
1125
+ /**
1126
+ * The Subscriber badge X shows on a reply. The reply's author subscribes to the
1127
+ * creator who started the conversation. Omitted on a post without the badge.
1128
+ */
1129
+ subscriberBadge?: SearchTweet.SubscriberBadge;
1130
+
1131
+ /**
1132
+ * Where `text` matches the search, on each row a search read. Offsets count code
1133
+ * points of `text`, as `displayTextRange` does. Empty when X marks nothing in the
1134
+ * post. X marks matches only in a post's first 280 characters.
1135
+ */
1136
+ textHighlights?: Array<SearchTweet.TextHighlight>;
1137
+
1138
+ /**
1139
+ * Public visibility notice attached to an available tweet.
1140
+ */
1141
+ tombstone?: SearchTweet.Tombstone;
1142
+
1143
+ type?: string;
1144
+
1145
+ /**
1146
+ * The author's ID when X withholds the author's profile.
1147
+ */
1148
+ unavailableAuthorId?: string;
1149
+
1150
+ /**
1151
+ * User IDs that left this conversation.
1152
+ */
1153
+ unmentionedUserIds?: Array<string>;
1154
+
1155
+ url?: string;
1156
+
1157
+ viewState?: string;
1158
+ }
1159
+
1160
+ export namespace SearchTweet {
1161
+ /**
1162
+ * Describes an X Article preview and its lifecycle metadata.
1163
+ */
1164
+ export interface Article {
1165
+ id?: string;
1166
+
1167
+ /**
1168
+ * Public metadata whose fields are defined by X.
1169
+ */
1170
+ coverMedia?: { [key: string]: unknown };
1171
+
1172
+ coverMediaUrl?: string;
1173
+
1174
+ /**
1175
+ * Public metadata whose fields are defined by X.
1176
+ */
1177
+ lifecycleState?: { [key: string]: unknown };
1178
+
1179
+ /**
1180
+ * Public metadata whose fields are defined by X.
1181
+ */
1182
+ metadata?: { [key: string]: unknown };
1183
+
1184
+ previewText?: string;
1185
+
1186
+ title?: string;
1187
+ }
1188
+
1189
+ /**
1190
+ * Why the tweet has no author. X serves a suspended or deleted account as an
1191
+ * unavailable user with a reason such as Suspended or NotFound. Omitted when the
1192
+ * author is available.
1193
+ */
1194
+ export interface AuthorUnavailable {
1195
+ /**
1196
+ * X's reason code.
1197
+ */
1198
+ reason: string;
1199
+
1200
+ /**
1201
+ * X's notice text for the reason.
1202
+ */
1203
+ message?: string;
1204
+ }
1205
+
1206
+ /**
1207
+ * Describes a public card and its referenced profiles.
1208
+ */
1209
+ export interface Card {
1210
+ id?: string;
1211
+
1212
+ /**
1213
+ * Public metadata whose fields are defined by X.
1214
+ */
1215
+ bindingValues?: { [key: string]: unknown };
1216
+
1217
+ name?: string;
1218
+
1219
+ /**
1220
+ * Public metadata whose fields are defined by X.
1221
+ */
1222
+ platform?: { [key: string]: unknown };
1223
+
1224
+ url?: string;
1225
+
1226
+ /**
1227
+ * Unresolved card user references.
1228
+ */
1229
+ userReferenceErrors?: Array<Card.UserReferenceError>;
1230
+
1231
+ userReferences?: Array<Shared.UserProfile>;
1232
+ }
1233
+
1234
+ export namespace Card {
1235
+ export interface UserReferenceError {
1236
+ message?: string;
1237
+
1238
+ reason?: string;
1239
+ }
1240
+ }
1241
+
1242
+ export interface CashtagAttachment {
1243
+ /**
1244
+ * The cashtag with its `$`.
1245
+ */
1246
+ cashtag: string;
1247
+
1248
+ /**
1249
+ * Span of each candle.
1250
+ */
1251
+ candleSize?: string;
1252
+
1253
+ /**
1254
+ * Time of the chart's last price.
1255
+ */
1256
+ endTime?: string;
1257
+
1258
+ /**
1259
+ * X's size for the chart.
1260
+ */
1261
+ sizeVariant?: number;
1262
+
1263
+ /**
1264
+ * Time of the chart's first candle.
1265
+ */
1266
+ startTime?: string;
1267
+
1268
+ /**
1269
+ * Span the chart covers.
1270
+ */
1271
+ timeframe?: string;
1272
+ }
1273
+
1274
+ /**
1275
+ * Community Note presentation metadata returned by X.
1276
+ */
1277
+ export interface CommunityNote {
1278
+ id?: string;
1279
+
1280
+ destinationUrl?: string;
1281
+
1282
+ footer?: string;
1283
+
1284
+ footerIconType?: string;
1285
+
1286
+ iconType?: string;
1287
+
1288
+ /**
1289
+ * Public metadata whose fields are defined by X.
1290
+ */
1291
+ metadata?: { [key: string]: unknown };
1292
+
1293
+ shortTitle?: string;
1294
+
1295
+ subtitle?: string;
1296
+
1297
+ title?: string;
1298
+
1299
+ visualStyle?: string;
1300
+ }
1301
+
1302
+ /**
1303
+ * Reply policy & conversation owner.
1304
+ */
1305
+ export interface ConversationControl {
1306
+ /**
1307
+ * Regions whose accounts may reply, as country codes. Sent with the
1308
+ * `country_of_origin` mode.
1309
+ */
1310
+ allowedCountryCodes?: Array<string>;
1311
+
1312
+ inviteViaMention?: boolean;
1313
+
1314
+ /**
1315
+ * Reply policy from X's newer field, such as `my_network`, `premium` or
1316
+ * `country_of_origin`. Omitted when X sends none.
1317
+ */
1318
+ mode?: string;
1319
+
1320
+ /**
1321
+ * The conversation owner's account ID.
1322
+ */
1323
+ ownerId?: string;
1324
+
1325
+ ownerUsername?: string;
1326
+
1327
+ policy?: string;
1328
+ }
1329
+
1330
+ /**
1331
+ * Author-published point, with longitude before latitude.
1332
+ */
1333
+ export interface Coordinates {
1334
+ coordinates: Array<number>;
1335
+
1336
+ type: 'Point';
1337
+ }
1338
+
1339
+ /**
1340
+ * Lists edit-chain identifiers and the remaining edit window.
1341
+ */
1342
+ export interface Edit {
1343
+ editableUntilMsecs?: string;
1344
+
1345
+ editTweetIds?: Array<string>;
1346
+
1347
+ initialTweetId?: string;
1348
+ }
1349
+
1350
+ /**
1351
+ * Lists hashtags, symbols, links, and mentions from tweet text.
1352
+ */
1353
+ export interface Entities {
1354
+ hashtags?: Array<Entities.Hashtag>;
1355
+
1356
+ smarttags?: Array<Entities.Smarttag>;
1357
+
1358
+ symbols?: Array<Entities.Symbol>;
1359
+
1360
+ timestamps?: Array<Entities.Timestamp>;
1361
+
1362
+ urls?: Array<Entities.URL>;
1363
+
1364
+ user_mentions?: Array<Entities.UserMention>;
1365
+ }
1366
+
1367
+ export namespace Entities {
1368
+ /**
1369
+ * Provides hashtag text and source offsets within a tweet.
1370
+ */
1371
+ export interface Hashtag {
1372
+ text: string;
1373
+
1374
+ indices?: Array<number>;
1375
+
1376
+ /**
1377
+ * X's SmartTag for a cashtag, smarttag or hashtag. Xquik leaves out X's trading
1378
+ * platforms, which differ by reader.
1379
+ */
1380
+ tag?: Hashtag.Tag;
1381
+ }
647
1382
 
648
- createdAt?: string;
1383
+ export namespace Hashtag {
1384
+ /**
1385
+ * X's SmartTag for a cashtag, smarttag or hashtag. Xquik leaves out X's trading
1386
+ * platforms, which differ by reader.
1387
+ */
1388
+ export interface Tag {
1389
+ /**
1390
+ * X's ID for the SmartTag.
1391
+ */
1392
+ id?: string;
1393
+
1394
+ info?: Tag.Info;
1395
+ }
1396
+
1397
+ export namespace Tag {
1398
+ export interface Info {
1399
+ info?: Info.Info;
1400
+ }
1401
+
1402
+ export namespace Info {
1403
+ export interface Info {
1404
+ /**
1405
+ * Whether X marks the SmartTag active.
1406
+ */
1407
+ active?: boolean;
1408
+
1409
+ name?: string;
1410
+
1411
+ ticker?: string;
1412
+ }
1413
+ }
1414
+ }
1415
+ }
649
1416
 
650
- /**
651
- * Rendered text's start and end offsets.
652
- */
653
- displayTextRange?: Array<number>;
1417
+ /**
1418
+ * Indexed smart-tag, cashtag, or video timestamp metadata.
1419
+ */
1420
+ export interface Smarttag {
1421
+ indices?: Array<number>;
654
1422
 
655
- /**
656
- * Edit history metadata returned by X.
657
- */
658
- edit?: SearchTweet.Edit;
1423
+ seconds?: number;
659
1424
 
660
- /**
661
- * Parsed search-result entities including URLs, mentions, hashtags, and media
662
- * markers
663
- */
664
- entities?: { [key: string]: unknown };
1425
+ /**
1426
+ * X's SmartTag for a cashtag, smarttag or hashtag. Xquik leaves out X's trading
1427
+ * platforms, which differ by reader.
1428
+ */
1429
+ tag?: Smarttag.Tag;
665
1430
 
666
- /**
667
- * ID of the tweet this result replies to.
668
- */
669
- inReplyToId?: string;
1431
+ text?: string;
1432
+ }
670
1433
 
671
- /**
672
- * ID of the user this result replies to.
673
- */
674
- inReplyToUserId?: string;
1434
+ export namespace Smarttag {
1435
+ /**
1436
+ * X's SmartTag for a cashtag, smarttag or hashtag. Xquik leaves out X's trading
1437
+ * platforms, which differ by reader.
1438
+ */
1439
+ export interface Tag {
1440
+ /**
1441
+ * X's ID for the SmartTag.
1442
+ */
1443
+ id?: string;
1444
+
1445
+ info?: Tag.Info;
1446
+ }
1447
+
1448
+ export namespace Tag {
1449
+ export interface Info {
1450
+ info?: Info.Info;
1451
+ }
1452
+
1453
+ export namespace Info {
1454
+ export interface Info {
1455
+ /**
1456
+ * Whether X marks the SmartTag active.
1457
+ */
1458
+ active?: boolean;
1459
+
1460
+ name?: string;
1461
+
1462
+ ticker?: string;
1463
+ }
1464
+ }
1465
+ }
1466
+ }
675
1467
 
676
- /**
677
- * Username this result replies to.
678
- */
679
- inReplyToUsername?: string;
1468
+ /**
1469
+ * Indexed smart-tag, cashtag, or video timestamp metadata.
1470
+ */
1471
+ export interface Symbol {
1472
+ indices?: Array<number>;
680
1473
 
681
- /**
682
- * Whether the tweet has limited reply permissions
683
- */
684
- isLimitedReply?: boolean;
1474
+ seconds?: number;
685
1475
 
686
- /**
687
- * True for Note Tweets (long-form content, up to 25,000 characters)
688
- */
689
- isNoteTweet?: boolean;
1476
+ /**
1477
+ * X's SmartTag for a cashtag, smarttag or hashtag. Xquik leaves out X's trading
1478
+ * platforms, which differ by reader.
1479
+ */
1480
+ tag?: Symbol.Tag;
690
1481
 
691
- /**
692
- * True when this search result quotes another tweet
693
- */
694
- isQuoteStatus?: boolean;
1482
+ text?: string;
1483
+ }
695
1484
 
696
- /**
697
- * True when this search result is a reply
698
- */
699
- isReply?: boolean;
1485
+ export namespace Symbol {
1486
+ /**
1487
+ * X's SmartTag for a cashtag, smarttag or hashtag. Xquik leaves out X's trading
1488
+ * platforms, which differ by reader.
1489
+ */
1490
+ export interface Tag {
1491
+ /**
1492
+ * X's ID for the SmartTag.
1493
+ */
1494
+ id?: string;
1495
+
1496
+ info?: Tag.Info;
1497
+ }
1498
+
1499
+ export namespace Tag {
1500
+ export interface Info {
1501
+ info?: Info.Info;
1502
+ }
1503
+
1504
+ export namespace Info {
1505
+ export interface Info {
1506
+ /**
1507
+ * Whether X marks the SmartTag active.
1508
+ */
1509
+ active?: boolean;
1510
+
1511
+ name?: string;
1512
+
1513
+ ticker?: string;
1514
+ }
1515
+ }
1516
+ }
1517
+ }
700
1518
 
701
- isTranslatable?: boolean;
1519
+ /**
1520
+ * Indexed smart-tag, cashtag, or video timestamp metadata.
1521
+ */
1522
+ export interface Timestamp {
1523
+ indices?: Array<number>;
702
1524
 
703
- /**
704
- * Search result language code.
705
- */
706
- lang?: string;
1525
+ seconds?: number;
707
1526
 
708
- /**
709
- * Search-result media attachments, omitted when no media is present
710
- */
711
- media?: Array<TweetMedia>;
1527
+ /**
1528
+ * X's SmartTag for a cashtag, smarttag or hashtag. Xquik leaves out X's trading
1529
+ * platforms, which differ by reader.
1530
+ */
1531
+ tag?: Timestamp.Tag;
712
1532
 
713
- /**
714
- * Complete Note Tweet content and rich-text metadata.
715
- */
716
- noteTweet?: SearchTweet.NoteTweet;
1533
+ text?: string;
1534
+ }
717
1535
 
718
- /**
719
- * Public place metadata attached to a tweet.
720
- */
721
- place?: SearchTweet.Place;
1536
+ export namespace Timestamp {
1537
+ /**
1538
+ * X's SmartTag for a cashtag, smarttag or hashtag. Xquik leaves out X's trading
1539
+ * platforms, which differ by reader.
1540
+ */
1541
+ export interface Tag {
1542
+ /**
1543
+ * X's ID for the SmartTag.
1544
+ */
1545
+ id?: string;
1546
+
1547
+ info?: Tag.Info;
1548
+ }
1549
+
1550
+ export namespace Tag {
1551
+ export interface Info {
1552
+ info?: Info.Info;
1553
+ }
1554
+
1555
+ export namespace Info {
1556
+ export interface Info {
1557
+ /**
1558
+ * Whether X marks the SmartTag active.
1559
+ */
1560
+ active?: boolean;
1561
+
1562
+ name?: string;
1563
+
1564
+ ticker?: string;
1565
+ }
1566
+ }
1567
+ }
1568
+ }
722
1569
 
723
- possiblySensitive?: boolean;
1570
+ /**
1571
+ * Provides shortened, display, and expanded URLs from tweet text.
1572
+ */
1573
+ export interface URL {
1574
+ display_url?: string;
724
1575
 
725
- /**
726
- * Engagement counts retained from a prior tweet edit.
727
- */
728
- previousCounts?: SearchTweet.PreviousCounts;
1576
+ expanded_url?: string;
729
1577
 
730
- /**
731
- * Quoted or retweeted tweet context. Every object includes id, text, and
732
- * engagement metrics. A zero metric can mean X did not report the count. Author,
733
- * media, and conversation fields appear when available.
734
- */
735
- quoted_tweet?: EmbeddedTweet;
1578
+ indices?: Array<number>;
736
1579
 
737
- /**
738
- * Quoted or retweeted tweet context. Every object includes id, text, and
739
- * engagement metrics. A zero metric can mean X did not report the count. Author,
740
- * media, and conversation fields appear when available.
741
- */
742
- retweeted_tweet?: EmbeddedTweet;
1580
+ url?: string;
1581
+ }
743
1582
 
744
- /**
745
- * Client application used to post the tweet
746
- */
747
- source?: string;
1583
+ /**
1584
+ * Provides profile identity and source offsets for a mention.
1585
+ */
1586
+ export interface UserMention {
1587
+ screen_name: string;
748
1588
 
749
- type?: string;
1589
+ id_str?: string;
750
1590
 
751
- /**
752
- * Search result permalink.
753
- */
754
- url?: string;
1591
+ indices?: Array<number>;
755
1592
 
756
- viewState?: string;
757
- }
1593
+ name?: string;
1594
+ }
1595
+ }
758
1596
 
759
- export namespace SearchTweet {
760
1597
  /**
761
- * Article metadata attached to a tweet.
1598
+ * Marks a subscriber-only post with the creator whose subscription unlocks it.
1599
+ * Non-subscribers get the preview text & the subscribe link. Omitted on public
1600
+ * posts.
762
1601
  */
763
- export interface Article {
764
- id?: string;
1602
+ export interface ExclusiveContent {
1603
+ /**
1604
+ * Username of the creator whose subscription unlocks the post.
1605
+ */
1606
+ creatorUserName: string;
765
1607
 
766
- coverMediaUrl?: string;
1608
+ /**
1609
+ * Subscribe link X shows non-subscribers. Omitted when X serves the full post.
1610
+ */
1611
+ subscribeUrl?: string;
1612
+ }
767
1613
 
768
- previewText?: string;
1614
+ /**
1615
+ * Author-published point, with latitude before longitude.
1616
+ */
1617
+ export interface Geo {
1618
+ coordinates: Array<number>;
769
1619
 
770
- title?: string;
1620
+ type: 'Point';
771
1621
  }
772
1622
 
773
1623
  /**
774
- * Public card metadata attached to a tweet.
1624
+ * The notice x.com covers the post with until the reader views it, such as X's
1625
+ * public interest notice on a post that broke its rules but stays up.
775
1626
  */
776
- export interface Card {
777
- id?: string;
1627
+ export interface Interstitial {
1628
+ /**
1629
+ * How x.com shows the notice. `NonCompliant` marks a post that broke X's rules.
1630
+ */
1631
+ displayType?: string;
778
1632
 
779
- bindingValues?: { [key: string]: unknown };
1633
+ text?: Interstitial.Text;
1634
+ }
780
1635
 
781
- name?: string;
1636
+ export namespace Interstitial {
1637
+ export interface Text {
1638
+ /**
1639
+ * Links inside the notice, by character range.
1640
+ */
1641
+ entities?: Array<Text.Entity>;
1642
+
1643
+ /**
1644
+ * Whether X writes it right to left.
1645
+ */
1646
+ rtl?: boolean;
1647
+
1648
+ /**
1649
+ * The notice's text.
1650
+ */
1651
+ text?: string;
1652
+ }
782
1653
 
783
- url?: string;
784
- }
1654
+ export namespace Text {
1655
+ export interface Entity {
1656
+ /**
1657
+ * Whole number from 0.
1658
+ */
1659
+ fromIndex?: number;
785
1660
 
786
- /**
787
- * Community Note presentation metadata returned by X.
788
- */
789
- export interface CommunityNote {
790
- id?: string;
1661
+ ref?: Entity.Ref;
791
1662
 
792
- destinationUrl?: string;
1663
+ /**
1664
+ * Whole number from 0.
1665
+ */
1666
+ toIndex?: number;
1667
+ }
793
1668
 
794
- footer?: string;
1669
+ export namespace Entity {
1670
+ export interface Ref {
1671
+ type?: string;
795
1672
 
796
- shortTitle?: string;
1673
+ url?: string;
797
1674
 
798
- subtitle?: string;
1675
+ urlType?: string;
1676
+ }
1677
+ }
1678
+ }
1679
+ }
799
1680
 
800
- title?: string;
1681
+ export interface LimitedAction {
1682
+ action?: string;
801
1683
 
802
- visualStyle?: string;
1684
+ prompt?: LimitedAction.Prompt;
803
1685
  }
804
1686
 
805
- /**
806
- * Edit history metadata returned by X.
807
- */
808
- export interface Edit {
809
- editableUntilMsecs?: string;
1687
+ export namespace LimitedAction {
1688
+ export interface Prompt {
1689
+ ctaType?: string;
810
1690
 
811
- editTweetIds?: Array<string>;
1691
+ headline?: string;
1692
+
1693
+ /**
1694
+ * Public metadata whose fields are defined by X.
1695
+ */
1696
+ metadata?: { [key: string]: unknown };
1697
+
1698
+ subtext?: string;
1699
+ }
812
1700
  }
813
1701
 
814
1702
  /**
@@ -817,19 +1705,297 @@ export namespace SearchTweet {
817
1705
  export interface NoteTweet {
818
1706
  text: string;
819
1707
 
1708
+ /**
1709
+ * X's global ID of the Note, base64 of `NoteTweet:<noteId>`.
1710
+ */
820
1711
  id?: string;
821
1712
 
822
- entities?: { [key: string]: unknown };
1713
+ /**
1714
+ * Lists hashtags, symbols, links, and mentions from tweet text.
1715
+ */
1716
+ entities?: NoteTweet.Entities;
1717
+
1718
+ /**
1719
+ * Inline media positions in the Note Tweet text.
1720
+ */
1721
+ inlineMedia?: Array<NoteTweet.InlineMedia>;
823
1722
 
824
1723
  isExpandable?: boolean;
825
1724
 
1725
+ /**
1726
+ * The Note's own ID, apart from the post's.
1727
+ */
1728
+ noteId?: string;
1729
+
826
1730
  richtextTags?: Array<NoteTweet.RichtextTag>;
827
1731
  }
828
1732
 
829
1733
  export namespace NoteTweet {
1734
+ /**
1735
+ * Lists hashtags, symbols, links, and mentions from tweet text.
1736
+ */
1737
+ export interface Entities {
1738
+ hashtags?: Array<Entities.Hashtag>;
1739
+
1740
+ smarttags?: Array<Entities.Smarttag>;
1741
+
1742
+ symbols?: Array<Entities.Symbol>;
1743
+
1744
+ timestamps?: Array<Entities.Timestamp>;
1745
+
1746
+ urls?: Array<Entities.URL>;
1747
+
1748
+ user_mentions?: Array<Entities.UserMention>;
1749
+ }
1750
+
1751
+ export namespace Entities {
1752
+ /**
1753
+ * Provides hashtag text and source offsets within a tweet.
1754
+ */
1755
+ export interface Hashtag {
1756
+ text: string;
1757
+
1758
+ indices?: Array<number>;
1759
+
1760
+ /**
1761
+ * X's SmartTag for a cashtag, smarttag or hashtag. Xquik leaves out X's trading
1762
+ * platforms, which differ by reader.
1763
+ */
1764
+ tag?: Hashtag.Tag;
1765
+ }
1766
+
1767
+ export namespace Hashtag {
1768
+ /**
1769
+ * X's SmartTag for a cashtag, smarttag or hashtag. Xquik leaves out X's trading
1770
+ * platforms, which differ by reader.
1771
+ */
1772
+ export interface Tag {
1773
+ /**
1774
+ * X's ID for the SmartTag.
1775
+ */
1776
+ id?: string;
1777
+
1778
+ info?: Tag.Info;
1779
+ }
1780
+
1781
+ export namespace Tag {
1782
+ export interface Info {
1783
+ info?: Info.Info;
1784
+ }
1785
+
1786
+ export namespace Info {
1787
+ export interface Info {
1788
+ /**
1789
+ * Whether X marks the SmartTag active.
1790
+ */
1791
+ active?: boolean;
1792
+
1793
+ name?: string;
1794
+
1795
+ ticker?: string;
1796
+ }
1797
+ }
1798
+ }
1799
+ }
1800
+
1801
+ /**
1802
+ * Indexed smart-tag, cashtag, or video timestamp metadata.
1803
+ */
1804
+ export interface Smarttag {
1805
+ indices?: Array<number>;
1806
+
1807
+ seconds?: number;
1808
+
1809
+ /**
1810
+ * X's SmartTag for a cashtag, smarttag or hashtag. Xquik leaves out X's trading
1811
+ * platforms, which differ by reader.
1812
+ */
1813
+ tag?: Smarttag.Tag;
1814
+
1815
+ text?: string;
1816
+ }
1817
+
1818
+ export namespace Smarttag {
1819
+ /**
1820
+ * X's SmartTag for a cashtag, smarttag or hashtag. Xquik leaves out X's trading
1821
+ * platforms, which differ by reader.
1822
+ */
1823
+ export interface Tag {
1824
+ /**
1825
+ * X's ID for the SmartTag.
1826
+ */
1827
+ id?: string;
1828
+
1829
+ info?: Tag.Info;
1830
+ }
1831
+
1832
+ export namespace Tag {
1833
+ export interface Info {
1834
+ info?: Info.Info;
1835
+ }
1836
+
1837
+ export namespace Info {
1838
+ export interface Info {
1839
+ /**
1840
+ * Whether X marks the SmartTag active.
1841
+ */
1842
+ active?: boolean;
1843
+
1844
+ name?: string;
1845
+
1846
+ ticker?: string;
1847
+ }
1848
+ }
1849
+ }
1850
+ }
1851
+
1852
+ /**
1853
+ * Indexed smart-tag, cashtag, or video timestamp metadata.
1854
+ */
1855
+ export interface Symbol {
1856
+ indices?: Array<number>;
1857
+
1858
+ seconds?: number;
1859
+
1860
+ /**
1861
+ * X's SmartTag for a cashtag, smarttag or hashtag. Xquik leaves out X's trading
1862
+ * platforms, which differ by reader.
1863
+ */
1864
+ tag?: Symbol.Tag;
1865
+
1866
+ text?: string;
1867
+ }
1868
+
1869
+ export namespace Symbol {
1870
+ /**
1871
+ * X's SmartTag for a cashtag, smarttag or hashtag. Xquik leaves out X's trading
1872
+ * platforms, which differ by reader.
1873
+ */
1874
+ export interface Tag {
1875
+ /**
1876
+ * X's ID for the SmartTag.
1877
+ */
1878
+ id?: string;
1879
+
1880
+ info?: Tag.Info;
1881
+ }
1882
+
1883
+ export namespace Tag {
1884
+ export interface Info {
1885
+ info?: Info.Info;
1886
+ }
1887
+
1888
+ export namespace Info {
1889
+ export interface Info {
1890
+ /**
1891
+ * Whether X marks the SmartTag active.
1892
+ */
1893
+ active?: boolean;
1894
+
1895
+ name?: string;
1896
+
1897
+ ticker?: string;
1898
+ }
1899
+ }
1900
+ }
1901
+ }
1902
+
1903
+ /**
1904
+ * Indexed smart-tag, cashtag, or video timestamp metadata.
1905
+ */
1906
+ export interface Timestamp {
1907
+ indices?: Array<number>;
1908
+
1909
+ seconds?: number;
1910
+
1911
+ /**
1912
+ * X's SmartTag for a cashtag, smarttag or hashtag. Xquik leaves out X's trading
1913
+ * platforms, which differ by reader.
1914
+ */
1915
+ tag?: Timestamp.Tag;
1916
+
1917
+ text?: string;
1918
+ }
1919
+
1920
+ export namespace Timestamp {
1921
+ /**
1922
+ * X's SmartTag for a cashtag, smarttag or hashtag. Xquik leaves out X's trading
1923
+ * platforms, which differ by reader.
1924
+ */
1925
+ export interface Tag {
1926
+ /**
1927
+ * X's ID for the SmartTag.
1928
+ */
1929
+ id?: string;
1930
+
1931
+ info?: Tag.Info;
1932
+ }
1933
+
1934
+ export namespace Tag {
1935
+ export interface Info {
1936
+ info?: Info.Info;
1937
+ }
1938
+
1939
+ export namespace Info {
1940
+ export interface Info {
1941
+ /**
1942
+ * Whether X marks the SmartTag active.
1943
+ */
1944
+ active?: boolean;
1945
+
1946
+ name?: string;
1947
+
1948
+ ticker?: string;
1949
+ }
1950
+ }
1951
+ }
1952
+ }
1953
+
1954
+ /**
1955
+ * Provides shortened, display, and expanded URLs from tweet text.
1956
+ */
1957
+ export interface URL {
1958
+ display_url?: string;
1959
+
1960
+ expanded_url?: string;
1961
+
1962
+ indices?: Array<number>;
1963
+
1964
+ url?: string;
1965
+ }
1966
+
1967
+ /**
1968
+ * Provides profile identity and source offsets for a mention.
1969
+ */
1970
+ export interface UserMention {
1971
+ screen_name: string;
1972
+
1973
+ id_str?: string;
1974
+
1975
+ indices?: Array<number>;
1976
+
1977
+ name?: string;
1978
+ }
1979
+ }
1980
+
1981
+ export interface InlineMedia {
1982
+ /**
1983
+ * Whole number from 0.
1984
+ */
1985
+ index: number;
1986
+
1987
+ mediaId: string;
1988
+ }
1989
+
830
1990
  export interface RichtextTag {
1991
+ /**
1992
+ * Whole number from 0.
1993
+ */
831
1994
  fromIndex: number;
832
1995
 
1996
+ /**
1997
+ * Whole number from 0.
1998
+ */
833
1999
  toIndex: number;
834
2000
 
835
2001
  types: Array<string>;
@@ -837,11 +2003,14 @@ export namespace SearchTweet {
837
2003
  }
838
2004
 
839
2005
  /**
840
- * Public place metadata attached to a tweet.
2006
+ * Describes public place metadata on a geotagged tweet.
841
2007
  */
842
2008
  export interface Place {
843
2009
  id?: string;
844
2010
 
2011
+ /**
2012
+ * Public metadata whose fields are defined by X.
2013
+ */
845
2014
  boundingBox?: { [key: string]: unknown };
846
2015
 
847
2016
  country?: string;
@@ -861,61 +2030,301 @@ export namespace SearchTweet {
861
2030
  * Engagement counts retained from a prior tweet edit.
862
2031
  */
863
2032
  export interface PreviousCounts {
2033
+ /**
2034
+ * Whole number from 0.
2035
+ */
864
2036
  bookmarkCount?: number;
865
2037
 
866
- likeCount?: number;
2038
+ /**
2039
+ * Whole number from 0.
2040
+ */
2041
+ likeCount?: number;
2042
+
2043
+ /**
2044
+ * Whole number from 0.
2045
+ */
2046
+ quoteCount?: number;
2047
+
2048
+ /**
2049
+ * Whole number from 0.
2050
+ */
2051
+ replyCount?: number;
2052
+
2053
+ /**
2054
+ * Whole number from 0.
2055
+ */
2056
+ retweetCount?: number;
2057
+ }
2058
+
2059
+ /**
2060
+ * The quoted post's link, kept when X withholds that post.
2061
+ */
2062
+ export interface QuotedTweetPermalink {
2063
+ displayUrl?: string;
2064
+
2065
+ expandedUrl?: string;
2066
+
2067
+ url?: string;
2068
+ }
2069
+
2070
+ /**
2071
+ * Why X shows no quoted post. Omitted when X names no reason, as its legacy
2072
+ * answers never do.
2073
+ */
2074
+ export interface QuotedTweetUnavailable {
2075
+ /**
2076
+ * X's reason, such as `Suspended` for a suspended author or `Protected` for an
2077
+ * author who protects their posts.
2078
+ */
2079
+ reason: string;
2080
+ }
2081
+
2082
+ /**
2083
+ * Public post & user this reaction references.
2084
+ */
2085
+ export interface ReactionContext {
2086
+ /**
2087
+ * Referenced post ID.
2088
+ */
2089
+ reactedToPostId?: string;
2090
+
2091
+ /**
2092
+ * Public X profile.
2093
+ */
2094
+ reactedToUser?: Shared.UserProfile;
2095
+ }
2096
+
2097
+ /**
2098
+ * Game metadata attached to this post.
2099
+ */
2100
+ export interface SportsContext {
2101
+ /**
2102
+ * Teams & reported scores.
2103
+ */
2104
+ competitors?: Array<SportsContext.Competitor>;
2105
+
2106
+ /**
2107
+ * Game ID.
2108
+ */
2109
+ gameId?: string;
2110
+
2111
+ /**
2112
+ * League ID.
2113
+ */
2114
+ league?: string;
2115
+
2116
+ /**
2117
+ * Scheduled Unix milliseconds, retaining the source type.
2118
+ */
2119
+ scheduledAtMs?: number | string;
2120
+
2121
+ /**
2122
+ * Reported game state.
2123
+ */
2124
+ state?: string;
2125
+
2126
+ /**
2127
+ * Game progress text.
2128
+ */
2129
+ statusText?: string;
2130
+
2131
+ /**
2132
+ * Game title.
2133
+ */
2134
+ title?: string;
2135
+
2136
+ /**
2137
+ * Game link.
2138
+ */
2139
+ url?: string;
2140
+ }
2141
+
2142
+ export namespace SportsContext {
2143
+ export interface Competitor {
2144
+ /**
2145
+ * Team abbreviation.
2146
+ */
2147
+ abbreviation?: string;
2148
+
2149
+ /**
2150
+ * Team display color.
2151
+ */
2152
+ color?: string;
2153
+
2154
+ /**
2155
+ * Logo for dark backgrounds.
2156
+ */
2157
+ darkLogoUrl?: string;
2158
+
2159
+ /**
2160
+ * Active competitor.
2161
+ */
2162
+ isActive?: boolean;
2163
+
2164
+ /**
2165
+ * Winning competitor.
2166
+ */
2167
+ isWinner?: boolean;
2168
+
2169
+ /**
2170
+ * Logo for light backgrounds.
2171
+ */
2172
+ logoUrl?: string;
2173
+
2174
+ /**
2175
+ * Team name.
2176
+ */
2177
+ name?: string;
2178
+
2179
+ /**
2180
+ * Score display text.
2181
+ */
2182
+ score?: string;
2183
+
2184
+ /**
2185
+ * Team ID.
2186
+ */
2187
+ teamId?: string;
2188
+ }
2189
+ }
2190
+
2191
+ /**
2192
+ * The Subscriber badge X shows on a reply. The reply's author subscribes to the
2193
+ * creator who started the conversation. Omitted on a post without the badge.
2194
+ */
2195
+ export interface SubscriberBadge {
2196
+ /**
2197
+ * Account ID of the creator the author subscribes to.
2198
+ */
2199
+ creatorId: string;
2200
+ }
2201
+
2202
+ export interface TextHighlight {
2203
+ /**
2204
+ * The first code point after the match.
2205
+ */
2206
+ endIndex: number;
2207
+
2208
+ /**
2209
+ * The first code point of the match.
2210
+ */
2211
+ startIndex: number;
2212
+ }
2213
+
2214
+ /**
2215
+ * Public visibility notice attached to an available tweet.
2216
+ */
2217
+ export interface Tombstone {
2218
+ text?: Tombstone.Text;
2219
+
2220
+ /**
2221
+ * Visibility notice type.
2222
+ */
2223
+ type?: string;
2224
+ }
2225
+
2226
+ export namespace Tombstone {
2227
+ export interface Text {
2228
+ entities?: Array<Text.Entity>;
2229
+
2230
+ /**
2231
+ * Right-to-left text direction.
2232
+ */
2233
+ rtl?: boolean;
2234
+
2235
+ /**
2236
+ * Human-readable notice text.
2237
+ */
2238
+ text?: string;
2239
+ }
2240
+
2241
+ export namespace Text {
2242
+ export interface Entity {
2243
+ /**
2244
+ * Whole number from 0.
2245
+ */
2246
+ fromIndex?: number;
2247
+
2248
+ ref?: Entity.Ref;
867
2249
 
868
- quoteCount?: number;
2250
+ /**
2251
+ * Whole number from 0.
2252
+ */
2253
+ toIndex?: number;
2254
+ }
869
2255
 
870
- replyCount?: number;
2256
+ export namespace Entity {
2257
+ export interface Ref {
2258
+ type?: string;
871
2259
 
872
- retweetCount?: number;
2260
+ url?: string;
2261
+
2262
+ urlType?: string;
2263
+ }
2264
+ }
2265
+ }
873
2266
  }
874
2267
  }
875
2268
 
876
2269
  /**
877
- * Normalized media attached to a tweet.
2270
+ * Tweet media.
878
2271
  */
879
2272
  export interface TweetMedia {
880
2273
  /**
881
- * Media preview URL
2274
+ * Preview URL.
882
2275
  */
883
2276
  mediaUrl: string;
884
2277
 
885
2278
  type: 'photo' | 'video' | 'animated_gif';
886
2279
 
887
2280
  /**
888
- * X media link from the tweet
2281
+ * Tweet media link.
889
2282
  */
890
2283
  url: string;
891
2284
 
892
2285
  /**
893
- * X media entity ID.
2286
+ * Media entity ID.
894
2287
  */
895
2288
  id?: string;
896
2289
 
897
2290
  /**
898
- * Whether X permits direct media download.
2291
+ * Adult-content warning.
2292
+ */
2293
+ adultContent?: boolean;
2294
+
2295
+ /**
2296
+ * Direct download permission.
899
2297
  */
900
2298
  allowDownload?: boolean;
901
2299
 
902
2300
  /**
903
- * Accessibility text supplied for the media.
2301
+ * Accessibility text.
904
2302
  */
905
2303
  altText?: string;
906
2304
 
907
2305
  /**
908
- * Video aspect ratio as width and height.
2306
+ * Video width and height ratio.
909
2307
  */
910
2308
  aspectRatio?: Array<number>;
911
2309
 
912
2310
  /**
913
- * Media availability state reported by X.
2311
+ * Why X made the media unavailable, such as `Dmcaed` after a copyright report.
2312
+ * Omitted on available media.
2313
+ */
2314
+ availabilityReason?: string;
2315
+
2316
+ /**
2317
+ * Availability state, such as `Available` or `Unavailable`.
914
2318
  */
915
2319
  availabilityStatus?: string;
916
2320
 
917
2321
  /**
918
- * Display-friendly media URL reported by X.
2322
+ * Media description.
2323
+ */
2324
+ description?: string;
2325
+
2326
+ /**
2327
+ * Display URL.
919
2328
  */
920
2329
  displayUrl?: string;
921
2330
 
@@ -925,27 +2334,47 @@ export interface TweetMedia {
925
2334
  durationMillis?: number;
926
2335
 
927
2336
  /**
928
- * Expanded X media URL.
2337
+ * Embeddable status.
2338
+ */
2339
+ embeddable?: boolean;
2340
+
2341
+ /**
2342
+ * Expanded media URL.
929
2343
  */
930
2344
  expandedUrl?: string;
931
2345
 
932
2346
  /**
933
- * Face-aware crop rectangles grouped by media size.
2347
+ * Face crop rectangles by size.
934
2348
  */
935
2349
  faceRects?: { [key: string]: Array<TweetMedia.FaceRect> };
936
2350
 
937
2351
  /**
938
- * Suggested image crops reported by X.
2352
+ * Suggested image crops.
939
2353
  */
940
2354
  focusRects?: Array<TweetMedia.FocusRect>;
941
2355
 
942
2356
  /**
943
- * Original media height.
2357
+ * Graphic-violence warning.
2358
+ */
2359
+ graphicViolence?: boolean;
2360
+
2361
+ /**
2362
+ * Prompt a Grok image came from. Absent on other media & when X sends no prompt.
2363
+ */
2364
+ grokImageAnnotation?: TweetMedia.GrokImageAnnotation;
2365
+
2366
+ /**
2367
+ * Grok post ID associated with the media.
2368
+ */
2369
+ grokPostId?: string;
2370
+
2371
+ /**
2372
+ * Original height.
944
2373
  */
945
2374
  height?: number;
946
2375
 
947
2376
  /**
948
- * Media entity offsets in the tweet text.
2377
+ * Tweet text offsets.
949
2378
  */
950
2379
  indices?: Array<number>;
951
2380
 
@@ -955,66 +2384,162 @@ export interface TweetMedia {
955
2384
  mediaKey?: string;
956
2385
 
957
2386
  /**
958
- * Whether X reports the media as monetizable.
2387
+ * Monetization status.
959
2388
  */
960
2389
  monetizable?: boolean;
961
2390
 
2391
+ otherSensitiveContent?: boolean;
2392
+
962
2393
  /**
963
2394
  * Named media renditions and resize modes.
964
2395
  */
965
2396
  sizes?: { [key: string]: TweetMedia.Sizes };
966
2397
 
967
2398
  /**
968
- * Available video encodings, ordered as returned
2399
+ * Source tweet ID for copied media.
2400
+ */
2401
+ sourceStatusId?: string;
2402
+
2403
+ /**
2404
+ * The account that first posted the media. Some reads carry only its name, picture
2405
+ * & badges.
2406
+ */
2407
+ sourceUser?: UserProfile;
2408
+
2409
+ /**
2410
+ * Source profile ID for copied media.
2411
+ */
2412
+ sourceUserId?: string;
2413
+
2414
+ /**
2415
+ * Public profiles tagged in the media.
2416
+ */
2417
+ tags?: Array<TweetMedia.Tag>;
2418
+
2419
+ /**
2420
+ * Media title.
2421
+ */
2422
+ title?: string;
2423
+
2424
+ /**
2425
+ * Video encodings in source order.
969
2426
  */
970
2427
  videoVariants?: Array<TweetMedia.VideoVariant>;
971
2428
 
972
2429
  /**
973
- * Original media width.
2430
+ * Public destination URL.
2431
+ */
2432
+ visitSiteUrl?: string;
2433
+
2434
+ /**
2435
+ * Public media action URL.
2436
+ */
2437
+ watchNowUrl?: string;
2438
+
2439
+ /**
2440
+ * Original width.
974
2441
  */
975
2442
  width?: number;
976
2443
  }
977
2444
 
978
2445
  export namespace TweetMedia {
979
2446
  export interface FaceRect {
2447
+ /**
2448
+ * Whole number from 0.
2449
+ */
980
2450
  h: number;
981
2451
 
2452
+ /**
2453
+ * Whole number from 0.
2454
+ */
982
2455
  w: number;
983
2456
 
2457
+ /**
2458
+ * Whole number from 0.
2459
+ */
984
2460
  x: number;
985
2461
 
2462
+ /**
2463
+ * Whole number from 0.
2464
+ */
986
2465
  y: number;
987
2466
  }
988
2467
 
989
2468
  export interface FocusRect {
2469
+ /**
2470
+ * Whole number from 0.
2471
+ */
990
2472
  h: number;
991
2473
 
2474
+ /**
2475
+ * Whole number from 0.
2476
+ */
992
2477
  w: number;
993
2478
 
2479
+ /**
2480
+ * Whole number from 0.
2481
+ */
994
2482
  x: number;
995
2483
 
2484
+ /**
2485
+ * Whole number from 0.
2486
+ */
996
2487
  y: number;
997
2488
  }
998
2489
 
2490
+ /**
2491
+ * Prompt a Grok image came from. Absent on other media & when X sends no prompt.
2492
+ */
2493
+ export interface GrokImageAnnotation {
2494
+ /**
2495
+ * Prompt the image came from.
2496
+ */
2497
+ prompt?: string;
2498
+
2499
+ /**
2500
+ * Grok's longer rewrite of the prompt.
2501
+ */
2502
+ upsampledPrompt?: string;
2503
+ }
2504
+
999
2505
  export interface Sizes {
2506
+ /**
2507
+ * Whole number from 0.
2508
+ */
1000
2509
  h: number;
1001
2510
 
1002
2511
  resize: string;
1003
2512
 
2513
+ /**
2514
+ * Whole number from 0.
2515
+ */
1004
2516
  w: number;
1005
2517
  }
1006
2518
 
2519
+ export interface Tag {
2520
+ name?: string;
2521
+
2522
+ screen_name?: string;
2523
+
2524
+ type?: string;
2525
+
2526
+ user_id?: string;
2527
+ }
2528
+
1007
2529
  export interface VideoVariant {
1008
2530
  contentType: string;
1009
2531
 
1010
2532
  url: string;
1011
2533
 
2534
+ /**
2535
+ * Whole number from 0.
2536
+ */
1012
2537
  bitrate?: number;
1013
2538
  }
1014
2539
  }
1015
2540
 
1016
2541
  /**
1017
- * X user profile with bio, follower counts, and verification status.
2542
+ * Public X profile.
1018
2543
  */
1019
2544
  export interface UserProfile {
1020
2545
  id: string;
@@ -1023,36 +2548,145 @@ export interface UserProfile {
1023
2548
 
1024
2549
  username: string;
1025
2550
 
2551
+ /**
2552
+ * Null when X shows no label.
2553
+ */
2554
+ accountBasedIn?: UserProfile.AccountBasedIn | null;
2555
+
2556
+ /**
2557
+ * False when X notes accountBasedIn may be inaccurate.
2558
+ */
2559
+ accountBasedInAccurate?: boolean;
2560
+
2561
+ /**
2562
+ * True when X withheld accountBasedIn from this read. Retry later.
2563
+ */
2564
+ accountBasedInUnavailable?: boolean;
2565
+
2566
+ /**
2567
+ * X Ads services the account uses, such as `analytics`, `media_studio` or `smb`.
2568
+ * Empty for an account without ads.
2569
+ */
2570
+ advertiserAccountServiceLevels?: Array<string>;
2571
+
2572
+ /**
2573
+ * The account's X Ads type. `none` for an account without ads, or
2574
+ * `promotable_user` for one that may run them.
2575
+ */
2576
+ advertiserAccountType?: string;
2577
+
1026
2578
  /**
1027
2579
  * Organization affiliation label shown on an X profile.
1028
2580
  */
1029
2581
  affiliatesHighlightedLabel?: UserProfile.AffiliatesHighlightedLabel;
1030
2582
 
2583
+ /**
2584
+ * Handle of the organization X shows the account is affiliated with, from its
2585
+ * About page.
2586
+ */
2587
+ affiliateUsername?: string;
2588
+
1031
2589
  automatedBy?: string;
1032
2590
 
2591
+ /**
2592
+ * The parts of the birthday the account made public.
2593
+ */
2594
+ birthdate?: UserProfile.Birthdate;
2595
+
2596
+ /**
2597
+ * Whole number from 0.
2598
+ */
1033
2599
  businessAccountAffiliatesCount?: number;
1034
2600
 
2601
+ /**
2602
+ * Whether X treats the profile as a business profile. `none` or `enabled`.
2603
+ */
2604
+ businessProfileState?: string;
2605
+
1035
2606
  /**
1036
2607
  * Community role when returned by community member reads
1037
2608
  */
1038
2609
  communityRole?: string;
1039
2610
 
2611
+ /**
2612
+ * How the account first connected to X.
2613
+ */
2614
+ connectedVia?: string;
2615
+
2616
+ /**
2617
+ * False when X notes that country may be inaccurate.
2618
+ */
2619
+ connectedViaAccurate?: boolean;
2620
+
2621
+ /**
2622
+ * Emails, phone numbers & links the account publishes on its own profile. Omitted
2623
+ * when it publishes none.
2624
+ */
2625
+ contactInfo?: UserProfile.ContactInfo;
2626
+
1040
2627
  coverPicture?: string;
1041
2628
 
2629
+ /**
2630
+ * Account creation time.
2631
+ */
1042
2632
  createdAt?: string;
1043
2633
 
2634
+ /**
2635
+ * Whole number from 0.
2636
+ */
1044
2637
  creatorSubscriptionsCount?: number;
1045
2638
 
2639
+ /**
2640
+ * Whether the profile keeps X's default theme.
2641
+ */
2642
+ defaultProfile?: boolean;
2643
+
2644
+ /**
2645
+ * Whether the profile keeps X's default avatar.
2646
+ */
2647
+ defaultProfileImage?: boolean;
2648
+
1046
2649
  description?: string;
1047
2650
 
2651
+ /**
2652
+ * First email the account publishes on its profile, lowercased. Omitted when it
2653
+ * publishes none.
2654
+ */
2655
+ email?: string;
2656
+
2657
+ /**
2658
+ * Followers X counts as fast followers.
2659
+ */
2660
+ fastFollowersCount?: number;
2661
+
1048
2662
  favouritesCount?: number;
1049
2663
 
2664
+ /**
2665
+ * Omitted when X sends no count, as for the account that first posted reused
2666
+ * media.
2667
+ */
1050
2668
  followers?: number;
1051
2669
 
1052
2670
  following?: number;
1053
2671
 
2672
+ /**
2673
+ * Whether the profile may add a location to posts.
2674
+ */
2675
+ geoEnabled?: boolean;
2676
+
2677
+ /**
2678
+ * Public profile bio translation returned by X
2679
+ */
2680
+ grokTranslatedBio?: { [key: string]: unknown };
2681
+
1054
2682
  hasCustomTimelines?: boolean;
1055
2683
 
2684
+ /**
2685
+ * Whether the profile filled X's extended fields, such as a birth date. True or
2686
+ * false.
2687
+ */
2688
+ hasExtendedProfile?: boolean;
2689
+
1056
2690
  hasGraduatedAccess?: boolean;
1057
2691
 
1058
2692
  hasHiddenSubscriptionsOnProfile?: boolean;
@@ -1063,7 +2697,7 @@ export interface UserProfile {
1063
2697
  highlightsInfo?: UserProfile.HighlightsInfo;
1064
2698
 
1065
2699
  /**
1066
- * Identity verification metadata displayed by X.
2700
+ * Identity verification X shows on the profile & its About page.
1067
2701
  */
1068
2702
  identityVerification?: UserProfile.IdentityVerification;
1069
2703
 
@@ -1076,6 +2710,11 @@ export interface UserProfile {
1076
2710
 
1077
2711
  isProfileTranslatable?: boolean;
1078
2712
 
2713
+ /**
2714
+ * Whether the account turned on X's translation of its posts. True or false.
2715
+ */
2716
+ isTranslationEnabled?: boolean;
2717
+
1079
2718
  isTranslator?: boolean;
1080
2719
 
1081
2720
  /**
@@ -1083,16 +2722,34 @@ export interface UserProfile {
1083
2722
  */
1084
2723
  isVerified?: boolean;
1085
2724
 
2725
+ /**
2726
+ * Public lists that include the profile.
2727
+ */
2728
+ listedCount?: number;
2729
+
2730
+ /**
2731
+ * Account owner's public profile location text
2732
+ */
1086
2733
  location?: string;
1087
2734
 
1088
2735
  mediaCount?: number;
1089
2736
 
2737
+ /**
2738
+ * Followers minus fast followers.
2739
+ */
2740
+ normalFollowersCount?: number;
2741
+
1090
2742
  parodyCommentaryFanLabel?: string;
1091
2743
 
1092
2744
  pinnedTweetIds?: Array<string>;
1093
2745
 
1094
2746
  possiblySensitive?: boolean;
1095
2747
 
2748
+ /**
2749
+ * Professional metadata with category display settings
2750
+ */
2751
+ professional?: { [key: string]: unknown };
2752
+
1096
2753
  /**
1097
2754
  * Structured profile bio with entity annotations
1098
2755
  */
@@ -1120,24 +2777,73 @@ export interface UserProfile {
1120
2777
  */
1121
2778
  protected?: boolean;
1122
2779
 
2780
+ /**
2781
+ * UTC repost time with includeRetweetTimestamp. Null if the newest profile page
2782
+ * has no match or lookup failed; otherwise omitted.
2783
+ */
2784
+ retweetedAt?: string | null;
2785
+
1123
2786
  statusesCount?: number;
1124
2787
 
2788
+ /**
2789
+ * Accounts subscribed to the profile's paid Subscriptions. 0 when it has none.
2790
+ */
2791
+ subscribersCount?: number;
2792
+
1125
2793
  superFollowEligible?: boolean;
1126
2794
 
2795
+ /**
2796
+ * Whether X marks the subscription profile as active.
2797
+ */
2798
+ superFollowsUserProfileActive?: boolean;
2799
+
2800
+ /**
2801
+ * Public payment and creator-support handles shown on X.
2802
+ */
2803
+ tipJar?: UserProfile.TipJar;
2804
+
1127
2805
  unavailable?: boolean;
1128
2806
 
1129
2807
  unavailableReason?: string;
1130
2808
 
1131
2809
  url?: string;
1132
2810
 
2811
+ /**
2812
+ * How often the account changed its username.
2813
+ */
2814
+ usernameChanges?: UserProfile.UsernameChanges;
2815
+
2816
+ /**
2817
+ * X's text on why the profile is verified, with its links.
2818
+ */
2819
+ verificationReason?: UserProfile.VerificationReason;
2820
+
1133
2821
  verified?: boolean;
1134
2822
 
1135
2823
  verifiedType?: string;
1136
2824
 
1137
2825
  withheldInCountries?: Array<string>;
2826
+
2827
+ /**
2828
+ * Whether X withholds a post or user
2829
+ */
2830
+ withheldScope?: string;
1138
2831
  }
1139
2832
 
1140
2833
  export namespace UserProfile {
2834
+ /**
2835
+ * X's best-effort public label inferred from aggregated account-access IP
2836
+ * addresses. It does not state nationality, residence, identity, registration,
2837
+ * post location, or exact location.
2838
+ */
2839
+ export interface AccountBasedIn {
2840
+ level: 'country' | 'region';
2841
+
2842
+ observedAt: string;
2843
+
2844
+ value: string;
2845
+ }
2846
+
1141
2847
  /**
1142
2848
  * Organization affiliation label shown on an X profile.
1143
2849
  */
@@ -1146,6 +2852,11 @@ export namespace UserProfile {
1146
2852
 
1147
2853
  description?: string;
1148
2854
 
2855
+ /**
2856
+ * Public text, ranges, references, and mention data.
2857
+ */
2858
+ longDescription?: { [key: string]: unknown };
2859
+
1149
2860
  url?: string;
1150
2861
 
1151
2862
  urlType?: string;
@@ -1155,6 +2866,97 @@ export namespace UserProfile {
1155
2866
  userLabelType?: string;
1156
2867
  }
1157
2868
 
2869
+ /**
2870
+ * The parts of the birthday the account made public.
2871
+ */
2872
+ export interface Birthdate {
2873
+ day?: number;
2874
+
2875
+ month?: number;
2876
+
2877
+ year?: number;
2878
+ }
2879
+
2880
+ /**
2881
+ * Emails, phone numbers & links the account publishes on its own profile. Omitted
2882
+ * when it publishes none.
2883
+ */
2884
+ export interface ContactInfo {
2885
+ /**
2886
+ * Emails in the bio, name or location, lowercased.
2887
+ */
2888
+ emails?: Array<ContactInfo.Email>;
2889
+
2890
+ /**
2891
+ * The profile's website & the links in its bio.
2892
+ */
2893
+ links?: Array<ContactInfo.Link>;
2894
+
2895
+ /**
2896
+ * Phone numbers on the profile. Only a spelling that can be nothing else counts.
2897
+ */
2898
+ phones?: Array<ContactInfo.Phone>;
2899
+ }
2900
+
2901
+ export namespace ContactInfo {
2902
+ export interface Email {
2903
+ /**
2904
+ * The part after the @ sign.
2905
+ */
2906
+ domain: string;
2907
+
2908
+ /**
2909
+ * Profile field that holds the email.
2910
+ */
2911
+ source: 'bio' | 'name' | 'location';
2912
+
2913
+ /**
2914
+ * The email address.
2915
+ */
2916
+ value: string;
2917
+
2918
+ /**
2919
+ * The account's own spelling, sent when it spelled the email out.
2920
+ */
2921
+ writtenAs?: string;
2922
+ }
2923
+
2924
+ export interface Link {
2925
+ /**
2926
+ * Site the link belongs to, such as `linkedin`, `github` or `telegram`. Any other
2927
+ * site is `website`.
2928
+ */
2929
+ network: string;
2930
+
2931
+ /**
2932
+ * `url` for the website field, `bio` for a bio link.
2933
+ */
2934
+ source: 'url' | 'bio';
2935
+
2936
+ /**
2937
+ * The link, as X expands it.
2938
+ */
2939
+ url: string;
2940
+ }
2941
+
2942
+ export interface Phone {
2943
+ /**
2944
+ * Profile field that holds the number.
2945
+ */
2946
+ source: 'bio' | 'name' | 'location' | 'url';
2947
+
2948
+ /**
2949
+ * The digits, with a leading + when the account wrote a country code.
2950
+ */
2951
+ value: string;
2952
+
2953
+ /**
2954
+ * The account's own spelling of the number.
2955
+ */
2956
+ writtenAs?: string;
2957
+ }
2958
+ }
2959
+
1158
2960
  /**
1159
2961
  * Profile highlight availability and count metadata.
1160
2962
  */
@@ -1165,13 +2967,87 @@ export namespace UserProfile {
1165
2967
  }
1166
2968
 
1167
2969
  /**
1168
- * Identity verification metadata displayed by X.
2970
+ * Identity verification X shows on the profile & its About page.
1169
2971
  */
1170
2972
  export interface IdentityVerification {
1171
2973
  description?: string;
1172
2974
 
2975
+ /**
2976
+ * Whether the owner verified their ID with X.
2977
+ */
1173
2978
  isIdentityVerified?: boolean;
1174
2979
 
2980
+ /**
2981
+ * When X verified the account, in milliseconds since 1970, as text.
2982
+ */
1175
2983
  verifiedSinceMsec?: string;
1176
2984
  }
2985
+
2986
+ /**
2987
+ * Public payment and creator-support handles shown on X.
2988
+ */
2989
+ export interface TipJar {
2990
+ bandcampHandle?: string;
2991
+
2992
+ bitcoinHandle?: string;
2993
+
2994
+ cashAppHandle?: string;
2995
+
2996
+ ethereumHandle?: string;
2997
+
2998
+ gofundmeHandle?: string;
2999
+
3000
+ isEnabled?: boolean;
3001
+
3002
+ patreonHandle?: string;
3003
+
3004
+ payPalHandle?: string;
3005
+
3006
+ venmoHandle?: string;
3007
+ }
3008
+
3009
+ /**
3010
+ * How often the account changed its username.
3011
+ */
3012
+ export interface UsernameChanges {
3013
+ /**
3014
+ * Whole number from 0.
3015
+ */
3016
+ count: number;
3017
+
3018
+ /**
3019
+ * Time of the latest change, omitted when there is none.
3020
+ */
3021
+ lastChangedAt?: string;
3022
+ }
3023
+
3024
+ /**
3025
+ * X's text on why the profile is verified, with its links.
3026
+ */
3027
+ export interface VerificationReason {
3028
+ /**
3029
+ * Links inside the text, by character range.
3030
+ */
3031
+ entities?: Array<VerificationReason.Entity>;
3032
+
3033
+ text?: string;
3034
+ }
3035
+
3036
+ export namespace VerificationReason {
3037
+ export interface Entity {
3038
+ /**
3039
+ * Whole number from 0.
3040
+ */
3041
+ fromIndex?: number;
3042
+
3043
+ /**
3044
+ * Whole number from 0.
3045
+ */
3046
+ toIndex?: number;
3047
+
3048
+ url?: string;
3049
+
3050
+ urlType?: string;
3051
+ }
3052
+ }
1177
3053
  }