Get EventSub Subscriptions
Gets a list of EventSub subscriptions that the client in the access token created.
Endpoint
GEThttps://api.twitch.tv/helix/eventsub/subscriptions
Authorization
Requires one of the following:
- An app access token.Returns the subscriptions that use webhooks or conduits.
- A user access token.Returns the subscriptions that use WebSockets and that the user created. The token may include any scopes.
Query Parameters
statusStringFilter subscriptions by its status.Possible values
enabledThe subscription is enabled.webhook_callback_verification_pendingThe subscription is pending verification of the specified callback URL.webhook_callback_verification_failedThe specified callback URL failed verification.notification_failures_exceededThe notification delivery failure rate was too high.authorization_revokedThe authorization was revoked for one or more users specified in the Condition object.moderator_removedThe moderator that authorized the subscription is no longer one of the broadcaster's moderators.guest_star_moderator_removedThe Guest Star moderator that authorized the subscription is no longer one of the broadcaster's Guest Star moderators.user_removedOne of the users specified in the Condition object was removed.chat_user_bannedThe user specified in the Condition object was banned from the broadcaster's chat.version_removedThe subscription to subscription type and version is no longer supported.beta_maintenanceThe subscription to the beta subscription type was removed due to maintenance.websocket_disconnectedThe client closed the connection.websocket_failed_ping_pongThe client failed to respond to a ping message.websocket_received_inbound_trafficThe client sent a non-pong message. Clients may only send pong messages (and only in response to a ping message).websocket_connection_unusedThe client failed to subscribe to events within the required time.websocket_internal_errorThe Twitch WebSocket server experienced an unexpected error.websocket_network_timeoutThe Twitch WebSocket server timed out writing the message to the client.websocket_network_errorThe Twitch WebSocket server experienced a network error writing the message to the client.websocket_failed_to_reconnectThe client failed to reconnect to the Twitch WebSocket server within the required time after a Reconnect Message.conduit_deletedThe conduit associated with the subscription was deleted.
typeStringFilter subscriptions by subscription type. For a list of subscription types, see Subscription Types.user_idStringFilter subscriptions by user ID. The response contains subscriptions where this ID matches a user ID that you specified in the Condition object when you created the subscription.subscription_idStringReturns an array with the subscription matching the ID (as long as it is owned by the client making the request), or an empty array if there is no matching subscription.conduit_idStringFilter subscriptions by conduit ID.afterStringThe cursor used to get the next page of results. The 'pagination' object in the response contains the cursor's value.
Response Body
dataObject[]The list of subscriptions. The list is ordered by the oldest subscription first. The list is empty if the client hasn't created subscriptions or there are no subscriptions that match the specified filter criteria.Hide child attributesShow child attributes
data.idStringAn ID that identifies the subscription.data.statusStringThe subscription's status. The subscriber receives events only for enabled subscriptions.Possible values
enabledThe subscription is enabled.webhook_callback_verification_pendingThe subscription is pending verification of the specified callback URL.webhook_callback_verification_failedThe specified callback URL failed verification.notification_failures_exceededThe notification delivery failure rate was too high.authorization_revokedThe authorization was revoked for one or more users specified in the Condition object.moderator_removedThe moderator that authorized the subscription is no longer one of the broadcaster's moderators.guest_star_moderator_removedThe Guest Star moderator that authorized the subscription is no longer one of the broadcaster's Guest Star moderators.user_removedOne of the users specified in the Condition object was removed.chat_user_bannedThe user specified in the Condition object was banned from the broadcaster's chat.version_removedThe subscription to subscription type and version is no longer supported.beta_maintenanceThe subscription to the beta subscription type was removed due to maintenance.websocket_disconnectedThe client closed the connection.websocket_failed_ping_pongThe client failed to respond to a ping message.websocket_received_inbound_trafficThe client sent a non-pong message. Clients may only send pong messages (and only in response to a ping message).websocket_connection_unusedThe client failed to subscribe to events within the required time.websocket_internal_errorThe Twitch WebSocket server experienced an unexpected error.websocket_network_timeoutThe Twitch WebSocket server timed out writing the message to the client.websocket_network_errorThe Twitch WebSocket server experienced a network error writing the message to the client.websocket_failed_to_reconnectThe client failed to reconnect to the Twitch WebSocket server within the required time after a Reconnect Message.conduit_deletedThe conduit associated with the subscription was deleted.
data.typeStringThe subscription's type. See Subscription Types.data.versionStringThe version number that identifies this definition of the subscription's data.data.conditionObjectThe subscription's parameter values. This is a JSON object whose contents are determined by the subscription type.data.created_atStringThe date and time (in RFC3339 format) of when the subscription was created.data.transportObjectThe transport details used to send the notifications.Hide child attributesShow child attributes
data.transport.methodStringThe transport method.Possible values
webhookwebsocketconduit
data.transport.callbackStringThe callback URL where the notifications are sent. Included only if 'method' is set to webhook.data.transport.session_idStringAn ID that identifies the WebSocket that notifications are sent to. Included only if 'method' is set to websocket.data.transport.connected_atStringThe UTC date and time that the WebSocket connection was established. Included only if 'method' is set to websocket.data.transport.disconnected_atStringThe UTC date and time that the WebSocket connection was lost. Included only if 'method' is set to websocket.data.transport.conduit_idStringAn ID that identifies the conduit that notifications are sent to. Included only if 'method' is set to conduit.
data.costIntegerThe amount that the subscription counts against your limit. Learn Moredata.is_batching_enabledBooleanWhether notifications are batched. Included only if true, which is the case for drop.entitlement.grant subscriptions.
totalIntegerThe total number of subscriptions that you've created. If you use a user access token, the count includes only the user's WebSocket subscriptions.total_costIntegerThe sum of all of your subscription costs. Learn Moremax_total_costIntegerThe maximum total cost that you're allowed to incur for all subscriptions that you create. If you use a user access token, this is the WebSocket limit of 10.paginationObjectAn object that contains the cursor used to get the next page of subscriptions. The object is empty if there are no more pages to get. The number of subscriptions returned per page is undertermined.Hide child attributesShow child attributes
pagination.cursorStringThe cursor value that you set the after query parameter to.
Response Codes
- 200OK
- Successfully retrieved the subscriptions.
- 400Bad Request
- The request may specify only one filter query parameter. For example, either type or status or user_id.
- The value in the type query parameter is not valid.
- The value in the status query parameter is not valid.
- The cursor specified in the after query parameter is not valid.
- 401Unauthorized
- The Authorization header is required and must contain a user access token or an app access token.
- The access token is not valid.
- The ID in the Client-Id header must match the client ID in the access token.
curl -X GET 'https://api.twitch.tv/helix/eventsub/subscriptions' \
-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/eventsub/subscriptions" `
-Method Get -Headers $headersconst response = await fetch("https://api.twitch.tv/helix/eventsub/subscriptions", {
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/eventsub/subscriptions",
headers={
"Authorization": "Bearer YOUR_ACCESS_TOKEN",
"Client-Id": "YOUR_CLIENT_ID",
},
)
data = response.json()req, _ := http.NewRequest("GET", "https://api.twitch.tv/helix/eventsub/subscriptions", 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/eventsub/subscriptions");
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/eventsub/subscriptions");
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/eventsub/subscriptions")
.header("Authorization", "Bearer YOUR_ACCESS_TOKEN")
.header("Client-Id", "YOUR_CLIENT_ID")
.send()
.await?;
let data = response.text().await?;{
"total": 2,
"data": [
{
"id": "26b1c993-bfcf-44d9-b876-379dacafe75a",
"status": "enabled",
"type": "stream.online",
"version": "1",
"condition": {
"broadcaster_user_id": "1234"
},
"created_at": "2020-11-10T20:08:33.12345678Z",
"transport": {
"method": "webhook",
"callback": "https://this-is-a-callback.com"
},
"cost": 1
},
{
"id": "35016908-41ff-33ce-7879-61b8dfc2ee16",
"status": "webhook_callback_verification_pending",
"type": "user.update",
"version": "1",
"condition": {
"user_id": "1234"
},
"created_at": "2020-11-10T14:32:18.730260295Z",
"transport": {
"method": "webhook",
"callback": "https://this-is-a-callback.com"
},
"cost": 0
}
],
"total_cost": 1,
"max_total_cost": 10000,
"pagination": {}
}Create EventSub Subscription
Creates an EventSub subscription.
Endpoint
POSThttps://api.twitch.tv/helix/eventsub/subscriptions
Authorization
Requires one of the following:
- An app access token.Required if you use webhooks or conduits to receive events. If the subscription type requires user authorization, the user must have granted your app (Client ID) permissions to receive those events before you subscribe to them. For example, to subscribe to channel.subscribe events, your app must get a user access token that includes the 'channel:read:subscriptions' scope, which adds the required permission to your App Access Token's Client ID.
- A user access token.Required if you use WebSockets to receive events. If the subscription type requires user authorization, the token must include the required scope. However, if the subscription type doesn't include user authorization, the token may include any scopes or no scopes.
Request Body
typeStringRequiredThe type of subscription to create. For a list of subscriptions that you can create, see Subscription Types.versionStringRequiredThe version number that identifies the definition of the subscription type that you want the response to use.conditionObjectRequiredA JSON object that contains the parameter values that are specific to the specified subscription type. For the object's required and optional fields, see the subscription type's documentation.transportObjectRequiredThe transport details that you want Twitch to use when sending you notifications.Hide child attributesShow child attributes
transport.methodStringRequiredThe transport method.Possible values
webhookwebsocketconduit
transport.callbackStringThe callback URL where the notifications are sent. The URL must use the HTTPS protocol and port 443. See Processing an event. Specify this field only if 'method' is set to webhook.
NOTE: Redirects are not followed.
transport.secretStringThe secret used to verify the signature. The secret must be an ASCII string that's a minimum of 10 characters long and a maximum of 100 characters long. For information about how the secret is used, see Verifying the event message. Specify this field only if 'method' is set to webhook.transport.session_idStringAn ID that identifies the WebSocket to send notifications to. When you connect to EventSub using WebSockets, the server returns the ID in the Welcome message. Specify this field only if 'method' is set to websocket.transport.conduit_idStringAn ID that identifies the conduit to send notifications to. When you create a conduit, the server returns the conduit ID. Specify this field only if 'method' is set to conduit.
is_batching_enabledBooleanWhether notifications are batched, so that a single notification can contain multiple events. Must be true for drop.entitlement.grant subscriptions, and false or omitted for all other subscription types.
Response Body
dataObject[]A list that contains the single subscription that you created.Hide child attributesShow child attributes
data.idStringAn ID that identifies the subscription.data.statusStringThe subscription's status. The subscriber receives events only for enabled subscriptions.Possible values
enabledThe subscription is enabled.webhook_callback_verification_pendingThe subscription is pending verification of the specified callback URL (see Responding to a challenge request).
data.typeStringThe subscription's type. See Subscription Types.data.versionStringThe version number that identifies this definition of the subscription's data.data.conditionObjectThe subscription's parameter values. This is a object whose contents are determined by the subscription type.data.created_atStringThe date and time (in RFC3339 format) of when the subscription was created.data.transportObjectThe transport details used to send the notifications.Hide child attributesShow child attributes
data.transport.methodStringThe transport method.Possible values
webhookwebsocketconduit
data.transport.callbackStringThe callback URL where the notifications are sent. Included only if 'method' is set to webhook.data.transport.session_idStringAn ID that identifies the WebSocket that notifications are sent to. Included only if 'method' is set to websocket.data.transport.connected_atStringThe UTC date and time that the WebSocket connection was established. Included only if 'method' is set to websocket.data.transport.conduit_idStringAn ID that identifies the conduit to send notifications to. Included only if 'method' is set to conduit.
data.costIntegerThe amount that the subscription counts against your limit. Learn Moredata.is_batching_enabledBooleanWhether notifications are batched. Included only if true, which is the case for drop.entitlement.grant subscriptions.
totalIntegerThe total number of subscriptions you've created.total_costIntegerThe sum of all of your subscription costs. Learn Moremax_total_costIntegerThe maximum total cost that you're allowed to incur for all subscriptions you create.
Response Codes
- 202Accepted
- Successfully accepted the subscription request.
- 400Bad Request
- The 'condition' field is required.
- The user specified in the 'condition' object does not exist.
- The 'condition' object is missing one or more required fields.
- The combination of values in the 'version' and 'type' fields is not valid.
- The length of the string in the 'secret' field is not valid.
- The URL in the transport's 'callback' field is not valid. The URL must use the HTTPS protocol and the 443 port number.
- The value specified in the 'method' field is not valid.
- The 'callback' field is required if you specify the webhook transport method.
- The 'session_id' field is required if you specify the WebSocket transport method.
- The combination of subscription type and version is not valid.
- The 'conduit_id' field is required if you specify the Conduit transport method.
- Do not specify the 'session_id' field if you specify the webhook transport method.
- Do not specify the 'callback' or 'secret' fields if you specify the WebSocket transport method.
- Do not specify the 'callback', 'secret', or 'session_id' fields if you specify the Conduit transport method.
- The subscription type and version combination is deprecated.
- The 'is_batching_enabled' field must be true for drop.entitlement.grant subscriptions and false or omitted for all other subscription types.
- The request must use an app access token if the transport method is webhook or conduit.
- The request must use a user access token if the transport method is WebSocket.
- The WebSocket session doesn't exist or has already disconnected.
- The WebSocket session already has subscriptions that a different user created.
- 401Unauthorized
- The Authorization header is required and must contain a user access token or an app access token.
- The access token is not valid.
- The ID in the Client-Id header must match the client ID in the access token.
- 403Forbidden
- The user access token doesn't meet the subscription type's authorization requirements, such as the required scope.
- If you use an app access token, the user specified in the 'condition' object must have authorized your app with the scope that the subscription type requires.
- 404Not Found
- The conduit specified in the 'conduit_id' field was not found.
- The conduit's owner must match the client ID in the access token.
- 409Conflict
- A subscription with the same 'type' and 'condition' values and the same callback URL, WebSocket session, or conduit already exists and is enabled or pending verification. The 'message' field in the error response contains the existing subscription's ID.
- 410Gone
- Version 1 of the channel.follow subscription type is no longer available. Use version 2.
- 429Too Many Requests
- The request exceeds the limit of 3 enabled or pending subscriptions with the same combination of 'type' and 'condition' values.
- The subscription would exceed your 'max_total_cost' or the maximum number of subscriptions that you may create.
- The subscription would exceed the maximum of 3 WebSocket connections with enabled subscriptions.
- The WebSocket connection already has the maximum of 300 subscriptions.
- The subscription would exceed the WebSocket 'max_total_cost' of 10.
curl -X POST 'https://api.twitch.tv/helix/eventsub/subscriptions' \
-H 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
-H 'Client-Id: YOUR_CLIENT_ID' \
-H 'Content-Type: application/json' \
-d '{"type":"user.update","version":"1","condition":{"user_id":"1234"},"transport":{"method":"webhook","callback":"https://this-is-a-callback.com","secret":"s3cre7s3cre7"}}'$headers = @{
"Authorization" = "Bearer YOUR_ACCESS_TOKEN"
"Client-Id" = "YOUR_CLIENT_ID"
}
$body = '{"type":"user.update","version":"1","condition":{"user_id":"1234"},"transport":{"method":"webhook","callback":"https://this-is-a-callback.com","secret":"s3cre7s3cre7"}}'
$response = Invoke-RestMethod -Uri "https://api.twitch.tv/helix/eventsub/subscriptions" `
-Method Post -Headers $headers `
-ContentType "application/json" -Body $bodyconst response = await fetch("https://api.twitch.tv/helix/eventsub/subscriptions", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_ACCESS_TOKEN",
"Client-Id": "YOUR_CLIENT_ID",
"Content-Type": "application/json",
},
body: JSON.stringify({
"type": "user.update",
"version": "1",
"condition": {
"user_id": "1234"
},
"transport": {
"method": "webhook",
"callback": "https://this-is-a-callback.com",
"secret": "s3cre7s3cre7"
}
}),
});
const data = await response.json();import requests
response = requests.post(
"https://api.twitch.tv/helix/eventsub/subscriptions",
headers={
"Authorization": "Bearer YOUR_ACCESS_TOKEN",
"Client-Id": "YOUR_CLIENT_ID",
},
json={
"type": "user.update",
"version": "1",
"condition": {"user_id":"1234"},
"transport": {"method":"webhook","callback":"https://this-is-a-callback.com","secret":"s3cre7s3cre7"},
},
)
data = response.json()body := strings.NewReader(`{"type":"user.update","version":"1","condition":{"user_id":"1234"},"transport":{"method":"webhook","callback":"https://this-is-a-callback.com","secret":"s3cre7s3cre7"}}`)
req, _ := http.NewRequest("POST", "https://api.twitch.tv/helix/eventsub/subscriptions", 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/eventsub/subscriptions");
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, '{"type":"user.update","version":"1","condition":{"user_id":"1234"},"transport":{"method":"webhook","callback":"https://this-is-a-callback.com","secret":"s3cre7s3cre7"}}');
$response = curl_exec($ch);
curl_close($ch);using var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Post, "https://api.twitch.tv/helix/eventsub/subscriptions");
request.Headers.Add("Authorization", "Bearer YOUR_ACCESS_TOKEN");
request.Headers.Add("Client-Id", "YOUR_CLIENT_ID");
request.Content = new StringContent("{\"type\":\"user.update\",\"version\":\"1\",\"condition\":{\"user_id\":\"1234\"},\"transport\":{\"method\":\"webhook\",\"callback\":\"https://this-is-a-callback.com\",\"secret\":\"s3cre7s3cre7\"}}",
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/eventsub/subscriptions")
.header("Authorization", "Bearer YOUR_ACCESS_TOKEN")
.header("Client-Id", "YOUR_CLIENT_ID")
.json(&serde_json::json!({
"type": "user.update",
"version": "1",
"condition": {
"user_id": "1234"
},
"transport": {
"method": "webhook",
"callback": "https://this-is-a-callback.com",
"secret": "s3cre7s3cre7"
}
}))
.send()
.await?;
let data = response.text().await?;{
"data": [
{
"id": "26b1c993-bfcf-44d9-b876-379dacafe75a",
"status": "webhook_callback_verification_pending",
"type": "user.update",
"version": "1",
"condition": {
"user_id": "1234"
},
"created_at": "2020-11-10T14:32:18.730260295Z",
"transport": {
"method": "webhook",
"callback": "https://this-is-a-callback.com"
},
"cost": 1
}
],
"total": 1,
"total_cost": 1,
"max_total_cost": 10000
}Delete EventSub Subscription
Deletes an EventSub subscription.
Endpoint
DELETEhttps://api.twitch.tv/helix/eventsub/subscriptions
Authorization
Requires one of the following:
- An app access token.Required to delete subscriptions that use webhooks or conduits.
- A user access token.Required to delete subscriptions that use WebSockets. The token must be for the user who created the subscription, and may include any scopes.
Query Parameters
idStringRequiredThe ID of the subscription to delete.
Response Codes
- 204No Content
- Successfully deleted the subscription.
- 400Bad Request
- The id query parameter is required.
- 401Unauthorized
- The Authorization header is required and must contain a user access token or an app access token.
- The access token is not valid.
- The ID in the Client-Id header must match the client ID in the access token.
- 404Not Found
- The subscription was not found.
- The subscription was created with a different type of access token or by a different user.
curl -X DELETE 'https://api.twitch.tv/helix/eventsub/subscriptions?id=26b1c993-bfcf-44d9-b876-379dacafe75a' \
-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/eventsub/subscriptions?id=26b1c993-bfcf-44d9-b876-379dacafe75a" `
-Method Delete -Headers $headersconst response = await fetch("https://api.twitch.tv/helix/eventsub/subscriptions?id=26b1c993-bfcf-44d9-b876-379dacafe75a", {
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/eventsub/subscriptions",
headers={
"Authorization": "Bearer YOUR_ACCESS_TOKEN",
"Client-Id": "YOUR_CLIENT_ID",
},
params={
"id": "26b1c993-bfcf-44d9-b876-379dacafe75a",
},
)
data = response.json()req, _ := http.NewRequest("DELETE", "https://api.twitch.tv/helix/eventsub/subscriptions?id=26b1c993-bfcf-44d9-b876-379dacafe75a", 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/eventsub/subscriptions?id=26b1c993-bfcf-44d9-b876-379dacafe75a");
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/eventsub/subscriptions?id=26b1c993-bfcf-44d9-b876-379dacafe75a");
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/eventsub/subscriptions?id=26b1c993-bfcf-44d9-b876-379dacafe75a")
.header("Authorization", "Bearer YOUR_ACCESS_TOKEN")
.header("Client-Id", "YOUR_CLIENT_ID")
.send()
.await?;
let data = response.text().await?;