diff --git a/.release-please-manifest.json b/.release-please-manifest.json
index 74674555..7d9b009d 100644
--- a/.release-please-manifest.json
+++ b/.release-please-manifest.json
@@ -1,3 +1,3 @@
{
- ".": "0.8.4"
+ ".": "0.10.0"
}
diff --git a/.stats.yml b/.stats.yml
index ec9dedf1..a89002f5 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
-configured_endpoints: 123
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/xquik/x-twitter-scraper-5f26f3694399b4ac5a4431c66f7d27c4024f9d0dcd899702de5fde1150e28330.yml
-openapi_spec_hash: 362e24e622f9a74ded8b38018e50460c
-config_hash: dab26921eb273c16e5570c0485c9ac2c
+configured_endpoints: 124
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/xquik/x-twitter-scraper-878138bbf57021047ac2af87a490a147b1d41367ee7807cc188d3247cc4b255d.yml
+openapi_spec_hash: 1f50b417a17776f9f361f34552879e64
+config_hash: a4624963c7e5bdbdf085e64f3101d3b0
diff --git a/CHANGELOG.md b/CHANGELOG.md
index a85650bf..311f4d34 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,78 @@
# Changelog
+## 0.10.0 (2026-08-12)
+
+Full Changelog: [v0.8.4...v0.10.0](https://github.com/Xquik-dev/x-twitter-scraper-java/compare/v0.8.4...v0.10.0)
+
+### Features
+
+* add OpenSSF Gold quality gates ([f0fb44d](https://github.com/Xquik-dev/x-twitter-scraper-java/commit/f0fb44d9b07c3c612ff9b005a694e6f838081f3a))
+* **api:** align reply extraction contracts ([#30](https://github.com/Xquik-dev/x-twitter-scraper-java/issues/30)) ([7702591](https://github.com/Xquik-dev/x-twitter-scraper-java/commit/7702591c9b20cabdef63849eb98419cec0ef356a))
+* **api:** api update ([e75a791](https://github.com/Xquik-dev/x-twitter-scraper-java/commit/e75a7919e8ff8da00ddf41ae4111e0f560c6e54a))
+* **api:** api update ([d9ec682](https://github.com/Xquik-dev/x-twitter-scraper-java/commit/d9ec6821d543fce1a888f4d0582c3ec24f3c0564))
+* **api:** api update ([aa06dd7](https://github.com/Xquik-dev/x-twitter-scraper-java/commit/aa06dd748fa884ccfa058fe5ed576d97fae978ef))
+* **api:** api update ([30c1879](https://github.com/Xquik-dev/x-twitter-scraper-java/commit/30c1879055bd1a7fb925a8dc674fbbd932c29f9f))
+* **api:** api update ([5e2cc73](https://github.com/Xquik-dev/x-twitter-scraper-java/commit/5e2cc73283addfe9ac177efb47623c0f51dedf8e))
+* **api:** api update ([6022295](https://github.com/Xquik-dev/x-twitter-scraper-java/commit/6022295c6a25bd0b0797c85ae96304cc3eeb2103))
+* **api:** api update ([d4c753a](https://github.com/Xquik-dev/x-twitter-scraper-java/commit/d4c753ab0a9ee134dc567e576dac2892407e7e29))
+* **api:** api update ([785b4f7](https://github.com/Xquik-dev/x-twitter-scraper-java/commit/785b4f7e00571e41ccd6b1a53ffca6d75ab6f58f))
+* **api:** api update ([a261d36](https://github.com/Xquik-dev/x-twitter-scraper-java/commit/a261d36ba03b9eb2969ca9758694f969bf374ec7))
+* **api:** sync public contracts ([ddda594](https://github.com/Xquik-dev/x-twitter-scraper-java/commit/ddda594ba95292a599c2d3352e3130d63ddf6a74))
+
+
+### Bug Fixes
+
+* align SLF4J test provider ([e760ae0](https://github.com/Xquik-dev/x-twitter-scraper-java/commit/e760ae0bc9ff0ecb402e6f989c319908d1282875))
+* escape ampersand in OpenAPI summaries for C# XML docs ([fb78c9a](https://github.com/Xquik-dev/x-twitter-scraper-java/commit/fb78c9aea1252be7535e3b5efcc5f916805831d4))
+* **release:** allow Maven publication propagation ([#32](https://github.com/Xquik-dev/x-twitter-scraper-java/issues/32)) ([efd0ddc](https://github.com/Xquik-dev/x-twitter-scraper-java/commit/efd0ddc053c497054b01d765e7c1fbbddf5d6106))
+* remove unused async lock helper ([bf2e7a9](https://github.com/Xquik-dev/x-twitter-scraper-java/commit/bf2e7a9d5bbfd1b53ce9bf34386a6fe0194ba73c))
+* trust verified Gradle metadata ([e0e3e87](https://github.com/Xquik-dev/x-twitter-scraper-java/commit/e0e3e8783d7b3077af70647d8e5f67565da4bc3f))
+
+
+### Chores
+
+* add Context7 refresh workflow ([ce2a6d7](https://github.com/Xquik-dev/x-twitter-scraper-java/commit/ce2a6d7bbf0b3818343823564632b9663deef0ef))
+* add FUNDING.yml pointing to xquik.com ([b8a37d9](https://github.com/Xquik-dev/x-twitter-scraper-java/commit/b8a37d9d5eff62c825d045e7549cbbd97b8e044a))
+* **deps:** bump actions/setup-java from 5.6.0 to 5.7.0 ([#49](https://github.com/Xquik-dev/x-twitter-scraper-java/issues/49)) ([ca9c316](https://github.com/Xquik-dev/x-twitter-scraper-java/commit/ca9c316f84afa298a5df6e5c06da2acf1da64541))
+* **deps:** bump github/codeql-action/analyze from 4.37.1 to 4.37.2 ([#22](https://github.com/Xquik-dev/x-twitter-scraper-java/issues/22)) ([d307843](https://github.com/Xquik-dev/x-twitter-scraper-java/commit/d3078435464e3144075d865d972e38d5bbd59482))
+* **deps:** bump github/codeql-action/upload-sarif ([#23](https://github.com/Xquik-dev/x-twitter-scraper-java/issues/23)) ([977ccd8](https://github.com/Xquik-dev/x-twitter-scraper-java/commit/977ccd80c70faa598845c08f1a776ea48d198a51))
+* **deps:** bump github/codeql-action/upload-sarif from 4.37.2 to 4.37.6 ([#46](https://github.com/Xquik-dev/x-twitter-scraper-java/issues/46)) ([d1614e9](https://github.com/Xquik-dev/x-twitter-scraper-java/commit/d1614e9d52d5fb6d78cbd7178ceaf7a54d924816))
+* **deps:** bump org.apache.logging.log4j:log4j-api ([#20](https://github.com/Xquik-dev/x-twitter-scraper-java/issues/20)) ([13ec838](https://github.com/Xquik-dev/x-twitter-scraper-java/commit/13ec8385e24b81e280f66f6897398b1385c8aec6))
+* **internal:** codegen related update ([9ff57d2](https://github.com/Xquik-dev/x-twitter-scraper-java/commit/9ff57d291ace852b3fcea07c5db1444dd7ec5115))
+* merge main into release branch ([cb52b50](https://github.com/Xquik-dev/x-twitter-scraper-java/commit/cb52b508a62ee885b19897c8b4661c6f0609601d))
+* neutralize coverage source classification ([0089073](https://github.com/Xquik-dev/x-twitter-scraper-java/commit/0089073842fc8fe912ae99232b163a3be11313de))
+* preserve coverage gates with SPDX headers ([873219a](https://github.com/Xquik-dev/x-twitter-scraper-java/commit/873219ac82c57fdceb4fef37c8393d447a03781f))
+* quiet Gradle cache cleanup warnings ([6b77330](https://github.com/Xquik-dev/x-twitter-scraper-java/commit/6b77330a7fdf7e9c8ea84dee354e57e613564be3))
+* sync OpenAPI spec ([c225ad8](https://github.com/Xquik-dev/x-twitter-scraper-java/commit/c225ad8eb377c71093ce3f9b5292257ce191ed3a))
+* update Gradle actions for Node 24 ([9c8a3a0](https://github.com/Xquik-dev/x-twitter-scraper-java/commit/9c8a3a0da540d688aac6f5d9b128962c1d222876))
+* wire production_repo for all targets ([1a3de89](https://github.com/Xquik-dev/x-twitter-scraper-java/commit/1a3de8994dc023e9602bc359a0f5067f03082e9a))
+
+
+### Documentation
+
+* add Contributor Covenant 2.1 Code of Conduct ([#2192](https://github.com/Xquik-dev/x-twitter-scraper-java/issues/2192)) ([afb97b0](https://github.com/Xquik-dev/x-twitter-scraper-java/commit/afb97b0d326a8ff3602f871cd12daa63c7a3d847))
+* add DeepWiki badge ([3b366af](https://github.com/Xquik-dev/x-twitter-scraper-java/commit/3b366af5ff33de6e029885af3c7fedbf7c0a6b9a))
+* clarify repository discovery ([e6c115b](https://github.com/Xquik-dev/x-twitter-scraper-java/commit/e6c115b50205ce8720f5d30c7cfdf48f780537b3))
+* correct Java test evidence count ([6e6a171](https://github.com/Xquik-dev/x-twitter-scraper-java/commit/6e6a171d428896d32833fa94e5860c68ad7e2739))
+* map common X data tasks ([#12](https://github.com/Xquik-dev/x-twitter-scraper-java/issues/12)) ([f3438ea](https://github.com/Xquik-dev/x-twitter-scraper-java/commit/f3438ea480f091967958c158a10fc7722d6298fd))
+* mark Maven publication pending ([2aad6f6](https://github.com/Xquik-dev/x-twitter-scraper-java/commit/2aad6f6d7208d90eaffbb483677cd50a34f55559))
+
+## [0.9.1](https://github.com/stainless-sdks/x-twitter-scraper-java/compare/v0.9.0...v0.9.1) (2026-08-11)
+
+### Features
+
+* **api:** api update ([e75a791](https://github.com/stainless-sdks/x-twitter-scraper-java/commit/e75a7919e8ff8da00ddf41ae4111e0f560c6e54a))
+* **api:** clarify idempotent guest checkout replays ([60ae884](https://github.com/stainless-sdks/x-twitter-scraper-java/commit/60ae88467fd1d10f2c33a7f2a6575e3dd6087ff8))
+
+## [0.9.0](https://github.com/stainless-sdks/x-twitter-scraper-java/compare/v0.8.4...v0.9.0) (2026-08-11)
+
+
+### Features
+
+* **api:** api update ([d9ec682](https://github.com/stainless-sdks/x-twitter-scraper-java/commit/d9ec6821d543fce1a888f4d0582c3ec24f3c0564))
+* **api:** api update ([aa06dd7](https://github.com/stainless-sdks/x-twitter-scraper-java/commit/aa06dd748fa884ccfa058fe5ed576d97fae978ef))
+* **api:** update generated API surface ([9aa7a46](https://github.com/stainless-sdks/x-twitter-scraper-java/commit/9aa7a469545701d567c0a74e5ad7eea123c333f1))
+
## 0.8.4 (2026-08-11)
Full Changelog: [v0.8.3...v0.8.4](https://github.com/Xquik-dev/x-twitter-scraper-java/compare/v0.8.3...v0.8.4)
diff --git a/README.md b/README.md
index 2adb17ab..c00fcef0 100644
--- a/README.md
+++ b/README.md
@@ -15,8 +15,8 @@ Use it as a typed X API or Twitter API alternative.
-[](https://central.sonatype.com/artifact/com.xquik.api/x-twitter-scraper-java/0.8.4)
-[](https://javadoc.io/doc/com.xquik.api/x-twitter-scraper-java/0.8.4)
+[](https://central.sonatype.com/artifact/com.xquik.api/x-twitter-scraper-java/0.10.0)
+[](https://javadoc.io/doc/com.xquik.api/x-twitter-scraper-java/0.10.0)
@@ -64,7 +64,7 @@ Use [API reference](https://docs.xquik.com/api-reference/overview) for request c
Gradle:
```kotlin
-implementation("com.xquik.api:x-twitter-scraper-java:0.8.4")
+implementation("com.xquik.api:x-twitter-scraper-java:0.10.0")
```
Maven:
@@ -73,7 +73,7 @@ Maven:
com.xquik.api
x-twitter-scraper-java
- 0.8.4
+ 0.10.0
```
@@ -136,15 +136,15 @@ System properties override environment variables.
## Search Posts
```java
-import com.x_twitter_scraper.api.models.PaginatedTweets;
import com.x_twitter_scraper.api.models.x.tweets.TweetSearchParams;
+import com.x_twitter_scraper.api.models.x.tweets.TweetSearchResponse;
TweetSearchParams params = TweetSearchParams.builder()
.q("from:elonmusk")
.limit(10L)
.build();
-PaginatedTweets result = client.x().tweets().search(params);
+TweetSearchResponse result = client.x().tweets().search(params);
```
Close the client when your application stops:
@@ -160,7 +160,7 @@ Call `async()` to receive `CompletableFuture` results:
```java
import java.util.concurrent.CompletableFuture;
-CompletableFuture result =
+CompletableFuture result =
client.async().x().tweets().search(params);
```
diff --git a/build.gradle.kts b/build.gradle.kts
index 96cf25fb..243958c0 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -36,7 +36,7 @@ licenseReport {
allprojects {
group = "com.xquik.api"
- version = "0.8.4" // x-release-please-version
+ version = "0.10.0" // x-release-please-version
dependencyLocking {
lockAllConfigurations()
diff --git a/x-twitter-scraper-java-core/src/main/kotlin/com/x_twitter_scraper/api/models/Error.kt b/x-twitter-scraper-java-core/src/main/kotlin/com/x_twitter_scraper/api/models/Error.kt
index 3cfe8c62..65f5af1b 100644
--- a/x-twitter-scraper-java-core/src/main/kotlin/com/x_twitter_scraper/api/models/Error.kt
+++ b/x-twitter-scraper-java-core/src/main/kotlin/com/x_twitter_scraper/api/models/Error.kt
@@ -616,6 +616,8 @@ private constructor(
@JvmField val MONITOR_ALREADY_EXISTS = of("monitor_already_exists")
+ @JvmField val MONITOR_PROFILE_UNAVAILABLE = of("monitor_profile_unavailable")
+
@JvmField val NO_MEDIA = of("no_media")
@JvmField val NO_CREDITS = of("no_credits")
@@ -650,6 +652,10 @@ private constructor(
@JvmField val CONNECTION_CHALLENGE_INACTIVE = of("connection_challenge_inactive")
+ @JvmField val COVERAGE_CURSOR_GONE = of("coverage_cursor_gone")
+
+ @JvmField val COVERAGE_CURSOR_UNAVAILABLE = of("coverage_cursor_unavailable")
+
@JvmField val DRAFT_NOT_FOUND = of("draft_not_found")
@JvmField val FAVORITERS_UNAVAILABLE = of("favoriters_unavailable")
@@ -668,16 +674,29 @@ private constructor(
@JvmField val INVALID_COMMUNITY_ID = of("invalid_community_id")
+ @JvmField
+ val INVALID_COMPLETE_REPLIES_REQUEST = of("invalid_complete_replies_request")
+
+ @JvmField val INVALID_COVERAGE_CURSOR = of("invalid_coverage_cursor")
+
+ @JvmField val INVALID_COVERAGE_REQUEST = of("invalid_coverage_request")
+
@JvmField val INVALID_IDEMPOTENCY_KEY = of("invalid_idempotency_key")
@JvmField val INVALID_LIST_ID = of("invalid_list_id")
+ @JvmField val INVALID_OUTPUT_OPTIONS = of("invalid_output_options")
+
@JvmField val INVALID_PAYMENT_AMOUNT = of("invalid_payment_amount")
@JvmField val INVALID_RANGE = of("invalid_range")
+ @JvmField val INVALID_REPLY_OPTIONS = of("invalid_reply_options")
+
@JvmField val LOGIN_RATE_LIMITED = of("login_rate_limited")
+ @JvmField val LOGIN_SERVICE_UNAVAILABLE = of("login_service_unavailable")
+
@JvmField val MISSING_IDEMPOTENCY_KEY = of("missing_idempotency_key")
@JvmField val MISSING_IDS = of("missing_ids")
@@ -698,6 +717,8 @@ private constructor(
@JvmField val TOO_MANY_IDS = of("too_many_ids")
+ @JvmField val TOO_MANY_TWEETS = of("too_many_tweets")
+
@JvmField val UNKNOWN_FIELD = of("unknown_field")
@JvmField val UNSUPPORTED_MEDIA_TYPE = of("unsupported_media_type")
@@ -792,6 +813,7 @@ private constructor(
MISSING_PARAMS,
MISSING_QUERY,
MONITOR_ALREADY_EXISTS,
+ MONITOR_PROFILE_UNAVAILABLE,
NO_MEDIA,
NO_CREDITS,
NO_SUBSCRIPTION,
@@ -809,6 +831,8 @@ private constructor(
CHECKOUT_UNAVAILABLE,
CONNECTION_CHALLENGE_EXPIRED,
CONNECTION_CHALLENGE_INACTIVE,
+ COVERAGE_CURSOR_GONE,
+ COVERAGE_CURSOR_UNAVAILABLE,
DRAFT_NOT_FOUND,
FAVORITERS_UNAVAILABLE,
FORBIDDEN,
@@ -818,11 +842,17 @@ private constructor(
IDEMPOTENCY_CONFLICT,
IDEMPOTENCY_KEY_CONFLICT,
INVALID_COMMUNITY_ID,
+ INVALID_COMPLETE_REPLIES_REQUEST,
+ INVALID_COVERAGE_CURSOR,
+ INVALID_COVERAGE_REQUEST,
INVALID_IDEMPOTENCY_KEY,
INVALID_LIST_ID,
+ INVALID_OUTPUT_OPTIONS,
INVALID_PAYMENT_AMOUNT,
INVALID_RANGE,
+ INVALID_REPLY_OPTIONS,
LOGIN_RATE_LIMITED,
+ LOGIN_SERVICE_UNAVAILABLE,
MISSING_IDEMPOTENCY_KEY,
MISSING_IDS,
NO_CACHED_STYLE,
@@ -833,6 +863,7 @@ private constructor(
SUPPORT_MEDIA_RATE_LIMIT,
SUPPORT_REQUEST_RATE_LIMIT,
TOO_MANY_IDS,
+ TOO_MANY_TWEETS,
UNKNOWN_FIELD,
UNSUPPORTED_MEDIA_TYPE,
WEBHOOK_INACTIVE,
@@ -903,6 +934,7 @@ private constructor(
MISSING_PARAMS,
MISSING_QUERY,
MONITOR_ALREADY_EXISTS,
+ MONITOR_PROFILE_UNAVAILABLE,
NO_MEDIA,
NO_CREDITS,
NO_SUBSCRIPTION,
@@ -920,6 +952,8 @@ private constructor(
CHECKOUT_UNAVAILABLE,
CONNECTION_CHALLENGE_EXPIRED,
CONNECTION_CHALLENGE_INACTIVE,
+ COVERAGE_CURSOR_GONE,
+ COVERAGE_CURSOR_UNAVAILABLE,
DRAFT_NOT_FOUND,
FAVORITERS_UNAVAILABLE,
FORBIDDEN,
@@ -929,11 +963,17 @@ private constructor(
IDEMPOTENCY_CONFLICT,
IDEMPOTENCY_KEY_CONFLICT,
INVALID_COMMUNITY_ID,
+ INVALID_COMPLETE_REPLIES_REQUEST,
+ INVALID_COVERAGE_CURSOR,
+ INVALID_COVERAGE_REQUEST,
INVALID_IDEMPOTENCY_KEY,
INVALID_LIST_ID,
+ INVALID_OUTPUT_OPTIONS,
INVALID_PAYMENT_AMOUNT,
INVALID_RANGE,
+ INVALID_REPLY_OPTIONS,
LOGIN_RATE_LIMITED,
+ LOGIN_SERVICE_UNAVAILABLE,
MISSING_IDEMPOTENCY_KEY,
MISSING_IDS,
NO_CACHED_STYLE,
@@ -944,6 +984,7 @@ private constructor(
SUPPORT_MEDIA_RATE_LIMIT,
SUPPORT_REQUEST_RATE_LIMIT,
TOO_MANY_IDS,
+ TOO_MANY_TWEETS,
UNKNOWN_FIELD,
UNSUPPORTED_MEDIA_TYPE,
WEBHOOK_INACTIVE,
@@ -1018,6 +1059,7 @@ private constructor(
MISSING_PARAMS -> Value.MISSING_PARAMS
MISSING_QUERY -> Value.MISSING_QUERY
MONITOR_ALREADY_EXISTS -> Value.MONITOR_ALREADY_EXISTS
+ MONITOR_PROFILE_UNAVAILABLE -> Value.MONITOR_PROFILE_UNAVAILABLE
NO_MEDIA -> Value.NO_MEDIA
NO_CREDITS -> Value.NO_CREDITS
NO_SUBSCRIPTION -> Value.NO_SUBSCRIPTION
@@ -1035,6 +1077,8 @@ private constructor(
CHECKOUT_UNAVAILABLE -> Value.CHECKOUT_UNAVAILABLE
CONNECTION_CHALLENGE_EXPIRED -> Value.CONNECTION_CHALLENGE_EXPIRED
CONNECTION_CHALLENGE_INACTIVE -> Value.CONNECTION_CHALLENGE_INACTIVE
+ COVERAGE_CURSOR_GONE -> Value.COVERAGE_CURSOR_GONE
+ COVERAGE_CURSOR_UNAVAILABLE -> Value.COVERAGE_CURSOR_UNAVAILABLE
DRAFT_NOT_FOUND -> Value.DRAFT_NOT_FOUND
FAVORITERS_UNAVAILABLE -> Value.FAVORITERS_UNAVAILABLE
FORBIDDEN -> Value.FORBIDDEN
@@ -1044,11 +1088,17 @@ private constructor(
IDEMPOTENCY_CONFLICT -> Value.IDEMPOTENCY_CONFLICT
IDEMPOTENCY_KEY_CONFLICT -> Value.IDEMPOTENCY_KEY_CONFLICT
INVALID_COMMUNITY_ID -> Value.INVALID_COMMUNITY_ID
+ INVALID_COMPLETE_REPLIES_REQUEST -> Value.INVALID_COMPLETE_REPLIES_REQUEST
+ INVALID_COVERAGE_CURSOR -> Value.INVALID_COVERAGE_CURSOR
+ INVALID_COVERAGE_REQUEST -> Value.INVALID_COVERAGE_REQUEST
INVALID_IDEMPOTENCY_KEY -> Value.INVALID_IDEMPOTENCY_KEY
INVALID_LIST_ID -> Value.INVALID_LIST_ID
+ INVALID_OUTPUT_OPTIONS -> Value.INVALID_OUTPUT_OPTIONS
INVALID_PAYMENT_AMOUNT -> Value.INVALID_PAYMENT_AMOUNT
INVALID_RANGE -> Value.INVALID_RANGE
+ INVALID_REPLY_OPTIONS -> Value.INVALID_REPLY_OPTIONS
LOGIN_RATE_LIMITED -> Value.LOGIN_RATE_LIMITED
+ LOGIN_SERVICE_UNAVAILABLE -> Value.LOGIN_SERVICE_UNAVAILABLE
MISSING_IDEMPOTENCY_KEY -> Value.MISSING_IDEMPOTENCY_KEY
MISSING_IDS -> Value.MISSING_IDS
NO_CACHED_STYLE -> Value.NO_CACHED_STYLE
@@ -1059,6 +1109,7 @@ private constructor(
SUPPORT_MEDIA_RATE_LIMIT -> Value.SUPPORT_MEDIA_RATE_LIMIT
SUPPORT_REQUEST_RATE_LIMIT -> Value.SUPPORT_REQUEST_RATE_LIMIT
TOO_MANY_IDS -> Value.TOO_MANY_IDS
+ TOO_MANY_TWEETS -> Value.TOO_MANY_TWEETS
UNKNOWN_FIELD -> Value.UNKNOWN_FIELD
UNSUPPORTED_MEDIA_TYPE -> Value.UNSUPPORTED_MEDIA_TYPE
WEBHOOK_INACTIVE -> Value.WEBHOOK_INACTIVE
@@ -1131,6 +1182,7 @@ private constructor(
MISSING_PARAMS -> Known.MISSING_PARAMS
MISSING_QUERY -> Known.MISSING_QUERY
MONITOR_ALREADY_EXISTS -> Known.MONITOR_ALREADY_EXISTS
+ MONITOR_PROFILE_UNAVAILABLE -> Known.MONITOR_PROFILE_UNAVAILABLE
NO_MEDIA -> Known.NO_MEDIA
NO_CREDITS -> Known.NO_CREDITS
NO_SUBSCRIPTION -> Known.NO_SUBSCRIPTION
@@ -1148,6 +1200,8 @@ private constructor(
CHECKOUT_UNAVAILABLE -> Known.CHECKOUT_UNAVAILABLE
CONNECTION_CHALLENGE_EXPIRED -> Known.CONNECTION_CHALLENGE_EXPIRED
CONNECTION_CHALLENGE_INACTIVE -> Known.CONNECTION_CHALLENGE_INACTIVE
+ COVERAGE_CURSOR_GONE -> Known.COVERAGE_CURSOR_GONE
+ COVERAGE_CURSOR_UNAVAILABLE -> Known.COVERAGE_CURSOR_UNAVAILABLE
DRAFT_NOT_FOUND -> Known.DRAFT_NOT_FOUND
FAVORITERS_UNAVAILABLE -> Known.FAVORITERS_UNAVAILABLE
FORBIDDEN -> Known.FORBIDDEN
@@ -1157,11 +1211,17 @@ private constructor(
IDEMPOTENCY_CONFLICT -> Known.IDEMPOTENCY_CONFLICT
IDEMPOTENCY_KEY_CONFLICT -> Known.IDEMPOTENCY_KEY_CONFLICT
INVALID_COMMUNITY_ID -> Known.INVALID_COMMUNITY_ID
+ INVALID_COMPLETE_REPLIES_REQUEST -> Known.INVALID_COMPLETE_REPLIES_REQUEST
+ INVALID_COVERAGE_CURSOR -> Known.INVALID_COVERAGE_CURSOR
+ INVALID_COVERAGE_REQUEST -> Known.INVALID_COVERAGE_REQUEST
INVALID_IDEMPOTENCY_KEY -> Known.INVALID_IDEMPOTENCY_KEY
INVALID_LIST_ID -> Known.INVALID_LIST_ID
+ INVALID_OUTPUT_OPTIONS -> Known.INVALID_OUTPUT_OPTIONS
INVALID_PAYMENT_AMOUNT -> Known.INVALID_PAYMENT_AMOUNT
INVALID_RANGE -> Known.INVALID_RANGE
+ INVALID_REPLY_OPTIONS -> Known.INVALID_REPLY_OPTIONS
LOGIN_RATE_LIMITED -> Known.LOGIN_RATE_LIMITED
+ LOGIN_SERVICE_UNAVAILABLE -> Known.LOGIN_SERVICE_UNAVAILABLE
MISSING_IDEMPOTENCY_KEY -> Known.MISSING_IDEMPOTENCY_KEY
MISSING_IDS -> Known.MISSING_IDS
NO_CACHED_STYLE -> Known.NO_CACHED_STYLE
@@ -1172,6 +1232,7 @@ private constructor(
SUPPORT_MEDIA_RATE_LIMIT -> Known.SUPPORT_MEDIA_RATE_LIMIT
SUPPORT_REQUEST_RATE_LIMIT -> Known.SUPPORT_REQUEST_RATE_LIMIT
TOO_MANY_IDS -> Known.TOO_MANY_IDS
+ TOO_MANY_TWEETS -> Known.TOO_MANY_TWEETS
UNKNOWN_FIELD -> Known.UNKNOWN_FIELD
UNSUPPORTED_MEDIA_TYPE -> Known.UNSUPPORTED_MEDIA_TYPE
WEBHOOK_INACTIVE -> Known.WEBHOOK_INACTIVE
@@ -1564,6 +1625,8 @@ private constructor(
@JvmField val MONITOR_ALREADY_EXISTS = of("monitor_already_exists")
+ @JvmField val MONITOR_PROFILE_UNAVAILABLE = of("monitor_profile_unavailable")
+
@JvmField val NO_MEDIA = of("no_media")
@JvmField val NO_CREDITS = of("no_credits")
@@ -1599,6 +1662,10 @@ private constructor(
@JvmField
val CONNECTION_CHALLENGE_INACTIVE = of("connection_challenge_inactive")
+ @JvmField val COVERAGE_CURSOR_GONE = of("coverage_cursor_gone")
+
+ @JvmField val COVERAGE_CURSOR_UNAVAILABLE = of("coverage_cursor_unavailable")
+
@JvmField val DRAFT_NOT_FOUND = of("draft_not_found")
@JvmField val FAVORITERS_UNAVAILABLE = of("favoriters_unavailable")
@@ -1617,16 +1684,29 @@ private constructor(
@JvmField val INVALID_COMMUNITY_ID = of("invalid_community_id")
+ @JvmField
+ val INVALID_COMPLETE_REPLIES_REQUEST = of("invalid_complete_replies_request")
+
+ @JvmField val INVALID_COVERAGE_CURSOR = of("invalid_coverage_cursor")
+
+ @JvmField val INVALID_COVERAGE_REQUEST = of("invalid_coverage_request")
+
@JvmField val INVALID_IDEMPOTENCY_KEY = of("invalid_idempotency_key")
@JvmField val INVALID_LIST_ID = of("invalid_list_id")
+ @JvmField val INVALID_OUTPUT_OPTIONS = of("invalid_output_options")
+
@JvmField val INVALID_PAYMENT_AMOUNT = of("invalid_payment_amount")
@JvmField val INVALID_RANGE = of("invalid_range")
+ @JvmField val INVALID_REPLY_OPTIONS = of("invalid_reply_options")
+
@JvmField val LOGIN_RATE_LIMITED = of("login_rate_limited")
+ @JvmField val LOGIN_SERVICE_UNAVAILABLE = of("login_service_unavailable")
+
@JvmField val MISSING_IDEMPOTENCY_KEY = of("missing_idempotency_key")
@JvmField val MISSING_IDS = of("missing_ids")
@@ -1647,6 +1727,8 @@ private constructor(
@JvmField val TOO_MANY_IDS = of("too_many_ids")
+ @JvmField val TOO_MANY_TWEETS = of("too_many_tweets")
+
@JvmField val UNKNOWN_FIELD = of("unknown_field")
@JvmField val UNSUPPORTED_MEDIA_TYPE = of("unsupported_media_type")
@@ -1741,6 +1823,7 @@ private constructor(
MISSING_PARAMS,
MISSING_QUERY,
MONITOR_ALREADY_EXISTS,
+ MONITOR_PROFILE_UNAVAILABLE,
NO_MEDIA,
NO_CREDITS,
NO_SUBSCRIPTION,
@@ -1758,6 +1841,8 @@ private constructor(
CHECKOUT_UNAVAILABLE,
CONNECTION_CHALLENGE_EXPIRED,
CONNECTION_CHALLENGE_INACTIVE,
+ COVERAGE_CURSOR_GONE,
+ COVERAGE_CURSOR_UNAVAILABLE,
DRAFT_NOT_FOUND,
FAVORITERS_UNAVAILABLE,
FORBIDDEN,
@@ -1767,11 +1852,17 @@ private constructor(
IDEMPOTENCY_CONFLICT,
IDEMPOTENCY_KEY_CONFLICT,
INVALID_COMMUNITY_ID,
+ INVALID_COMPLETE_REPLIES_REQUEST,
+ INVALID_COVERAGE_CURSOR,
+ INVALID_COVERAGE_REQUEST,
INVALID_IDEMPOTENCY_KEY,
INVALID_LIST_ID,
+ INVALID_OUTPUT_OPTIONS,
INVALID_PAYMENT_AMOUNT,
INVALID_RANGE,
+ INVALID_REPLY_OPTIONS,
LOGIN_RATE_LIMITED,
+ LOGIN_SERVICE_UNAVAILABLE,
MISSING_IDEMPOTENCY_KEY,
MISSING_IDS,
NO_CACHED_STYLE,
@@ -1782,6 +1873,7 @@ private constructor(
SUPPORT_MEDIA_RATE_LIMIT,
SUPPORT_REQUEST_RATE_LIMIT,
TOO_MANY_IDS,
+ TOO_MANY_TWEETS,
UNKNOWN_FIELD,
UNSUPPORTED_MEDIA_TYPE,
WEBHOOK_INACTIVE,
@@ -1852,6 +1944,7 @@ private constructor(
MISSING_PARAMS,
MISSING_QUERY,
MONITOR_ALREADY_EXISTS,
+ MONITOR_PROFILE_UNAVAILABLE,
NO_MEDIA,
NO_CREDITS,
NO_SUBSCRIPTION,
@@ -1869,6 +1962,8 @@ private constructor(
CHECKOUT_UNAVAILABLE,
CONNECTION_CHALLENGE_EXPIRED,
CONNECTION_CHALLENGE_INACTIVE,
+ COVERAGE_CURSOR_GONE,
+ COVERAGE_CURSOR_UNAVAILABLE,
DRAFT_NOT_FOUND,
FAVORITERS_UNAVAILABLE,
FORBIDDEN,
@@ -1878,11 +1973,17 @@ private constructor(
IDEMPOTENCY_CONFLICT,
IDEMPOTENCY_KEY_CONFLICT,
INVALID_COMMUNITY_ID,
+ INVALID_COMPLETE_REPLIES_REQUEST,
+ INVALID_COVERAGE_CURSOR,
+ INVALID_COVERAGE_REQUEST,
INVALID_IDEMPOTENCY_KEY,
INVALID_LIST_ID,
+ INVALID_OUTPUT_OPTIONS,
INVALID_PAYMENT_AMOUNT,
INVALID_RANGE,
+ INVALID_REPLY_OPTIONS,
LOGIN_RATE_LIMITED,
+ LOGIN_SERVICE_UNAVAILABLE,
MISSING_IDEMPOTENCY_KEY,
MISSING_IDS,
NO_CACHED_STYLE,
@@ -1893,6 +1994,7 @@ private constructor(
SUPPORT_MEDIA_RATE_LIMIT,
SUPPORT_REQUEST_RATE_LIMIT,
TOO_MANY_IDS,
+ TOO_MANY_TWEETS,
UNKNOWN_FIELD,
UNSUPPORTED_MEDIA_TYPE,
WEBHOOK_INACTIVE,
@@ -1966,6 +2068,7 @@ private constructor(
MISSING_PARAMS -> Value.MISSING_PARAMS
MISSING_QUERY -> Value.MISSING_QUERY
MONITOR_ALREADY_EXISTS -> Value.MONITOR_ALREADY_EXISTS
+ MONITOR_PROFILE_UNAVAILABLE -> Value.MONITOR_PROFILE_UNAVAILABLE
NO_MEDIA -> Value.NO_MEDIA
NO_CREDITS -> Value.NO_CREDITS
NO_SUBSCRIPTION -> Value.NO_SUBSCRIPTION
@@ -1983,6 +2086,8 @@ private constructor(
CHECKOUT_UNAVAILABLE -> Value.CHECKOUT_UNAVAILABLE
CONNECTION_CHALLENGE_EXPIRED -> Value.CONNECTION_CHALLENGE_EXPIRED
CONNECTION_CHALLENGE_INACTIVE -> Value.CONNECTION_CHALLENGE_INACTIVE
+ COVERAGE_CURSOR_GONE -> Value.COVERAGE_CURSOR_GONE
+ COVERAGE_CURSOR_UNAVAILABLE -> Value.COVERAGE_CURSOR_UNAVAILABLE
DRAFT_NOT_FOUND -> Value.DRAFT_NOT_FOUND
FAVORITERS_UNAVAILABLE -> Value.FAVORITERS_UNAVAILABLE
FORBIDDEN -> Value.FORBIDDEN
@@ -1992,11 +2097,17 @@ private constructor(
IDEMPOTENCY_CONFLICT -> Value.IDEMPOTENCY_CONFLICT
IDEMPOTENCY_KEY_CONFLICT -> Value.IDEMPOTENCY_KEY_CONFLICT
INVALID_COMMUNITY_ID -> Value.INVALID_COMMUNITY_ID
+ INVALID_COMPLETE_REPLIES_REQUEST -> Value.INVALID_COMPLETE_REPLIES_REQUEST
+ INVALID_COVERAGE_CURSOR -> Value.INVALID_COVERAGE_CURSOR
+ INVALID_COVERAGE_REQUEST -> Value.INVALID_COVERAGE_REQUEST
INVALID_IDEMPOTENCY_KEY -> Value.INVALID_IDEMPOTENCY_KEY
INVALID_LIST_ID -> Value.INVALID_LIST_ID
+ INVALID_OUTPUT_OPTIONS -> Value.INVALID_OUTPUT_OPTIONS
INVALID_PAYMENT_AMOUNT -> Value.INVALID_PAYMENT_AMOUNT
INVALID_RANGE -> Value.INVALID_RANGE
+ INVALID_REPLY_OPTIONS -> Value.INVALID_REPLY_OPTIONS
LOGIN_RATE_LIMITED -> Value.LOGIN_RATE_LIMITED
+ LOGIN_SERVICE_UNAVAILABLE -> Value.LOGIN_SERVICE_UNAVAILABLE
MISSING_IDEMPOTENCY_KEY -> Value.MISSING_IDEMPOTENCY_KEY
MISSING_IDS -> Value.MISSING_IDS
NO_CACHED_STYLE -> Value.NO_CACHED_STYLE
@@ -2007,6 +2118,7 @@ private constructor(
SUPPORT_MEDIA_RATE_LIMIT -> Value.SUPPORT_MEDIA_RATE_LIMIT
SUPPORT_REQUEST_RATE_LIMIT -> Value.SUPPORT_REQUEST_RATE_LIMIT
TOO_MANY_IDS -> Value.TOO_MANY_IDS
+ TOO_MANY_TWEETS -> Value.TOO_MANY_TWEETS
UNKNOWN_FIELD -> Value.UNKNOWN_FIELD
UNSUPPORTED_MEDIA_TYPE -> Value.UNSUPPORTED_MEDIA_TYPE
WEBHOOK_INACTIVE -> Value.WEBHOOK_INACTIVE
@@ -2079,6 +2191,7 @@ private constructor(
MISSING_PARAMS -> Known.MISSING_PARAMS
MISSING_QUERY -> Known.MISSING_QUERY
MONITOR_ALREADY_EXISTS -> Known.MONITOR_ALREADY_EXISTS
+ MONITOR_PROFILE_UNAVAILABLE -> Known.MONITOR_PROFILE_UNAVAILABLE
NO_MEDIA -> Known.NO_MEDIA
NO_CREDITS -> Known.NO_CREDITS
NO_SUBSCRIPTION -> Known.NO_SUBSCRIPTION
@@ -2096,6 +2209,8 @@ private constructor(
CHECKOUT_UNAVAILABLE -> Known.CHECKOUT_UNAVAILABLE
CONNECTION_CHALLENGE_EXPIRED -> Known.CONNECTION_CHALLENGE_EXPIRED
CONNECTION_CHALLENGE_INACTIVE -> Known.CONNECTION_CHALLENGE_INACTIVE
+ COVERAGE_CURSOR_GONE -> Known.COVERAGE_CURSOR_GONE
+ COVERAGE_CURSOR_UNAVAILABLE -> Known.COVERAGE_CURSOR_UNAVAILABLE
DRAFT_NOT_FOUND -> Known.DRAFT_NOT_FOUND
FAVORITERS_UNAVAILABLE -> Known.FAVORITERS_UNAVAILABLE
FORBIDDEN -> Known.FORBIDDEN
@@ -2105,11 +2220,17 @@ private constructor(
IDEMPOTENCY_CONFLICT -> Known.IDEMPOTENCY_CONFLICT
IDEMPOTENCY_KEY_CONFLICT -> Known.IDEMPOTENCY_KEY_CONFLICT
INVALID_COMMUNITY_ID -> Known.INVALID_COMMUNITY_ID
+ INVALID_COMPLETE_REPLIES_REQUEST -> Known.INVALID_COMPLETE_REPLIES_REQUEST
+ INVALID_COVERAGE_CURSOR -> Known.INVALID_COVERAGE_CURSOR
+ INVALID_COVERAGE_REQUEST -> Known.INVALID_COVERAGE_REQUEST
INVALID_IDEMPOTENCY_KEY -> Known.INVALID_IDEMPOTENCY_KEY
INVALID_LIST_ID -> Known.INVALID_LIST_ID
+ INVALID_OUTPUT_OPTIONS -> Known.INVALID_OUTPUT_OPTIONS
INVALID_PAYMENT_AMOUNT -> Known.INVALID_PAYMENT_AMOUNT
INVALID_RANGE -> Known.INVALID_RANGE
+ INVALID_REPLY_OPTIONS -> Known.INVALID_REPLY_OPTIONS
LOGIN_RATE_LIMITED -> Known.LOGIN_RATE_LIMITED
+ LOGIN_SERVICE_UNAVAILABLE -> Known.LOGIN_SERVICE_UNAVAILABLE
MISSING_IDEMPOTENCY_KEY -> Known.MISSING_IDEMPOTENCY_KEY
MISSING_IDS -> Known.MISSING_IDS
NO_CACHED_STYLE -> Known.NO_CACHED_STYLE
@@ -2120,6 +2241,7 @@ private constructor(
SUPPORT_MEDIA_RATE_LIMIT -> Known.SUPPORT_MEDIA_RATE_LIMIT
SUPPORT_REQUEST_RATE_LIMIT -> Known.SUPPORT_REQUEST_RATE_LIMIT
TOO_MANY_IDS -> Known.TOO_MANY_IDS
+ TOO_MANY_TWEETS -> Known.TOO_MANY_TWEETS
UNKNOWN_FIELD -> Known.UNKNOWN_FIELD
UNSUPPORTED_MEDIA_TYPE -> Known.UNSUPPORTED_MEDIA_TYPE
WEBHOOK_INACTIVE -> Known.WEBHOOK_INACTIVE
diff --git a/x-twitter-scraper-java-core/src/main/kotlin/com/x_twitter_scraper/api/models/PaginatedTweets.kt b/x-twitter-scraper-java-core/src/main/kotlin/com/x_twitter_scraper/api/models/PaginatedTweets.kt
index 5c333815..6eaea7e9 100644
--- a/x-twitter-scraper-java-core/src/main/kotlin/com/x_twitter_scraper/api/models/PaginatedTweets.kt
+++ b/x-twitter-scraper-java-core/src/main/kotlin/com/x_twitter_scraper/api/models/PaginatedTweets.kt
@@ -23,9 +23,10 @@ import java.util.Objects
import kotlin.jvm.optionals.getOrNull
/**
- * Paginated tweets. Source visibility, filters, or remaining credits can reduce results. An empty
- * filtered page can still have has_next_page true. Follow next_cursor while has_next_page is true.
- * Zero affordable results returns 402 insufficient_credits.
+ * No-mode search, user Tweet, user reply, and direct reply reads use automatic coverage. Shape,
+ * filters, aliases, and billing stay compatible. Unprefixed cursors remain legacy. Follow
+ * next_cursor while has_next_page is true. An empty filtered page can still have has_next_page
+ * true.
*/
class PaginatedTweets
@JsonCreator(mode = JsonCreator.Mode.DISABLED)
diff --git a/x-twitter-scraper-java-core/src/main/kotlin/com/x_twitter_scraper/api/models/PaginatedUsers.kt b/x-twitter-scraper-java-core/src/main/kotlin/com/x_twitter_scraper/api/models/PaginatedUsers.kt
index 85796db6..caf9fd51 100644
--- a/x-twitter-scraper-java-core/src/main/kotlin/com/x_twitter_scraper/api/models/PaginatedUsers.kt
+++ b/x-twitter-scraper-java-core/src/main/kotlin/com/x_twitter_scraper/api/models/PaginatedUsers.kt
@@ -23,10 +23,10 @@ import java.util.Objects
import kotlin.jvm.optionals.getOrNull
/**
- * Paginated user profiles. The item count can be lower than pageSize when the source returns fewer
- * profiles or remaining credits cover fewer results. Follow next_cursor while has_next_page is
- * true. A relationship can naturally contain fewer profiles than requested. Zero affordable results
- * returns 402 insufficient_credits.
+ * Paginated user profiles. No-mode follower, following, and verified follower requests merge
+ * independent views automatically. Response fields, page size, aliases, filters, and
+ * per-returned-profile billing stay unchanged. Existing unprefixed cursors retain legacy behavior.
+ * Follow next_cursor while has_next_page is true.
*/
class PaginatedUsers
@JsonCreator(mode = JsonCreator.Mode.DISABLED)
diff --git a/x-twitter-scraper-java-core/src/main/kotlin/com/x_twitter_scraper/api/models/credits/CreditTopupBalanceParams.kt b/x-twitter-scraper-java-core/src/main/kotlin/com/x_twitter_scraper/api/models/credits/CreditTopupBalanceParams.kt
index 9def0502..d14c1818 100644
--- a/x-twitter-scraper-java-core/src/main/kotlin/com/x_twitter_scraper/api/models/credits/CreditTopupBalanceParams.kt
+++ b/x-twitter-scraper-java-core/src/main/kotlin/com/x_twitter_scraper/api/models/credits/CreditTopupBalanceParams.kt
@@ -24,8 +24,8 @@ import java.util.Objects
import java.util.Optional
/**
- * Create a Stripe Checkout session only after the user confirms. The request never completes
- * payment or adds credits by itself.
+ * Create a hosted checkout only after the user confirms. The request never completes payment or
+ * adds credits.
*/
class CreditTopupBalanceParams
private constructor(
diff --git a/x-twitter-scraper-java-core/src/main/kotlin/com/x_twitter_scraper/api/models/credits/CreditTopupBalanceResponse.kt b/x-twitter-scraper-java-core/src/main/kotlin/com/x_twitter_scraper/api/models/credits/CreditTopupBalanceResponse.kt
index 65e45086..32e1b602 100644
--- a/x-twitter-scraper-java-core/src/main/kotlin/com/x_twitter_scraper/api/models/credits/CreditTopupBalanceResponse.kt
+++ b/x-twitter-scraper-java-core/src/main/kotlin/com/x_twitter_scraper/api/models/credits/CreditTopupBalanceResponse.kt
@@ -36,7 +36,7 @@ private constructor(
) : this(redirectUrl, url, mutableMapOf())
/**
- * Stable first-party Xquik redirect URL for the active Stripe Checkout session.
+ * Stable Xquik redirect URL for the active checkout.
*
* @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type or is
* unexpectedly missing or null (e.g. if the server responded with an unexpected value).
@@ -44,8 +44,8 @@ private constructor(
fun redirectUrl(): String = redirectUrl.getRequired("redirect_url")
/**
- * Same stable first-party Xquik redirect URL as redirect_url. The response never exposes a raw
- * Stripe Checkout URL.
+ * Same stable Xquik redirect URL as redirect_url. The response never exposes the hosted
+ * checkout URL.
*
* @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type or is
* unexpectedly missing or null (e.g. if the server responded with an unexpected value).
@@ -108,7 +108,7 @@ private constructor(
additionalProperties = creditTopupBalanceResponse.additionalProperties.toMutableMap()
}
- /** Stable first-party Xquik redirect URL for the active Stripe Checkout session. */
+ /** Stable Xquik redirect URL for the active checkout. */
fun redirectUrl(redirectUrl: String) = redirectUrl(JsonField.of(redirectUrl))
/**
@@ -121,8 +121,8 @@ private constructor(
fun redirectUrl(redirectUrl: JsonField) = apply { this.redirectUrl = redirectUrl }
/**
- * Same stable first-party Xquik redirect URL as redirect_url. The response never exposes a
- * raw Stripe Checkout URL.
+ * Same stable Xquik redirect URL as redirect_url. The response never exposes the hosted
+ * checkout URL.
*/
fun url(url: String) = url(JsonField.of(url))
diff --git a/x-twitter-scraper-java-core/src/main/kotlin/com/x_twitter_scraper/api/models/draws/DrawExportParams.kt b/x-twitter-scraper-java-core/src/main/kotlin/com/x_twitter_scraper/api/models/draws/DrawExportParams.kt
index f5c3010b..16dab493 100644
--- a/x-twitter-scraper-java-core/src/main/kotlin/com/x_twitter_scraper/api/models/draws/DrawExportParams.kt
+++ b/x-twitter-scraper-java-core/src/main/kotlin/com/x_twitter_scraper/api/models/draws/DrawExportParams.kt
@@ -30,7 +30,10 @@ private constructor(
fun id(): Optional = Optional.ofNullable(id)
- /** Export output format */
+ /**
+ * Export output format. PDF entry exports include up to 10,000 rows. Other entry formats
+ * include up to 100,000 rows.
+ */
fun format(): Format = format
/** Export winners or all entries */
@@ -80,7 +83,10 @@ private constructor(
/** Alias for calling [Builder.id] with `id.orElse(null)`. */
fun id(id: Optional) = id(id.getOrNull())
- /** Export output format */
+ /**
+ * Export output format. PDF entry exports include up to 10,000 rows. Other entry formats
+ * include up to 100,000 rows.
+ */
fun format(format: Format) = apply { this.format = format }
/** Export winners or all entries */
@@ -226,7 +232,10 @@ private constructor(
}
.build()
- /** Export output format */
+ /**
+ * Export output format. PDF entry exports include up to 10,000 rows. Other entry formats
+ * include up to 100,000 rows.
+ */
class Format @JsonCreator private constructor(private val value: JsonField) : Enum {
/**
diff --git a/x-twitter-scraper-java-core/src/main/kotlin/com/x_twitter_scraper/api/models/draws/DrawListParams.kt b/x-twitter-scraper-java-core/src/main/kotlin/com/x_twitter_scraper/api/models/draws/DrawListParams.kt
index 5a80b967..1148b8e0 100644
--- a/x-twitter-scraper-java-core/src/main/kotlin/com/x_twitter_scraper/api/models/draws/DrawListParams.kt
+++ b/x-twitter-scraper-java-core/src/main/kotlin/com/x_twitter_scraper/api/models/draws/DrawListParams.kt
@@ -22,7 +22,7 @@ private constructor(
private val additionalQueryParams: QueryParams,
) : Params {
- /** Cursor for keyset pagination from prior response next_cursor */
+ /** Previous nextCursor. */
fun cursor(): Optional = Optional.ofNullable(cursor)
/**
@@ -64,7 +64,7 @@ private constructor(
additionalQueryParams = drawListParams.additionalQueryParams.toBuilder()
}
- /** Cursor for keyset pagination from prior response next_cursor */
+ /** Previous nextCursor. */
fun cursor(cursor: String?) = apply { this.cursor = cursor }
/** Alias for calling [Builder.cursor] with `cursor.orElse(null)`. */
diff --git a/x-twitter-scraper-java-core/src/main/kotlin/com/x_twitter_scraper/api/models/events/EventListParams.kt b/x-twitter-scraper-java-core/src/main/kotlin/com/x_twitter_scraper/api/models/events/EventListParams.kt
index 19987546..d6c4ee1a 100644
--- a/x-twitter-scraper-java-core/src/main/kotlin/com/x_twitter_scraper/api/models/events/EventListParams.kt
+++ b/x-twitter-scraper-java-core/src/main/kotlin/com/x_twitter_scraper/api/models/events/EventListParams.kt
@@ -19,18 +19,22 @@ class EventListParams
private constructor(
private val cursor: String?,
private val eventType: EventType?,
+ private val keywordMonitorId: String?,
private val limit: Long?,
private val monitorId: String?,
private val additionalHeaders: Headers,
private val additionalQueryParams: QueryParams,
) : Params {
- /** Cursor for keyset pagination from prior response next_cursor */
+ /** Previous nextCursor. */
fun cursor(): Optional = Optional.ofNullable(cursor)
/** Filter events by type */
fun eventType(): Optional = Optional.ofNullable(eventType)
+ /** Keyword monitor ID. */
+ fun keywordMonitorId(): Optional = Optional.ofNullable(keywordMonitorId)
+
/**
* Maximum number of items to return (1-100, default 50). For paid per-result endpoints, the
* returned count may be lower when remaining credits cannot cover the requested page. If zero
@@ -38,7 +42,7 @@ private constructor(
*/
fun limit(): Optional = Optional.ofNullable(limit)
- /** Filter events by monitor ID */
+ /** Account monitor ID. */
fun monitorId(): Optional = Optional.ofNullable(monitorId)
/** Additional headers to send with the request. */
@@ -62,6 +66,7 @@ private constructor(
private var cursor: String? = null
private var eventType: EventType? = null
+ private var keywordMonitorId: String? = null
private var limit: Long? = null
private var monitorId: String? = null
private var additionalHeaders: Headers.Builder = Headers.builder()
@@ -71,13 +76,14 @@ private constructor(
internal fun from(eventListParams: EventListParams) = apply {
cursor = eventListParams.cursor
eventType = eventListParams.eventType
+ keywordMonitorId = eventListParams.keywordMonitorId
limit = eventListParams.limit
monitorId = eventListParams.monitorId
additionalHeaders = eventListParams.additionalHeaders.toBuilder()
additionalQueryParams = eventListParams.additionalQueryParams.toBuilder()
}
- /** Cursor for keyset pagination from prior response next_cursor */
+ /** Previous nextCursor. */
fun cursor(cursor: String?) = apply { this.cursor = cursor }
/** Alias for calling [Builder.cursor] with `cursor.orElse(null)`. */
@@ -89,6 +95,15 @@ private constructor(
/** Alias for calling [Builder.eventType] with `eventType.orElse(null)`. */
fun eventType(eventType: Optional) = eventType(eventType.getOrNull())
+ /** Keyword monitor ID. */
+ fun keywordMonitorId(keywordMonitorId: String?) = apply {
+ this.keywordMonitorId = keywordMonitorId
+ }
+
+ /** Alias for calling [Builder.keywordMonitorId] with `keywordMonitorId.orElse(null)`. */
+ fun keywordMonitorId(keywordMonitorId: Optional) =
+ keywordMonitorId(keywordMonitorId.getOrNull())
+
/**
* Maximum number of items to return (1-100, default 50). For paid per-result endpoints, the
* returned count may be lower when remaining credits cannot cover the requested page. If
@@ -106,7 +121,7 @@ private constructor(
/** Alias for calling [Builder.limit] with `limit.orElse(null)`. */
fun limit(limit: Optional) = limit(limit.getOrNull())
- /** Filter events by monitor ID */
+ /** Account monitor ID. */
fun monitorId(monitorId: String?) = apply { this.monitorId = monitorId }
/** Alias for calling [Builder.monitorId] with `monitorId.orElse(null)`. */
@@ -219,6 +234,7 @@ private constructor(
EventListParams(
cursor,
eventType,
+ keywordMonitorId,
limit,
monitorId,
additionalHeaders.build(),
@@ -233,6 +249,7 @@ private constructor(
.apply {
cursor?.let { put("cursor", it) }
eventType?.let { put("eventType", it.toString()) }
+ keywordMonitorId?.let { put("keywordMonitorId", it) }
limit?.let { put("limit", it.toString()) }
monitorId?.let { put("monitorId", it) }
putAll(additionalQueryParams)
@@ -247,6 +264,7 @@ private constructor(
return other is EventListParams &&
cursor == other.cursor &&
eventType == other.eventType &&
+ keywordMonitorId == other.keywordMonitorId &&
limit == other.limit &&
monitorId == other.monitorId &&
additionalHeaders == other.additionalHeaders &&
@@ -254,8 +272,16 @@ private constructor(
}
override fun hashCode(): Int =
- Objects.hash(cursor, eventType, limit, monitorId, additionalHeaders, additionalQueryParams)
+ Objects.hash(
+ cursor,
+ eventType,
+ keywordMonitorId,
+ limit,
+ monitorId,
+ additionalHeaders,
+ additionalQueryParams,
+ )
override fun toString() =
- "EventListParams{cursor=$cursor, eventType=$eventType, limit=$limit, monitorId=$monitorId, additionalHeaders=$additionalHeaders, additionalQueryParams=$additionalQueryParams}"
+ "EventListParams{cursor=$cursor, eventType=$eventType, keywordMonitorId=$keywordMonitorId, limit=$limit, monitorId=$monitorId, additionalHeaders=$additionalHeaders, additionalQueryParams=$additionalQueryParams}"
}
diff --git a/x-twitter-scraper-java-core/src/main/kotlin/com/x_twitter_scraper/api/models/extractions/ExtractionEstimateCostParams.kt b/x-twitter-scraper-java-core/src/main/kotlin/com/x_twitter_scraper/api/models/extractions/ExtractionEstimateCostParams.kt
index b94cdc37..61bd1248 100644
--- a/x-twitter-scraper-java-core/src/main/kotlin/com/x_twitter_scraper/api/models/extractions/ExtractionEstimateCostParams.kt
+++ b/x-twitter-scraper-java-core/src/main/kotlin/com/x_twitter_scraper/api/models/extractions/ExtractionEstimateCostParams.kt
@@ -10,17 +10,31 @@ import com.fasterxml.jackson.annotation.JsonAnyGetter
import com.fasterxml.jackson.annotation.JsonAnySetter
import com.fasterxml.jackson.annotation.JsonCreator
import com.fasterxml.jackson.annotation.JsonProperty
+import com.fasterxml.jackson.core.JsonGenerator
+import com.fasterxml.jackson.core.ObjectCodec
+import com.fasterxml.jackson.databind.JsonNode
+import com.fasterxml.jackson.databind.SerializerProvider
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize
+import com.fasterxml.jackson.databind.annotation.JsonSerialize
+import com.fasterxml.jackson.module.kotlin.jacksonTypeRef
+import com.x_twitter_scraper.api.core.BaseDeserializer
+import com.x_twitter_scraper.api.core.BaseSerializer
import com.x_twitter_scraper.api.core.Enum
import com.x_twitter_scraper.api.core.ExcludeMissing
import com.x_twitter_scraper.api.core.JsonField
import com.x_twitter_scraper.api.core.JsonMissing
import com.x_twitter_scraper.api.core.JsonValue
import com.x_twitter_scraper.api.core.Params
+import com.x_twitter_scraper.api.core.allMaxBy
+import com.x_twitter_scraper.api.core.checkKnown
import com.x_twitter_scraper.api.core.checkRequired
+import com.x_twitter_scraper.api.core.getOrThrow
import com.x_twitter_scraper.api.core.http.Headers
import com.x_twitter_scraper.api.core.http.QueryParams
+import com.x_twitter_scraper.api.core.toImmutable
import com.x_twitter_scraper.api.errors.XTwitterScraperInvalidDataException
import java.time.LocalDate
+import java.time.OffsetDateTime
import java.util.Collections
import java.util.Objects
import java.util.Optional
@@ -43,7 +57,7 @@ private constructor(
fun toolType(): ToolType = body.toolType()
/**
- * Raw advanced query string appended to the estimate (tweet_search_extractor)
+ * Raw advanced search query appended as-is (tweet_search_extractor)
*
* @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
* the server responded with an unexpected value).
@@ -51,8 +65,8 @@ private constructor(
fun advancedQuery(): Optional = body.advancedQuery()
/**
- * Alternative words or quoted phrases for estimated results. Separate with spaces, commas, or
- * lines.
+ * Words or quoted phrases where any one can match. Separate with spaces, commas, or lines.
+ * (tweet_search_extractor)
*
* @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
* the server responded with an unexpected value).
@@ -60,2816 +74,8165 @@ private constructor(
fun anyWords(): Optional = body.anyWords()
/**
- * Geo bounding box used for estimation, e.g. -74.1 40.6 -73.9 40.8 (tweet_search_extractor)
+ * Bio terms separated by commas or lines.
*
* @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
* the server responded with an unexpected value).
*/
- fun boundingBox(): Optional = body.boundingBox()
+ fun bioContains(): Optional = body.bioContains()
/**
- * Cashtags applied to the estimate, separated by spaces, commas, or lines.
+ * Return only Blue-verified Tweet authors.
*
* @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
* the server responded with an unexpected value).
*/
- fun cashtags(): Optional = body.cashtags()
+ fun blueVerifiedOnly(): Optional = body.blueVerifiedOnly()
/**
- * Conversation ID filter used for estimation (tweet_search_extractor)
+ * Geo bounding box, e.g. -74.1 40.6 -73.9 40.8 (tweet_search_extractor)
*
* @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
* the server responded with an unexpected value).
*/
- fun conversationId(): Optional = body.conversationId()
+ fun boundingBox(): Optional = body.boundingBox()
/**
- * Exact phrase filter for search estimation
+ * Match the Tweet card name.
*
* @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
* the server responded with an unexpected value).
*/
- fun exactPhrase(): Optional = body.exactPhrase()
+ fun cardName(): Optional = body.cardName()
/**
- * Words or quoted phrases excluded from estimated results. Separate with spaces, commas, or
- * lines.
+ * Cashtags separated by spaces, commas, or lines. (tweet_search_extractor)
*
* @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
* the server responded with an unexpected value).
*/
- fun excludeWords(): Optional = body.excludeWords()
+ fun cashtags(): Optional = body.cashtags()
/**
- * Estimate only tweets from this author username (tweet_search_extractor)
+ * Reply collection strategy.
*
* @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
* the server responded with an unexpected value).
*/
- fun fromUser(): Optional = body.fromUser()
+ fun collectionStrategy(): Optional = body.collectionStrategy()
/**
- * Hashtags applied to the estimate, separated by spaces, commas, or lines.
+ * Conversation ID filter (tweet_search_extractor)
*
* @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
* the server responded with an unexpected value).
*/
- fun hashtags(): Optional = body.hashtags()
+ fun conversationId(): Optional = body.conversationId()
/**
- * Estimate only replies to this tweet ID (tweet_search_extractor)
+ * Merge duplicate results across collection targets.
*
* @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
* the server responded with an unexpected value).
*/
- fun inReplyToTweetId(): Optional = body.inReplyToTweetId()
+ fun dedupeAcrossTargets(): Optional = body.dedupeAcrossTargets()
/**
- * Language code used for estimate filtering (tweet_search_extractor)
+ * Keep target duplicates, first rows, or merged overlap.
*
* @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
* the server responded with an unexpected value).
*/
- fun language(): Optional = body.language()
+ fun dedupeMode(): Optional = body.dedupeMode()
/**
- * Estimate search results within this list ID (tweet_search_extractor)
+ * Exact phrase to match (tweet_search_extractor)
*
* @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
* the server responded with an unexpected value).
*/
- fun listId(): Optional = body.listId()
+ fun exactPhrase(): Optional = body.exactPhrase()
/**
- * Media type used for estimate filtering (tweet_search_extractor)
+ * Exclude replies from the source author.
*
* @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
* the server responded with an unexpected value).
*/
- fun mediaType(): Optional = body.mediaType()
+ fun excludeOriginalAuthor(): Optional = body.excludeOriginalAuthor()
/**
- * Estimate tweets mentioning this username (tweet_search_extractor)
+ * Exclude a source application.
*
* @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
* the server responded with an unexpected value).
*/
- fun mentioning(): Optional = body.mentioning()
+ fun excludeSource(): Optional = body.excludeSource()
/**
- * Minimum likes threshold for estimated results (tweet_search_extractor)
+ * Words or quoted phrases to exclude. Separate with spaces, commas, or lines.
+ * (tweet_search_extractor)
*
* @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
* the server responded with an unexpected value).
*/
- fun minFaves(): Optional = body.minFaves()
+ fun excludeWords(): Optional = body.excludeWords()
/**
- * Minimum quote count threshold for estimated results (tweet_search_extractor)
+ * Filter by author username (tweet_search_extractor)
*
* @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
* the server responded with an unexpected value).
*/
- fun minQuotes(): Optional = body.minQuotes()
+ fun fromUser(): Optional = body.fromUser()
/**
- * Minimum replies threshold for estimated results (tweet_search_extractor)
+ * Match latitude, longitude, and radius.
*
* @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
* the server responded with an unexpected value).
*/
- fun minReplies(): Optional = body.minReplies()
+ fun geocode(): Optional = body.geocode()
/**
- * Minimum retweets threshold for estimated results (tweet_search_extractor)
+ * Hashtags separated by spaces, commas, or lines. (tweet_search_extractor)
*
* @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
* the server responded with an unexpected value).
*/
- fun minRetweets(): Optional = body.minRetweets()
+ fun hashtags(): Optional = body.hashtags()
/**
- * Estimate search results within this place ID (tweet_search_extractor)
+ * Require a profile location.
*
* @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
* the server responded with an unexpected value).
*/
- fun place(): Optional = body.place()
+ fun hasLocation(): Optional = body.hasLocation()
/**
- * Estimate search results within this country code (tweet_search_extractor)
+ * Return only replies with media.
*
* @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
* the server responded with an unexpected value).
*/
- fun placeCountry(): Optional = body.placeCountry()
+ fun hasMediaOnly(): Optional = body.hasMediaOnly()
/**
- * Geo point radius used for estimation, e.g. -73.99 40.73 25mi (tweet_search_extractor)
+ * Require a profile website.
*
* @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
* the server responded with an unexpected value).
*/
- fun pointRadius(): Optional = body.pointRadius()
+ fun hasWebsite(): Optional = body.hasWebsite()
/**
- * Quote mode used for estimation (tweet_search_extractor)
+ * Include the source post in reply results.
*
* @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
* the server responded with an unexpected value).
*/
- fun quotes(): Optional = body.quotes()
+ fun includeOriginalPost(): Optional = body.includeOriginalPost()
/**
- * Estimate only quotes of this tweet ID (tweet_search_extractor)
+ * Add matching search terms to collection metadata.
*
* @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
* the server responded with an unexpected value).
*/
- fun quotesOfTweetId(): Optional = body.quotesOfTweetId()
+ fun includeSearchTerms(): Optional = body.includeSearchTerms()
/**
- * Reply mode used for estimation (tweet_search_extractor)
+ * Add source target metadata to each result.
*
* @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
* the server responded with an unexpected value).
*/
- fun replies(): Optional = body.replies()
+ fun includeTargetMetadata(): Optional = body.includeTargetMetadata()
/**
- * Maximum number of results to estimate. When set, the estimate caps projected results to this
- * value.
+ * Only replies to this tweet ID (tweet_search_extractor)
*
* @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
* the server responded with an unexpected value).
*/
- fun resultsLimit(): Optional = body.resultsLimit()
+ fun inReplyToTweetId(): Optional = body.inReplyToTweetId()
/**
- * Retweet mode used for estimation (tweet_search_extractor)
+ * Language code filter (tweet_search_extractor)
*
* @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
* the server responded with an unexpected value).
*/
- fun retweets(): Optional = body.retweets()
+ fun language(): Optional = body.language()
/**
- * Estimate only retweets of this tweet ID (tweet_search_extractor)
+ * Search within a list ID (tweet_search_extractor)
*
* @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
* the server responded with an unexpected value).
*/
- fun retweetsOfTweetId(): Optional = body.retweetsOfTweetId()
+ fun listId(): Optional = body.listId()
/**
- * Query used to price tweet_search_extractor or community_search.
+ * Required profile location text.
*
* @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
* the server responded with an unexpected value).
*/
- fun searchQuery(): Optional = body.searchQuery()
+ fun locationContains(): Optional = body.locationContains()
/**
- * Estimate start date in YYYY-MM-DD format (tweet_search_extractor)
+ * Maximum nested reply depth.
*
* @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
* the server responded with an unexpected value).
*/
- fun sinceDate(): Optional = body.sinceDate()
+ fun maxDepth(): Optional = body.maxDepth()
/**
- * Community ID used to price community_post_extractor or community_search.
+ * Maximum follower count for profile results.
*
* @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
* the server responded with an unexpected value).
*/
- fun targetCommunityId(): Optional = body.targetCommunityId()
+ fun maxFollowers(): Optional = body.maxFollowers()
/**
- * List ID used to price list_follower_explorer, list_member_extractor, or list_post_extractor.
+ * Maximum following count for profile results.
*
* @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
* the server responded with an unexpected value).
*/
- fun targetListId(): Optional = body.targetListId()
+ fun maxFollowing(): Optional = body.maxFollowing()
/**
- * Space ID used to price space_explorer.
+ * Return Tweets older than this Tweet ID.
*
* @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
* the server responded with an unexpected value).
*/
- fun targetSpaceId(): Optional = body.targetSpaceId()
+ fun maxId(): Optional = body.maxId()
/**
+ * Maximum results collected for each target.
+ *
* @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
* the server responded with an unexpected value).
*/
- fun targetTweetId(): Optional = body.targetTweetId()
+ fun maxItemsPerTarget(): Optional = body.maxItemsPerTarget()
/**
+ * Maximum Tweet like count.
+ *
* @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
* the server responded with an unexpected value).
*/
- fun targetUsername(): Optional = body.targetUsername()
+ fun maxLikes(): Optional = body.maxLikes()
/**
- * Estimate replies sent to this username (tweet_search_extractor)
+ * Reply pages collected for each target.
*
* @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
* the server responded with an unexpected value).
*/
- fun toUser(): Optional = body.toUser()
+ fun maxPagesPerTarget(): Optional = body.maxPagesPerTarget()
/**
- * Estimate end date in YYYY-MM-DD format (tweet_search_extractor)
+ * Maximum post count for profile results.
*
* @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
* the server responded with an unexpected value).
*/
- fun untilDate(): Optional = body.untilDate()
+ fun maxPosts(): Optional = body.maxPosts()
/**
- * URL substring or domain filter used for estimation (tweet_search_extractor)
+ * Maximum Tweet quote count.
*
* @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
* the server responded with an unexpected value).
*/
- fun url(): Optional = body.url()
+ fun maxQuotes(): Optional = body.maxQuotes()
/**
- * Estimate only verified authors (tweet_search_extractor)
+ * Maximum Tweet reply count.
*
* @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
* the server responded with an unexpected value).
*/
- fun verifiedOnly(): Optional = body.verifiedOnly()
+ fun maxReplies(): Optional = body.maxReplies()
/**
- * Returns the raw JSON value of [toolType].
+ * Maximum Tweet repost count.
*
- * Unlike [toolType], this method doesn't throw if the JSON field has an unexpected type.
+ * @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
+ * the server responded with an unexpected value).
*/
- fun _toolType(): JsonField = body._toolType()
+ fun maxRetweets(): Optional = body.maxRetweets()
/**
- * Returns the raw JSON value of [advancedQuery].
+ * Media type filter (tweet_search_extractor)
*
- * Unlike [advancedQuery], this method doesn't throw if the JSON field has an unexpected type.
+ * @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
+ * the server responded with an unexpected value).
*/
- fun _advancedQuery(): JsonField = body._advancedQuery()
+ fun mediaType(): Optional = body.mediaType()
/**
- * Returns the raw JSON value of [anyWords].
+ * Filter tweets mentioning a username (tweet_search_extractor)
*
- * Unlike [anyWords], this method doesn't throw if the JSON field has an unexpected type.
+ * @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
+ * the server responded with an unexpected value).
*/
- fun _anyWords(): JsonField = body._anyWords()
+ fun mentioning(): Optional = body.mentioning()
/**
- * Returns the raw JSON value of [boundingBox].
+ * Minimum profile age in days.
*
- * Unlike [boundingBox], this method doesn't throw if the JSON field has an unexpected type.
+ * @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
+ * the server responded with an unexpected value).
*/
- fun _boundingBox(): JsonField = body._boundingBox()
+ fun minAccountAgeDays(): Optional = body.minAccountAgeDays()
/**
- * Returns the raw JSON value of [cashtags].
+ * Minimum Tweet bookmark count.
*
- * Unlike [cashtags], this method doesn't throw if the JSON field has an unexpected type.
+ * @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
+ * the server responded with an unexpected value).
*/
- fun _cashtags(): JsonField = body._cashtags()
+ fun minBookmarks(): Optional = body.minBookmarks()
/**
- * Returns the raw JSON value of [conversationId].
+ * Minimum likes threshold (tweet_search_extractor)
*
- * Unlike [conversationId], this method doesn't throw if the JSON field has an unexpected type.
+ * @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
+ * the server responded with an unexpected value).
*/
- fun _conversationId(): JsonField = body._conversationId()
+ fun minFaves(): Optional = body.minFaves()
/**
- * Returns the raw JSON value of [exactPhrase].
+ * Minimum follower count for profile results.
*
- * Unlike [exactPhrase], this method doesn't throw if the JSON field has an unexpected type.
+ * @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
+ * the server responded with an unexpected value).
*/
- fun _exactPhrase(): JsonField = body._exactPhrase()
+ fun minFollowers(): Optional = body.minFollowers()
/**
- * Returns the raw JSON value of [excludeWords].
+ * Minimum following count for profile results.
*
- * Unlike [excludeWords], this method doesn't throw if the JSON field has an unexpected type.
+ * @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
+ * the server responded with an unexpected value).
*/
- fun _excludeWords(): JsonField = body._excludeWords()
+ fun minFollowing(): Optional = body.minFollowing()
/**
- * Returns the raw JSON value of [fromUser].
+ * Minimum post count for profile results.
*
- * Unlike [fromUser], this method doesn't throw if the JSON field has an unexpected type.
+ * @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
+ * the server responded with an unexpected value).
*/
- fun _fromUser(): JsonField = body._fromUser()
+ fun minPosts(): Optional = body.minPosts()
/**
- * Returns the raw JSON value of [hashtags].
+ * Minimum quote count threshold (tweet_search_extractor)
*
- * Unlike [hashtags], this method doesn't throw if the JSON field has an unexpected type.
+ * @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
+ * the server responded with an unexpected value).
*/
- fun _hashtags(): JsonField = body._hashtags()
+ fun minQuotes(): Optional = body.minQuotes()
/**
- * Returns the raw JSON value of [inReplyToTweetId].
+ * Minimum replies threshold (tweet_search_extractor)
*
- * Unlike [inReplyToTweetId], this method doesn't throw if the JSON field has an unexpected
- * type.
+ * @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
+ * the server responded with an unexpected value).
*/
- fun _inReplyToTweetId(): JsonField = body._inReplyToTweetId()
+ fun minReplies(): Optional = body.minReplies()
/**
- * Returns the raw JSON value of [language].
+ * Minimum retweets threshold (tweet_search_extractor)
*
- * Unlike [language], this method doesn't throw if the JSON field has an unexpected type.
+ * @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
+ * the server responded with an unexpected value).
*/
- fun _language(): JsonField = body._language()
+ fun minRetweets(): Optional = body.minRetweets()
/**
- * Returns the raw JSON value of [listId].
+ * Minimum Tweet view count.
*
- * Unlike [listId], this method doesn't throw if the JSON field has an unexpected type.
+ * @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
+ * the server responded with an unexpected value).
*/
- fun _listId(): JsonField = body._listId()
+ fun minViews(): Optional = body.minViews()
/**
- * Returns the raw JSON value of [mediaType].
+ * Only return native reposts.
*
- * Unlike [mediaType], this method doesn't throw if the JSON field has an unexpected type.
+ * @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
+ * the server responded with an unexpected value).
*/
- fun _mediaType(): JsonField = body._mediaType()
+ fun nativeRetweets(): Optional = body.nativeRetweets()
/**
- * Returns the raw JSON value of [mentioning].
+ * Match a place name.
*
- * Unlike [mentioning], this method doesn't throw if the JSON field has an unexpected type.
+ * @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
+ * the server responded with an unexpected value).
*/
- fun _mentioning(): JsonField = body._mentioning()
+ fun near(): Optional = body.near()
/**
- * Returns the raw JSON value of [minFaves].
+ * Only return news results.
*
- * Unlike [minFaves], this method doesn't throw if the JSON field has an unexpected type.
+ * @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
+ * the server responded with an unexpected value).
*/
- fun _minFaves(): JsonField = body._minFaves()
+ fun news(): Optional = body.news()
/**
- * Returns the raw JSON value of [minQuotes].
+ * Shortcut for dedupeMode=merge.
*
- * Unlike [minQuotes], this method doesn't throw if the JSON field has an unexpected type.
+ * @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
+ * the server responded with an unexpected value).
*/
- fun _minQuotes(): JsonField = body._minQuotes()
+ fun overlapMode(): Optional = body.overlapMode()
/**
- * Returns the raw JSON value of [minReplies].
+ * Search within a place ID (tweet_search_extractor)
*
- * Unlike [minReplies], this method doesn't throw if the JSON field has an unexpected type.
+ * @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
+ * the server responded with an unexpected value).
*/
- fun _minReplies(): JsonField = body._minReplies()
+ fun place(): Optional = body.place()
/**
- * Returns the raw JSON value of [minRetweets].
+ * Search within a country code (tweet_search_extractor)
*
- * Unlike [minRetweets], this method doesn't throw if the JSON field has an unexpected type.
+ * @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
+ * the server responded with an unexpected value).
*/
- fun _minRetweets(): JsonField = body._minRetweets()
+ fun placeCountry(): Optional = body.placeCountry()
/**
- * Returns the raw JSON value of [place].
+ * Geo point radius, e.g. -73.99 40.73 25mi (tweet_search_extractor)
*
- * Unlike [place], this method doesn't throw if the JSON field has an unexpected type.
+ * @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
+ * the server responded with an unexpected value).
*/
- fun _place(): JsonField = body._place()
+ fun pointRadius(): Optional = body.pointRadius()
/**
- * Returns the raw JSON value of [placeCountry].
+ * Search ranking applied to every query.
*
- * Unlike [placeCountry], this method doesn't throw if the JSON field has an unexpected type.
+ * @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
+ * the server responded with an unexpected value).
*/
- fun _placeCountry(): JsonField = body._placeCountry()
+ fun queryType(): Optional = body.queryType()
/**
- * Returns the raw JSON value of [pointRadius].
+ * Quote mode (tweet_search_extractor)
*
- * Unlike [pointRadius], this method doesn't throw if the JSON field has an unexpected type.
+ * @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
+ * the server responded with an unexpected value).
*/
- fun _pointRadius(): JsonField = body._pointRadius()
+ fun quotes(): Optional = body.quotes()
/**
- * Returns the raw JSON value of [quotes].
+ * Only quotes of this tweet ID (tweet_search_extractor)
*
- * Unlike [quotes], this method doesn't throw if the JSON field has an unexpected type.
+ * @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
+ * the server responded with an unexpected value).
*/
- fun _quotes(): JsonField = body._quotes()
+ fun quotesOfTweetId(): Optional = body.quotesOfTweetId()
/**
- * Returns the raw JSON value of [quotesOfTweetId].
+ * Profile relations processed within one job.
*
- * Unlike [quotesOfTweetId], this method doesn't throw if the JSON field has an unexpected type.
+ * @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
+ * the server responded with an unexpected value).
*/
- fun _quotesOfTweetId(): JsonField = body._quotesOfTweetId()
+ fun relationTargets(): Optional> = body.relationTargets()
/**
- * Returns the raw JSON value of [replies].
+ * Reply mode (tweet_search_extractor)
*
- * Unlike [replies], this method doesn't throw if the JSON field has an unexpected type.
+ * @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
+ * the server responded with an unexpected value).
*/
- fun _replies(): JsonField = body._replies()
+ fun replies(): Optional = body.replies()
/**
- * Returns the raw JSON value of [resultsLimit].
+ * Maximum number of results to extract. When set, the extraction stops after reaching this
+ * limit.
*
- * Unlike [resultsLimit], this method doesn't throw if the JSON field has an unexpected type.
+ * @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
+ * the server responded with an unexpected value).
*/
- fun _resultsLimit(): JsonField = body._resultsLimit()
+ fun resultsLimit(): Optional = body.resultsLimit()
/**
- * Returns the raw JSON value of [retweets].
+ * Retweet mode (tweet_search_extractor)
*
- * Unlike [retweets], this method doesn't throw if the JSON field has an unexpected type.
+ * @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
+ * the server responded with an unexpected value).
*/
- fun _retweets(): JsonField = body._retweets()
+ fun retweets(): Optional = body.retweets()
/**
- * Returns the raw JSON value of [retweetsOfTweetId].
+ * Only retweets of this tweet ID (tweet_search_extractor)
*
- * Unlike [retweetsOfTweetId], this method doesn't throw if the JSON field has an unexpected
- * type.
+ * @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
+ * the server responded with an unexpected value).
*/
- fun _retweetsOfTweetId(): JsonField = body._retweetsOfTweetId()
+ fun retweetsOfTweetId(): Optional = body.retweetsOfTweetId()
/**
- * Returns the raw JSON value of [searchQuery].
+ * Enable the safe-search filter.
*
- * Unlike [searchQuery], this method doesn't throw if the JSON field has an unexpected type.
+ * @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
+ * the server responded with an unexpected value).
*/
- fun _searchQuery(): JsonField = body._searchQuery()
+ fun safe(): Optional = body.safe()
/**
- * Returns the raw JSON value of [sinceDate].
+ * Reply depth scope.
*
- * Unlike [sinceDate], this method doesn't throw if the JSON field has an unexpected type.
+ * @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
+ * the server responded with an unexpected value).
*/
- fun _sinceDate(): JsonField = body._sinceDate()
+ fun scope(): Optional = body.scope()
/**
- * Returns the raw JSON value of [targetCommunityId].
+ * Search queries processed as one collection job.
*
- * Unlike [targetCommunityId], this method doesn't throw if the JSON field has an unexpected
- * type.
+ * @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
+ * the server responded with an unexpected value).
*/
- fun _targetCommunityId(): JsonField = body._targetCommunityId()
+ fun searchQueries(): Optional> = body.searchQueries()
/**
- * Returns the raw JSON value of [targetListId].
+ * Required for tweet_search_extractor & community_search.
*
- * Unlike [targetListId], this method doesn't throw if the JSON field has an unexpected type.
+ * @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
+ * the server responded with an unexpected value).
*/
- fun _targetListId(): JsonField = body._targetListId()
+ fun searchQuery(): Optional = body.searchQuery()
/**
- * Returns the raw JSON value of [targetSpaceId].
+ * Start date YYYY-MM-DD (tweet_search_extractor)
*
- * Unlike [targetSpaceId], this method doesn't throw if the JSON field has an unexpected type.
+ * @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
+ * the server responded with an unexpected value).
*/
- fun _targetSpaceId(): JsonField = body._targetSpaceId()
+ fun sinceDate(): Optional = body.sinceDate()
/**
- * Returns the raw JSON value of [targetTweetId].
+ * Return Tweets newer than this Tweet ID.
*
- * Unlike [targetTweetId], this method doesn't throw if the JSON field has an unexpected type.
+ * @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
+ * the server responded with an unexpected value).
*/
- fun _targetTweetId(): JsonField = body._targetTweetId()
+ fun sinceId(): Optional = body.sinceId()
/**
- * Returns the raw JSON value of [targetUsername].
+ * Reply start time as ISO 8601 or Unix seconds.
*
- * Unlike [targetUsername], this method doesn't throw if the JSON field has an unexpected type.
+ * @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
+ * the server responded with an unexpected value).
*/
- fun _targetUsername(): JsonField = body._targetUsername()
+ fun sinceTime(): Optional = body.sinceTime()
/**
- * Returns the raw JSON value of [toUser].
+ * Reply result order.
*
- * Unlike [toUser], this method doesn't throw if the JSON field has an unexpected type.
+ * @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
+ * the server responded with an unexpected value).
*/
- fun _toUser(): JsonField = body._toUser()
+ fun sort(): Optional = body.sort()
/**
- * Returns the raw JSON value of [untilDate].
+ * Match the source application.
*
- * Unlike [untilDate], this method doesn't throw if the JSON field has an unexpected type.
+ * @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
+ * the server responded with an unexpected value).
*/
- fun _untilDate(): JsonField = body._untilDate()
+ fun source(): Optional = body.source()
/**
- * Returns the raw JSON value of [url].
+ * Resume one reply target from this cursor.
*
- * Unlike [url], this method doesn't throw if the JSON field has an unexpected type.
- */
- fun _url(): JsonField = body._url()
+ * @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
+ * the server responded with an unexpected value).
+ */
+ fun startCursor(): Optional = body.startCursor()
/**
- * Returns the raw JSON value of [verifiedOnly].
+ * Required for community_post_extractor & community_search.
*
- * Unlike [verifiedOnly], this method doesn't throw if the JSON field has an unexpected type.
+ * @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
+ * the server responded with an unexpected value).
*/
- fun _verifiedOnly(): JsonField = body._verifiedOnly()
+ fun targetCommunityId(): Optional = body.targetCommunityId()
- fun _additionalBodyProperties(): Map = body._additionalProperties()
+ /**
+ * Community IDs processed as one collection job.
+ *
+ * @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
+ * the server responded with an unexpected value).
+ */
+ fun targetCommunityIds(): Optional> = body.targetCommunityIds()
- /** Additional headers to send with the request. */
- fun _additionalHeaders(): Headers = additionalHeaders
+ /**
+ * Required for list_follower_explorer, list_member_extractor & list_post_extractor.
+ *
+ * @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
+ * the server responded with an unexpected value).
+ */
+ fun targetListId(): Optional = body.targetListId()
- /** Additional query param to send with the request. */
- fun _additionalQueryParams(): QueryParams = additionalQueryParams
+ /**
+ * List IDs processed as one collection job.
+ *
+ * @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
+ * the server responded with an unexpected value).
+ */
+ fun targetListIds(): Optional> = body.targetListIds()
- fun toBuilder() = Builder().from(this)
+ /**
+ * Mixed targets auto-routed within one job.
+ *
+ * @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
+ * the server responded with an unexpected value).
+ */
+ fun targets(): Optional> = body.targets()
- companion object {
+ /**
+ * Required for space_explorer.
+ *
+ * @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
+ * the server responded with an unexpected value).
+ */
+ fun targetSpaceId(): Optional = body.targetSpaceId()
- /**
- * Returns a mutable builder for constructing an instance of [ExtractionEstimateCostParams].
- *
- * The following fields are required:
- * ```java
- * .toolType()
- * ```
- */
- @JvmStatic fun builder() = Builder()
- }
+ /**
+ * @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
+ * the server responded with an unexpected value).
+ */
+ fun targetTweetId(): Optional = body.targetTweetId()
- /** A builder for [ExtractionEstimateCostParams]. */
- class Builder internal constructor() {
+ /**
+ * Tweet IDs processed as one collection job.
+ *
+ * @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
+ * the server responded with an unexpected value).
+ */
+ fun targetTweetIds(): Optional> = body.targetTweetIds()
- private var body: Body.Builder = Body.builder()
- private var additionalHeaders: Headers.Builder = Headers.builder()
- private var additionalQueryParams: QueryParams.Builder = QueryParams.builder()
+ /**
+ * @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
+ * the server responded with an unexpected value).
+ */
+ fun targetUsername(): Optional = body.targetUsername()
- @JvmSynthetic
- internal fun from(extractionEstimateCostParams: ExtractionEstimateCostParams) = apply {
- body = extractionEstimateCostParams.body.toBuilder()
- additionalHeaders = extractionEstimateCostParams.additionalHeaders.toBuilder()
- additionalQueryParams = extractionEstimateCostParams.additionalQueryParams.toBuilder()
- }
+ /**
+ * Usernames processed as one collection job.
+ *
+ * @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
+ * the server responded with an unexpected value).
+ */
+ fun targetUsernames(): Optional> = body.targetUsernames()
- /**
- * Sets the entire request body.
- *
- * This is generally only useful if you are already constructing the body separately.
- * Otherwise, it's more convenient to use the top-level setters instead:
- * - [toolType]
- * - [advancedQuery]
- * - [anyWords]
- * - [boundingBox]
- * - [cashtags]
- * - etc.
- */
- fun body(body: Body) = apply { this.body = body.toBuilder() }
+ /**
+ * Filter replies sent to a username (tweet_search_extractor)
+ *
+ * @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
+ * the server responded with an unexpected value).
+ */
+ fun toUser(): Optional = body.toUser()
- /** Identifier for the extraction tool used to run a job. */
- fun toolType(toolType: ToolType) = apply { body.toolType(toolType) }
+ /**
+ * End date YYYY-MM-DD (tweet_search_extractor)
+ *
+ * @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
+ * the server responded with an unexpected value).
+ */
+ fun untilDate(): Optional = body.untilDate()
- /**
- * Sets [Builder.toolType] to an arbitrary JSON value.
- *
- * You should usually call [Builder.toolType] with a well-typed [ToolType] value instead.
- * This method is primarily for setting the field to an undocumented or not yet supported
- * value.
- */
- fun toolType(toolType: JsonField) = apply { body.toolType(toolType) }
+ /**
+ * Reply end time as ISO 8601 or Unix seconds.
+ *
+ * @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
+ * the server responded with an unexpected value).
+ */
+ fun untilTime(): Optional = body.untilTime()
- /** Raw advanced query string appended to the estimate (tweet_search_extractor) */
- fun advancedQuery(advancedQuery: String) = apply { body.advancedQuery(advancedQuery) }
+ /**
+ * URL substring or domain filter (tweet_search_extractor)
+ *
+ * @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
+ * the server responded with an unexpected value).
+ */
+ fun url(): Optional = body.url()
- /**
- * Sets [Builder.advancedQuery] to an arbitrary JSON value.
- *
- * You should usually call [Builder.advancedQuery] with a well-typed [String] value instead.
- * This method is primarily for setting the field to an undocumented or not yet supported
- * value.
- */
- fun advancedQuery(advancedQuery: JsonField) = apply {
- body.advancedQuery(advancedQuery)
- }
+ /**
+ * Required username text.
+ *
+ * @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
+ * the server responded with an unexpected value).
+ */
+ fun usernameContains(): Optional = body.usernameContains()
- /**
- * Alternative words or quoted phrases for estimated results. Separate with spaces, commas,
- * or lines.
- */
- fun anyWords(anyWords: String) = apply { body.anyWords(anyWords) }
+ /**
+ * Only verified authors (tweet_search_extractor)
+ *
+ * @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
+ * the server responded with an unexpected value).
+ */
+ fun verifiedOnly(): Optional = body.verifiedOnly()
- /**
- * Sets [Builder.anyWords] to an arbitrary JSON value.
- *
- * You should usually call [Builder.anyWords] with a well-typed [String] value instead. This
- * method is primarily for setting the field to an undocumented or not yet supported value.
- */
- fun anyWords(anyWords: JsonField) = apply { body.anyWords(anyWords) }
+ /**
+ * Exact profile verification type.
+ *
+ * @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
+ * the server responded with an unexpected value).
+ */
+ fun verifiedType(): Optional = body.verifiedType()
- /**
- * Geo bounding box used for estimation, e.g. -74.1 40.6 -73.9 40.8 (tweet_search_extractor)
- */
- fun boundingBox(boundingBox: String) = apply { body.boundingBox(boundingBox) }
+ /**
+ * Set the radius for the near filter.
+ *
+ * @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
+ * the server responded with an unexpected value).
+ */
+ fun within(): Optional = body.within()
- /**
- * Sets [Builder.boundingBox] to an arbitrary JSON value.
- *
- * You should usually call [Builder.boundingBox] with a well-typed [String] value instead.
- * This method is primarily for setting the field to an undocumented or not yet supported
- * value.
- */
- fun boundingBox(boundingBox: JsonField) = apply { body.boundingBox(boundingBox) }
+ /**
+ * Match Tweets inside a recent time window.
+ *
+ * @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type (e.g. if
+ * the server responded with an unexpected value).
+ */
+ fun withinTime(): Optional = body.withinTime()
- /** Cashtags applied to the estimate, separated by spaces, commas, or lines. */
- fun cashtags(cashtags: String) = apply { body.cashtags(cashtags) }
+ /**
+ * Returns the raw JSON value of [toolType].
+ *
+ * Unlike [toolType], this method doesn't throw if the JSON field has an unexpected type.
+ */
+ fun _toolType(): JsonField = body._toolType()
- /**
- * Sets [Builder.cashtags] to an arbitrary JSON value.
- *
- * You should usually call [Builder.cashtags] with a well-typed [String] value instead. This
- * method is primarily for setting the field to an undocumented or not yet supported value.
- */
- fun cashtags(cashtags: JsonField) = apply { body.cashtags(cashtags) }
+ /**
+ * Returns the raw JSON value of [advancedQuery].
+ *
+ * Unlike [advancedQuery], this method doesn't throw if the JSON field has an unexpected type.
+ */
+ fun _advancedQuery(): JsonField = body._advancedQuery()
- /** Conversation ID filter used for estimation (tweet_search_extractor) */
- fun conversationId(conversationId: String) = apply { body.conversationId(conversationId) }
+ /**
+ * Returns the raw JSON value of [anyWords].
+ *
+ * Unlike [anyWords], this method doesn't throw if the JSON field has an unexpected type.
+ */
+ fun _anyWords(): JsonField = body._anyWords()
- /**
- * Sets [Builder.conversationId] to an arbitrary JSON value.
- *
- * You should usually call [Builder.conversationId] with a well-typed [String] value
- * instead. This method is primarily for setting the field to an undocumented or not yet
- * supported value.
- */
- fun conversationId(conversationId: JsonField) = apply {
- body.conversationId(conversationId)
- }
+ /**
+ * Returns the raw JSON value of [bioContains].
+ *
+ * Unlike [bioContains], this method doesn't throw if the JSON field has an unexpected type.
+ */
+ fun _bioContains(): JsonField = body._bioContains()
- /** Exact phrase filter for search estimation */
- fun exactPhrase(exactPhrase: String) = apply { body.exactPhrase(exactPhrase) }
+ /**
+ * Returns the raw JSON value of [blueVerifiedOnly].
+ *
+ * Unlike [blueVerifiedOnly], this method doesn't throw if the JSON field has an unexpected
+ * type.
+ */
+ fun _blueVerifiedOnly(): JsonField = body._blueVerifiedOnly()
- /**
- * Sets [Builder.exactPhrase] to an arbitrary JSON value.
- *
- * You should usually call [Builder.exactPhrase] with a well-typed [String] value instead.
- * This method is primarily for setting the field to an undocumented or not yet supported
- * value.
- */
- fun exactPhrase(exactPhrase: JsonField) = apply { body.exactPhrase(exactPhrase) }
+ /**
+ * Returns the raw JSON value of [boundingBox].
+ *
+ * Unlike [boundingBox], this method doesn't throw if the JSON field has an unexpected type.
+ */
+ fun _boundingBox(): JsonField = body._boundingBox()
- /**
- * Words or quoted phrases excluded from estimated results. Separate with spaces, commas, or
- * lines.
- */
- fun excludeWords(excludeWords: String) = apply { body.excludeWords(excludeWords) }
+ /**
+ * Returns the raw JSON value of [cardName].
+ *
+ * Unlike [cardName], this method doesn't throw if the JSON field has an unexpected type.
+ */
+ fun _cardName(): JsonField = body._cardName()
- /**
- * Sets [Builder.excludeWords] to an arbitrary JSON value.
- *
- * You should usually call [Builder.excludeWords] with a well-typed [String] value instead.
- * This method is primarily for setting the field to an undocumented or not yet supported
- * value.
- */
- fun excludeWords(excludeWords: JsonField) = apply {
- body.excludeWords(excludeWords)
- }
-
- /** Estimate only tweets from this author username (tweet_search_extractor) */
- fun fromUser(fromUser: String) = apply { body.fromUser(fromUser) }
+ /**
+ * Returns the raw JSON value of [cashtags].
+ *
+ * Unlike [cashtags], this method doesn't throw if the JSON field has an unexpected type.
+ */
+ fun _cashtags(): JsonField = body._cashtags()
- /**
- * Sets [Builder.fromUser] to an arbitrary JSON value.
- *
- * You should usually call [Builder.fromUser] with a well-typed [String] value instead. This
- * method is primarily for setting the field to an undocumented or not yet supported value.
- */
- fun fromUser(fromUser: JsonField) = apply { body.fromUser(fromUser) }
+ /**
+ * Returns the raw JSON value of [collectionStrategy].
+ *
+ * Unlike [collectionStrategy], this method doesn't throw if the JSON field has an unexpected
+ * type.
+ */
+ fun _collectionStrategy(): JsonField = body._collectionStrategy()
- /** Hashtags applied to the estimate, separated by spaces, commas, or lines. */
- fun hashtags(hashtags: String) = apply { body.hashtags(hashtags) }
+ /**
+ * Returns the raw JSON value of [conversationId].
+ *
+ * Unlike [conversationId], this method doesn't throw if the JSON field has an unexpected type.
+ */
+ fun _conversationId(): JsonField = body._conversationId()
- /**
- * Sets [Builder.hashtags] to an arbitrary JSON value.
- *
- * You should usually call [Builder.hashtags] with a well-typed [String] value instead. This
- * method is primarily for setting the field to an undocumented or not yet supported value.
- */
- fun hashtags(hashtags: JsonField) = apply { body.hashtags(hashtags) }
+ /**
+ * Returns the raw JSON value of [dedupeAcrossTargets].
+ *
+ * Unlike [dedupeAcrossTargets], this method doesn't throw if the JSON field has an unexpected
+ * type.
+ */
+ fun _dedupeAcrossTargets(): JsonField = body._dedupeAcrossTargets()
- /** Estimate only replies to this tweet ID (tweet_search_extractor) */
- fun inReplyToTweetId(inReplyToTweetId: String) = apply {
- body.inReplyToTweetId(inReplyToTweetId)
- }
+ /**
+ * Returns the raw JSON value of [dedupeMode].
+ *
+ * Unlike [dedupeMode], this method doesn't throw if the JSON field has an unexpected type.
+ */
+ fun _dedupeMode(): JsonField = body._dedupeMode()
- /**
- * Sets [Builder.inReplyToTweetId] to an arbitrary JSON value.
- *
- * You should usually call [Builder.inReplyToTweetId] with a well-typed [String] value
- * instead. This method is primarily for setting the field to an undocumented or not yet
- * supported value.
- */
- fun inReplyToTweetId(inReplyToTweetId: JsonField) = apply {
- body.inReplyToTweetId(inReplyToTweetId)
- }
+ /**
+ * Returns the raw JSON value of [exactPhrase].
+ *
+ * Unlike [exactPhrase], this method doesn't throw if the JSON field has an unexpected type.
+ */
+ fun _exactPhrase(): JsonField = body._exactPhrase()
- /** Language code used for estimate filtering (tweet_search_extractor) */
- fun language(language: String) = apply { body.language(language) }
+ /**
+ * Returns the raw JSON value of [excludeOriginalAuthor].
+ *
+ * Unlike [excludeOriginalAuthor], this method doesn't throw if the JSON field has an unexpected
+ * type.
+ */
+ fun _excludeOriginalAuthor(): JsonField = body._excludeOriginalAuthor()
- /**
- * Sets [Builder.language] to an arbitrary JSON value.
- *
- * You should usually call [Builder.language] with a well-typed [String] value instead. This
- * method is primarily for setting the field to an undocumented or not yet supported value.
- */
- fun language(language: JsonField) = apply { body.language(language) }
+ /**
+ * Returns the raw JSON value of [excludeSource].
+ *
+ * Unlike [excludeSource], this method doesn't throw if the JSON field has an unexpected type.
+ */
+ fun _excludeSource(): JsonField = body._excludeSource()
- /** Estimate search results within this list ID (tweet_search_extractor) */
- fun listId(listId: String) = apply { body.listId(listId) }
+ /**
+ * Returns the raw JSON value of [excludeWords].
+ *
+ * Unlike [excludeWords], this method doesn't throw if the JSON field has an unexpected type.
+ */
+ fun _excludeWords(): JsonField = body._excludeWords()
- /**
- * Sets [Builder.listId] to an arbitrary JSON value.
- *
- * You should usually call [Builder.listId] with a well-typed [String] value instead. This
- * method is primarily for setting the field to an undocumented or not yet supported value.
- */
- fun listId(listId: JsonField) = apply { body.listId(listId) }
+ /**
+ * Returns the raw JSON value of [fromUser].
+ *
+ * Unlike [fromUser], this method doesn't throw if the JSON field has an unexpected type.
+ */
+ fun _fromUser(): JsonField = body._fromUser()
- /** Media type used for estimate filtering (tweet_search_extractor) */
- fun mediaType(mediaType: MediaType) = apply { body.mediaType(mediaType) }
+ /**
+ * Returns the raw JSON value of [geocode].
+ *
+ * Unlike [geocode], this method doesn't throw if the JSON field has an unexpected type.
+ */
+ fun _geocode(): JsonField = body._geocode()
- /**
- * Sets [Builder.mediaType] to an arbitrary JSON value.
- *
- * You should usually call [Builder.mediaType] with a well-typed [MediaType] value instead.
- * This method is primarily for setting the field to an undocumented or not yet supported
- * value.
- */
- fun mediaType(mediaType: JsonField) = apply { body.mediaType(mediaType) }
+ /**
+ * Returns the raw JSON value of [hashtags].
+ *
+ * Unlike [hashtags], this method doesn't throw if the JSON field has an unexpected type.
+ */
+ fun _hashtags(): JsonField = body._hashtags()
- /** Estimate tweets mentioning this username (tweet_search_extractor) */
- fun mentioning(mentioning: String) = apply { body.mentioning(mentioning) }
+ /**
+ * Returns the raw JSON value of [hasLocation].
+ *
+ * Unlike [hasLocation], this method doesn't throw if the JSON field has an unexpected type.
+ */
+ fun _hasLocation(): JsonField = body._hasLocation()
- /**
- * Sets [Builder.mentioning] to an arbitrary JSON value.
- *
- * You should usually call [Builder.mentioning] with a well-typed [String] value instead.
- * This method is primarily for setting the field to an undocumented or not yet supported
- * value.
- */
- fun mentioning(mentioning: JsonField) = apply { body.mentioning(mentioning) }
+ /**
+ * Returns the raw JSON value of [hasMediaOnly].
+ *
+ * Unlike [hasMediaOnly], this method doesn't throw if the JSON field has an unexpected type.
+ */
+ fun _hasMediaOnly(): JsonField = body._hasMediaOnly()
- /** Minimum likes threshold for estimated results (tweet_search_extractor) */
- fun minFaves(minFaves: Long) = apply { body.minFaves(minFaves) }
+ /**
+ * Returns the raw JSON value of [hasWebsite].
+ *
+ * Unlike [hasWebsite], this method doesn't throw if the JSON field has an unexpected type.
+ */
+ fun _hasWebsite(): JsonField = body._hasWebsite()
- /**
- * Sets [Builder.minFaves] to an arbitrary JSON value.
- *
- * You should usually call [Builder.minFaves] with a well-typed [Long] value instead. This
- * method is primarily for setting the field to an undocumented or not yet supported value.
- */
- fun minFaves(minFaves: JsonField) = apply { body.minFaves(minFaves) }
+ /**
+ * Returns the raw JSON value of [includeOriginalPost].
+ *
+ * Unlike [includeOriginalPost], this method doesn't throw if the JSON field has an unexpected
+ * type.
+ */
+ fun _includeOriginalPost(): JsonField = body._includeOriginalPost()
- /** Minimum quote count threshold for estimated results (tweet_search_extractor) */
- fun minQuotes(minQuotes: Long) = apply { body.minQuotes(minQuotes) }
+ /**
+ * Returns the raw JSON value of [includeSearchTerms].
+ *
+ * Unlike [includeSearchTerms], this method doesn't throw if the JSON field has an unexpected
+ * type.
+ */
+ fun _includeSearchTerms(): JsonField = body._includeSearchTerms()
- /**
- * Sets [Builder.minQuotes] to an arbitrary JSON value.
- *
- * You should usually call [Builder.minQuotes] with a well-typed [Long] value instead. This
- * method is primarily for setting the field to an undocumented or not yet supported value.
- */
- fun minQuotes(minQuotes: JsonField) = apply { body.minQuotes(minQuotes) }
+ /**
+ * Returns the raw JSON value of [includeTargetMetadata].
+ *
+ * Unlike [includeTargetMetadata], this method doesn't throw if the JSON field has an unexpected
+ * type.
+ */
+ fun _includeTargetMetadata(): JsonField = body._includeTargetMetadata()
- /** Minimum replies threshold for estimated results (tweet_search_extractor) */
- fun minReplies(minReplies: Long) = apply { body.minReplies(minReplies) }
+ /**
+ * Returns the raw JSON value of [inReplyToTweetId].
+ *
+ * Unlike [inReplyToTweetId], this method doesn't throw if the JSON field has an unexpected
+ * type.
+ */
+ fun _inReplyToTweetId(): JsonField = body._inReplyToTweetId()
- /**
- * Sets [Builder.minReplies] to an arbitrary JSON value.
- *
- * You should usually call [Builder.minReplies] with a well-typed [Long] value instead. This
- * method is primarily for setting the field to an undocumented or not yet supported value.
- */
- fun minReplies(minReplies: JsonField) = apply { body.minReplies(minReplies) }
+ /**
+ * Returns the raw JSON value of [language].
+ *
+ * Unlike [language], this method doesn't throw if the JSON field has an unexpected type.
+ */
+ fun _language(): JsonField = body._language()
- /** Minimum retweets threshold for estimated results (tweet_search_extractor) */
- fun minRetweets(minRetweets: Long) = apply { body.minRetweets(minRetweets) }
+ /**
+ * Returns the raw JSON value of [listId].
+ *
+ * Unlike [listId], this method doesn't throw if the JSON field has an unexpected type.
+ */
+ fun _listId(): JsonField = body._listId()
- /**
- * Sets [Builder.minRetweets] to an arbitrary JSON value.
- *
- * You should usually call [Builder.minRetweets] with a well-typed [Long] value instead.
- * This method is primarily for setting the field to an undocumented or not yet supported
- * value.
- */
- fun minRetweets(minRetweets: JsonField) = apply { body.minRetweets(minRetweets) }
+ /**
+ * Returns the raw JSON value of [locationContains].
+ *
+ * Unlike [locationContains], this method doesn't throw if the JSON field has an unexpected
+ * type.
+ */
+ fun _locationContains(): JsonField = body._locationContains()
- /** Estimate search results within this place ID (tweet_search_extractor) */
- fun place(place: String) = apply { body.place(place) }
+ /**
+ * Returns the raw JSON value of [maxDepth].
+ *
+ * Unlike [maxDepth], this method doesn't throw if the JSON field has an unexpected type.
+ */
+ fun _maxDepth(): JsonField = body._maxDepth()
- /**
- * Sets [Builder.place] to an arbitrary JSON value.
- *
- * You should usually call [Builder.place] with a well-typed [String] value instead. This
- * method is primarily for setting the field to an undocumented or not yet supported value.
- */
- fun place(place: JsonField) = apply { body.place(place) }
+ /**
+ * Returns the raw JSON value of [maxFollowers].
+ *
+ * Unlike [maxFollowers], this method doesn't throw if the JSON field has an unexpected type.
+ */
+ fun _maxFollowers(): JsonField = body._maxFollowers()
- /** Estimate search results within this country code (tweet_search_extractor) */
- fun placeCountry(placeCountry: String) = apply { body.placeCountry(placeCountry) }
+ /**
+ * Returns the raw JSON value of [maxFollowing].
+ *
+ * Unlike [maxFollowing], this method doesn't throw if the JSON field has an unexpected type.
+ */
+ fun _maxFollowing(): JsonField = body._maxFollowing()
- /**
- * Sets [Builder.placeCountry] to an arbitrary JSON value.
- *
- * You should usually call [Builder.placeCountry] with a well-typed [String] value instead.
- * This method is primarily for setting the field to an undocumented or not yet supported
- * value.
- */
- fun placeCountry(placeCountry: JsonField) = apply {
- body.placeCountry(placeCountry)
- }
+ /**
+ * Returns the raw JSON value of [maxId].
+ *
+ * Unlike [maxId], this method doesn't throw if the JSON field has an unexpected type.
+ */
+ fun _maxId(): JsonField = body._maxId()
- /** Geo point radius used for estimation, e.g. -73.99 40.73 25mi (tweet_search_extractor) */
- fun pointRadius(pointRadius: String) = apply { body.pointRadius(pointRadius) }
+ /**
+ * Returns the raw JSON value of [maxItemsPerTarget].
+ *
+ * Unlike [maxItemsPerTarget], this method doesn't throw if the JSON field has an unexpected
+ * type.
+ */
+ fun _maxItemsPerTarget(): JsonField = body._maxItemsPerTarget()
- /**
- * Sets [Builder.pointRadius] to an arbitrary JSON value.
- *
- * You should usually call [Builder.pointRadius] with a well-typed [String] value instead.
- * This method is primarily for setting the field to an undocumented or not yet supported
- * value.
- */
- fun pointRadius(pointRadius: JsonField) = apply { body.pointRadius(pointRadius) }
+ /**
+ * Returns the raw JSON value of [maxLikes].
+ *
+ * Unlike [maxLikes], this method doesn't throw if the JSON field has an unexpected type.
+ */
+ fun _maxLikes(): JsonField = body._maxLikes()
- /** Quote mode used for estimation (tweet_search_extractor) */
- fun quotes(quotes: Quotes) = apply { body.quotes(quotes) }
+ /**
+ * Returns the raw JSON value of [maxPagesPerTarget].
+ *
+ * Unlike [maxPagesPerTarget], this method doesn't throw if the JSON field has an unexpected
+ * type.
+ */
+ fun _maxPagesPerTarget(): JsonField = body._maxPagesPerTarget()
- /**
- * Sets [Builder.quotes] to an arbitrary JSON value.
- *
- * You should usually call [Builder.quotes] with a well-typed [Quotes] value instead. This
- * method is primarily for setting the field to an undocumented or not yet supported value.
- */
- fun quotes(quotes: JsonField) = apply { body.quotes(quotes) }
+ /**
+ * Returns the raw JSON value of [maxPosts].
+ *
+ * Unlike [maxPosts], this method doesn't throw if the JSON field has an unexpected type.
+ */
+ fun _maxPosts(): JsonField = body._maxPosts()
- /** Estimate only quotes of this tweet ID (tweet_search_extractor) */
- fun quotesOfTweetId(quotesOfTweetId: String) = apply {
- body.quotesOfTweetId(quotesOfTweetId)
- }
+ /**
+ * Returns the raw JSON value of [maxQuotes].
+ *
+ * Unlike [maxQuotes], this method doesn't throw if the JSON field has an unexpected type.
+ */
+ fun _maxQuotes(): JsonField = body._maxQuotes()
- /**
- * Sets [Builder.quotesOfTweetId] to an arbitrary JSON value.
- *
- * You should usually call [Builder.quotesOfTweetId] with a well-typed [String] value
- * instead. This method is primarily for setting the field to an undocumented or not yet
- * supported value.
- */
- fun quotesOfTweetId(quotesOfTweetId: JsonField) = apply {
- body.quotesOfTweetId(quotesOfTweetId)
- }
+ /**
+ * Returns the raw JSON value of [maxReplies].
+ *
+ * Unlike [maxReplies], this method doesn't throw if the JSON field has an unexpected type.
+ */
+ fun _maxReplies(): JsonField = body._maxReplies()
- /** Reply mode used for estimation (tweet_search_extractor) */
- fun replies(replies: Replies) = apply { body.replies(replies) }
+ /**
+ * Returns the raw JSON value of [maxRetweets].
+ *
+ * Unlike [maxRetweets], this method doesn't throw if the JSON field has an unexpected type.
+ */
+ fun _maxRetweets(): JsonField = body._maxRetweets()
- /**
- * Sets [Builder.replies] to an arbitrary JSON value.
- *
- * You should usually call [Builder.replies] with a well-typed [Replies] value instead. This
- * method is primarily for setting the field to an undocumented or not yet supported value.
- */
- fun replies(replies: JsonField) = apply { body.replies(replies) }
+ /**
+ * Returns the raw JSON value of [mediaType].
+ *
+ * Unlike [mediaType], this method doesn't throw if the JSON field has an unexpected type.
+ */
+ fun _mediaType(): JsonField = body._mediaType()
- /**
- * Maximum number of results to estimate. When set, the estimate caps projected results to
- * this value.
- */
- fun resultsLimit(resultsLimit: Long) = apply { body.resultsLimit(resultsLimit) }
+ /**
+ * Returns the raw JSON value of [mentioning].
+ *
+ * Unlike [mentioning], this method doesn't throw if the JSON field has an unexpected type.
+ */
+ fun _mentioning(): JsonField = body._mentioning()
- /**
- * Sets [Builder.resultsLimit] to an arbitrary JSON value.
- *
- * You should usually call [Builder.resultsLimit] with a well-typed [Long] value instead.
- * This method is primarily for setting the field to an undocumented or not yet supported
- * value.
- */
- fun resultsLimit(resultsLimit: JsonField) = apply { body.resultsLimit(resultsLimit) }
+ /**
+ * Returns the raw JSON value of [minAccountAgeDays].
+ *
+ * Unlike [minAccountAgeDays], this method doesn't throw if the JSON field has an unexpected
+ * type.
+ */
+ fun _minAccountAgeDays(): JsonField