Get Custom Reward
Gets a list of custom rewards that the specified broadcaster created.
A channel may offer a maximum of 50 rewards, which includes both enabled and disabled rewards.
Endpoint
GEThttps://api.twitch.tv/helix/channel_points/custom_rewards
Authorization
Requires one of the following:
- A user access token that includes the channel:read:redemptions or channel:manage:redemptions scope.
Query Parameters
broadcaster_idStringRequiredThe ID of the broadcaster whose custom rewards you want to get. This ID must match the user ID found in the OAuth token.idStringA list of IDs to filter the rewards by. To specify more than one ID, include this parameter for each reward you want to get. For example, 'id=1234&id=5678'. You may specify a maximum of 50 IDs.
Duplicate IDs are ignored. The response contains only the IDs that were found. If none of the IDs were found, the response is 404 Not Found.
only_manageable_rewardsBooleanA Boolean value that determines whether the response contains only the custom rewards that the app may manage (the app is identified by the ID in the Client-Id header). Set to true to get only the custom rewards that the app may manage. The default is false.
Response Body
dataObject[]A list of custom rewards. The list is in ascending order by 'id'. If the broadcaster hasn't created custom rewards, the list is empty.Hide child attributesShow child attributes
data.broadcaster_idStringThe ID that uniquely identifies the broadcaster.data.broadcaster_loginStringThe broadcaster's login name.data.broadcaster_nameStringThe broadcaster's display name.data.idStringThe ID that uniquely identifies this custom reward.data.titleStringThe title of the reward.data.promptStringThe prompt shown to the viewer when they redeem the reward if user input is required (see the 'is_user_input_required' field).data.costIntegerThe cost of the reward in Channel Points.data.imageObjectA set of custom images for the reward. This field is null if the broadcaster didn't upload images.Hide child attributesShow child attributes
data.image.url_1xStringThe URL to a small version of the image.data.image.url_2xStringThe URL to a medium version of the image.data.image.url_4xStringThe URL to a large version of the image.
data.default_imageObjectA set of default images for the reward.Hide child attributesShow child attributes
data.default_image.url_1xStringThe URL to a small version of the image.data.default_image.url_2xStringThe URL to a medium version of the image.data.default_image.url_4xStringThe URL to a large version of the image.
data.background_colorStringThe background color to use for the reward. The color is in Hex format (for example, #00E5CB).data.is_enabledBooleanA Boolean value that determines whether the reward is enabled. Is true if enabled; otherwise, false. Disabled rewards aren't shown to the user.data.is_user_input_requiredBooleanA Boolean value that determines whether the user must enter information when redeeming the reward. Is true if the user is prompted.data.max_per_stream_settingObjectThe settings used to determine whether to apply a maximum to the number of redemptions allowed per live stream.Hide child attributesShow child attributes
data.max_per_stream_setting.is_enabledBooleanA Boolean value that determines whether the reward applies a limit on the number of redemptions allowed per live stream. Is true if the reward applies a limit.data.max_per_stream_setting.max_per_streamInt64The maximum number of redemptions allowed per live stream.
data.max_per_user_per_stream_settingObjectThe settings used to determine whether to apply a maximum to the number of redemptions allowed per user per live stream.Hide child attributesShow child attributes
data.max_per_user_per_stream_setting.is_enabledBooleanA Boolean value that determines whether the reward applies a limit on the number of redemptions allowed per user per live stream. Is true if the reward applies a limit.data.max_per_user_per_stream_setting.max_per_user_per_streamInt64The maximum number of redemptions allowed per user per live stream.
data.global_cooldown_settingObjectThe settings used to determine whether to apply a cooldown period between redemptions and the length of the cooldown.Hide child attributesShow child attributes
data.global_cooldown_setting.is_enabledBooleanA Boolean value that determines whether to apply a cooldown period. Is true if a cooldown period is enabled.data.global_cooldown_setting.global_cooldown_secondsInt64The cooldown period, in seconds.
data.is_pausedBooleanA Boolean value that determines whether the reward is currently paused. Is true if the reward is paused. Viewers can't redeem paused rewards.data.is_in_stockBooleanA Boolean value that determines whether the reward is currently in stock. Is true if the reward is in stock. Viewers can't redeem out of stock rewards.data.should_redemptions_skip_request_queueBooleanA Boolean value that determines whether redemptions should be set to FULFILLED status immediately when a reward is redeemed. If false, status is set to UNFULFILLED and follows the normal request queue process.data.redemptions_redeemed_current_streamIntegerThe number of redemptions redeemed during the current live stream. The number counts against the 'max_per_stream_setting' limit. This field is null if the broadcaster's stream isn't live or max_per_stream_setting isn't enabled.data.cooldown_expires_atStringThe timestamp of when the cooldown period expires. Is null if the reward isn't in a cooldown state. See the 'global_cooldown_setting' field.
Response Codes
- 200OK
- Successfully retrieved the broadcaster's list of custom rewards.
- 400Bad Request
- The broadcaster_id query parameter is required.
- The request exceeds the maximum number of id query parameters that you may specify.
- 401Unauthorized
- The Authorization header must specify a user access token.
- The user access token must include the channel:read:redemptions or channel:manage:redemptions scope.
- The ID in broadcaster_id must match the user ID in the user access token.
- The OAuth token is not valid.
- The ID in the Client-Id header must match the Client ID in the OAuth token.
- 403Forbidden
- The broadcaster is not a partner or affiliate.
- 404Not Found
- All of the custom rewards specified using the id query parameter were not found.
- 500Internal Server Error
- An internal server error occurred. Please report this issue on our issue tracker.
curl -X GET 'https://api.twitch.tv/helix/channel_points/custom_rewards?broadcaster_id=274637212' \
-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/channel_points/custom_rewards?broadcaster_id=274637212" `
-Method Get -Headers $headersconst response = await fetch("https://api.twitch.tv/helix/channel_points/custom_rewards?broadcaster_id=274637212", {
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/channel_points/custom_rewards",
headers={
"Authorization": "Bearer YOUR_ACCESS_TOKEN",
"Client-Id": "YOUR_CLIENT_ID",
},
params={
"broadcaster_id": "274637212",
},
)
data = response.json()req, _ := http.NewRequest("GET", "https://api.twitch.tv/helix/channel_points/custom_rewards?broadcaster_id=274637212", 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/channel_points/custom_rewards?broadcaster_id=274637212");
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/channel_points/custom_rewards?broadcaster_id=274637212");
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/channel_points/custom_rewards?broadcaster_id=274637212")
.header("Authorization", "Bearer YOUR_ACCESS_TOKEN")
.header("Client-Id", "YOUR_CLIENT_ID")
.send()
.await?;
let data = response.text().await?;{
"data": [
{
"broadcaster_name": "torpedo09",
"broadcaster_login": "torpedo09",
"broadcaster_id": "274637212",
"id": "92af127c-7326-4483-a52b-b0da0be61c01",
"image": null,
"background_color": "#00E5CB",
"is_enabled": true,
"cost": 50000,
"title": "game analysis",
"prompt": "",
"is_user_input_required": false,
"max_per_stream_setting": {
"is_enabled": false,
"max_per_stream": 0
},
"max_per_user_per_stream_setting": {
"is_enabled": false,
"max_per_user_per_stream": 0
},
"global_cooldown_setting": {
"is_enabled": false,
"global_cooldown_seconds": 0
},
"is_paused": false,
"is_in_stock": true,
"default_image": {
"url_1x": "https://static-cdn.jtvnw.net/custom-reward-images/default-1.png",
"url_2x": "https://static-cdn.jtvnw.net/custom-reward-images/default-2.png",
"url_4x": "https://static-cdn.jtvnw.net/custom-reward-images/default-4.png"
},
"should_redemptions_skip_request_queue": false,
"redemptions_redeemed_current_stream": null,
"cooldown_expires_at": null
}
]
}Create Custom Rewards
Creates a Custom Reward in the broadcaster's channel.
The maximum number of custom rewards per channel is 50, which includes both enabled and disabled rewards.
Endpoint
POSThttps://api.twitch.tv/helix/channel_points/custom_rewards
Authorization
Requires one of the following:
- A user access token that includes the channel:manage:redemptions scope.
Query Parameters
broadcaster_idStringRequiredThe ID of the broadcaster to add the custom reward to. This ID must match the user ID found in the OAuth token.
Request Body
titleStringRequiredThe custom reward's title. The title may contain a maximum of 45 characters and it must be unique (case-insensitive) amongst all of the broadcaster's custom rewards.costInt64RequiredThe cost of the reward, in Channel Points. The minimum is 1 point and the maximum is 1,000,000,000 points.promptStringThe prompt shown to the viewer when they redeem the reward. Specify a prompt if 'is_user_input_required' is true.is_enabledBooleanA Boolean value that determines whether the reward is enabled. Viewers see only enabled rewards. The default is true.background_colorStringThe background color to use for the reward. Specify the color using Hex format (for example, #9147FF). If you omit it or set it to an empty string, the reward gets a randomly chosen color.is_user_input_requiredBooleanA Boolean value that determines whether the user needs to enter information when redeeming the reward. See the 'prompt' field. The default is false.is_max_per_stream_enabledBooleanA Boolean value that determines whether to limit the maximum number of redemptions allowed per live stream (see the 'max_per_stream' field). The default is false.max_per_streamIntegerThe maximum number of redemptions allowed per live stream. Applied only if 'is_max_per_stream_enabled' is true. The minimum value is 1.is_max_per_user_per_stream_enabledBooleanA Boolean value that determines whether to limit the maximum number of redemptions allowed per user per stream (see the 'max_per_user_per_stream' field). The default is false.max_per_user_per_streamIntegerThe maximum number of redemptions allowed per user per stream. Applied only if 'is_max_per_user_per_stream_enabled' is true. The minimum value is 1.is_global_cooldown_enabledBooleanA Boolean value that determines whether to apply a cooldown period between redemptions (see the 'global_cooldown_seconds' field for the duration of the cooldown period). The default is false.global_cooldown_secondsIntegerThe cooldown period, in seconds. Applied only if the 'is_global_cooldown_enabled' field is true. The minimum value is 1; however, the minimum value is 60 for it to be shown in the Twitch UX.should_redemptions_skip_request_queueBooleanA Boolean value that determines whether redemptions should be set to FULFILLED status immediately when a reward is redeemed. If false, status is set to UNFULFILLED and follows the normal request queue process. The default is false.
Response Body
dataObject[]A list that contains the single custom reward you created.Hide child attributesShow child attributes
data.broadcaster_idStringThe ID that uniquely identifies the broadcaster.data.broadcaster_loginStringThe broadcaster's login name.data.broadcaster_nameStringThe broadcaster's display name.data.idStringThe ID that uniquely identifies this custom reward.data.titleStringThe title of the reward.data.promptStringThe prompt shown to the viewer when they redeem the reward if user input is required (see the 'is_user_input_required' field).data.costIntegerThe cost of the reward in Channel Points.data.imageObjectA set of custom images for the reward. This field is set to null if the broadcaster didn't upload images.Hide child attributesShow child attributes
data.image.url_1xStringThe URL to a small version of the image.data.image.url_2xStringThe URL to a medium version of the image.data.image.url_4xStringThe URL to a large version of the image.
data.default_imageObjectA set of default images for the reward.Hide child attributesShow child attributes
data.default_image.url_1xStringThe URL to a small version of the image.data.default_image.url_2xStringThe URL to a medium version of the image.data.default_image.url_4xStringThe URL to a large version of the image.
data.background_colorStringThe background color to use for the reward. The color is in Hex format (for example, #00E5CB).data.is_enabledBooleanA Boolean value that determines whether the reward is enabled. Is true if enabled; otherwise, false. Disabled rewards aren't shown to the user.data.is_user_input_requiredBooleanA Boolean value that determines whether the user must enter information when redeeming the reward. Is true if the reward requires user input.data.max_per_stream_settingObjectThe settings used to determine whether to apply a maximum to the number to the redemptions allowed per live stream.Hide child attributesShow child attributes
data.max_per_stream_setting.is_enabledBooleanA Boolean value that determines whether the reward applies a limit on the number of redemptions allowed per live stream. Is true if the reward applies a limit.data.max_per_stream_setting.max_per_streamInt64The maximum number of redemptions allowed per live stream.
data.max_per_user_per_stream_settingObjectThe settings used to determine whether to apply a maximum to the number of redemptions allowed per user per live stream.Hide child attributesShow child attributes
data.max_per_user_per_stream_setting.is_enabledBooleanA Boolean value that determines whether the reward applies a limit on the number of redemptions allowed per user per live stream. Is true if the reward applies a limit.data.max_per_user_per_stream_setting.max_per_user_per_streamInt64The maximum number of redemptions allowed per user per live stream.
data.global_cooldown_settingObjectThe settings used to determine whether to apply a cooldown period between redemptions and the length of the cooldown.Hide child attributesShow child attributes
data.global_cooldown_setting.is_enabledBooleanA Boolean value that determines whether to apply a cooldown period. Is true if a cooldown period is enabled.data.global_cooldown_setting.global_cooldown_secondsInt64The cooldown period, in seconds.
data.is_pausedBooleanA Boolean value that determines whether the reward is currently paused. Is true if the reward is paused. Viewers can't redeem paused rewards.data.is_in_stockBooleanA Boolean value that determines whether the reward is currently in stock. Is true if the reward is in stock. Viewers can't redeem out of stock rewards.data.should_redemptions_skip_request_queueBooleanA Boolean value that determines whether redemptions should be set to FULFILLED status immediately when a reward is redeemed. If false, status is UNFULFILLED and follows the normal request queue process.data.redemptions_redeemed_current_streamIntegerThe number of redemptions redeemed during the current live stream. The number counts against the 'max_per_stream_setting' limit. This field is null if the broadcaster's stream isn't live or max_per_stream_setting isn't enabled.data.cooldown_expires_atStringThe timestamp of when the cooldown period expires. Is null if the reward isn't in a cooldown state (see the 'global_cooldown_setting' field).
Response Codes
- 200OK
- Successfully created the custom reward.
- 400Bad Request
- The request exceeds the maximum number of rewards allowed per channel.
- The broadcaster_id query parameter is required.
- The 'title' field is required.
- The 'title' must contain a minimum of 1 character and a maximum of 45 characters.
- The 'title' must be unique (case-insensitive) amongst all of the broadcaster's custom rewards.
- The 'cost' field is required.
- The 'cost' field must contain a minimum of 1 point and a maximum of 1,000,000,000 points.
- The 'background_color' must be in Hex format (for example, #9147FF).
- AutoMod rejected the content in the 'title' or 'prompt' field.
- If 'is_max_per_stream_enabled' is true, the minimum value for 'max_per_stream' is 1.
- If 'is_max_per_user_per_stream_enabled' is true, the minimum value for 'max_per_user_per_stream' is 1.
- If 'is_global_cooldown_enabled' is true, the minimum value for 'global_cooldown_seconds' is 1.
- 401Unauthorized
- The Authorization header is required and must specify a user access token.
- The user access token is missing the channel:manage:redemptions scope.
- The ID in broadcaster_id must match the user ID in the user access token.
- The OAuth token is not valid.
- The ID in the Client-Id header must match the Client ID in the OAuth token.
- 403Forbidden
- The broadcaster is not a partner or affiliate.
- 500Internal Server Error
- An internal server error occurred. Please report this issue on our issue tracker.
curl -X POST 'https://api.twitch.tv/helix/channel_points/custom_rewards?broadcaster_id=274637212' \
-H 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
-H 'Client-Id: YOUR_CLIENT_ID' \
-H 'Content-Type: application/json' \
-d '{"title":"game analysis 1v1","cost":50000}'$headers = @{
"Authorization" = "Bearer YOUR_ACCESS_TOKEN"
"Client-Id" = "YOUR_CLIENT_ID"
}
$body = '{"title":"game analysis 1v1","cost":50000}'
$response = Invoke-RestMethod -Uri "https://api.twitch.tv/helix/channel_points/custom_rewards?broadcaster_id=274637212" `
-Method Post -Headers $headers `
-ContentType "application/json" -Body $bodyconst response = await fetch("https://api.twitch.tv/helix/channel_points/custom_rewards?broadcaster_id=274637212", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_ACCESS_TOKEN",
"Client-Id": "YOUR_CLIENT_ID",
"Content-Type": "application/json",
},
body: JSON.stringify({
"title": "game analysis 1v1",
"cost": 50000
}),
});
const data = await response.json();import requests
response = requests.post(
"https://api.twitch.tv/helix/channel_points/custom_rewards",
headers={
"Authorization": "Bearer YOUR_ACCESS_TOKEN",
"Client-Id": "YOUR_CLIENT_ID",
},
params={
"broadcaster_id": "274637212",
},
json={
"title": "game analysis 1v1",
"cost": 50000,
},
)
data = response.json()body := strings.NewReader(`{"title":"game analysis 1v1","cost":50000}`)
req, _ := http.NewRequest("POST", "https://api.twitch.tv/helix/channel_points/custom_rewards?broadcaster_id=274637212", 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/channel_points/custom_rewards?broadcaster_id=274637212");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer YOUR_ACCESS_TOKEN",
"Client-Id: YOUR_CLIENT_ID",
"Content-Type: application/json",
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{"title":"game analysis 1v1","cost":50000}');
$response = curl_exec($ch);
curl_close($ch);using var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Post, "https://api.twitch.tv/helix/channel_points/custom_rewards?broadcaster_id=274637212");
request.Headers.Add("Authorization", "Bearer YOUR_ACCESS_TOKEN");
request.Headers.Add("Client-Id", "YOUR_CLIENT_ID");
request.Content = new StringContent("{\"title\":\"game analysis 1v1\",\"cost\":50000}",
Encoding.UTF8, "application/json");
var response = await client.SendAsync(request);
var data = await response.Content.ReadAsStringAsync();let client = reqwest::Client::new();
let response = client
.post("https://api.twitch.tv/helix/channel_points/custom_rewards?broadcaster_id=274637212")
.header("Authorization", "Bearer YOUR_ACCESS_TOKEN")
.header("Client-Id", "YOUR_CLIENT_ID")
.json(&serde_json::json!({
"title": "game analysis 1v1",
"cost": 50000
}))
.send()
.await?;
let data = response.text().await?;{
"data": [
{
"broadcaster_name": "torpedo09",
"broadcaster_login": "torpedo09",
"broadcaster_id": "274637212",
"id": "afaa7e34-6b17-49f0-a19a-d1e76eaaf673",
"image": null,
"background_color": "#00E5CB",
"is_enabled": true,
"cost": 50000,
"title": "game analysis 1v1",
"prompt": "",
"is_user_input_required": false,
"max_per_stream_setting": {
"is_enabled": false,
"max_per_stream": 0
},
"max_per_user_per_stream_setting": {
"is_enabled": false,
"max_per_user_per_stream": 0
},
"global_cooldown_setting": {
"is_enabled": false,
"global_cooldown_seconds": 0
},
"is_paused": false,
"is_in_stock": true,
"default_image": {
"url_1x": "https://static-cdn.jtvnw.net/custom-reward-images/default-1.png",
"url_2x": "https://static-cdn.jtvnw.net/custom-reward-images/default-2.png",
"url_4x": "https://static-cdn.jtvnw.net/custom-reward-images/default-4.png"
},
"should_redemptions_skip_request_queue": false,
"redemptions_redeemed_current_stream": null,
"cooldown_expires_at": null
}
]
}Update Custom Reward
Updates a custom reward. The app used to create the reward is the only app that may update the reward.
Each limit setting is updated as a pair: 'is_max_per_stream_enabled' with 'max_per_stream', 'is_max_per_user_per_stream_enabled' with 'max_per_user_per_stream', and 'is_global_cooldown_enabled' with 'global_cooldown_seconds'. If you specify one field of a pair, also specify the other; the field you omit is set to false or 0. For example, specifying only 'max_per_stream' turns off the per-stream limit.
Endpoint
PATCHhttps://api.twitch.tv/helix/channel_points/custom_rewards
Authorization
Requires one of the following:
- A user access token that includes the channel:manage:redemptions scope.
Query Parameters
broadcaster_idStringRequiredThe ID of the broadcaster that's updating the reward. This ID must match the user ID found in the OAuth token.idStringRequiredThe ID of the reward to update.
Request Body
titleStringThe reward's title. The title may contain a maximum of 45 characters and it must be unique (case-insensitive) amongst all of the broadcaster's custom rewards.promptStringThe prompt shown to the viewer when they redeem the reward. Specify a prompt if 'is_user_input_required' is true. If the prompt is empty or contains only whitespace, the reward's current prompt isn't changed.costInt64The cost of the reward, in channel points. The minimum is 1 point and the maximum is 1,000,000,000 points.background_colorStringThe background color to use for the reward. Specify the color using Hex format (for example, \#00E5CB).is_enabledBooleanA Boolean value that indicates whether the reward is enabled. Set to true to enable the reward. Viewers see only enabled rewards.is_user_input_requiredBooleanA Boolean value that determines whether users must enter information to redeem the reward. Set to true if user input is required. See the 'prompt' field.is_max_per_stream_enabledBooleanA Boolean value that determines whether to limit the maximum number of redemptions allowed per live stream (see the 'max_per_stream' field). Set to true to limit redemptions.max_per_streamInt64The maximum number of redemptions allowed per live stream. Applied only if 'is_max_per_stream_enabled' is true. The minimum value is 1.is_max_per_user_per_stream_enabledBooleanA Boolean value that determines whether to limit the maximum number of redemptions allowed per user per stream (see 'max_per_user_per_stream'). Set to true to limit redemptions.max_per_user_per_streamInt64The maximum number of redemptions allowed per user per stream. Applied only if 'is_max_per_user_per_stream_enabled' is true. The minimum value is 1.is_global_cooldown_enabledBooleanA Boolean value that determines whether to apply a cooldown period between redemptions. Set to true to apply a cooldown period. For the duration of the cooldown period, see 'global_cooldown_seconds'.global_cooldown_secondsInt64The cooldown period, in seconds. Applied only if 'is_global_cooldown_enabled' is true. The minimum value is 1; however, for it to be shown in the Twitch UX, the minimum value is 60.is_pausedBooleanA Boolean value that determines whether to pause the reward. Set to true to pause the reward. Viewers can't redeem paused rewards..should_redemptions_skip_request_queueBooleanA Boolean value that determines whether redemptions should be set to FULFILLED status immediately when a reward is redeemed. If false, status is set to UNFULFILLED and follows the normal request queue process.
Response Body
dataObject[]The list contains the single reward that you updated.Hide child attributesShow child attributes
data.broadcaster_idStringThe ID that uniquely identifies the broadcaster.data.broadcaster_loginStringThe broadcaster's login name.data.broadcaster_nameStringThe broadcaster's display name.data.idStringThe ID that uniquely identifies this custom reward.data.titleStringThe title of the reward.data.promptStringThe prompt shown to the viewer when they redeem the reward if user input is required. See the 'is_user_input_required' field.data.costInt64The cost of the reward in Channel Points.data.imageObjectA set of custom images for the reward. This field is null if the broadcaster didn't upload images.Hide child attributesShow child attributes
data.image.url_1xStringThe URL to a small version of the image.data.image.url_2xStringThe URL to a medium version of the image.data.image.url_4xStringThe URL to a large version of the image.
data.default_imageObjectA set of default images for the reward.Hide child attributesShow child attributes
data.default_image.url_1xStringThe URL to a small version of the image.data.default_image.url_2xStringThe URL to a medium version of the image.data.default_image.url_4xStringThe URL to a large version of the image.
data.background_colorStringThe background color to use for the reward. The color is in Hex format (for example, #00E5CB).data.is_enabledBooleanA Boolean value that determines whether the reward is enabled. Is true if enabled; otherwise, false. Disabled rewards aren't shown to the user.data.is_user_input_requiredBooleanA Boolean value that determines whether the user must enter information when they redeem the reward. Is true if the user is prompted.data.max_per_stream_settingObjectThe settings used to determine whether to apply a maximum to the number of redemptions allowed per live stream.Hide child attributesShow child attributes
data.max_per_stream_setting.is_enabledBooleanA Boolean value that determines whether the reward applies a limit on the number of redemptions allowed per live stream. Is true if the reward applies a limit.data.max_per_stream_setting.max_per_streamInt64The maximum number of redemptions allowed per live stream.
data.max_per_user_per_stream_settingObjectThe settings used to determine whether to apply a maximum to the number of redemptions allowed per user per live stream.Hide child attributesShow child attributes
data.max_per_user_per_stream_setting.is_enabledBooleanA Boolean value that determines whether the reward applies a limit on the number of redemptions allowed per user per live stream. Is true if the reward applies a limit.data.max_per_user_per_stream_setting.max_per_user_per_streamInt64The maximum number of redemptions allowed per user per live stream.
data.global_cooldown_settingObjectThe settings used to determine whether to apply a cooldown period between redemptions and the length of the cooldown.Hide child attributesShow child attributes
data.global_cooldown_setting.is_enabledBooleanA Boolean value that determines whether to apply a cooldown period. Is true if a cooldown period is enabled.data.global_cooldown_setting.global_cooldown_secondsInt64The cooldown period, in seconds.
data.is_pausedBooleanA Boolean value that determines whether the reward is currently paused. Is true if the reward is paused. Viewers can't redeem paused rewards.data.is_in_stockBooleanA Boolean value that determines whether the reward is currently in stock. Is true if the reward is in stock. Viewers can't redeem out of stock rewards.data.should_redemptions_skip_request_queueBooleanA Boolean value that determines whether redemptions should be set to FULFILLED status immediately when a reward is redeemed. If false, status is set to UNFULFILLED and follows the normal request queue process.data.redemptions_redeemed_current_streamIntegerThe number of redemptions redeemed during the current live stream. The number counts against the 'max_per_stream_setting' limit. This field is null if the broadcaster's stream isn't live or max_per_stream_setting isn't enabled.data.cooldown_expires_atStringThe timestamp of when the cooldown period expires. Is null if the reward isn't in a cooldown state. See the 'global_cooldown_setting' field.
Response Codes
- 200OK
- Successfully updated the custom reward.
- 400Bad Request
- The broadcaster_id query parameter is required.
- The id query parameter is required.
- The 'title' must contain a minimum of 1 character and a maximum of 45 characters.
- The 'title' must be unique (case-insensitive) amongst all of the broadcaster's custom rewards.
- The 'cost' field must contain a minimum of 1 point and a maximum of 1,000,000,000 points.
- The 'background_color' must be in Hex format (for example, #00E5CB).
- AutoMod rejected the content in the 'title' or 'prompt' field.
- If 'is_max_per_stream_enabled' is true, the minimum value for 'max_per_stream' is 1.
- If 'is_max_per_user_per_stream_enabled' is true, the minimum value for 'max_per_user_per_stream' is 1.
- If 'is_global_cooldown_enabled' is true, the minimum value for 'global_cooldown_seconds' is 1.
- The 'max_per_stream' field is required if 'is_max_per_stream_enabled' is true.
- The 'max_per_user_per_stream' field is required if 'is_max_per_user_per_stream_enabled' is true.
- The 'global_cooldown_seconds' field is required if 'is_global_cooldown_enabled' is true.
- 401Unauthorized
- The Authorization header is required and must specify a user access token.
- The user access token must include the channel:manage:redemptions scope.
- The ID in broadcaster_id must match the user ID in the user access token.
- The OAuth token is not valide.
- The ID in the Client-Id header must match the Client ID in the OAuth token.
- 403Forbidden
- The ID in the Client-Id header must match the client ID used to create the custom reward.
- The broadcaster is not a partner or affiliate.
- 404Not Found
- The custom reward specified in the id query parameter was not found.
- 500Internal Server Error
- An internal server error occurred. Please report this issue on our issue tracker.
curl -X PATCH 'https://api.twitch.tv/helix/channel_points/custom_rewards?broadcaster_id=274637212&id=92af127c-7326-4483-a52b-b0da0be61c01' \
-H 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
-H 'Client-Id: YOUR_CLIENT_ID' \
-H 'Content-Type: application/json' \
-d '{"is_enabled":false}'$headers = @{
"Authorization" = "Bearer YOUR_ACCESS_TOKEN"
"Client-Id" = "YOUR_CLIENT_ID"
}
$body = '{"is_enabled":false}'
$response = Invoke-RestMethod -Uri "https://api.twitch.tv/helix/channel_points/custom_rewards?broadcaster_id=274637212&id=92af127c-7326-4483-a52b-b0da0be61c01" `
-Method Patch -Headers $headers `
-ContentType "application/json" -Body $bodyconst response = await fetch("https://api.twitch.tv/helix/channel_points/custom_rewards?broadcaster_id=274637212&id=92af127c-7326-4483-a52b-b0da0be61c01", {
method: "PATCH",
headers: {
"Authorization": "Bearer YOUR_ACCESS_TOKEN",
"Client-Id": "YOUR_CLIENT_ID",
"Content-Type": "application/json",
},
body: JSON.stringify({
"is_enabled": false
}),
});
const data = await response.json();import requests
response = requests.patch(
"https://api.twitch.tv/helix/channel_points/custom_rewards",
headers={
"Authorization": "Bearer YOUR_ACCESS_TOKEN",
"Client-Id": "YOUR_CLIENT_ID",
},
params={
"broadcaster_id": "274637212",
"id": "92af127c-7326-4483-a52b-b0da0be61c01",
},
json={
"is_enabled": false,
},
)
data = response.json()body := strings.NewReader(`{"is_enabled":false}`)
req, _ := http.NewRequest("PATCH", "https://api.twitch.tv/helix/channel_points/custom_rewards?broadcaster_id=274637212&id=92af127c-7326-4483-a52b-b0da0be61c01", 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/channel_points/custom_rewards?broadcaster_id=274637212&id=92af127c-7326-4483-a52b-b0da0be61c01");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PATCH");
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer YOUR_ACCESS_TOKEN",
"Client-Id: YOUR_CLIENT_ID",
"Content-Type: application/json",
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{"is_enabled":false}');
$response = curl_exec($ch);
curl_close($ch);using var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Patch, "https://api.twitch.tv/helix/channel_points/custom_rewards?broadcaster_id=274637212&id=92af127c-7326-4483-a52b-b0da0be61c01");
request.Headers.Add("Authorization", "Bearer YOUR_ACCESS_TOKEN");
request.Headers.Add("Client-Id", "YOUR_CLIENT_ID");
request.Content = new StringContent("{\"is_enabled\":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
.patch("https://api.twitch.tv/helix/channel_points/custom_rewards?broadcaster_id=274637212&id=92af127c-7326-4483-a52b-b0da0be61c01")
.header("Authorization", "Bearer YOUR_ACCESS_TOKEN")
.header("Client-Id", "YOUR_CLIENT_ID")
.json(&serde_json::json!({
"is_enabled": false
}))
.send()
.await?;
let data = response.text().await?;{
"data": [
{
"broadcaster_name": "torpedo09",
"broadcaster_login": "torpedo09",
"broadcaster_id": "274637212",
"id": "92af127c-7326-4483-a52b-b0da0be61c01",
"image": null,
"background_color": "#00E5CB",
"is_enabled": false,
"cost": 30000,
"title": "game analysis 2v2",
"prompt": "",
"is_user_input_required": false,
"max_per_stream_setting": {
"is_enabled": true,
"max_per_stream": 60
},
"max_per_user_per_stream_setting": {
"is_enabled": false,
"max_per_user_per_stream": 0
},
"global_cooldown_setting": {
"is_enabled": false,
"global_cooldown_seconds": 0
},
"is_paused": false,
"is_in_stock": false,
"default_image": {
"url_1x": "https://static-cdn.jtvnw.net/custom-reward-images/default-1.png",
"url_2x": "https://static-cdn.jtvnw.net/custom-reward-images/default-2.png",
"url_4x": "https://static-cdn.jtvnw.net/custom-reward-images/default-4.png"
},
"should_redemptions_skip_request_queue": true,
"redemptions_redeemed_current_stream": 60,
"cooldown_expires_at": null
}
]
}Delete Custom Reward
Deletes a custom reward that the broadcaster created.
The app used to create the reward is the only app that may delete it. Deleting the reward starts an asynchronous update that marks the reward's UNFULFILLED redemptions as FULFILLED. The update doesn't start if a bulk update of the channel's redemptions, or of this reward's redemptions, is already in progress, but the reward is still deleted.
Endpoint
DELETEhttps://api.twitch.tv/helix/channel_points/custom_rewards
Authorization
Requires one of the following:
- A user access token that includes the channel:manage:redemptions scope.
Query Parameters
broadcaster_idStringRequiredThe ID of the broadcaster that created the custom reward. This ID must match the user ID found in the OAuth token.idStringRequiredThe ID of the custom reward to delete.
Response Codes
- 204No Content
- Successfully deleted the custom reward.
- 400Bad Request
- The broadcaster_id query parameter is required.
- The id query parameter is required.
- 401Unauthorized
- The Authorization header is required and must specify a user access token.
- The user access token must include the channel:manage:redemptions scope.
- The ID in broadcaster_id must match the user ID in the user access token.
- The OAuth token is not valid.
- The ID in the Client-Id header must match the Client ID in the OAuth token.
- 403Forbidden
- The ID in the Client-Id header must match the client ID used to create the custom reward.
- The broadcaster is not a partner or affiliate.
- 404Not Found
- The custom reward specified in the id query parameter was not found.
- 500Internal Server Error
- An internal server error occurred. Please report this issue on our issue tracker.
curl -X DELETE 'https://api.twitch.tv/helix/channel_points/custom_rewards?broadcaster_id=274637212&id=b045196d-9ce7-4a27-a9b9-279ed341ab28' \
-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/channel_points/custom_rewards?broadcaster_id=274637212&id=b045196d-9ce7-4a27-a9b9-279ed341ab28" `
-Method Delete -Headers $headersconst response = await fetch("https://api.twitch.tv/helix/channel_points/custom_rewards?broadcaster_id=274637212&id=b045196d-9ce7-4a27-a9b9-279ed341ab28", {
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/channel_points/custom_rewards",
headers={
"Authorization": "Bearer YOUR_ACCESS_TOKEN",
"Client-Id": "YOUR_CLIENT_ID",
},
params={
"broadcaster_id": "274637212",
"id": "b045196d-9ce7-4a27-a9b9-279ed341ab28",
},
)
data = response.json()req, _ := http.NewRequest("DELETE", "https://api.twitch.tv/helix/channel_points/custom_rewards?broadcaster_id=274637212&id=b045196d-9ce7-4a27-a9b9-279ed341ab28", 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/channel_points/custom_rewards?broadcaster_id=274637212&id=b045196d-9ce7-4a27-a9b9-279ed341ab28");
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/channel_points/custom_rewards?broadcaster_id=274637212&id=b045196d-9ce7-4a27-a9b9-279ed341ab28");
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/channel_points/custom_rewards?broadcaster_id=274637212&id=b045196d-9ce7-4a27-a9b9-279ed341ab28")
.header("Authorization", "Bearer YOUR_ACCESS_TOKEN")
.header("Client-Id", "YOUR_CLIENT_ID")
.send()
.await?;
let data = response.text().await?;Get Custom Reward Redemption
Gets a list of redemptions for the specified custom reward. The app used to create the reward is the only app that may get the redemptions.
Endpoint
GEThttps://api.twitch.tv/helix/channel_points/custom_rewards/redemptions
Authorization
Requires one of the following:
- A user access token that includes the channel:read:redemptions or channel:manage:redemptions scope.
Query Parameters
broadcaster_idStringRequiredThe ID of the broadcaster that owns the custom reward. This ID must match the user ID found in the user OAuth token.reward_idStringRequiredThe ID that identifies the custom reward whose redemptions you want to get.statusStringThe status of the redemptions to return. The possible values are case-sensitive. This parameter is required if you don't specify the id query parameter; if you specify id, it's ignored.Possible values
CANCELEDFULFILLEDUNFULFILLED
idStringA list of IDs to filter the redemptions by. To specify more than one ID, include this parameter for each redemption you want to get. For example, 'id=1234&id=5678'. You may specify a maximum of 50 IDs.
Duplicate IDs are ignored. The response contains only the IDs that were found. If none of the IDs were found, the response is 404 Not Found.
If you specify id, the status, sort, first, and after query parameters don't apply: the response contains the redemptions regardless of their status, and it doesn't include the pagination object.
sortStringThe order to sort redemptions by. The possible values are case-sensitive. The default is OLDEST.Possible values
OLDESTNEWEST
afterStringThe cursor used to get the next page of results. The Pagination object in the response contains the cursor's value. Read morefirstIntegerThe maximum number of redemptions to return per page in the response. The minimum page size is 1 redemption per page and the maximum is 50. The default is 20.
Response Body
dataObject[]The list of redemptions for the specified reward. The list is empty if there are no redemptions that match the redemption criteria.Hide child attributesShow child attributes
data.broadcaster_idStringThe ID that uniquely identifies the broadcaster.data.broadcaster_loginStringThe broadcaster's login name.data.broadcaster_nameStringThe broadcaster's display name.data.idStringThe ID that uniquely identifies this redemption.data.user_loginStringThe user's login name.data.user_idStringThe ID that uniquely identifies the user that redeemed the reward.data.user_nameStringThe user's display name.data.user_inputStringThe text the user entered at the prompt when they redeemed the reward; otherwise, an empty string if user input was not required.data.statusStringThe state of the redemption.Possible values
CANCELEDFULFILLEDUNFULFILLED
data.redeemed_atStringThe date and time of when the reward was redeemed, in RFC3339 format.data.rewardObjectThe reward that the user redeemed.Hide child attributesShow child attributes
data.reward.idStringThe ID that uniquely identifies the redeemed reward.data.reward.titleStringThe reward's title.data.reward.promptStringThe prompt displayed to the viewer if user input is required.data.reward.costInt64The reward's cost, in Channel Points.
paginationObjectContains the information used to page through the list of results. The object contains a cursor whenever the page contains redemptions, even if it's the last page; it's empty if the page contains no redemptions. The response doesn't include this object if you specify the id query parameter. 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 list of redeemed custom rewards.
- 400Bad Request
- The broadcaster_id query parameter is required.
- The reward_id query parameter is required.
- The status query parameter is required if you didn't specify the id query parameter.
- The value in the status query parameter is not valid.
- The value in the sort query parameter is not valid.
- The value in the first query parameter is greater than 50.
- The request exceeds the maximum number of id query parameters that you may specify.
- The cursor specified in the after query parameter is not valid.
- 401Unauthorized
- The Authorization header is required and must specify a user access token.
- The user access token must include the channel:read:redemptions or channel:manage:redemptions scope.
- The ID in broadcaster_id must match the user ID in the user access token.
- The OAuth token is not valid.
- The ID in the Client-Id header must match the Client ID in the OAuth token.
- 403Forbidden
- The ID in the Client-Id header must match the client ID used to create the custom reward.
- The broadcaster is not a partner or affiliate.
- 404Not Found
- The custom reward specified in the reward_id query parameter was not found.
- All of the redemptions specified using the id query parameter were not found.
- 500Internal Server Error
curl -X GET 'https://api.twitch.tv/helix/channel_points/custom_rewards/redemptions?broadcaster_id=274637212&reward_id=92af127c-7326-4483-a52b-b0da0be61c01&status=CANCELED' \
-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/channel_points/custom_rewards/redemptions?broadcaster_id=274637212&reward_id=92af127c-7326-4483-a52b-b0da0be61c01&status=CANCELED" `
-Method Get -Headers $headersconst response = await fetch("https://api.twitch.tv/helix/channel_points/custom_rewards/redemptions?broadcaster_id=274637212&reward_id=92af127c-7326-4483-a52b-b0da0be61c01&status=CANCELED", {
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/channel_points/custom_rewards/redemptions",
headers={
"Authorization": "Bearer YOUR_ACCESS_TOKEN",
"Client-Id": "YOUR_CLIENT_ID",
},
params={
"broadcaster_id": "274637212",
"reward_id": "92af127c-7326-4483-a52b-b0da0be61c01",
"status": "CANCELED",
},
)
data = response.json()req, _ := http.NewRequest("GET", "https://api.twitch.tv/helix/channel_points/custom_rewards/redemptions?broadcaster_id=274637212&reward_id=92af127c-7326-4483-a52b-b0da0be61c01&status=CANCELED", 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/channel_points/custom_rewards/redemptions?broadcaster_id=274637212&reward_id=92af127c-7326-4483-a52b-b0da0be61c01&status=CANCELED");
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/channel_points/custom_rewards/redemptions?broadcaster_id=274637212&reward_id=92af127c-7326-4483-a52b-b0da0be61c01&status=CANCELED");
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/channel_points/custom_rewards/redemptions?broadcaster_id=274637212&reward_id=92af127c-7326-4483-a52b-b0da0be61c01&status=CANCELED")
.header("Authorization", "Bearer YOUR_ACCESS_TOKEN")
.header("Client-Id", "YOUR_CLIENT_ID")
.send()
.await?;
let data = response.text().await?;{
"data": [
{
"broadcaster_name": "torpedo09",
"broadcaster_login": "torpedo09",
"broadcaster_id": "274637212",
"id": "17fa2df1-ad76-4804-bfa5-a40ef63efe63",
"user_login": "torpedo09",
"user_id": "274637212",
"user_name": "torpedo09",
"user_input": "",
"status": "CANCELED",
"redeemed_at": "2020-07-01T18:37:32Z",
"reward": {
"id": "92af127c-7326-4483-a52b-b0da0be61c01",
"title": "game analysis",
"prompt": "",
"cost": 50000
}
}
],
"pagination": {
"cursor": "eyJiIjpudWxsLCJhIjp7IkN1cnNvciI6Ik1UZG1ZVEprWmpFdFlXUTNOaTAwT0RBMExXSm1ZVFV0WVRRd1pXWTJNMlZtWlRZelgxOHlNREl3TFRBM0xUQXhWREU0T2pNM09qTXlMakl6TXpFeU56RTFOMW89In19"
}
}Update Redemption Status
Updates a redemption's status.
You may update a redemption only if its status is UNFULFILLED. The app used to create the reward is the only app that may update the redemption.
Endpoint
PATCHhttps://api.twitch.tv/helix/channel_points/custom_rewards/redemptions
Authorization
Requires one of the following:
- A user access token that includes the channel:manage:redemptions scope.
Query Parameters
idStringRequiredA list of IDs that identify the redemptions to update. To specify more than one ID, include this parameter for each redemption you want to update. For example, 'id=1234&id=5678'. You may specify a maximum of 50 IDs.broadcaster_idStringRequiredThe ID of the broadcaster that's updating the redemption. This ID must match the user ID in the user access token.reward_idStringRequiredThe ID that identifies the reward that's been redeemed.
Request Body
statusStringRequiredThe status to set the redemption to.Possible values
CANCELEDFULFILLED
Response Body
dataObject[]The list of redemptions that you updated. The list doesn't include redemptions that weren't found, weren't UNFULFILLED, or belong to a different reward.Hide child attributesShow child attributes
data.broadcaster_idStringThe ID that uniquely identifies the broadcaster.data.broadcaster_loginStringThe broadcaster's login name.data.broadcaster_nameStringThe broadcaster's display name.data.idStringThe ID that uniquely identifies this redemption..data.user_idStringThe ID of the user that redeemed the reward.data.user_nameStringThe user's display name.data.user_loginStringThe user's login name.data.rewardObjectAn object that describes the reward that the user redeemed.Hide child attributesShow child attributes
data.reward.idStringThe ID that uniquely identifies the reward.data.reward.titleStringThe reward's title.data.reward.promptStringThe prompt displayed to the viewer if user input is required.data.reward.costInt64The reward's cost, in Channel Points.
data.user_inputStringThe text that the user entered at the prompt when they redeemed the reward; otherwise, an empty string if user input was not required.data.statusStringThe state of the redemption.Possible values
CANCELEDFULFILLEDUNFULFILLED
data.redeemed_atStringThe date and time of when the reward was redeemed, in RFC3339 format.
Response Codes
- 200OK
- Successfully updated the redemption's status.
- 400Bad Request
- The broadcaster_id query parameter is required.
- The reward_id query parameter is required.
- The id query parameter is required and must contain at least one non-empty value.
- The 'status' field is required and must be CANCELED or FULFILLED.
- 401Unauthorized
- The Authorization header is required and must specify a user access token.
- The user access token must include the channel:manage:redemptions scope.
- The ID in broadcaster_id must match the user ID in the user access token.
- The OAuth token is not valid.
- The ID in the Client-Id header must match the Client ID in the OAuth token.
- 403Forbidden
- The ID in the Client-Id header must match the client ID used to create the custom reward.
- The broadcaster is not a partner or affiliate.
- 404Not Found
- The custom reward specified in the reward_id query parameter was not found.
- None of the redemptions specified using the id query parameter were found among the reward's UNFULFILLED redemptions.
- 500Internal Server Error
- An internal server error occurred. Please report this issue on our issue tracker.
curl -X PATCH 'https://api.twitch.tv/helix/channel_points/custom_rewards/redemptions?broadcaster_id=274637212&reward_id=92af127c-7326-4483-a52b-b0da0be61c01&id=17fa2df1-ad76-4804-bfa5-a40ef63efe63' \
-H 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
-H 'Client-Id: YOUR_CLIENT_ID' \
-H 'Content-Type: application/json' \
-d '{"status":"CANCELED"}'$headers = @{
"Authorization" = "Bearer YOUR_ACCESS_TOKEN"
"Client-Id" = "YOUR_CLIENT_ID"
}
$body = '{"status":"CANCELED"}'
$response = Invoke-RestMethod -Uri "https://api.twitch.tv/helix/channel_points/custom_rewards/redemptions?broadcaster_id=274637212&reward_id=92af127c-7326-4483-a52b-b0da0be61c01&id=17fa2df1-ad76-4804-bfa5-a40ef63efe63" `
-Method Patch -Headers $headers `
-ContentType "application/json" -Body $bodyconst response = await fetch("https://api.twitch.tv/helix/channel_points/custom_rewards/redemptions?broadcaster_id=274637212&reward_id=92af127c-7326-4483-a52b-b0da0be61c01&id=17fa2df1-ad76-4804-bfa5-a40ef63efe63", {
method: "PATCH",
headers: {
"Authorization": "Bearer YOUR_ACCESS_TOKEN",
"Client-Id": "YOUR_CLIENT_ID",
"Content-Type": "application/json",
},
body: JSON.stringify({
"status": "CANCELED"
}),
});
const data = await response.json();import requests
response = requests.patch(
"https://api.twitch.tv/helix/channel_points/custom_rewards/redemptions",
headers={
"Authorization": "Bearer YOUR_ACCESS_TOKEN",
"Client-Id": "YOUR_CLIENT_ID",
},
params={
"broadcaster_id": "274637212",
"reward_id": "92af127c-7326-4483-a52b-b0da0be61c01",
"id": "17fa2df1-ad76-4804-bfa5-a40ef63efe63",
},
json={
"status": "CANCELED",
},
)
data = response.json()body := strings.NewReader(`{"status":"CANCELED"}`)
req, _ := http.NewRequest("PATCH", "https://api.twitch.tv/helix/channel_points/custom_rewards/redemptions?broadcaster_id=274637212&reward_id=92af127c-7326-4483-a52b-b0da0be61c01&id=17fa2df1-ad76-4804-bfa5-a40ef63efe63", 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/channel_points/custom_rewards/redemptions?broadcaster_id=274637212&reward_id=92af127c-7326-4483-a52b-b0da0be61c01&id=17fa2df1-ad76-4804-bfa5-a40ef63efe63");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PATCH");
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer YOUR_ACCESS_TOKEN",
"Client-Id: YOUR_CLIENT_ID",
"Content-Type: application/json",
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{"status":"CANCELED"}');
$response = curl_exec($ch);
curl_close($ch);using var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Patch, "https://api.twitch.tv/helix/channel_points/custom_rewards/redemptions?broadcaster_id=274637212&reward_id=92af127c-7326-4483-a52b-b0da0be61c01&id=17fa2df1-ad76-4804-bfa5-a40ef63efe63");
request.Headers.Add("Authorization", "Bearer YOUR_ACCESS_TOKEN");
request.Headers.Add("Client-Id", "YOUR_CLIENT_ID");
request.Content = new StringContent("{\"status\":\"CANCELED\"}",
Encoding.UTF8, "application/json");
var response = await client.SendAsync(request);
var data = await response.Content.ReadAsStringAsync();let client = reqwest::Client::new();
let response = client
.patch("https://api.twitch.tv/helix/channel_points/custom_rewards/redemptions?broadcaster_id=274637212&reward_id=92af127c-7326-4483-a52b-b0da0be61c01&id=17fa2df1-ad76-4804-bfa5-a40ef63efe63")
.header("Authorization", "Bearer YOUR_ACCESS_TOKEN")
.header("Client-Id", "YOUR_CLIENT_ID")
.json(&serde_json::json!({
"status": "CANCELED"
}))
.send()
.await?;
let data = response.text().await?;{
"data": [
{
"broadcaster_name": "torpedo09",
"broadcaster_login": "torpedo09",
"broadcaster_id": "274637212",
"id": "17fa2df1-ad76-4804-bfa5-a40ef63efe63",
"user_id": "274637212",
"user_name": "torpedo09",
"user_login": "torpedo09",
"user_input": "",
"status": "CANCELED",
"redeemed_at": "2020-07-01T18:37:32Z",
"reward": {
"id": "92af127c-7326-4483-a52b-b0da0be61c01",
"title": "game analysis",
"prompt": "",
"cost": 50000
}
}
]
}