Skip to main content
This route is deprecated and will be removed on January 1, 2027, after which it returns 404. Use Go Live (POST /2/broadcasts) instead, which creates and publishes a broadcast in one call and takes the source id rather than the stream key. See the migration guide.
Creates a new broadcast bound to an existing source. Starts in NOT_STARTED. Endpoint: POST /2/users/:user_id/broadcasts The source doesn’t need to be receiving video yet. If the source already has a running broadcast, that broadcast is returned instead of a new one. A broadcast that is never published is deleted after 7 days. See the broadcast lifecycle overview.

Request body

Example request

Success response

Key fields returned at creation

  • id: The broadcast ID. IDs are 13 or 14 characters; don’t assume a fixed length.
  • media_key / media_id: Required later for chat access.
  • share_url: Public viewer link (https://x.com/i/broadcasts/{id}).
  • state: Always starts "NOT_STARTED".
  • video_access: Always an empty object. Playback URLs aren’t returned; share share_url with viewers.
  • twitter_user_id: Your numeric X user ID (as a string). Use it for the :user_id path parameter in every endpoint.
A source_id that doesn’t exist, or belongs to another user, returns 404 ("Could not find source."). Then start pushing video to the source’s rtmps_url with its rtmp_stream_key, if you haven’t already, and publish.