REST Lens
All samples

GitHub REST API

The world's largest code hosting platform API, essential for developer tooling.

Version 1.1.4

845 operations29 rules144,040 checks1,495 violations100 errors412 warnings983 info

Rules Violated (20)

Last-Modified Header
448
Query Fields GET
444
Query Filter Collection
154
Pagination
105
Location on Create
72
Conditional PUT
61
Plural Collections
54
Hyphens vs Underscores
29
GET/POST Tunneling
25
Idempotent Design
21
Hierarchy Design
21
CRUD-y URIs
14
Create/Update Return
9
Consistent Media Types
9
HTTP 201 for Create
8
GET Retrieve
7
Toggle Anti-Pattern
5
Consistent Errors
4
HTTP 204 for Empty Responses
4
Trailing Slash
1
API Analysis1495 issues

Response Violations4 issues

403
WarningError code 403 has 6 different response schemas#42
404
WarningError code 404 has 2 different response schemas#42
422
WarningError code 422 has 3 different response schemas#42
503
WarningError code 503 has 2 different response schemas#42

Endpoint Violations1491 issues

/
GETGitHub API Root
InfoPath '' has a trailing slash#11
InfoGET does not support 'fields' query parameter for partial responses#23
InfoGET 200 response should include Last-Modified header#58
app
GETGet the authenticated app
InfoGET /app does not support 'fields' query parameter for partial responses#23
InfoGET /app 200 response should include Last-Modified header#58
hook
config
GETGet a webhook configuration for an app
InfoGET /app/hook/config does not support 'fields' query parameter for partial responses#23
InfoGET /app/hook/config 200 response should include Last-Modified header#58
PATCHUpdate a webhook configuration for an app
deliveries
GETList deliveries for an app webhook
InfoGET /app/hook/deliveries does not support 'fields' query parameter for partial responses#23
InfoGET /app/hook/deliveries 200 response should include Last-Modified header#58
WarningGET /app/hook/deliveries appears to return a collection but lacks pagination parameters#48
{delivery_id}
GETGet a delivery for an app webhook
InfoGET /app/hook/deliveries/{delivery_id} does not support 'fields' query parameter for partial responses#23
InfoGET /app/hook/deliveries/{delivery_id} 200 response should include Last-Modified header#58
attempts
POSTRedeliver a delivery for an app webhook
WarningPOST /app/hook/deliveries/{delivery_id}/attempts should return the modified resource in the response#53
installations
GETList installations for the authenticated app
InfoGET /app/installations does not support 'fields' query parameter for partial responses#23
InfoGET /app/installations 200 response should include Last-Modified header#58
WarningGET /app/installations appears to return a collection but lacks pagination parameters#48
{installation_id}
DELETEDelete an installation for the authenticated app
GETGet an installation for the authenticated app
InfoGET /app/installations/{installation_id} does not support 'fields' query parameter for partial responses#23
InfoGET /app/installations/{installation_id} 200 response should include Last-Modified header#58
access_tokens
POSTCreate an installation access token for an app
WarningPOST /app/installations/{installation_id}/access_tokens 201 response should include Location header#19
suspended
DELETEUnsuspend an app installation
PUTSuspend an app installation
app-manifests
{code}
conversions
POSTCreate a GitHub App from a manifest
WarningPOST /app-manifests/{code}/conversions 201 response should include Location header#19
applications
{client_id}
grant
DELETEDelete an app authorization
token
DELETEDelete an app token
PATCHReset a token
POSTCheck a token
WarningPOST /applications/{client_id}/token appears to be idempotent; consider using PUT instead#82
scoped
POSTCreate a scoped access token
ErrorPOST /applications/{client_id}/token/scoped appears to tunnel another HTTP method#5
WarningPOST /applications/{client_id}/token/scoped appears to create a resource but doesn't define a 201 response#34
apps
{app_slug}
GETGet an app
InfoGET /apps/{app_slug} does not support 'fields' query parameter for partial responses#23
InfoGET /apps/{app_slug} 200 response should include Last-Modified header#58
codes_of_conduct
GETGet all codes of conduct
InfoGET /codes_of_conduct does not support 'fields' query parameter for partial responses#23
InfoGET /codes_of_conduct 200 response should include Last-Modified header#58
WarningQuery filter variables should exist for GET on collections#71
WarningGET /codes_of_conduct appears to return a collection but lacks pagination parameters#48
{key}
GETGet a code of conduct
InfoGET /codes_of_conduct/{key} does not support 'fields' query parameter for partial responses#23
InfoGET /codes_of_conduct/{key} 200 response should include Last-Modified header#58
emojis
GETGet emojis
InfoGET /emojis does not support 'fields' query parameter for partial responses#23
InfoGET /emojis 200 response should include Last-Modified header#58
WarningQuery filter variables should exist for GET on collections#71
enterprises
{enterprise}
dependabot
alerts
GETList Dependabot alerts for an enterprise
InfoGET /enterprises/{enterprise}/dependabot/alerts does not support 'fields' query parameter for partial responses#23
InfoGET /enterprises/{enterprise}/dependabot/alerts 200 response should include Last-Modified header#58
WarningQuery filter variables should exist for GET on collections#71
secret-scanning
alerts
GETList secret scanning alerts for an enterprise
InfoGET /enterprises/{enterprise}/secret-scanning/alerts does not support 'fields' query parameter for partial responses#23
InfoGET /enterprises/{enterprise}/secret-scanning/alerts 200 response should include Last-Modified header#58
WarningQuery filter variables should exist for GET on collections#71
events
GETList public events
InfoGET /events does not support 'fields' query parameter for partial responses#23
InfoGET /events 200 response should include Last-Modified header#58
WarningQuery filter variables should exist for GET on collections#71
feeds
GETGet feeds
InfoGET /feeds does not support 'fields' query parameter for partial responses#23
InfoGET /feeds 200 response should include Last-Modified header#58
gists
GETList gists for the authenticated user
InfoGET /gists does not support 'fields' query parameter for partial responses#23
InfoGET /gists 200 response should include Last-Modified header#58
WarningQuery filter variables should exist for GET on collections#71
WarningGET /gists appears to return a collection but lacks pagination parameters#48
POSTCreate a gist
public
GETList public gists
InfoGET /gists/public does not support 'fields' query parameter for partial responses#23
InfoGET /gists/public 200 response should include Last-Modified header#58
WarningQuery filter variables should exist for GET on collections#71
starred
GETList starred gists
InfoGET /gists/starred does not support 'fields' query parameter for partial responses#23
InfoGET /gists/starred 200 response should include Last-Modified header#58
WarningQuery filter variables should exist for GET on collections#71
{gist_id}
DELETEDelete a gist
GETGet a gist
InfoGET /gists/{gist_id} does not support 'fields' query parameter for partial responses#23
InfoGET /gists/{gist_id} 200 response should include Last-Modified header#58
PATCHUpdate a gist
comments
GETList gist comments
InfoGET /gists/{gist_id}/comments does not support 'fields' query parameter for partial responses#23
InfoGET /gists/{gist_id}/comments 200 response should include Last-Modified header#58
WarningQuery filter variables should exist for GET on collections#71
WarningGET /gists/{gist_id}/comments appears to return a collection but lacks pagination parameters#48
POSTCreate a gist comment
{comment_id}
DELETEDelete a gist comment
GETGet a gist comment
InfoGET /gists/{gist_id}/comments/{comment_id} does not support 'fields' query parameter for partial responses#23
InfoGET /gists/{gist_id}/comments/{comment_id} 200 response should include Last-Modified header#58
PATCHUpdate a gist comment
commits
GETList gist commits
InfoGET /gists/{gist_id}/commits does not support 'fields' query parameter for partial responses#23
InfoGET /gists/{gist_id}/commits 200 response should include Last-Modified header#58
WarningQuery filter variables should exist for GET on collections#71
forks
GETList gist forks
InfoGET /gists/{gist_id}/forks does not support 'fields' query parameter for partial responses#23
InfoGET /gists/{gist_id}/forks 200 response should include Last-Modified header#58
WarningQuery filter variables should exist for GET on collections#71
POSTFork a gist
star
DELETEUnstar a gist
GETCheck if a gist is starred
InfoGET /gists/{gist_id}/star does not support 'fields' query parameter for partial responses#23
InfoGET /gists/{gist_id}/star 204 response should include Last-Modified header#58
ErrorGET /gists/{gist_id}/star appears to tunnel another HTTP method#5
PUTStar a gist
{sha}
GETGet a gist revision
InfoGET /gists/{gist_id}/{sha} does not support 'fields' query parameter for partial responses#23
InfoGET /gists/{gist_id}/{sha} 200 response should include Last-Modified header#58
gitignore
templates
GETGet all gitignore templates
InfoGET /gitignore/templates does not support 'fields' query parameter for partial responses#23
InfoGET /gitignore/templates 200 response should include Last-Modified header#58
WarningQuery filter variables should exist for GET on collections#71
WarningGET /gitignore/templates appears to return a collection but lacks pagination parameters#48
{name}
GETGet a gitignore template
InfoGET /gitignore/templates/{name} does not support 'fields' query parameter for partial responses#23
InfoGET /gitignore/templates/{name} 200 response should include Last-Modified header#58
installation
repositories
GETList repositories accessible to the app installation
InfoGET /installation/repositories does not support 'fields' query parameter for partial responses#23
InfoGET /installation/repositories 200 response should include Last-Modified header#58
token
DELETERevoke an installation access token
issues
GETList issues assigned to the authenticated user
InfoGET /issues does not support 'fields' query parameter for partial responses#23
InfoGET /issues 200 response should include Last-Modified header#58
licenses
GETGet all commonly used licenses
InfoGET /licenses does not support 'fields' query parameter for partial responses#23
InfoGET /licenses 200 response should include Last-Modified header#58
WarningGET /licenses appears to return a collection but lacks pagination parameters#48
{license}
GETGet a license
InfoGET /licenses/{license} does not support 'fields' query parameter for partial responses#23
InfoGET /licenses/{license} 200 response should include Last-Modified header#58
markdown
POSTRender a Markdown document
WarningPOST /markdown 200 response uses 'text/html', but API predominantly uses 'application/json'#41
raw
POSTRender a Markdown document in raw mode
WarningPOST /markdown/raw uses 'text/plain' for request body, but API predominantly uses 'application/json'#41
WarningPOST /markdown/raw uses 'text/x-markdown' for request body, but API predominantly uses 'application/json'#41
WarningPOST /markdown/raw 200 response uses 'text/html', but API predominantly uses 'application/json'#41
WarningPOST /markdown/raw appears to be idempotent; consider using PUT instead#82
marketplace_listing
accounts
{account_id}
GETGet a subscription plan for an account
InfoGET /marketplace_listing/accounts/{account_id} does not support 'fields' query parameter for partial responses#23
InfoGET /marketplace_listing/accounts/{account_id} 200 response should include Last-Modified header#58
plans
GETList plans
InfoGET /marketplace_listing/plans does not support 'fields' query parameter for partial responses#23
InfoGET /marketplace_listing/plans 200 response should include Last-Modified header#58
WarningQuery filter variables should exist for GET on collections#71
WarningGET /marketplace_listing/plans appears to return a collection but lacks pagination parameters#48
{plan_id}
accounts
GETList accounts for a plan
InfoGET /marketplace_listing/plans/{plan_id}/accounts does not support 'fields' query parameter for partial responses#23
InfoGET /marketplace_listing/plans/{plan_id}/accounts 200 response should include Last-Modified header#58
stubbed
accounts
{account_id}
GETGet a subscription plan for an account (stubbed)
InfoGET /marketplace_listing/stubbed/accounts/{account_id} does not support 'fields' query parameter for partial responses#23
InfoGET /marketplace_listing/stubbed/accounts/{account_id} 200 response should include Last-Modified header#58
plans
GETList plans (stubbed)
InfoGET /marketplace_listing/stubbed/plans does not support 'fields' query parameter for partial responses#23
InfoGET /marketplace_listing/stubbed/plans 200 response should include Last-Modified header#58
WarningQuery filter variables should exist for GET on collections#71
WarningGET /marketplace_listing/stubbed/plans appears to return a collection but lacks pagination parameters#48
{plan_id}
accounts
GETList accounts for a plan (stubbed)
InfoGET /marketplace_listing/stubbed/plans/{plan_id}/accounts does not support 'fields' query parameter for partial responses#23
InfoGET /marketplace_listing/stubbed/plans/{plan_id}/accounts 200 response should include Last-Modified header#58
WarningGET /marketplace_listing/stubbed/plans/{plan_id}/accounts may be using query parameters for hierarchical relationships#4
meta
GETGet GitHub meta information
InfoGET /meta does not support 'fields' query parameter for partial responses#23
InfoGET /meta 200 response should include Last-Modified header#58
networks
{owner}
{repo}
events
GETList public events for a network of repositories
InfoGET /networks/{owner}/{repo}/events does not support 'fields' query parameter for partial responses#23
InfoGET /networks/{owner}/{repo}/events 200 response should include Last-Modified header#58
WarningQuery filter variables should exist for GET on collections#71
notifications
GETList notifications for the authenticated user
InfoGET /notifications does not support 'fields' query parameter for partial responses#23
InfoGET /notifications 200 response should include Last-Modified header#58
WarningQuery filter variables should exist for GET on collections#71
PUTMark notifications as read
ErrorPUT /notifications appears to be a retrieval operation but uses PUT instead of GET#6
InfoPUT /notifications should support If-Unmodified-Since or If-Match header#60
threads
{thread_id}
GETGet a thread
InfoGET /notifications/threads/{thread_id} does not support 'fields' query parameter for partial responses#23
InfoGET /notifications/threads/{thread_id} 200 response should include Last-Modified header#58
PATCHMark a thread as read
ErrorPATCH /notifications/threads/{thread_id} appears to be a retrieval operation but uses PATCH instead of GET#6
WarningPATCH /notifications/threads/{thread_id} should return the modified resource in the response#53
subscription
DELETEDelete a thread subscription
ErrorDELETE /notifications/threads/{thread_id}/subscription appears to be a retrieval operation but uses DELETE instead of GET#6
GETGet a thread subscription for the authenticated user
InfoGET /notifications/threads/{thread_id}/subscription does not support 'fields' query parameter for partial responses#23
InfoGET /notifications/threads/{thread_id}/subscription 200 response should include Last-Modified header#58
PUTSet a thread subscription
ErrorPUT /notifications/threads/{thread_id}/subscription appears to be a retrieval operation but uses PUT instead of GET#6
InfoPUT /notifications/threads/{thread_id}/subscription should support If-Unmodified-Since or If-Match header#60
octocat
GETGet Octocat
InfoGET /octocat does not support 'fields' query parameter for partial responses#23
WarningGET /octocat 200 response uses 'application/octocat-stream', but API predominantly uses 'application/json'#41
InfoGET /octocat 200 response should include Last-Modified header#58

Want to evaluate your own API?

Sign up free and get 3 evaluations per day on the Starter plan.