Side note: REST APIs

If your friend was going to the store and you needed something, you might ask them to "get" something for you. After they get back, they might "put" that item away for you. These are the constructs we use in everyday life, and REST APIs attempt to build on those, but, rather than operating on physical items, you're dealing with objects on the computer.

When you send HTTP requests to webpages, each request contains a verb. Most browsing you do involves your web browser making GET requests—asking for this page, for instance! But there are several other verbs your browser uses:

  • GET looks something up, as we've said
  • POST creates something
  • PUT updates something
  • PATCH patch something
  • DELETE destroys something

On our RESTful API, you make requests by calling VERB We'll abbreviate this as VERB /resources from now on. For instance, to create a new user, you would call POST /users (the endpoints are always plural). If you want to operate on a particular user object, you would append their ID to that URL, such as GET /users/344 to return information about user ID 344.

You can also run actions on a particular user by chaining on "actions", such as PUT /users/344/confirm, which is used to verify an account. Here's a full blueprint with some examples:

Endpoint Description Example
GET /resources Returns a list of 'resource' objects. GET /users
POST /resources Creates a new 'resource' object. POST /users
GET /resources/{id} Returns information about the 'resource' with the provided ID. GET /users/314
PUT /resources/{id} Updates a resource with the provided ID. PUT /users/314
POST /resources/{id}/action Runs some action on a 'resource'. POST /users/314/action
GET /resources/{id}/data Gets some nested information about a 'resource'. GET /users/314/avatar
DELETE /resources/{id} Delete a resource from the server. DELETE /channels/314/streamKey

If you want some more information about talking to our REST API, check out our REST Tutorial.


To get started, please accept the Developer Agreement and create an OAuth Application from our Developer Lab. For more information, please see this support article.

Once you have created an application, you must either:

  • Authenticate as a user through OAuth (by sending an Authorization header with your request). Please see our OAuth Reference for details.
  • Or, you can make unauthenticated requests by sending a Client-ID header with the Client ID of an application created within the Developer Lab. Our official SDKs add this header; please see our REST API tutorial for examples.

You must ensure your requests include either an Authorization or Client-ID header.

Rate Limiting

In order to guarantee API stability there are a few rate limits in place. All endpoints that are rate limited have their bucket noted below.

Here is a list of all rate limiting buckets and their attributes.

Each endpoint can be called Request Count times per Time Interval.
Name Request Count Time Interval (in Seconds)
analytics 100 60
channel-follow 100 60
channel-read 1000 300
channel-search 20 5
channel-write 250 300
chats 500 60
contact 3 60
global 1000 60
ingest 5 60
mail-subscribe 3 60
notification-read 100 60
report 10 60
upload 5 600
upload-interactive 15 300
user-email 2 86400
user-login 50 60
user-login-failed 8 900
user-read 500 60
user-write 100 60

Need more help?

If you're still not sure, or would like some help, hit us up on Gitter!



get /achievements



get /broadcasts/current
get /broadcasts/{broadcastId}
get /broadcasts/{broadcastId}/manifest.{type}


get /channels
get /channels/{channelIdOrToken}
get /channels/{channelIdOrToken}/details
put /channels/{channelId}
patch /channels/{channelId}
get /channels/{channelId}/analytics/viewers
get /channels/{channelId}/analytics/tsdb/viewers
get /channels/{channelId}/analytics/tsdb/viewersMetrics
get /channels/{channelId}/analytics/tsdb/streamSessions
get /channels/{channelId}/analytics/tsdb/streamHosts
get /channels/{channelId}/analytics/tsdb/subscriptions
get /channels/{channelId}/analytics/tsdb/followers
get /channels/{channelId}/analytics/tsdb/gameRanksGlobal
get /channels/{channelId}/analytics/tsdb/subRevenue
get /channels/{channelId}/analytics/tsdb/cpm
get /channels/{channelId}/analytics/tsdb/viewerSessionCount
post /channels/{channelId}/badge
get /channels/{channelId}/follow
put /channels/{channelId}/follow
post /channels/{channelId}/follow
delete /channels/{channelId}/follow
get /channels/{channelId}/emoticons
patch /channels/{channelId}/emoticons
get /channels/{channelId}/hostee
put /channels/{channelId}/hostee
delete /channels/{channelId}/hostee
get /channels/{channelId}/hostee/layout
patch /channels/{channelId}/hostee/layout
get /channels/{channelId}/hosters
get /channels/{channelId}/manifest.light2
get /channels/{channelId}/manifest.m3u8
get /channels/{channelId}/manifest.ftl
get /channels/{channelId}/partnership/app
post /channels/{channelId}/partnership/app
get /channels/{channelId}/partnership/codes
get /channels/{channelId}/partnership/verify
get /channels/{channelId}/preferences
post /channels/{channelId}/preferences
get /channels/{channelId}/related
delete /channels/{channelId}/streamKey
get /channels/{channelId}/relationship
post /channels/{channelId}/thumbnail
get /channels/{channelId}/users
get /channels/{channelId}/users/{role}
patch /channels/{channelId}/users/{userId}
get /channels/{channelId}/discord
put /channels/{channelId}/discord
get /channels/{channelId}/discord/channels
get /channels/{channelId}/discord/roles
get /channels/{channelId}/discord/invite
post /channels/{channelId}/discord/invite
get /channels/{channelId}/recordings
post /channels/{channelId}/transcodes/unlock
get /channels/{channelId}/confetti
get /channels/{channelId}/banner
post /channels/{channelId}/banner
delete /channels/{channelId}/banner
get /channels/{channelId}/broadcast


get /chats/{channelId}
get /chats/{channelId}/joinIfNotBigEvent
get /chats/{channelId}/anonymous
get /chats/{channelId}/friends
get /chats/{channelId}/users
get /chats/{channelId}/users/{userId}
get /chats/{channelId}/users/search
get /chats/{channelId}/history


get /clips/broadcasts/{broadcastId}/canClip
post /clips/create
delete /clips/{shareableId}
get /clips/{shareableId}
post /clips/{shareableId}/metadata
get /clips/channels/{channelId}


put /confetti
get /confetti/{confettiId}
patch /confetti/{confettiId}
delete /confetti/{confettiId}


get /costreams/{costreamId}
patch /costreams/{costreamId}
delete /costreams/{costreamId}/channels/{channelId}
post /costreams/invite
get /costreams/current
delete /costreams/current


get /delve/home
get /delve/mixPlayFilters
get /delve/onlyOnMixer


get /frontendConfig


get /frontendVersions


get /hooks
post /hooks
get /hooks/{hookId}
post /hooks/{hookId}/deactivate
post /hooks/{hookId}/renew


get /ingests
get /ingests/best