Get an X Space
GET /v1/x/spaces/{id}
Returns a Space (a live audio room): its title, state (NotStarted, Running, or Ended), schedule, host, speakers, and audience counts, and whether a replay is available. Listeners are included only with listeners=true. 404 when the Space does not exist. Billed per Space returned.
Price: 1 credit per call, plus 2 credits per X space returned. Failed and refused calls cost nothing.
Rate limit: Counts as 1 request against your per-minute rate limit.
MCP tool: get_x_space, on every MCP connection.
Requires an API key, sent as Authorization: Bearer <key>.
Request
curl --request GET \
--url https://api.weirapp.io/v1/x/spaces/ID \
--header "Authorization: Bearer $WEIR_API_KEY"Path parameters
| Field | Type | Required | Notes |
|---|---|---|---|
id |
string | yes | Space id: the code after /i/spaces/ in a Space's URL. · matches ^[A-Za-z0-9]{8,20}$ |
Query parameters
| Field | Type | Required | Notes |
|---|---|---|---|
listeners |
string | no | Include the listener list. Off by default: it can be long, and it names individuals who only listened. · true, false, default "false" |
Response
One X Space.
200
| Field | Type | Required | Notes |
|---|---|---|---|
data |
object | yes | |
data.id |
string | yes | |
data.url |
string | yes | https://x.com/i/spaces/{id}. |
data.state |
string or null | yes | X's lifecycle state, such as NotStarted, Running, or Ended. |
data.title |
string or null | yes | |
data.createdAt |
string or null | yes | |
data.scheduledStart |
string or null | yes | |
data.startedAt |
string or null | yes | |
data.endedAt |
string or null | yes | |
data.updatedAt |
string or null | yes | |
data.creatorId |
string or null | yes | |
data.creator |
object or null | yes | |
data.creator.id |
string | yes | |
data.creator.username |
string | yes | |
data.creator.name |
string | yes | |
data.creator.verified |
boolean | yes | |
data.creator.followersCount |
integer | yes | min 0 |
data.creator.profileImageUrl |
string or null | yes | |
data.isLocked |
boolean or null | yes | |
data.disallowJoin |
boolean or null | yes | |
data.isSpaceAvailableForReplay |
boolean or null | yes | |
data.isSpaceAvailableForClipping |
boolean or null | yes | |
data.totalLiveListeners |
integer or null | yes | min 0 |
data.totalReplayWatched |
integer or null | yes | min 0 |
data.participantCount |
integer or null | yes | min 0 |
data.participants |
object | yes | |
data.participants.admins |
array of object | yes | Hosts and co-hosts. |
data.participants.admins[].id |
string or null | yes | |
data.participants.admins[].username |
string or null | yes | |
data.participants.admins[].name |
string or null | yes | |
data.participants.admins[].profileImageUrl |
string or null | yes | |
data.participants.admins[].verified |
boolean or null | yes | |
data.participants.admins[].isMutedByAdmin |
boolean or null | yes | |
data.participants.admins[].isMutedByGuest |
boolean or null | yes | Muted their own microphone. |
data.participants.speakers |
array of object | yes | |
data.participants.speakers[].id |
string or null | yes | |
data.participants.speakers[].username |
string or null | yes | |
data.participants.speakers[].name |
string or null | yes | |
data.participants.speakers[].profileImageUrl |
string or null | yes | |
data.participants.speakers[].verified |
boolean or null | yes | |
data.participants.speakers[].isMutedByAdmin |
boolean or null | yes | |
data.participants.speakers[].isMutedByGuest |
boolean or null | yes | Muted their own microphone. |
data.participants.listeners |
array of object | yes | Empty unless listeners were requested with listeners=true. |
data.participants.listeners[].id |
string or null | yes | |
data.participants.listeners[].username |
string or null | yes | |
data.participants.listeners[].name |
string or null | yes | |
data.participants.listeners[].profileImageUrl |
string or null | yes | |
data.participants.listeners[].verified |
boolean or null | yes | |
data.participants.listeners[].isMutedByAdmin |
boolean or null | yes | |
data.participants.listeners[].isMutedByGuest |
boolean or null | yes | Muted their own microphone. |
meta |
object | yes | |
meta.requestId |
string | yes | |
meta.nextCursor |
string or null | no |
Errors
| Status | Meaning | What to do |
|---|---|---|
400 |
The request failed validation. | The request was malformed. The details object names the field. |
401 |
The API key is missing, malformed, expired, or revoked. | The key is missing, malformed, revoked, or expired. |
402 |
The account is out of credit. Not retryable: this cannot clear until the billing period resets or the plan changes. | Out of credits. Never retry. Only a person can clear it, by adding credits at https://weirapp.io/dashboard/billing. Retrying never will. |
403 |
The API key does not carry the scope this route requires. | The key is valid but lacks the scope this operation needs. |
404 |
The requested resource does not exist. | No such resource, or it is not public. |
429 |
The per-minute rate limit is exhausted. Retryable: wait for Retry-After and try again. | Rate limited. Retryable: wait for Retry-After, then try again. |
500 |
An unexpected error occurred. | Something failed on our side. Retryable with backoff. |
503 |
The source is temporarily unavailable. The request is safe to retry. | A source was unreachable. Retryable with backoff. |