Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .release-please-manifest.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
".": "0.2.0"
".": "0.3.0"
}
6 changes: 3 additions & 3 deletions .stats.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
configured_endpoints: 115
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/xquik%2Fx-twitter-scraper-3b2c6c771ad1da0bbfeb0af115972929ed2c7fcd5e47a79556d66cd21431b224.yml
openapi_spec_hash: de2890233b68387bf5f9b6d19e7d87dc
configured_endpoints: 102
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/xquik%2Fx-twitter-scraper-ec9b23603f987503f8837da5992b5db4c59a2bc627b090557539791a2b2b64a5.yml
openapi_spec_hash: faf6a6deaadba884a07e970fd05ac570
config_hash: 8894c96caeb6df84c9394518810221bd
12 changes: 12 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,17 @@
# Changelog

## 0.3.0 (2026-04-08)

Full Changelog: [v0.2.0...v0.3.0](https://github.com/Xquik-dev/x-twitter-scraper-java/compare/v0.2.0...v0.3.0)

### Features

* **api:** api update ([85f6788](https://github.com/Xquik-dev/x-twitter-scraper-java/commit/85f67881300bb5cdb912fe7c59edcd0af640a14f))
* **api:** api update ([d4be9ff](https://github.com/Xquik-dev/x-twitter-scraper-java/commit/d4be9ff16190320b7cdaffae495057ee2ceda50c))
* **api:** api update ([f8f5138](https://github.com/Xquik-dev/x-twitter-scraper-java/commit/f8f51380d7cb3d07a0be410e69492edf9fba07cc))
* **api:** api update ([be5b4f9](https://github.com/Xquik-dev/x-twitter-scraper-java/commit/be5b4f9f89ea2e7606d57cb7f0ea809c17c4096f))
* **api:** api update ([a4e0acd](https://github.com/Xquik-dev/x-twitter-scraper-java/commit/a4e0acdd9e95507a2d69d05b50c5b8c114c7cd0b))

## 0.2.0 (2026-04-01)

Full Changelog: [v0.1.0...v0.2.0](https://github.com/Xquik-dev/x-twitter-scraper-java/compare/v0.1.0...v0.2.0)
Expand Down
18 changes: 9 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@

<!-- x-release-please-start-version -->

[![Maven Central](https://img.shields.io/maven-central/v/com.x_twitter_scraper.api/x-twitter-scraper-java)](https://central.sonatype.com/artifact/com.x_twitter_scraper.api/x-twitter-scraper-java/0.2.0)
[![javadoc](https://javadoc.io/badge2/com.x_twitter_scraper.api/x-twitter-scraper-java/0.2.0/javadoc.svg)](https://javadoc.io/doc/com.x_twitter_scraper.api/x-twitter-scraper-java/0.2.0)
[![Maven Central](https://img.shields.io/maven-central/v/com.x_twitter_scraper.api/x-twitter-scraper-java)](https://central.sonatype.com/artifact/com.x_twitter_scraper.api/x-twitter-scraper-java/0.3.0)
[![javadoc](https://javadoc.io/badge2/com.x_twitter_scraper.api/x-twitter-scraper-java/0.3.0/javadoc.svg)](https://javadoc.io/doc/com.x_twitter_scraper.api/x-twitter-scraper-java/0.3.0)

<!-- x-release-please-end -->

Expand All @@ -15,7 +15,7 @@ It is generated with [Stainless](https://www.stainless.com/).

<!-- x-release-please-start-version -->

The REST API documentation can be found on [xquik.com](https://xquik.com). Javadocs are available on [javadoc.io](https://javadoc.io/doc/com.x_twitter_scraper.api/x-twitter-scraper-java/0.2.0).
The REST API documentation can be found on [xquik.com](https://xquik.com). Javadocs are available on [javadoc.io](https://javadoc.io/doc/com.x_twitter_scraper.api/x-twitter-scraper-java/0.3.0).

<!-- x-release-please-end -->

Expand All @@ -26,7 +26,7 @@ The REST API documentation can be found on [xquik.com](https://xquik.com). Javad
### Gradle

```kotlin
implementation("com.x_twitter_scraper.api:x-twitter-scraper-java:0.2.0")
implementation("com.x_twitter_scraper.api:x-twitter-scraper-java:0.3.0")
```

### Maven
Expand All @@ -35,7 +35,7 @@ implementation("com.x_twitter_scraper.api:x-twitter-scraper-java:0.2.0")
<dependency>
<groupId>com.x_twitter_scraper.api</groupId>
<artifactId>x-twitter-scraper-java</artifactId>
<version>0.2.0</version>
<version>0.3.0</version>
</dependency>
```

Expand Down Expand Up @@ -202,7 +202,7 @@ import com.x_twitter_scraper.api.models.x.media.MediaUploadResponse;
import java.nio.file.Paths;

MediaUploadParams params = MediaUploadParams.builder()
.account("account")
.account("@elonmusk")
.file(Paths.get("/path/to/file"))
.build();
MediaUploadResponse response = client.x().media().upload(params);
Expand All @@ -216,7 +216,7 @@ import com.x_twitter_scraper.api.models.x.media.MediaUploadResponse;
import java.net.URL;

MediaUploadParams params = MediaUploadParams.builder()
.account("account")
.account("@elonmusk")
.file(new URL("https://example.com//path/to/file").openStream())
.build();
MediaUploadResponse response = client.x().media().upload(params);
Expand All @@ -229,7 +229,7 @@ import com.x_twitter_scraper.api.models.x.media.MediaUploadParams;
import com.x_twitter_scraper.api.models.x.media.MediaUploadResponse;

MediaUploadParams params = MediaUploadParams.builder()
.account("account")
.account("@elonmusk")
.file("content".getBytes())
.build();
MediaUploadResponse response = client.x().media().upload(params);
Expand All @@ -245,7 +245,7 @@ import java.io.InputStream;
import java.net.URL;

MediaUploadParams params = MediaUploadParams.builder()
.account("account")
.account("@elonmusk")
.file(MultipartField.<InputStream>builder()
.value(new URL("https://example.com//path/to/file").openStream())
.filename("/path/to/file")
Expand Down
2 changes: 1 addition & 1 deletion build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ repositories {

allprojects {
group = "com.x_twitter_scraper.api"
version = "0.2.0" // x-release-please-version
version = "0.3.0" // x-release-please-version
}

subprojects {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ configure<MavenPublishBaseExtension> {

pom {
name.set("Xquik API")
description.set("X real-time data platform — extractions, giveaway draws, monitoring, webhooks.")
description.set("Xquik is an all-in-one X (Twitter) automation API with 40+ endpoints for\nreading, writing, and monitoring X data. **Read endpoints** let you look up\ntweets, search tweets, fetch user profiles, list followers & following, browse\ntimelines, bookmarks, notifications, communities, lists, trending topics, and\ndownload media. **Write endpoints** let you post tweets, reply, like, unlike,\nretweet, unretweet, follow, unfollow, send DMs, upload media, update profiles,\nand manage communities. **Automation endpoints** power bulk data extractions (20\ntool types), giveaway draws from tweet replies, real-time account monitoring\nwith webhooks & Telegram integrations, tweet composition with AI, and writing\nstyle analysis. Authenticate with an API key or OAuth 2.1 bearer token.\nPay-per-use endpoints are also available without an account.")
url.set("https://xquik.com")

licenses {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import java.util.Collections
import java.util.Objects
import kotlin.jvm.optionals.getOrNull

/** Error response containing a machine-readable error code. */
class Error
@JsonCreator(mode = JsonCreator.Mode.DISABLED)
private constructor(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import com.x_twitter_scraper.api.core.Enum
import com.x_twitter_scraper.api.core.JsonField
import com.x_twitter_scraper.api.errors.XTwitterScraperInvalidDataException

/** Type of monitor event fired when account activity occurs. */
class EventType @JsonCreator private constructor(private val value: JsonField<String>) : Enum {

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import java.util.Objects
import java.util.Optional
import kotlin.jvm.optionals.getOrNull

/** Paginated list of tweets with cursor-based navigation. */
class PaginatedTweets
@JsonCreator(mode = JsonCreator.Mode.DISABLED)
private constructor(
Expand Down Expand Up @@ -244,6 +245,7 @@ private constructor(
(if (nextCursor.asKnown().isPresent) 1 else 0) +
(tweets.asKnown().getOrNull()?.sumOf { it.validity().toInt() } ?: 0)

/** Tweet returned from search results with inline author info. */
class Tweet
@JsonCreator(mode = JsonCreator.Mode.DISABLED)
private constructor(
Expand All @@ -252,6 +254,7 @@ private constructor(
private val author: JsonField<Author>,
private val bookmarkCount: JsonField<Long>,
private val createdAt: JsonField<String>,
private val isNoteTweet: JsonField<Boolean>,
private val likeCount: JsonField<Long>,
private val quoteCount: JsonField<Long>,
private val replyCount: JsonField<Long>,
Expand All @@ -271,6 +274,9 @@ private constructor(
@JsonProperty("createdAt")
@ExcludeMissing
createdAt: JsonField<String> = JsonMissing.of(),
@JsonProperty("isNoteTweet")
@ExcludeMissing
isNoteTweet: JsonField<Boolean> = JsonMissing.of(),
@JsonProperty("likeCount")
@ExcludeMissing
likeCount: JsonField<Long> = JsonMissing.of(),
Expand All @@ -290,6 +296,7 @@ private constructor(
author,
bookmarkCount,
createdAt,
isNoteTweet,
likeCount,
quoteCount,
replyCount,
Expand Down Expand Up @@ -330,6 +337,14 @@ private constructor(
*/
fun createdAt(): Optional<String> = createdAt.getOptional("createdAt")

/**
* True for Note Tweets (long-form content, up to 25,000 characters)
*
* @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type
* (e.g. if the server responded with an unexpected value).
*/
fun isNoteTweet(): Optional<Boolean> = isNoteTweet.getOptional("isNoteTweet")

/**
* @throws XTwitterScraperInvalidDataException if the JSON field has an unexpected type
* (e.g. if the server responded with an unexpected value).
Expand Down Expand Up @@ -398,6 +413,15 @@ private constructor(
*/
@JsonProperty("createdAt") @ExcludeMissing fun _createdAt(): JsonField<String> = createdAt

/**
* Returns the raw JSON value of [isNoteTweet].
*
* Unlike [isNoteTweet], this method doesn't throw if the JSON field has an unexpected type.
*/
@JsonProperty("isNoteTweet")
@ExcludeMissing
fun _isNoteTweet(): JsonField<Boolean> = isNoteTweet

/**
* Returns the raw JSON value of [likeCount].
*
Expand Down Expand Up @@ -470,6 +494,7 @@ private constructor(
private var author: JsonField<Author> = JsonMissing.of()
private var bookmarkCount: JsonField<Long> = JsonMissing.of()
private var createdAt: JsonField<String> = JsonMissing.of()
private var isNoteTweet: JsonField<Boolean> = JsonMissing.of()
private var likeCount: JsonField<Long> = JsonMissing.of()
private var quoteCount: JsonField<Long> = JsonMissing.of()
private var replyCount: JsonField<Long> = JsonMissing.of()
Expand All @@ -484,6 +509,7 @@ private constructor(
author = tweet.author
bookmarkCount = tweet.bookmarkCount
createdAt = tweet.createdAt
isNoteTweet = tweet.isNoteTweet
likeCount = tweet.likeCount
quoteCount = tweet.quoteCount
replyCount = tweet.replyCount
Expand Down Expand Up @@ -549,6 +575,20 @@ private constructor(
*/
fun createdAt(createdAt: JsonField<String>) = apply { this.createdAt = createdAt }

/** True for Note Tweets (long-form content, up to 25,000 characters) */
fun isNoteTweet(isNoteTweet: Boolean) = isNoteTweet(JsonField.of(isNoteTweet))

/**
* Sets [Builder.isNoteTweet] to an arbitrary JSON value.
*
* You should usually call [Builder.isNoteTweet] with a well-typed [Boolean] value
* instead. This method is primarily for setting the field to an undocumented or not yet
* supported value.
*/
fun isNoteTweet(isNoteTweet: JsonField<Boolean>) = apply {
this.isNoteTweet = isNoteTweet
}

fun likeCount(likeCount: Long) = likeCount(JsonField.of(likeCount))

/**
Expand Down Expand Up @@ -645,6 +685,7 @@ private constructor(
author,
bookmarkCount,
createdAt,
isNoteTweet,
likeCount,
quoteCount,
replyCount,
Expand All @@ -666,6 +707,7 @@ private constructor(
author().ifPresent { it.validate() }
bookmarkCount()
createdAt()
isNoteTweet()
likeCount()
quoteCount()
replyCount()
Expand Down Expand Up @@ -695,6 +737,7 @@ private constructor(
(author.asKnown().getOrNull()?.validity() ?: 0) +
(if (bookmarkCount.asKnown().isPresent) 1 else 0) +
(if (createdAt.asKnown().isPresent) 1 else 0) +
(if (isNoteTweet.asKnown().isPresent) 1 else 0) +
(if (likeCount.asKnown().isPresent) 1 else 0) +
(if (quoteCount.asKnown().isPresent) 1 else 0) +
(if (replyCount.asKnown().isPresent) 1 else 0) +
Expand Down Expand Up @@ -984,6 +1027,7 @@ private constructor(
author == other.author &&
bookmarkCount == other.bookmarkCount &&
createdAt == other.createdAt &&
isNoteTweet == other.isNoteTweet &&
likeCount == other.likeCount &&
quoteCount == other.quoteCount &&
replyCount == other.replyCount &&
Expand All @@ -999,6 +1043,7 @@ private constructor(
author,
bookmarkCount,
createdAt,
isNoteTweet,
likeCount,
quoteCount,
replyCount,
Expand All @@ -1011,7 +1056,7 @@ private constructor(
override fun hashCode(): Int = hashCode

override fun toString() =
"Tweet{id=$id, text=$text, author=$author, bookmarkCount=$bookmarkCount, createdAt=$createdAt, likeCount=$likeCount, quoteCount=$quoteCount, replyCount=$replyCount, retweetCount=$retweetCount, viewCount=$viewCount, additionalProperties=$additionalProperties}"
"Tweet{id=$id, text=$text, author=$author, bookmarkCount=$bookmarkCount, createdAt=$createdAt, isNoteTweet=$isNoteTweet, likeCount=$likeCount, quoteCount=$quoteCount, replyCount=$replyCount, retweetCount=$retweetCount, viewCount=$viewCount, additionalProperties=$additionalProperties}"
}

override fun equals(other: Any?): Boolean {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import java.util.Objects
import java.util.Optional
import kotlin.jvm.optionals.getOrNull

/** Paginated list of user profiles with cursor-based navigation. */
class PaginatedUsers
@JsonCreator(mode = JsonCreator.Mode.DISABLED)
private constructor(
Expand Down Expand Up @@ -242,6 +243,7 @@ private constructor(
(if (nextCursor.asKnown().isPresent) 1 else 0) +
(users.asKnown().getOrNull()?.sumOf { it.validity().toInt() } ?: 0)

/** X user profile with bio, follower counts, and verification status. */
class User
@JsonCreator(mode = JsonCreator.Mode.DISABLED)
private constructor(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import java.util.Collections
import java.util.Objects
import java.util.Optional

/** API key metadata returned when listing keys. */
class ApiKey
@JsonCreator(mode = JsonCreator.Mode.DISABLED)
private constructor(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -167,6 +167,7 @@ private constructor(
internal fun validity(): Int =
(keys.asKnown().getOrNull()?.sumOf { it.validity().toInt() } ?: 0)

/** API key metadata returned when listing keys. */
class Key
@JsonCreator(mode = JsonCreator.Mode.DISABLED)
private constructor(
Expand Down
Loading
Loading