Note: This endpoint uses a different base URL (
ingest.twitch.tv) than the Helix API.
GetIngestServers
Get the list of available Twitch ingest servers for RTMP streaming.
No authentication required
resp, err := client.GetIngestServers(ctx)
if err != nil {
log.Fatal(err)
}
for _, ingest := range resp.Ingests {
fmt.Printf("Server: %s (ID: %d)\n", ingest.Name, ingest.ID)
fmt.Printf(" Availability: %.2f, Default: %v, Priority: %d\n",
ingest.Availability, ingest.Default, ingest.Priority)
fmt.Printf(" URL Template: %s\n", ingest.URLTemplate)
}
Returns:
IngestServersResponse containing:
Ingests([]IngestServer): Array of ingest server objects
Each IngestServer contains:
ID(int): Unique identifier for the ingest serverAvailability(float64): Server availability metricDefault(bool): Whether this is the default serverName(string): Human-readable name of the server locationURLTemplate(string): RTMP URL template with{stream_key}placeholderPriority(int): Server priority value
Sample Response:
{
"ingests": [
{
"_id": 24,
"availability": 1.0,
"default": false,
"name": "US West: San Francisco, CA",
"url_template": "rtmp://live-sjc.twitch.tv/app/{stream_key}",
"priority": 20
},
{
"_id": 45,
"availability": 1.0,
"default": true,
"name": "US East: Ashburn, VA",
"url_template": "rtmp://live-iad05.contribute.live-video.net/app/{stream_key}",
"priority": 10
},
{
"_id": 62,
"availability": 0.98,
"default": false,
"name": "EU Central: Frankfurt, Germany",
"url_template": "rtmp://live-fra02.contribute.live-video.net/app/{stream_key}",
"priority": 30
},
{
"_id": 71,
"availability": 0.99,
"default": false,
"name": "Asia Pacific: Tokyo, Japan",
"url_template": "rtmp://live-tyo01.contribute.live-video.net/app/{stream_key}",
"priority": 40
},
{
"_id": 83,
"availability": 1.0,
"default": false,
"name": "South America: Sao Paulo, Brazil",
"url_template": "rtmp://live-gru03.contribute.live-video.net/app/{stream_key}",
"priority": 50
}
]
}
Helper Methods
GetIngestServerByName
Find a specific ingest server by its name.
resp, err := client.GetIngestServers(ctx)
if err != nil {
log.Fatal(err)
}
server := resp.GetIngestServerByName("US West: San Francisco, CA")
if server != nil {
fmt.Printf("Found server: %s\n", server.Name)
fmt.Printf("URL Template: %s\n", server.URLTemplate)
} else {
fmt.Println("Server not found")
}
Parameters:
name(string): The exact name of the ingest server to find
Returns:
*IngestServer: Pointer to the matching ingest server, ornilif not found
GetRTMPURL
Get the complete RTMP URL with a stream key inserted.
resp, err := client.GetIngestServers(ctx)
if err != nil {
log.Fatal(err)
}
// Get the first available server
if len(resp.Ingests) > 0 {
server := resp.Ingests[0]
streamKey := "your_stream_key_here"
rtmpURL := server.GetRTMPURL(streamKey)
fmt.Printf("RTMP URL: %s\n", rtmpURL)
// Example output: rtmp://live-sjc.twitch.tv/app/your_stream_key_here
}
// Or use a specific server by name
server := resp.GetIngestServerByName("US West: San Francisco, CA")
if server != nil {
rtmpURL := server.GetRTMPURL("your_stream_key_here")
fmt.Printf("RTMP URL: %s\n", rtmpURL)
}
Parameters:
streamKey(string): The broadcaster’s stream key to insert into the URL template
Returns:
string: Complete RTMP URL ready for use with streaming software