Authenticate with OAuth 2.0 using a scope that includes youtube or youtube.force-ssl for the channel owner.
Call liveBroadcasts.insert to create a broadcast resource, specifying snippet (title, scheduledStartTime) and status (privacyStatus) parts.
Call liveStreams.insert to create a stream resource with the desired cdn settings (ingestionType, resolution, frameRate), which returns an ingestion address and stream name/key.
Bind the broadcast and stream together by calling liveBroadcasts.bind with the broadcast id and the stream id as parameters.
Configure your encoder (e.g., OBS) with the RTMP ingestion URL and stream key returned from the liveStreams resource.
Transition the broadcast through its lifecycle using liveBroadcasts.transition: first to 'testing', then to 'live' once the stream is healthy.
Known gotchas
A broadcast must be bound to a stream before it can be transitioned; attempting to go live without binding returns an error.
The stream health status (liveStreams.list, status.streamStatus) must show 'active' before transitioning the broadcast to 'live'.
Each liveBroadcasts.insert and liveBroadcasts.bind call consumes quota; account for this in your daily budget.
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp