SkillAgentSearch skills...

GitHubApiStatus

A .NET library to easily parse GitHub's API Rate Limit

Install / Use

/learn @TheCodeTraveler/GitHubApiStatus
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

Build Projects Run Unit Tests

GitHubApiStatus

| GitHubApiStatus | GitHubApiStatus.Extensions | | --------------- | -------------------------- | | NuGet Version NuGet Downloads | NuGet NuGet |

GitHubApiStatus makes it easy to understand GitHub's API Rate Limit!

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)

GitHub RST API Limits

GraphQL API

(From the GitHub GraphQL API Docs)

GitHub GraphQL API Limits

Rate Limit Headers

Rate Limit Headers

Setup

GitHubApiStatus

NuGet

  • Available on NuGet: https://www.nuget.org/packages/GitHubApiStatus/
  • Add to any project supporting .NET Standard 1.3

GitHubApiStatus.Extensions

NuGet

  • 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 RateLimitData for 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-Limit header and return its int value

GetRemainingRequestCount

public int GetRemainingRequestCount(HttpResponseHeaders httpResponseHeaders)
  • Get the number of GitHub API Requests remaining
  • Parses the X-RateLimit-Remaining header and return its int value

HasReachedMaximumApiCallLimit

public bool HasReachedMaximumApiCallLimit(HttpResponseHeaders httpResponseHeaders)
  • Determines whether the maximum number of requests
  • Parses the X-RateLimit-Remaining header 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-Reset header and returns the TimeSpan value 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 Authorization key exists in the Vary header

GetRateLimitResetDateTime

public DateTimeOffset GetRateLimitResetDateTime(HttpResponseHeaders httpResponseHeaders)
  • Get the Date Time when the GitHub API rate limit resets
  • Parses the X-RateLimit-Reset header and returns its DateTimeOffset value

GetRateLimitResetDateTime_UnixEpochSeconds

public long GetRateLimitResetDateTime_UnixEpochSeconds(HttpResponseHeaders httpResponseHeaders)
  • Get the Date Time when the GitHub API rate limit resets
  • Parses the X-RateLimit-Reset header and returns its long value 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

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
View on GitHub
GitHub Stars17
CategoryDevelopment
Updated6mo ago
Forks1

Languages

C#

Security Score

87/100

Audited on Sep 30, 2025

No findings