POST /2/broadcasts) creates a broadcast that is already RUNNING. With the deprecated create-then-publish routes, a broadcast starts in NOT_STARTED and moves to RUNNING when published. Either way, it ends in ENDED (or another terminal state).
Broadcast states
The only transitions you trigger directly are going live (Go Live, or
NOT_STARTED → RUNNING via the deprecated PUBLISH) and RUNNING → ENDED (via END). The remaining states are set by the platform.
Usually, a source doesn’t need to be receiving video to go live. Go Live makes the broadcast
RUNNING right away, and video appears once your encoder is sending to the source; if no video arrives within 5 minutes, the broadcast ends as TIMED_OUT. Some sources can’t take video before their encoder connects, and Go Live returns 409 for them until it does. Starting your encoder first avoids this.Eligibility
The broadcasting account must be allowed to go live on X. For accounts that aren’t, Go Live returns403 (“This account is not eligible to go live.”). On the deprecated routes, List Broadcasts returns 412 (“Listing broadcasts requires X Premium or more than 1,000 followers.”) and Create Broadcast returns 412 (“This account can’t create broadcasts.”), both with error_type: "preconditionFailed".
Broadcast object
On the
/2/broadcasts routes, the title is returned as title instead of status, the broadcast also includes share_url and source_id, and media_id isn’t returned. source_id is the source id of the broadcast’s stream source, as returned by Get Sources; request it with broadcast.fields=source_id. It is omitted when the source has been deleted. See the migration guide.
Broadcast objects no longer include
user_id, username, twitter_username, user_display_name, profile_image_url, has_location, lat, lng, friend_chat, private_chat, is_locked, has_moderation, no_hearts, camera_rotation, ping_ms, version, broadcast_source or unavailable_in_periscope. Use GET /2/users/me for the broadcaster’s profile.Errors
The/2/broadcasts routes return every error in the standard X API problem format; see each route’s page for its errors.
On the deprecated /2/users/:user_id/broadcasts* routes, invalid parameters return 400 in the standard X API problem format. Other errors return a { "error_type", "message" } body:
Endpoints
All routes require user context authentication: OAuth 2.0 with the
broadcast.read and broadcast.write scopes (recommended), or OAuth 1.0a. They take the owner from the access token, wrap responses in data, return errors in the standard X API problem format, and support field selection with broadcast.fields on reads.
To schedule a broadcast in advance, with automatic or manual publishing, see the Livestream Scheduling API.
Deprecated routes
The original broadcast routes under/2/users/:user_id/broadcasts are deprecated and will be removed on January 1, 2027, after which they return 404. They keep working unchanged until then. See the migration guide for the differences.