GitHubApiStatus
A .NET library to easily parse GitHub's API Rate Limit
Install / Use
/learn @TheCodeTraveler/GitHubApiStatusREADME
GitHubApiStatus
| GitHubApiStatus | GitHubApiStatus.Extensions |
| --------------- | -------------------------- |
|
|
|
GitHubApiStatus makes it easy to understand GitHub's API Rate Limit!
- Jump to the Setup
- Jump to the GitHubApiStatus API
- Jump to the GitHubApiStatus.Extensions API
- Jump to Examples
For more information, check out this blog post, Introducing GitHubApiStatus <a href="https://codetraveler.io/2021/01/12/introducing-githubapistatus"><img width="490" alt="Screen Shot 2021-01-22 at 12 07 53 PM" src="https://user-images.githubusercontent.com/13558917/105540107-8aee4980-5caa-11eb-975c-2f44cf71e862.png" >
GitHub API Rate Limits
REST API
(From the GitHub REST API Docs)
GraphQL API
(From the GitHub GraphQL API Docs)
Rate Limit Headers

Setup
GitHubApiStatus
- Available on NuGet: https://www.nuget.org/packages/GitHubApiStatus/
- Add to any project supporting .NET Standard 1.3
GitHubApiStatus.Extensions
- Available on NuGet: https://www.nuget.org/packages/GitHubApiStatus.Extensions/
- Add to any project supporting .NET Standard 2.0
- Leverages Microsoft.Extensions.Http
GitHubApiStatus API
GetApiRateLimits
public Task<GitHubApiRateLimits> GetApiRateLimits(AuthenticationHeaderValue authenticationHeaderValue)
- Get the current GitHub API Rate Limit status
- Returns
RateLimitDatafor the following GitHub APIs:- REST API
- Search API
- GraphQL API
- Source Import API
- App Manifest Configuration API
- Leverage's GitHub Rate Limit API which does not count against your rate limit totals
GetRateLimit
public int GetRateLimit(HttpResponseHeaders httpResponseHeaders)
- Get the total number of GitHub API Requests available
- Parses the
X-RateLimit-Limitheader and return itsintvalue
GetRemainingRequestCount
public int GetRemainingRequestCount(HttpResponseHeaders httpResponseHeaders)
- Get the number of GitHub API Requests remaining
- Parses the
X-RateLimit-Remainingheader and return itsintvalue
HasReachedMaximumApiCallLimit
public bool HasReachedMaximumApiCallLimit(HttpResponseHeaders httpResponseHeaders)
- Determines whether the maximum number of requests
- Parses the
X-RateLimit-Remainingheader and returns wether or not it is greater than 0
GetRateLimitTimeRemaining
public TimeSpan GetRateLimitTimeRemaining(HttpResponseHeaders httpResponseHeaders)
- Get the time remaining until GitHub API rate limit resets
- Parses the
X-RateLimit-Resetheader and returns theTimeSpanvalue from the current time
IsResponseFromAuthenticatedRequest
public bool IsResponseFromAuthenticatedRequest(HttpResponseHeaders httpResponseHeaders)
- Determine whether the request was made using an authenticated bearer token
- Determines whether or not the
Authorizationkey exists in theVaryheader
GetRateLimitResetDateTime
public DateTimeOffset GetRateLimitResetDateTime(HttpResponseHeaders httpResponseHeaders)
- Get the Date Time when the GitHub API rate limit resets
- Parses the
X-RateLimit-Resetheader and returns itsDateTimeOffsetvalue
GetRateLimitResetDateTime_UnixEpochSeconds
public long GetRateLimitResetDateTime_UnixEpochSeconds(HttpResponseHeaders httpResponseHeaders)
- Get the Date Time when the GitHub API rate limit resets
- Parses the
X-RateLimit-Resetheader and returns itslongvalue in Unix Epoch Seconds
DoesContainGitHubRateLimitHeader
public static bool DoesContainGitHubRateLimitHeader(this HttpResponseHeaders headers)
- Returns whether HttpResponseHeaders Contain X-RateLimit-Limit
DoesContainGitHubRateLimitResetHeader
public static bool DoesContainGitHubRateLimitResetHeader(this HttpResponseHeaders headers)
- Returns whether HttpResponseHeaders Contain X-RateLimit-Reset
DoesContainGitHubRateLimitRemainingHeader
public static bool DoesContainGitHubRateLimitRemainingHeader(this HttpResponseHeaders headers)
- Returns whether HttpResponseHeaders Contain X-RateLimit-Remaining
GitHubApiStatus.Extensions API
AddGitHubApiStatusService
public static IHttpClientBuilder AddGitHubApiStatusService(this IServiceCollection services, AuthenticationHeaderValue authenticationHeaderValue, ProductHeaderValue productHeaderValue)
- Adds GitHubApiStatus.GitHubApiStatusService to
Microsoft.Extensions.DependencyInjection.IServiceCollection
AddGitHubApiStatusService<TGitHubApiStatusService>
public static IHttpClientBuilder AddGitHubApiStatusService<TGitHubApiStatusService>(this IServiceCollection services, AuthenticationHeaderValue authenticationHeaderValue, ProductHeaderValue productHeaderValue) where TGitHubApiStatusService : IGitHubApiStatusService
- Adds a custom implementation of IGitHubApiStatusService to
Microsoft.Extensions.DependencyInjection.IServiceCollection
Examples
- Jump to Get Current GitHub API Status
- Jump to Parse API Status from HttpResponseHeaders
- Jump to Dependency Injection
Get Current GitHub API Status
static async Task Main(string[] args)
{
var gitHubApiStatusService = new GitHubApiStatusService(new AuthenticationHeaderValue("bearer", "Your GitHub Personal Access Token, e.g. 123456789012345"));
//Generate Personal Access Token https://github.com/settings/tokens
var apiRateLimits = await gitHubApiStatusService.GetApiRateLimits();
// REST API Results
Console.WriteLine($"What is the GitHub REST API Rate Limit? {apiRateLimits.RestApi.RateLimit}"); // What is the GitHub REST API Rate Limit? 5000
Console.WriteLine($"How many REST API requests do I have remaining? {apiRateLimits.RestApi.RemainingRequestCount}"); // How many REST API requests do I have remaining? 4983
Console.WriteLine($"How long until the GitHub REST API Rate Limit resets? {apiRateLimits.RestApi.RateLimitReset_TimeRemaining}"); // How long until the GitHub REST API Rate Limit resets? 00:40:13.8035515
Console.WriteLine($"When does the GitHub REST API Rate Limit reset? {apiRateLimits.RestApi.RateLimitReset_DateTime}"); // When does the GitHub REST API Rate Limit reset? 10/29/2020 3:28:58 AM +00:00
Console.WriteLine();
// GraphQL API Results
Console.WriteLine($"What is the GitHub GraphQL API Rate Limit? {apiRateLimits.GraphQLApi.RateLimit}"); // What is the GitHub GraphQL API Rate Limit? 5000
Console.WriteLine($"How many GraphQL API requests do I have remaining? {apiRateLimits.GraphQLApi.RemainingRequestCount}"); // How many GraphQL API requests do I have remaining? 5000
Console.WriteLine($"How long until the GitHub GraphQL API Rate Limit resets? {apiRateLimits.GraphQLApi.RateLimitReset_TimeRemaining}"); // How long until the GitHub GraphQL API Rate Limit resets? 00:59:59.8034526
Console.WriteLine($"When does the GitHub GraphQL API Rate Limit reset? {apiRateLimits.GraphQLApi.RateLimitReset_DateTime}"); // When does the GitHub GraphQL API Rate Limit reset? 10/29/2020 3:48:44 AM +00:00
Console.WriteLine();
// Search API Results
Console.WriteLine($"What is the GitHub Search API Rate Limit? {apiRateLimits.SearchApi.RateLimit}"); // What is the GitHub Search API Rate Limit? 30
Console.WriteLine($"How many Search API requests do I have remaining? {apiRateLimits.SearchApi.RemainingRequestCount}"); // How many Search API requests do I have remaining? 30
Console.WriteLine($"How long until the GitHub Search API Rate Limit resets? {apiRateLimits.SearchA


