Skip to main content
GET
Twitter spaces search API: find X spaces by keyword
Requested result counts are upper bounds for paid authenticated calls. When remaining credits cannot cover the full page, Xquik returns fewer results. If zero paid results are affordable, it returns 402 insufficient_credits.
1 credit per Space returned · All plans from $0.00012/credit
The Node.js and Python snippets build 1 row per Space. Store spaceRows or space_rows with nextCursor or next_cursor before requesting the next page.

Find Spaces by keyword, host, or topic

Use GET /x/spaces/search when you know a topic or a host but not a Space ID. It returns the public Spaces that posts matching your query share. A Space can be live, scheduled, or ended. Each page reads up to pageSize posts, 20 by default, and returns each Space once, in the order the posts share them. Posts often share the same Space, so a page returns fewer Spaces. Send pageSize=100 to read a search fastest. Follow next_cursor while has_next_page is true. Each Space carries the id that Get Space takes. Store the id, since a title can change. Use state to tell a live Space from a scheduled or ended one. A Space X limits to subscribers or a community stays out of the results. An empty spaces array with has_next_page: false means X has no more Spaces for your query. It costs nothing.

Query parameters

string
required
Words, hashtags, or X search operators, such as from:solana. The search adds filter:spaces. Alias: query.
string
default:"Latest"
Latest sorts by post time. Top ranks by engagement. Any case works. Aliases: result_type, sort_order, type, search_type, product, category & section.
string
Pagination cursor from a previous response. Omit for the first page.
integer
default:"20"
Posts a page reads, 20 at a time. Range: 1-100. Posts often share the same Space, so a page returns fewer Spaces. Send 100 to read a search fastest. Aliases: limit, count, max_results, maxItems, max_items & per_page.

Headers

string
Full account key. Sessions and OAuth also work.
string
Bearer xq_your_guest_key_here for paid_reads.

Response

200 OK

object[]
Public Spaces, in the order the posts share them. Space object fields.
string
Space ID.
string
Space title.
string
NotStarted (scheduled), Running (live), Ended, Canceled (scheduled, never started) or TimedOut (closed by X, not by its host).
string
When the Space was made.
string
When the Space was set to start.
string
When the Space went live.
string
When the Space ended.
string
When X last changed the Space.
number
Accounts that listened live.
number
Accounts that played the recording.
number
Accounts in the Space now, while it is live.
boolean
Whether X offers a recording.
boolean
Whether listeners may clip the Space.
boolean
Whether the host locked the Space.
boolean
Whether only X employees may join.
boolean
Whether X lets no more accounts join.
boolean
Whether anonymous listening is off.
string
Audio or video kind, as X names it.
number
X’s code for who may speak.
number
Most hosts and co-hosts the Space allows.
string
X’s media key for the Space’s audio.
string[]
IDs of the accounts the host tagged.
string
ID of the post that announces the Space.
object
The post that announces the Space, with the fields of Get Tweet. Present only when X names the post.
object
Profile of the account that made the Space. It uses the fields of Get User.
object[]
Hosts and co-hosts. Each has id, username and name, plus profilePicture, badge fields and joinedAt when X sends them.
object[]
Accounts X lists as speakers, with the same fields as admins.
object[]
Accounts X lists as listeners, with the same fields as admins.
object[]
Posts the hosts and speakers shared in the Space, in X’s order. Present only when X lists them. Each has id, X’s ID of the sharing, plus sharedAt and updatedAt. sharedBy is the profile that shared it, with the fields of Get User. tweet is the post, with the fields of Get Tweet. X leaves out tweet when it no longer shows the post.
boolean
Whether more results are available.
string
Cursor for the next page.

400 Missing query

401 Unauthenticated

Anonymous requests get WWW-Authenticate: Bearer and a guest wallet checkout action. This is not a Payment challenge.

402 Payment required

Account keys get account options. Guest keys get guest top-up only. No checkout starts automatically. Confirm any payment action.

502 X API unavailable

The read service returned an error. Retry after a short delay.

503 Service busy

Xquik is busy, or X failed to return 1 of the page’s Spaces. The call costs nothing. Wait for Retry-After, then retry.

429 Rate limit exceeded

The Xquik tier limit blocked the request. Use Retry-After when present. Otherwise, use the JSON retryAfter field.

424 Dependency failed

The opt-in normalized contract returns 424 when the read service fails. Send xquik-api-contract: 2026-04-29 to opt in. Default v1 returns 502.

Twitter Spaces search questions

How do I search Twitter Spaces by keyword?

Call GET /x/spaces/search with your words in q. Each result is a public Space with its ID, title, state, times, and hosts.

How do I find the Spaces 1 account hosted or shared?

Send q=from:username. The search returns the Spaces that account’s posts share.

How much does a Space search cost?

Each returned Space costs 1 credit. An empty page costs nothing.

Does Space search return live Spaces only?

No. It returns live, scheduled, and ended Spaces. Read state to tell them apart.

Why does a page hold fewer Spaces than pageSize?

A page reads up to pageSize posts and returns each Space once. Several posts can share 1 Space, and limited Spaces stay out.

Does this replace X’s official API?

No. This page documents Xquik, an independent third-party service. It does not document X’s official API.
Next steps. Pass a Space id to Get Space to read that Space again, such as when it goes live or ends. For a live video, use Get broadcast.