Are you sure you want to delete this access key?
title | intro | redirect_from | versions | topics |
---|---|---|---|---|
Resource limitations | The {% data variables.product.prodname_dotcom %} GraphQL API has limitations in place to protect against excessive or abusive calls to {% data variables.product.prodname_dotcom %}'s servers. | [/v4/guides/resource-limitations] | [{free-pro-team *} {enterprise-server *} {github-ae *}] | [API] |
To pass schema validation, all GraphQL API v4 calls must meet these standards:
first
or last
argument on any connection.first
and last
must be within 1-100.These two examples show how to calculate the total nodes in a call.
query { viewer { repositories(first: 50) { edges { repository:node { name issues(first: 10) { totalCount edges { node { title bodyHTML } } } } } } } }
Calculation:
50 = 50 repositories + 50 x 10 = 500 repository issues = 550 total nodes
query { viewer { repositories(first: 50) { edges { repository:node { name pullRequests(first: 20) { edges { pullRequest:node { title comments(first: 10) { edges { comment:node { bodyHTML } } } } } } issues(first: 20) { totalCount edges { issue:node { title bodyHTML comments(first: 10) { edges { comment:node { bodyHTML } } } } } } } } } followers(first: 10) { edges { follower:node { login } } } } }
Calculation:
50 = 50 repositories + 50 x 20 = 1,000 pullRequests + 50 x 20 x 10 = 10,000 pullRequest comments + 50 x 20 = 1,000 issues + 50 x 20 x 10 = 10,000 issue comments + 10 = 10 followers = 22,060 total nodes
The GraphQL API v4 limit is different from the REST API v3's rate limits.
Why are the API rate limits different? With GraphQL, one GraphQL call can replace multiple REST calls. A single complex GraphQL call could be the equivalent of thousands of REST requests. While a single GraphQL call would fall well below the REST API rate limit, the query might be just as expensive for GitHub's servers to compute.
To accurately represent the server cost of a query, the GraphQL API v4 calculates a call's rate limit score based on a normalized scale of points. A query's score factors in first and last arguments on a parent connection and its children.
first
and last
arguments on a parent connection and its children to pre-calculate the potential load on GitHub's systems, such as MySQL, ElasticSearch, and Git.The GraphQL API v4 rate limit is 5,000 points per hour.
Note that 5,000 points per hour is not the same as 5,000 calls per hour: the GraphQL API v4 and REST API v3 use different rate limits.
{% note %}
Note: The current formula and rate limit are subject to change as we observe how developers use the GraphQL API v4.
{% endnote %}
With the REST API v3, you can check the rate limit status by inspecting the returned HTTP headers.
With the GraphQL API v4, you can check the rate limit status by querying fields on the rateLimit
object:
query {
viewer {
login
}
rateLimit {
limit
cost
remaining
resetAt
}
}
The limit
field returns the maximum number of points the client is permitted to consume in a 60-minute window.
The cost
field returns the point cost for the current call that counts against the rate limit.
The remaining
field returns the number of points remaining in the current rate limit window.)
The resetAt
field returns the time at which the current rate limit window resets in UTC epoch seconds.
Querying the rateLimit
object returns a call's score, but running the call counts against the limit. To avoid this dilemma, you can calculate the score of a call before you run it. The following calculation works out to roughly the same cost that rateLimit { cost }
returns.
first
or last
argument limits.{% note %}
Note: The minimum cost of a call to the GraphQL API v4 is 1, representing a single request.
{% endnote %}
Here's an example query and score calculation:
query {
viewer {
login
repositories(first: 100) {
edges {
node {
id
issues(first: 50) {
edges {
node {
id
labels(first: 60) {
edges {
node {
id
name
}
}
}
}
}
}
}
}
}
}
}
This query requires 5,101 requests to fulfill:
Dividing by 100 and rounding gives us the final score of the query: 51
Press p or to see the previous file or, n or to see the next file
Are you sure you want to delete this access key?
Are you sure you want to delete this access key?
Are you sure you want to delete this access key?
Are you sure you want to delete this access key?