Get Authorization By User
Gets the authorization scopes that the specified user(s) have granted the application.
Endpoint
GEThttps://api.twitch.tv/helix/authorization/users
Authorization
Requires one of the following:
- An app access token.
Query Parameters
user_idStringRequiredThe ID of the user(s) you want to check authorization for. To specify more than one user, include the user_id parameter for each user to get. For example, 'user_id=1234&user_id=5678'. The maximum number of IDs you may specify is 10.
Response Body
dataObject[]List of users and their authorized scopes. The list is in the same order as the user_id query parameters and doesn't include IDs that don't match a user.Hide child attributesShow child attributes
data.user_idStringThe user's ID.data.user_nameStringThe user's display name.data.user_loginStringThe user's login name.data.scopesString[]An array of all the scopes the user has granted to the client ID.data.has_authorizedBooleanA boolean indicating whether or not the specified user has authorized this application.
Response Codes
- 200OK
- Successfully retrieved user authorization.
- 400Bad Request
- Request is malformed - invalid parameters or missing parameters.
- 401Unauthorized
- The access token is not valid.
- Authorization header is required and must specify an app access token.
- The ID specified in the Client-Id header does not match the client ID specified in the access token.
- 500Internal Error
- Internal Server Error.
curl -X GET 'https://api.twitch.tv/helix/authorization/users?user_id=197886470' \
-H 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
-H 'Client-Id: YOUR_CLIENT_ID'$headers = @{
"Authorization" = "Bearer YOUR_ACCESS_TOKEN"
"Client-Id" = "YOUR_CLIENT_ID"
}
$response = Invoke-RestMethod -Uri "https://api.twitch.tv/helix/authorization/users?user_id=197886470" `
-Method Get -Headers $headersconst response = await fetch("https://api.twitch.tv/helix/authorization/users?user_id=197886470", {
method: "GET",
headers: {
"Authorization": "Bearer YOUR_ACCESS_TOKEN",
"Client-Id": "YOUR_CLIENT_ID",
},
});
const data = await response.json();import requests
response = requests.get(
"https://api.twitch.tv/helix/authorization/users",
headers={
"Authorization": "Bearer YOUR_ACCESS_TOKEN",
"Client-Id": "YOUR_CLIENT_ID",
},
params={
"user_id": "197886470",
},
)
data = response.json()req, _ := http.NewRequest("GET", "https://api.twitch.tv/helix/authorization/users?user_id=197886470", nil)
req.Header.Set("Authorization", "Bearer YOUR_ACCESS_TOKEN")
req.Header.Set("Client-Id", "YOUR_CLIENT_ID")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
data, _ := io.ReadAll(res.Body)$ch = curl_init("https://api.twitch.tv/helix/authorization/users?user_id=197886470");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer YOUR_ACCESS_TOKEN",
"Client-Id: YOUR_CLIENT_ID",
]);
$response = curl_exec($ch);
curl_close($ch);using var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Get, "https://api.twitch.tv/helix/authorization/users?user_id=197886470");
request.Headers.Add("Authorization", "Bearer YOUR_ACCESS_TOKEN");
request.Headers.Add("Client-Id", "YOUR_CLIENT_ID");
var response = await client.SendAsync(request);
var data = await response.Content.ReadAsStringAsync();let client = reqwest::Client::new();
let response = client
.get("https://api.twitch.tv/helix/authorization/users?user_id=197886470")
.header("Authorization", "Bearer YOUR_ACCESS_TOKEN")
.header("Client-Id", "YOUR_CLIENT_ID")
.send()
.await?;
let data = response.text().await?;{
"data": [
{
"user_id": "197886470",
"user_name": "TwitchRivals",
"user_login": "twitchrivals",
"scopes": [],
"has_authorized": false
}
]
}Get Users
Gets information about one or more users.
You may look up users using their user ID, login name, or both but the sum total of the number of users you may look up is 100. For example, you may specify 50 IDs and 50 names or 100 IDs or names, but you cannot specify 100 IDs and 100 names.<br><br>
If you don't specify IDs or login names, the request returns information about the user in the access token if you specify a user access token.<br><br>
To include the user's verified email address in the response, you must use a user access token that includes the user:read:email scope.
Endpoint
GEThttps://api.twitch.tv/helix/users
Authorization
Requires one of the following:
Query Parameters
idStringThe ID of the user to get. To specify more than one user, include the id parameter for each user to get. For example, 'id=1234&id=5678'. The maximum number of IDs you may specify is 100.loginStringThe login name of the user to get. To specify more than one user, include the login parameter for each user to get. For example, 'login=foo&login=bar'. The maximum number of login names you may specify is 100.
Response Body
dataObject[]The list of users. The list doesn't include deleted or suspended accounts.Hide child attributesShow child attributes
data.idStringAn ID that identifies the user.data.loginStringThe user's login name.data.display_nameStringThe user's display name.data.typeStringThe type of user.Possible values
adminTwitch administratorglobal_modstaffTwitch staff(empty string value provided in field)Normal user
data.broadcaster_typeStringThe type of broadcaster.Possible values
affiliatepartner(empty string value provided in field)A normal broadcaster
data.descriptionStringThe user's description of their channel.data.profile_image_urlStringA URL to the user's profile image.data.offline_image_urlStringA URL to the user's offline image.data.view_countIntegerThe number of times the user's channel has been viewed. NOTE: This field has been deprecated (see Get Users API endpoint – "view_count" deprecation). Any data in this field is not valid and should not be used.data.emailStringThe user's verified email address. The object includes this field only for the user in the user access token, and only if the token includes the user:read:email scope and the user has verified their email address.data.created_atStringThe UTC date and time that the user's account was created. The timestamp is in RFC3339 format.
Response Codes
- 200OK
- Successfully retrieved the specified users' information.
- 400Bad Request
- The id or login query parameter is required unless the request uses a user access token.
- The request exceeded the maximum allowed number of id and/or login query parameters.
- An id or login value is malformed, for example, an ID that contains characters other than digits. One malformed value fails the whole request.
- 401Unauthorized
- The Authorization header is required and must contain an app access token or user access token.
- The access token is not valid.
- The ID specified in the Client-Id header does not match the client ID specified in the access token.
curl -X GET 'https://api.twitch.tv/helix/users?id=141981764' \
-H 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
-H 'Client-Id: YOUR_CLIENT_ID'$headers = @{
"Authorization" = "Bearer YOUR_ACCESS_TOKEN"
"Client-Id" = "YOUR_CLIENT_ID"
}
$response = Invoke-RestMethod -Uri "https://api.twitch.tv/helix/users?id=141981764" `
-Method Get -Headers $headersconst response = await fetch("https://api.twitch.tv/helix/users?id=141981764", {
method: "GET",
headers: {
"Authorization": "Bearer YOUR_ACCESS_TOKEN",
"Client-Id": "YOUR_CLIENT_ID",
},
});
const data = await response.json();import requests
response = requests.get(
"https://api.twitch.tv/helix/users",
headers={
"Authorization": "Bearer YOUR_ACCESS_TOKEN",
"Client-Id": "YOUR_CLIENT_ID",
},
params={
"id": "141981764",
},
)
data = response.json()req, _ := http.NewRequest("GET", "https://api.twitch.tv/helix/users?id=141981764", nil)
req.Header.Set("Authorization", "Bearer YOUR_ACCESS_TOKEN")
req.Header.Set("Client-Id", "YOUR_CLIENT_ID")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
data, _ := io.ReadAll(res.Body)$ch = curl_init("https://api.twitch.tv/helix/users?id=141981764");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer YOUR_ACCESS_TOKEN",
"Client-Id: YOUR_CLIENT_ID",
]);
$response = curl_exec($ch);
curl_close($ch);using var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Get, "https://api.twitch.tv/helix/users?id=141981764");
request.Headers.Add("Authorization", "Bearer YOUR_ACCESS_TOKEN");
request.Headers.Add("Client-Id", "YOUR_CLIENT_ID");
var response = await client.SendAsync(request);
var data = await response.Content.ReadAsStringAsync();let client = reqwest::Client::new();
let response = client
.get("https://api.twitch.tv/helix/users?id=141981764")
.header("Authorization", "Bearer YOUR_ACCESS_TOKEN")
.header("Client-Id", "YOUR_CLIENT_ID")
.send()
.await?;
let data = response.text().await?;{
"data": [
{
"id": "141981764",
"login": "twitchdev",
"display_name": "TwitchDev",
"type": "",
"broadcaster_type": "partner",
"description": "Supporting third-party developers building Twitch integrations from chatbots to game\nintegrations.",
"profile_image_url": "https://static-cdn.jtvnw.net/jtv_user_pictures/8a6381c7-d0c0-4576-b179-38bd5ce1d6af-profile_image-300x300.png",
"offline_image_url": "https://static-cdn.jtvnw.net/jtv_user_pictures/3f13ab61-ec78-4fe6-8481-8682cb3b0ac2-channel_offline_image-1920x1080.png",
"view_count": 0,
"email": "not-real@email.com",
"created_at": "2016-12-14T20:32:28Z"
}
]
}Update User
Updates the specified user's information. The user ID in the OAuth token identifies the user whose information you want to update.
To include the user's verified email address in the response, the user access token must also include the user:read:email scope.
Endpoint
PUThttps://api.twitch.tv/helix/users
Authorization
Requires one of the following:
- A user access token that includes the user:edit scope.
Query Parameters
descriptionStringThe string to update the channel's description to. The description is limited to a maximum of 300 characters. Before it checks the length and saves the description, the API removes line breaks and replaces each
<and>with<and>.To remove the description, specify this parameter but don't set it's value (for example, '?description=').
Response Body
dataObject[]A list contains the single user that you updated.Hide child attributesShow child attributes
data.idStringAn ID that identifies the user.data.loginStringThe user's login name.data.display_nameStringThe user's display name.data.typeStringThe type of user.Possible values
adminTwitch administratorglobal_modstaffTwitch staff(empty string value provided in field)Normal user
data.broadcaster_typeStringThe type of broadcaster.Possible values
affiliatepartner(empty string value provided in field)A normal broadcaster
data.descriptionStringThe user's description of their channel.data.profile_image_urlStringA URL to the user's profile image.data.offline_image_urlStringA URL to the user's offline image.data.view_countIntegerThe number of times the user's channel has been viewed.
NOTE: This field has been deprecated (see Get Users API endpoint – "view_count" deprecation). Any data in this field is not valid and should not be used.
data.emailStringThe user's verified email address. The object includes this field only if the user access token includes the user:read:email scope.
If the request contains more than one user, only the user associated with the access token that provided consent will include an email address — the email address for all other users will be empty.
data.created_atStringThe UTC date and time that the user's account was created. The timestamp is in RFC3339 format.
Response Codes
- 200OK
- Successfully updated the specified user's information.
- 400Bad Request
- The string in the description query parameter is too long.
- The text in the description query parameter doesn't meet Twitch's moderation standards.
- 401Unauthorized
- The Authorization header is required and must contain a user access token.
- The user access token must include the user:edit scope.
- The access token is not valid.
- The ID specified in the Client-Id header does not match the client ID specified in the access token.
- 429Too Many Requests
- The app exceeded the number of requests that it may make.
curl -X PUT 'https://api.twitch.tv/helix/users?description=BaldAngel' \
-H 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
-H 'Client-Id: YOUR_CLIENT_ID'$headers = @{
"Authorization" = "Bearer YOUR_ACCESS_TOKEN"
"Client-Id" = "YOUR_CLIENT_ID"
}
$response = Invoke-RestMethod -Uri "https://api.twitch.tv/helix/users?description=BaldAngel" `
-Method Put -Headers $headersconst response = await fetch("https://api.twitch.tv/helix/users?description=BaldAngel", {
method: "PUT",
headers: {
"Authorization": "Bearer YOUR_ACCESS_TOKEN",
"Client-Id": "YOUR_CLIENT_ID",
},
});
const data = await response.json();import requests
response = requests.put(
"https://api.twitch.tv/helix/users",
headers={
"Authorization": "Bearer YOUR_ACCESS_TOKEN",
"Client-Id": "YOUR_CLIENT_ID",
},
params={
"description": "BaldAngel",
},
)
data = response.json()req, _ := http.NewRequest("PUT", "https://api.twitch.tv/helix/users?description=BaldAngel", nil)
req.Header.Set("Authorization", "Bearer YOUR_ACCESS_TOKEN")
req.Header.Set("Client-Id", "YOUR_CLIENT_ID")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
data, _ := io.ReadAll(res.Body)$ch = curl_init("https://api.twitch.tv/helix/users?description=BaldAngel");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer YOUR_ACCESS_TOKEN",
"Client-Id: YOUR_CLIENT_ID",
]);
$response = curl_exec($ch);
curl_close($ch);using var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Put, "https://api.twitch.tv/helix/users?description=BaldAngel");
request.Headers.Add("Authorization", "Bearer YOUR_ACCESS_TOKEN");
request.Headers.Add("Client-Id", "YOUR_CLIENT_ID");
var response = await client.SendAsync(request);
var data = await response.Content.ReadAsStringAsync();let client = reqwest::Client::new();
let response = client
.put("https://api.twitch.tv/helix/users?description=BaldAngel")
.header("Authorization", "Bearer YOUR_ACCESS_TOKEN")
.header("Client-Id", "YOUR_CLIENT_ID")
.send()
.await?;
let data = response.text().await?;{
"data": [
{
"id": "44322889",
"login": "dallas",
"display_name": "dallas",
"type": "staff",
"broadcaster_type": "affiliate",
"description": "BaldAngel",
"profile_image_url": "https://static-cdn.jtvnw.net/jtv_user_pictures/4d1f36cbf1f0072d-profile_image-300x300.png",
"offline_image_url": "https://static-cdn.jtvnw.net/jtv_user_pictures/dallas-channel_offline_image-2e82c1df2a464df7-1920x1080.jpeg",
"view_count": 0,
"email": "not-real@email.com",
"created_at": "2013-06-03T19:12:02Z"
}
]
}Get User Block List
Gets the list of users that the broadcaster has blocked. Read More
Endpoint
GEThttps://api.twitch.tv/helix/users/blocks
Authorization
Requires one of the following:
- A user access token that includes the user:read:blocked_users or user:manage:blocked_users scope.
Query Parameters
broadcaster_idStringRequiredThe ID of the broadcaster whose list of blocked users you want to get.user_idStringA list of user IDs used to filter the results. To specify more than one ID, include this parameter for each user you want to check. For example, 'user_id=1234&user_id=5678'. You may specify a maximum of 100 IDs.
The returned list includes only those users that the broadcaster has blocked. If you specify this parameter, the first and after query parameters are ignored, the response's pagination object is empty, and the list is in no particular order.
firstIntegerThe maximum number of items to return per page in the response. The minimum page size is 1 item per page and the maximum is 100. The default is 20.afterStringThe cursor used to get the next page of results. The Pagination object in the response contains the cursor's value. Read More
Response Body
dataObject[]The list of blocked users. If the request doesn't specify user_id, the list is in descending order by when the user was blocked.Hide child attributesShow child attributes
data.user_idStringAn ID that identifies the blocked user.data.user_loginStringThe blocked user's login name.data.display_nameStringThe blocked user's display name.
paginationObjectContains the information used to page through the list of results. The object is empty if there are no more pages left to page through. Read More.Hide child attributesShow child attributes
pagination.cursorStringThe cursor used to get the next page of results. Use the cursor to set the request's after query parameter.
Response Codes
- 200OK
- Successfully retrieved the broadcaster's list of blocked users.
- 400Bad Request
- The broadcaster_id query parameter is required.
- The request exceeds the maximum number of user_id query parameters that you may specify.
- The cursor specified in the after query parameter is not valid.
- 401Unauthorized
- The ID in broadcaster_id must match the user ID found in the request's access token.
- The Authorization header is required and must contain a user access token.
- The user access token must include the user:read:blocked_users or user:manage:blocked_users scope.
- The access token is not valid.
- The ID specified in the Client-Id header does not match the client ID specified in the access token.
curl -X GET 'https://api.twitch.tv/helix/users/blocks?broadcaster_id=141981764' \
-H 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
-H 'Client-Id: YOUR_CLIENT_ID'$headers = @{
"Authorization" = "Bearer YOUR_ACCESS_TOKEN"
"Client-Id" = "YOUR_CLIENT_ID"
}
$response = Invoke-RestMethod -Uri "https://api.twitch.tv/helix/users/blocks?broadcaster_id=141981764" `
-Method Get -Headers $headersconst response = await fetch("https://api.twitch.tv/helix/users/blocks?broadcaster_id=141981764", {
method: "GET",
headers: {
"Authorization": "Bearer YOUR_ACCESS_TOKEN",
"Client-Id": "YOUR_CLIENT_ID",
},
});
const data = await response.json();import requests
response = requests.get(
"https://api.twitch.tv/helix/users/blocks",
headers={
"Authorization": "Bearer YOUR_ACCESS_TOKEN",
"Client-Id": "YOUR_CLIENT_ID",
},
params={
"broadcaster_id": "141981764",
},
)
data = response.json()req, _ := http.NewRequest("GET", "https://api.twitch.tv/helix/users/blocks?broadcaster_id=141981764", nil)
req.Header.Set("Authorization", "Bearer YOUR_ACCESS_TOKEN")
req.Header.Set("Client-Id", "YOUR_CLIENT_ID")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
data, _ := io.ReadAll(res.Body)$ch = curl_init("https://api.twitch.tv/helix/users/blocks?broadcaster_id=141981764");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer YOUR_ACCESS_TOKEN",
"Client-Id: YOUR_CLIENT_ID",
]);
$response = curl_exec($ch);
curl_close($ch);using var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Get, "https://api.twitch.tv/helix/users/blocks?broadcaster_id=141981764");
request.Headers.Add("Authorization", "Bearer YOUR_ACCESS_TOKEN");
request.Headers.Add("Client-Id", "YOUR_CLIENT_ID");
var response = await client.SendAsync(request);
var data = await response.Content.ReadAsStringAsync();let client = reqwest::Client::new();
let response = client
.get("https://api.twitch.tv/helix/users/blocks?broadcaster_id=141981764")
.header("Authorization", "Bearer YOUR_ACCESS_TOKEN")
.header("Client-Id", "YOUR_CLIENT_ID")
.send()
.await?;
let data = response.text().await?;{
"data": [
{
"user_id": "135093069",
"user_login": "bluelava",
"display_name": "BlueLava"
},
{
"user_id": "27419011",
"user_login": "travistyoj",
"display_name": "TravistyOJ"
}
],
"pagination": {
"cursor": "eyJiIjpudWxsLCJhIjp7Ik9mZnNldCI6NX19"
}
}Block User
Blocks the specified user from interacting with or having contact with the broadcaster. The User ID in the OAuth token identifies the broadcaster who is blocking the user.
To learn more about blocking users, see Block Other Users on Twitch.
Endpoint
PUThttps://api.twitch.tv/helix/users/blocks
Authorization
Requires one of the following:
- A user access token that includes the user:manage:blocked_users scope.
Query Parameters
target_user_idStringRequiredThe ID of the user to block. If the broadcaster has already blocked the user, the API replaces the existing block.source_contextStringThe location where the harassment took place that is causing the brodcaster to block the user.Possible values
chatwhisper
reasonStringThe reason that the broadcaster is blocking the user.Possible values
harassmentspamother
Response Codes
- 204No Content
- Successfully blocked the user.
- 400Bad Request
- The target_user_id query parameter is required.
- The ID in target_user_id cannot be the same as the user ID in the access token.
- The value in source_context is not valid.
- The value in reason is not valid.
- 401Unauthorized
- The Authorization header is required and must contain a user access token.
- The user access token must include the user:manage:blocked_users scope.
- The access token is not valid.
- The ID specified in the Client-Id header does not match the client ID specified in the access token.
curl -X PUT 'https://api.twitch.tv/helix/users/blocks?target_user_id=198704263' \
-H 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
-H 'Client-Id: YOUR_CLIENT_ID'$headers = @{
"Authorization" = "Bearer YOUR_ACCESS_TOKEN"
"Client-Id" = "YOUR_CLIENT_ID"
}
$response = Invoke-RestMethod -Uri "https://api.twitch.tv/helix/users/blocks?target_user_id=198704263" `
-Method Put -Headers $headersconst response = await fetch("https://api.twitch.tv/helix/users/blocks?target_user_id=198704263", {
method: "PUT",
headers: {
"Authorization": "Bearer YOUR_ACCESS_TOKEN",
"Client-Id": "YOUR_CLIENT_ID",
},
});
const data = await response.json();import requests
response = requests.put(
"https://api.twitch.tv/helix/users/blocks",
headers={
"Authorization": "Bearer YOUR_ACCESS_TOKEN",
"Client-Id": "YOUR_CLIENT_ID",
},
params={
"target_user_id": "198704263",
},
)
data = response.json()req, _ := http.NewRequest("PUT", "https://api.twitch.tv/helix/users/blocks?target_user_id=198704263", nil)
req.Header.Set("Authorization", "Bearer YOUR_ACCESS_TOKEN")
req.Header.Set("Client-Id", "YOUR_CLIENT_ID")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
data, _ := io.ReadAll(res.Body)$ch = curl_init("https://api.twitch.tv/helix/users/blocks?target_user_id=198704263");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer YOUR_ACCESS_TOKEN",
"Client-Id: YOUR_CLIENT_ID",
]);
$response = curl_exec($ch);
curl_close($ch);using var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Put, "https://api.twitch.tv/helix/users/blocks?target_user_id=198704263");
request.Headers.Add("Authorization", "Bearer YOUR_ACCESS_TOKEN");
request.Headers.Add("Client-Id", "YOUR_CLIENT_ID");
var response = await client.SendAsync(request);
var data = await response.Content.ReadAsStringAsync();let client = reqwest::Client::new();
let response = client
.put("https://api.twitch.tv/helix/users/blocks?target_user_id=198704263")
.header("Authorization", "Bearer YOUR_ACCESS_TOKEN")
.header("Client-Id", "YOUR_CLIENT_ID")
.send()
.await?;
let data = response.text().await?;Unblock User
Removes the user from the broadcaster's list of blocked users. The user ID in the OAuth token identifies the broadcaster who's removing the block.
Endpoint
DELETEhttps://api.twitch.tv/helix/users/blocks
Authorization
Requires one of the following:
- A user access token that includes the user:manage:blocked_users scope.
Query Parameters
target_user_idStringRequiredThe ID of the user to remove from the broadcaster's list of blocked users. The API ignores the request if the broadcaster hasn't blocked the user.
Response Codes
- 204No Content
- Successfully removed the block.
- 400Bad Request
- The target_user_id query parameter is required.
- The ID in target_user_id cannot be the same as the user ID in the access token.
- 401Unauthorized
- The Authorization header is required and must contain a user access token.
- The user access token must include the user:manage:blocked_users scope.
- The access token is not valid.
- The ID specified in the Client-Id header does not match the client ID specified in the access token.
curl -X DELETE 'https://api.twitch.tv/helix/users/blocks?target_user_id=198704263' \
-H 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
-H 'Client-Id: YOUR_CLIENT_ID'$headers = @{
"Authorization" = "Bearer YOUR_ACCESS_TOKEN"
"Client-Id" = "YOUR_CLIENT_ID"
}
$response = Invoke-RestMethod -Uri "https://api.twitch.tv/helix/users/blocks?target_user_id=198704263" `
-Method Delete -Headers $headersconst response = await fetch("https://api.twitch.tv/helix/users/blocks?target_user_id=198704263", {
method: "DELETE",
headers: {
"Authorization": "Bearer YOUR_ACCESS_TOKEN",
"Client-Id": "YOUR_CLIENT_ID",
},
});
const data = await response.json();import requests
response = requests.delete(
"https://api.twitch.tv/helix/users/blocks",
headers={
"Authorization": "Bearer YOUR_ACCESS_TOKEN",
"Client-Id": "YOUR_CLIENT_ID",
},
params={
"target_user_id": "198704263",
},
)
data = response.json()req, _ := http.NewRequest("DELETE", "https://api.twitch.tv/helix/users/blocks?target_user_id=198704263", nil)
req.Header.Set("Authorization", "Bearer YOUR_ACCESS_TOKEN")
req.Header.Set("Client-Id", "YOUR_CLIENT_ID")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
data, _ := io.ReadAll(res.Body)$ch = curl_init("https://api.twitch.tv/helix/users/blocks?target_user_id=198704263");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "DELETE");
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer YOUR_ACCESS_TOKEN",
"Client-Id: YOUR_CLIENT_ID",
]);
$response = curl_exec($ch);
curl_close($ch);using var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Delete, "https://api.twitch.tv/helix/users/blocks?target_user_id=198704263");
request.Headers.Add("Authorization", "Bearer YOUR_ACCESS_TOKEN");
request.Headers.Add("Client-Id", "YOUR_CLIENT_ID");
var response = await client.SendAsync(request);
var data = await response.Content.ReadAsStringAsync();let client = reqwest::Client::new();
let response = client
.delete("https://api.twitch.tv/helix/users/blocks?target_user_id=198704263")
.header("Authorization", "Bearer YOUR_ACCESS_TOKEN")
.header("Client-Id", "YOUR_CLIENT_ID")
.send()
.await?;
let data = response.text().await?;Get User Active Extensions
Gets the active extensions that the broadcaster has installed for each configuration.
An active extension version that isn't released (for example, one in Hosted Test) is included only if you specify a user access token and that user is on the version's Testing Account Allowlist. The account that created the version is on the allowlist automatically, and no scope is required. If the version isn't included, its slot contains only the 'active' field, set to false.
Endpoint
GEThttps://api.twitch.tv/helix/users/extensions
Authorization
Requires one of the following:
Query Parameters
user_idStringThe ID of the broadcaster whose active extensions you want to get.
This parameter is required if you specify an app access token and is optional if you specify a user access token. If you specify a user access token and don't specify this parameter, the API uses the user ID from the access token.
Response Body
dataObjectThe active extensions that the broadcaster has installed.Hide child attributesShow child attributes
data.panelmap[string]ObjectA dictionary that contains the data for a panel extension. The dictionary always contains the keys 1, 2, and 3, one for each panel slot. The following fields contain the panel's data for each key.Hide child attributesShow child attributes
data.panel.activeBooleanA Boolean value that determines the extension's activation state. If false, the user has not configured this panel extension, and the object contains only this field.data.panel.idStringAn ID that identifies the extension.data.panel.versionStringThe extension's version.data.panel.nameStringThe extension's name.
data.overlaymap[string]ObjectA dictionary that contains the data for a video-overlay extension. The dictionary always contains the key 1, for the single overlay slot. The following fields contain the overlay's data for that key.Hide child attributesShow child attributes
data.overlay.activeBooleanA Boolean value that determines the extension's activation state. If false, the user has not configured this overlay extension, and the object contains only this field.data.overlay.idStringAn ID that identifies the extension.data.overlay.versionStringThe extension's version.data.overlay.nameStringThe extension's name.
data.componentmap[string]ObjectA dictionary that contains the data for a video-component extension. The dictionary always contains the keys 1 and 2, one for each component slot. The following fields contain the component's data for each key.Hide child attributesShow child attributes
data.component.activeBooleanA Boolean value that determines the extension's activation state. If false, the user has not configured this component extension, and the object contains only this field.data.component.idStringAn ID that identifies the extension.data.component.versionStringThe extension's version.data.component.nameStringThe extension's name.data.component.xIntegerThe x-coordinate where the extension is placed.data.component.yIntegerThe y-coordinate where the extension is placed.
Response Codes
- 200OK
- Successfully retrieved the user's active extensions.
- 400Bad Request
- The user_id query parameter is required if you specify an app access token.
- 401Unauthorized
- The Authorization header is required and must contain an app access token or user access token.
- The access token is not valid.
- The ID specified in the Client-Id header does not match the client ID specified in the access token.
curl -X GET 'https://api.twitch.tv/helix/users/extensions' \
-H 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
-H 'Client-Id: YOUR_CLIENT_ID'$headers = @{
"Authorization" = "Bearer YOUR_ACCESS_TOKEN"
"Client-Id" = "YOUR_CLIENT_ID"
}
$response = Invoke-RestMethod -Uri "https://api.twitch.tv/helix/users/extensions" `
-Method Get -Headers $headersconst response = await fetch("https://api.twitch.tv/helix/users/extensions", {
method: "GET",
headers: {
"Authorization": "Bearer YOUR_ACCESS_TOKEN",
"Client-Id": "YOUR_CLIENT_ID",
},
});
const data = await response.json();import requests
response = requests.get(
"https://api.twitch.tv/helix/users/extensions",
headers={
"Authorization": "Bearer YOUR_ACCESS_TOKEN",
"Client-Id": "YOUR_CLIENT_ID",
},
)
data = response.json()req, _ := http.NewRequest("GET", "https://api.twitch.tv/helix/users/extensions", nil)
req.Header.Set("Authorization", "Bearer YOUR_ACCESS_TOKEN")
req.Header.Set("Client-Id", "YOUR_CLIENT_ID")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
data, _ := io.ReadAll(res.Body)$ch = curl_init("https://api.twitch.tv/helix/users/extensions");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer YOUR_ACCESS_TOKEN",
"Client-Id: YOUR_CLIENT_ID",
]);
$response = curl_exec($ch);
curl_close($ch);using var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Get, "https://api.twitch.tv/helix/users/extensions");
request.Headers.Add("Authorization", "Bearer YOUR_ACCESS_TOKEN");
request.Headers.Add("Client-Id", "YOUR_CLIENT_ID");
var response = await client.SendAsync(request);
var data = await response.Content.ReadAsStringAsync();let client = reqwest::Client::new();
let response = client
.get("https://api.twitch.tv/helix/users/extensions")
.header("Authorization", "Bearer YOUR_ACCESS_TOKEN")
.header("Client-Id", "YOUR_CLIENT_ID")
.send()
.await?;
let data = response.text().await?;{
"data": {
"panel": {
"1": {
"active": true,
"id": "rh6jq1q334hqc2rr1qlzqbvwlfl3x0",
"version": "1.1.0",
"name": "TopClip"
},
"2": {
"active": true,
"id": "wi08ebtatdc7oj83wtl9uxwz807l8b",
"version": "1.1.8",
"name": "Streamlabs Leaderboard"
},
"3": {
"active": true,
"id": "naty2zwfp7vecaivuve8ef1hohh6bo",
"version": "1.0.9",
"name": "Streamlabs Stream Schedule & Countdown"
}
},
"overlay": {
"1": {
"active": true,
"id": "zfh2irvx2jb4s60f02jq0ajm8vwgka",
"version": "1.0.19",
"name": "Streamlabs"
}
},
"component": {
"1": {
"active": true,
"id": "lqnf3zxk0rv0g7gq92mtmnirjz2cjj",
"version": "0.0.1",
"name": "Dev Experience Test",
"x": 0,
"y": 0
},
"2": {
"active": false
}
}
}
}Update User Extensions
Updates an installed extension's information. You can update the extension's activation state, ID, and version number. The User ID in the access token identifies the broadcaster whose extensions you're updating.
If you try to activate an extension under multiple extension types, the last write wins (and there is no guarantee of write order).
Endpoint
PUThttps://api.twitch.tv/helix/users/extensions
Authorization
Requires one of the following:
- A user access token that includes the user:edit:broadcast or channel:manage:extensions scope.
Request Body
dataObjectRequiredThe extensions to update. The 'data' field is a dictionary of extension types. The dictionary's possible keys are: panel, overlay, or component. The key's value is a dictionary of extensions.
For the extension's dictionary, the key is a sequential number beginning with 1. For panel and overlay extensions, the key's value is an object that contains the following fields: 'active' (true/false), 'id' (the extension's ID), and 'version' (the extension's version).
For component extensions, the key's value includes the above fields plus the 'x' and 'y' fields, which identify the coordinate where the extension is placed.
Response Body
dataObjectThe extensions that the broadcaster updated.Hide child attributesShow child attributes
data.panelmap[string]ObjectA dictionary that contains the data for a panel extension. The dictionary's key is a sequential number beginning with 1. The following fields contain the panel's data for each key.Hide child attributesShow child attributes
data.panel.activeBooleanA Boolean value that determines the extension's activation state. If false, the user has not configured a panel extension.data.panel.idStringAn ID that identifies the extension.data.panel.versionStringThe extension's version.data.panel.nameStringThe extension's name.
data.overlaymap[string]ObjectA dictionary that contains the data for a video-overlay extension. The dictionary's key is a sequential number beginning with 1. The following fields contain the overlay's data for each key.Hide child attributesShow child attributes
data.overlay.activeBooleanA Boolean value that determines the extension's activation state. If false, the user has not configured an overlay extension.data.overlay.idStringAn ID that identifies the extension.data.overlay.versionStringThe extension's version.data.overlay.nameStringThe extension's name.
data.componentmap[string]ObjectA dictionary that contains the data for a video-component extension. The dictionary's key is a sequential number beginning with 1. The following fields contain the component's data for each key.Hide child attributesShow child attributes
data.component.activeBooleanA Boolean value that determines the extension's activation state. If false, the user has not configured a component extension.data.component.idStringAn ID that identifies the extension.data.component.versionStringThe extension's version.data.component.nameStringThe extension's name.data.component.xIntegerThe x-coordinate where the extension is placed.data.component.yIntegerThe y-coordinate where the extension is placed.
Response Codes
- 200OK
- Successfully updated the active extensions.
- 400Bad Request
- The JSON payload is malformed.
- The value in an extension's 'active' field is not a Boolean value.
- The value in a component extension's 'x' or 'y' field is not an integer.
- 401Unauthorized
- The Authorization header is required and must contain a user access token.
- The user access token must include the user:edit:broadcast or channel:manage:extensions scope.
- The access token is not valid.
- The ID specified in the Client-Id header does not match the client ID specified in the access token.
- 404Not Found
- An extension with the specified 'id' and 'version' values was not found.
- 409Conflict
- The extension that you're activating isn't installed on the broadcaster's channel.
- 422Unprocessable Entity
- The extension can't be activated as the specified extension type (panel, overlay, or component).
curl -X PUT 'https://api.twitch.tv/helix/users/extensions' \
-H 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
-H 'Client-Id: YOUR_CLIENT_ID' \
-H 'Content-Type: application/json' \
-d '{"data":{"panel":{"1":{"active":true,"id":"rh6jq1q334hqc2rr1qlzqbvwlfl3x0","version":"1.1.0"},"2":{"active":true,"id":"wi08ebtatdc7oj83wtl9uxwz807l8b","version":"1.1.8"},"3":{"active":true,"id":"naty2zwfp7vecaivuve8ef1hohh6bo","version":"1.0.9"}},"overlay":{"1":{"active":true,"id":"zfh2irvx2jb4s60f02jq0ajm8vwgka","version":"1.0.19"}},"component":{"1":{"active":true,"id":"lqnf3zxk0rv0g7gq92mtmnirjz2cjj","version":"0.0.1","x":0,"y":0},"2":{"active":false}}}}'$headers = @{
"Authorization" = "Bearer YOUR_ACCESS_TOKEN"
"Client-Id" = "YOUR_CLIENT_ID"
}
$body = '{"data":{"panel":{"1":{"active":true,"id":"rh6jq1q334hqc2rr1qlzqbvwlfl3x0","version":"1.1.0"},"2":{"active":true,"id":"wi08ebtatdc7oj83wtl9uxwz807l8b","version":"1.1.8"},"3":{"active":true,"id":"naty2zwfp7vecaivuve8ef1hohh6bo","version":"1.0.9"}},"overlay":{"1":{"active":true,"id":"zfh2irvx2jb4s60f02jq0ajm8vwgka","version":"1.0.19"}},"component":{"1":{"active":true,"id":"lqnf3zxk0rv0g7gq92mtmnirjz2cjj","version":"0.0.1","x":0,"y":0},"2":{"active":false}}}}'
$response = Invoke-RestMethod -Uri "https://api.twitch.tv/helix/users/extensions" `
-Method Put -Headers $headers `
-ContentType "application/json" -Body $bodyconst response = await fetch("https://api.twitch.tv/helix/users/extensions", {
method: "PUT",
headers: {
"Authorization": "Bearer YOUR_ACCESS_TOKEN",
"Client-Id": "YOUR_CLIENT_ID",
"Content-Type": "application/json",
},
body: JSON.stringify({
"data": {
"panel": {
"1": {
"active": true,
"id": "rh6jq1q334hqc2rr1qlzqbvwlfl3x0",
"version": "1.1.0"
},
"2": {
"active": true,
"id": "wi08ebtatdc7oj83wtl9uxwz807l8b",
"version": "1.1.8"
},
"3": {
"active": true,
"id": "naty2zwfp7vecaivuve8ef1hohh6bo",
"version": "1.0.9"
}
},
"overlay": {
"1": {
"active": true,
"id": "zfh2irvx2jb4s60f02jq0ajm8vwgka",
"version": "1.0.19"
}
},
"component": {
"1": {
"active": true,
"id": "lqnf3zxk0rv0g7gq92mtmnirjz2cjj",
"version": "0.0.1",
"x": 0,
"y": 0
},
"2": {
"active": false
}
}
}
}),
});
const data = await response.json();import requests
response = requests.put(
"https://api.twitch.tv/helix/users/extensions",
headers={
"Authorization": "Bearer YOUR_ACCESS_TOKEN",
"Client-Id": "YOUR_CLIENT_ID",
},
json={
"data": {"panel":{"1":{"active":true,"id":"rh6jq1q334hqc2rr1qlzqbvwlfl3x0","version":"1.1.0"},"2":{"active":true,"id":"wi08ebtatdc7oj83wtl9uxwz807l8b","version":"1.1.8"},"3":{"active":true,"id":"naty2zwfp7vecaivuve8ef1hohh6bo","version":"1.0.9"}},"overlay":{"1":{"active":true,"id":"zfh2irvx2jb4s60f02jq0ajm8vwgka","version":"1.0.19"}},"component":{"1":{"active":true,"id":"lqnf3zxk0rv0g7gq92mtmnirjz2cjj","version":"0.0.1","x":0,"y":0},"2":{"active":false}}},
},
)
data = response.json()body := strings.NewReader(`{"data":{"panel":{"1":{"active":true,"id":"rh6jq1q334hqc2rr1qlzqbvwlfl3x0","version":"1.1.0"},"2":{"active":true,"id":"wi08ebtatdc7oj83wtl9uxwz807l8b","version":"1.1.8"},"3":{"active":true,"id":"naty2zwfp7vecaivuve8ef1hohh6bo","version":"1.0.9"}},"overlay":{"1":{"active":true,"id":"zfh2irvx2jb4s60f02jq0ajm8vwgka","version":"1.0.19"}},"component":{"1":{"active":true,"id":"lqnf3zxk0rv0g7gq92mtmnirjz2cjj","version":"0.0.1","x":0,"y":0},"2":{"active":false}}}}`)
req, _ := http.NewRequest("PUT", "https://api.twitch.tv/helix/users/extensions", body)
req.Header.Set("Authorization", "Bearer YOUR_ACCESS_TOKEN")
req.Header.Set("Client-Id", "YOUR_CLIENT_ID")
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
data, _ := io.ReadAll(res.Body)$ch = curl_init("https://api.twitch.tv/helix/users/extensions");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer YOUR_ACCESS_TOKEN",
"Client-Id: YOUR_CLIENT_ID",
"Content-Type: application/json",
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{"data":{"panel":{"1":{"active":true,"id":"rh6jq1q334hqc2rr1qlzqbvwlfl3x0","version":"1.1.0"},"2":{"active":true,"id":"wi08ebtatdc7oj83wtl9uxwz807l8b","version":"1.1.8"},"3":{"active":true,"id":"naty2zwfp7vecaivuve8ef1hohh6bo","version":"1.0.9"}},"overlay":{"1":{"active":true,"id":"zfh2irvx2jb4s60f02jq0ajm8vwgka","version":"1.0.19"}},"component":{"1":{"active":true,"id":"lqnf3zxk0rv0g7gq92mtmnirjz2cjj","version":"0.0.1","x":0,"y":0},"2":{"active":false}}}}');
$response = curl_exec($ch);
curl_close($ch);using var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Put, "https://api.twitch.tv/helix/users/extensions");
request.Headers.Add("Authorization", "Bearer YOUR_ACCESS_TOKEN");
request.Headers.Add("Client-Id", "YOUR_CLIENT_ID");
request.Content = new StringContent("{\"data\":{\"panel\":{\"1\":{\"active\":true,\"id\":\"rh6jq1q334hqc2rr1qlzqbvwlfl3x0\",\"version\":\"1.1.0\"},\"2\":{\"active\":true,\"id\":\"wi08ebtatdc7oj83wtl9uxwz807l8b\",\"version\":\"1.1.8\"},\"3\":{\"active\":true,\"id\":\"naty2zwfp7vecaivuve8ef1hohh6bo\",\"version\":\"1.0.9\"}},\"overlay\":{\"1\":{\"active\":true,\"id\":\"zfh2irvx2jb4s60f02jq0ajm8vwgka\",\"version\":\"1.0.19\"}},\"component\":{\"1\":{\"active\":true,\"id\":\"lqnf3zxk0rv0g7gq92mtmnirjz2cjj\",\"version\":\"0.0.1\",\"x\":0,\"y\":0},\"2\":{\"active\":false}}}}",
Encoding.UTF8, "application/json");
var response = await client.SendAsync(request);
var data = await response.Content.ReadAsStringAsync();let client = reqwest::Client::new();
let response = client
.put("https://api.twitch.tv/helix/users/extensions")
.header("Authorization", "Bearer YOUR_ACCESS_TOKEN")
.header("Client-Id", "YOUR_CLIENT_ID")
.json(&serde_json::json!({
"data": {
"panel": {
"1": {
"active": true,
"id": "rh6jq1q334hqc2rr1qlzqbvwlfl3x0",
"version": "1.1.0"
},
"2": {
"active": true,
"id": "wi08ebtatdc7oj83wtl9uxwz807l8b",
"version": "1.1.8"
},
"3": {
"active": true,
"id": "naty2zwfp7vecaivuve8ef1hohh6bo",
"version": "1.0.9"
}
},
"overlay": {
"1": {
"active": true,
"id": "zfh2irvx2jb4s60f02jq0ajm8vwgka",
"version": "1.0.19"
}
},
"component": {
"1": {
"active": true,
"id": "lqnf3zxk0rv0g7gq92mtmnirjz2cjj",
"version": "0.0.1",
"x": 0,
"y": 0
},
"2": {
"active": false
}
}
}
}))
.send()
.await?;
let data = response.text().await?;{
"data": {
"panel": {
"1": {
"active": true,
"id": "rh6jq1q334hqc2rr1qlzqbvwlfl3x0",
"version": "1.1.0",
"name": "TopClip"
},
"2": {
"active": true,
"id": "wi08ebtatdc7oj83wtl9uxwz807l8b",
"version": "1.1.8",
"name": "Streamlabs Leaderboard"
},
"3": {
"active": true,
"id": "naty2zwfp7vecaivuve8ef1hohh6bo",
"version": "1.0.9",
"name": "Streamlabs Stream Schedule & Countdown"
}
},
"overlay": {
"1": {
"active": true,
"id": "zfh2irvx2jb4s60f02jq0ajm8vwgka",
"version": "1.0.19",
"name": "Streamlabs"
}
},
"component": {
"1": {
"active": true,
"id": "lqnf3zxk0rv0g7gq92mtmnirjz2cjj",
"version": "0.0.1",
"name": "Dev Experience Test",
"x": 0,
"y": 0
},
"2": {
"active": false
}
}
}
}Get User Extensions
Gets a list of all extensions (both active and inactive) that the broadcaster has installed. The user ID in the access token identifies the broadcaster.
Endpoint
GEThttps://api.twitch.tv/helix/users/extensions/list
Authorization
Requires one of the following:
- A user access token that includes the user:read:broadcast, user:edit:broadcast, or channel:manage:extensions scope.
Response Body
dataObject[]The list of extensions that the user has installed.Hide child attributesShow child attributes
data.idStringAn ID that identifies the extension.data.versionStringThe extension's version.data.nameStringThe extension's name.data.can_activateBooleanA Boolean value that determines whether the extension is configured and can be activated. Is true if the extension is configured and can be activated.data.typeString[]The extension types that you can activate for this extension.Possible values
componentmobileoverlaypanel
Response Codes
- 200OK
- Successfully retrieved the user's installed extensions.
- 401Unauthorized
- The Authorization header is required and must contain a user access token.
- The user access token must include the user:read:broadcast, user:edit:broadcast, or channel:manage:extensions scope.
- The access token is not valid.
- The ID specified in the Client-Id header does not match the client ID specified in the access token.
curl -X GET 'https://api.twitch.tv/helix/users/extensions/list' \
-H 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
-H 'Client-Id: YOUR_CLIENT_ID'$headers = @{
"Authorization" = "Bearer YOUR_ACCESS_TOKEN"
"Client-Id" = "YOUR_CLIENT_ID"
}
$response = Invoke-RestMethod -Uri "https://api.twitch.tv/helix/users/extensions/list" `
-Method Get -Headers $headersconst response = await fetch("https://api.twitch.tv/helix/users/extensions/list", {
method: "GET",
headers: {
"Authorization": "Bearer YOUR_ACCESS_TOKEN",
"Client-Id": "YOUR_CLIENT_ID",
},
});
const data = await response.json();import requests
response = requests.get(
"https://api.twitch.tv/helix/users/extensions/list",
headers={
"Authorization": "Bearer YOUR_ACCESS_TOKEN",
"Client-Id": "YOUR_CLIENT_ID",
},
)
data = response.json()req, _ := http.NewRequest("GET", "https://api.twitch.tv/helix/users/extensions/list", nil)
req.Header.Set("Authorization", "Bearer YOUR_ACCESS_TOKEN")
req.Header.Set("Client-Id", "YOUR_CLIENT_ID")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
data, _ := io.ReadAll(res.Body)$ch = curl_init("https://api.twitch.tv/helix/users/extensions/list");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer YOUR_ACCESS_TOKEN",
"Client-Id: YOUR_CLIENT_ID",
]);
$response = curl_exec($ch);
curl_close($ch);using var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Get, "https://api.twitch.tv/helix/users/extensions/list");
request.Headers.Add("Authorization", "Bearer YOUR_ACCESS_TOKEN");
request.Headers.Add("Client-Id", "YOUR_CLIENT_ID");
var response = await client.SendAsync(request);
var data = await response.Content.ReadAsStringAsync();let client = reqwest::Client::new();
let response = client
.get("https://api.twitch.tv/helix/users/extensions/list")
.header("Authorization", "Bearer YOUR_ACCESS_TOKEN")
.header("Client-Id", "YOUR_CLIENT_ID")
.send()
.await?;
let data = response.text().await?;{
"data": [
{
"id": "wi08ebtatdc7oj83wtl9uxwz807l8b",
"version": "1.1.8",
"name": "Streamlabs Leaderboard",
"can_activate": true,
"type": [
"panel"
]
},
{
"id": "d4uvtfdr04uq6raoenvj7m86gdk16v",
"version": "2.0.2",
"name": "Prime Subscription and Loot Reminder",
"can_activate": true,
"type": [
"overlay"
]
},
{
"id": "rh6jq1q334hqc2rr1qlzqbvwlfl3x0",
"version": "1.1.0",
"name": "TopClip",
"can_activate": true,
"type": [
"mobile",
"panel"
]
},
{
"id": "zfh2irvx2jb4s60f02jq0ajm8vwgka",
"version": "1.0.19",
"name": "Streamlabs",
"can_activate": true,
"type": [
"mobile",
"overlay"
]
},
{
"id": "lqnf3zxk0rv0g7gq92mtmnirjz2cjj",
"version": "0.0.1",
"name": "Dev Experience Test",
"can_activate": true,
"type": [
"component",
"mobile",
"panel",
"overlay"
]
}
]
}