Use the REST API to interact with GitHub events.
GitHub events power the various activity streams on the site.
You can use the REST API to return different types of events triggered by activity on GitHub. For more information about the specific events that you can receive, see GitHub event types. Endpoints for repository issues are also available. For more information, see REST API endpoints for issue events.
Events are optimized for polling with the "ETag" header. If no new events have been triggered, you will see a "304 Not Modified" response, and your current rate limit will be untouched. There is also an "X-Poll-Interval" header that specifies how often (in seconds) you are allowed to poll. In times of high server load, the time may increase. Please obey the header.
$ curl -I https://api.github.com/users/tater/events
> HTTP/2 200
> X-Poll-Interval: 60
> ETag: "a18c3bded88eb5dbb5c849a489412bf3"
# The quotes around the ETag value are important
$ curl -I https://api.github.com/users/tater/events \
$ -H 'If-None-Match: "a18c3bded88eb5dbb5c849a489412bf3"'
> HTTP/2 304
> X-Poll-Interval: 60
The timeline will include up to 300 events. Only events created within the past 30 days will be included. Events older than 30 days will not be included (even if the total number of events in the timeline is less than 300).
Note
Most endpoints use Authorization: Bearer <YOUR-TOKEN> and Accept: application/vnd.github+json headers, plus X-GitHub-Api-Version: 2026-03-10. Curl examples below omit these standard headers for brevity.
GET /events
Note
This API is not built to serve real-time use cases. Depending on the time of day, event latency can be anywhere from 30s to 6h.
accept (string)application/vnd.github+json is recommended.per_page (integer)
The number of results per page (max 100). For more information, see "Using pagination in the REST API."
Default: 15
page (integer)
The page number of the results to fetch. For more information, see "Using pagination in the REST API."
Default: 1
200 - OK
304 - Not modified
403 - Forbidden
503 - Service unavailable
Request:
curl -L \
-X GET \
https://api.github.com/events
Response schema (Status: 200):
Array of Event:
id: required, stringtype: required, string or nullactor: required, Actor:
id: required, integerlogin: required, stringdisplay_login: stringgravatar_id: required, string or nullurl: required, string, format: uriavatar_url: required, string, format: urirepo: required, object:
id: required, integername: required, stringurl: required, string, format: uriorg: Actor (see above)payload: required, one of:
ref: required, stringref_type: required, stringfull_ref: required, stringmaster_branch: required, stringdescription: string or nullpusher_type: required, stringref: required, stringref_type: required, stringfull_ref: required, stringpusher_type: required, stringaction: required, stringdiscussion: required, Discussion:
active_lock_reason: required, string or nullanswer_chosen_at: required, string or nullanswer_chosen_by: required, User:
avatar_url: string, format: urideleted: booleanemail: string or nullevents_url: string, format: uri-templatefollowers_url: string, format: urifollowing_url: string, format: uri-templategists_url: string, format: uri-templategravatar_id: stringhtml_url: string, format: uriid: required, integerlogin: required, stringname: stringnode_id: stringorganizations_url: string, format: urireceived_events_url: string, format: urirepos_url: string, format: urisite_admin: booleanstarred_url: string, format: uri-templatesubscriptions_url: string, format: uritype: string, enum: Bot, User, Organizationurl: string, format: uriuser_view_type: stringanswer_html_url: required, string or nullauthor_association: string, enum: COLLABORATOR, CONTRIBUTOR, FIRST_TIMER, FIRST_TIME_CONTRIBUTOR, MANNEQUIN, MEMBER, NONE, OWNERbody: required, stringcategory: required, object:
created_at: required, string, format: date-timedescription: required, stringemoji: required, stringid: required, integeris_answerable: required, booleanname: required, stringnode_id: stringrepository_id: required, integerslug: required, stringupdated_at: required, stringcomments: required, integercreated_at: required, string, format: date-timehtml_url: required, stringid: required, integerlocked: required, booleannode_id: required, stringnumber: required, integerreactions: Reactions:
+1: required, integer-1: required, integerconfused: required, integereyes: required, integerheart: required, integerhooray: required, integerlaugh: required, integerrocket: required, integertotal_count: required, integerurl: required, string, format: urirepository_url: required, stringstate: required, string, enum: open, closed, locked, converting, transferringstate_reason: required, string or null, enum: resolved, outdated, duplicate, reopened, nulltimeline_url: stringtitle: required, stringupdated_at: required, string, format: date-timeuser: required, User (see above)labels: array of Label:
id: required, integer, format: int64node_id: required, stringurl: required, string, format: uriname: required, stringdescription: required, string or nullcolor: required, stringdefault: required, booleanarchived_at: required, string or null, format: date-timearchived_by: required, all of:
action: required, stringissue: required, Issue:
id: required, integer, format: int64node_id: required, stringurl: required, string, format: urirepository_url: required, string, format: urilabels_url: required, stringcomments_url: required, string, format: urievents_url: required, string, format: urihtml_url: required, string, format: urinumber: required, integerstate: required, stringstate_reason: string or null, enum: completed, reopened, not_planned, duplicate, nulltitle: required, stringbody: string or nulluser: required, any of:
name: string or nullemail: string or nulllogin: required, stringid: required, integer, format: int64node_id: required, stringavatar_url: required, string, format: urigravatar_id: required, string or nullurl: required, string, format: urihtml_url: required, string, format: urifollowers_url: required, string, format: urifollowing_url: required, stringgists_url: required, stringstarred_url: required, stringsubscriptions_url: required, string, format: uriorganizations_url: required, string, format: urirepos_url: required, string, format: urievents_url: required, stringreceived_events_url: required, string, format: uritype: required, stringsite_admin: required, booleanstarred_at: stringuser_view_type: stringlabels: required, array of items:
id: integer, format: int64node_id: stringurl: string, format: uriname: stringdescription: string or nullcolor: string or nulldefault: booleanarchived_by: all of:
assignees: array of Simple User (see above)milestone: required, any of:
url: required, string, format: urihtml_url: required, string, format: urilabels_url: required, string, format: uriid: required, integernode_id: required, stringnumber: required, integerstate: required, string, enum: open, closed, default: "open"title: required, stringdescription: required, string or nullcreator: required, any of:
open_issues: required, integerclosed_issues: required, integercreated_at: required, string, format: date-timeupdated_at: required, string, format: date-timeclosed_at: required, string or null, format: date-timedue_on: required, string or null, format: date-timelocked: required, booleanactive_lock_reason: string or nullcomments: required, integerpull_request: object:
merged_at: string or null, format: date-timediff_url: required, string or null, format: urihtml_url: required, string or null, format: uripatch_url: required, string or null, format: uriurl: required, string or null, format: uriclosed_at: required, string or null, format: date-timecreated_at: required, string, format: date-timeupdated_at: required, string, format: date-timedraft: booleanclosed_by: any of:
body_html: stringbody_text: stringtimeline_url: string, format: uritype: Issue Type:
id: required, integernode_id: required, stringname: required, stringdescription: required, string or nullcolor: string or null, enum: gray, blue, green, yellow, orange, red, pink, purple, nullcreated_at: string, format: date-timeupdated_at: string, format: date-timeis_enabled: booleanrepository: Repository:
id: required, integer, format: int64node_id: required, stringname: required, stringfull_name: required, stringlicense: required, any of:
forks: required, integerpermissions: objectowner: required, objectprivate: required, boolean, default: falsehtml_url: required, string, format: uridescription: required, string or nullfork: required, booleanurl: required, string, format: uriarchive_url: required, stringassignees_url: required, stringblobs_url: required, stringbranches_url: required, stringcollaborators_url: required, stringcomments_url: required, stringcommits_url: required, stringcompare_url: required, stringcontents_url: required, stringcontributors_url: required, string, format: urideployments_url: required, string, format: uridownloads_url: required, string, format: urievents_url: required, string, format: uriforks_url: required, string, format: urigit_commits_url: required, stringgit_refs_url: required, stringgit_tags_url: required, stringgit_url: required, stringissue_comment_url: required, stringissue_events_url: required, stringissues_url: required, stringkeys_url: required, stringlabels_url: required, stringlanguages_url: required, string, format: urimerges_url: required, string, format: urimilestones_url: required, stringnotifications_url: required, stringpulls_url: required, stringreleases_url: required, stringssh_url: required, stringstargazers_url: required, string, format: uristatuses_url: required, stringsubscribers_url: required, string, format: urisubscription_url: required, string, format: uritags_url: required, string, format: uriteams_url: required, string, format: uritrees_url: required, stringclone_url: required, stringmirror_url: required, string or null, format: urihooks_url: required, string, format: urisvn_url: required, string, format: urihomepage: required, string or null, format: urilanguage: required, string or nullforks_count: required, integerstargazers_count: required, integerwatchers_count: required, integersize: required, integerdefault_branch: required, stringopen_issues_count: required, integeris_template: boolean, default: falsetopics: array of stringhas_issues: required, boolean, default: truehas_projects: required, boolean, default: truehas_wiki: required, boolean, default: truehas_pages: required, booleanhas_discussions: boolean, default: falsehas_pull_requests: boolean, default: truepull_request_creation_policy: string, enum: all, collaborators_onlyarchived: required, boolean, default: falsedisabled: required, booleanvisibility: string, default: "public"pushed_at: required, string or null, format: date-timecreated_at: required, string or null, format: date-timeupdated_at: required, string or null, format: date-timeallow_rebase_merge: boolean, default: truetemp_clone_token: stringallow_squash_merge: boolean, default: trueallow_auto_merge: boolean, default: falsedelete_branch_on_merge: boolean, default: falseallow_update_branch: boolean, default: falsesquash_merge_commit_title: string, enum: PR_TITLE, COMMIT_OR_PR_TITLEsquash_merge_commit_message: string, enum: PR_BODY, COMMIT_MESSAGES, BLANKmerge_commit_title: string, enum: PR_TITLE, MERGE_MESSAGEmerge_commit_message: string, enum: PR_BODY, PR_TITLE, BLANKallow_merge_commit: boolean, default: trueallow_forking: booleanweb_commit_signoff_required: boolean, default: falseopen_issues: required, integerwatchers: required, integerstarred_at: stringanonymous_access_enabled: booleancode_search_index_status: objectperformed_via_github_app: any of:
id: required, integerslug: stringnode_id: required, stringclient_id: stringowner: required, one of:
name: required, stringdescription: required, string or nullexternal_url: required, string, format: urihtml_url: required, string, format: uricreated_at: required, string, format: date-timeupdated_at: required, string, format: date-timepermissions: required, object, additional properties: stringevents: required, array of stringinstallations_count: integerauthor_association: string, enum: COLLABORATOR, CONTRIBUTOR, FIRST_TIMER, FIRST_TIME_CONTRIBUTOR, MANNEQUIN, MEMBER, NONE, OWNERreactions: Reaction Rollup:
url: required, string, format: uritotal_count: required, integer+1: required, integer-1: required, integerlaugh: required, integerconfused: required, integerheart: required, integerhooray: required, integereyes: required, integerrocket: required, integersub_issues_summary: Sub-issues Summary:
total: required, integercompleted: required, integerpercent_completed: required, integerparent_issue_url: string or null, format: uripinned_comment: any of:
id: required, integer, format: int64node_id: required, stringurl: required, string, format: uribody: stringbody_text: stringbody_html: stringhtml_url: required, string, format: uriuser: required, any of:
created_at: required, string, format: date-timeupdated_at: required, string, format: date-timeissue_url: required, string, format: uriauthor_association: string, enum: COLLABORATOR, CONTRIBUTOR, FIRST_TIMER, FIRST_TIME_CONTRIBUTOR, MANNEQUIN, MEMBER, NONE, OWNERperformed_via_github_app: any of:
reactions: objectpin: any of:
minimized: any of:
issue_dependencies_summary: Issue Dependencies Summary:
blocked_by: required, integerblocking: required, integertotal_blocked_by: required, integertotal_blocking: required, integerissue_field_values: array of Issue Field Value:
issue_field_id: required, integer, format: int64issue_field_name: stringnode_id: required, stringdata_type: required, string, enum: text, single_select, multi_select, number, datevalue: required, any of:
single_select_option: object or nullmulti_select_options: array of object or nullassignee: Simple User (see above)assignees: array of Simple User (see above)label: Label (see above)labels: array of Label (see above)action: required, stringissue: required, Issue (see above)comment: required, Issue Comment (see above)action: required, stringforkee: required, object:
id: integernode_id: stringname: stringfull_name: stringprivate: booleanowner: Simple User (see above)html_url: stringdescription: string or nullfork: booleanurl: stringforks_url: stringkeys_url: stringcollaborators_url: stringteams_url: stringhooks_url: stringissue_events_url: stringevents_url: stringassignees_url: stringbranches_url: stringtags_url: stringblobs_url: stringgit_tags_url: stringgit_refs_url: stringtrees_url: stringstatuses_url: stringlanguages_url: stringstargazers_url: stringcontributors_url: stringsubscribers_url: stringsubscription_url: stringcommits_url: stringgit_commits_url: stringcomments_url: stringissue_comment_url: stringcontents_url: stringcompare_url: stringmerges_url: stringarchive_url: stringdownloads_url: stringissues_url: stringpulls_url: stringmilestones_url: stringnotifications_url: stringlabels_url: stringreleases_url: stringdeployments_url: stringcreated_at: string or null, format: date-timeupdated_at: string or null, format: date-timepushed_at: string or null, format: date-timegit_url: stringssh_url: stringclone_url: stringsvn_url: stringhomepage: string or nullsize: integerstargazers_count: integerwatchers_count: integerlanguage: string or nullhas_issues: booleanhas_projects: booleanhas_downloads: booleanhas_wiki: booleanhas_pages: booleanhas_discussions: booleanhas_pull_requests: booleanpull_request_creation_policy: string, enum: all, collaborators_onlyforks_count: integermirror_url: string or nullarchived: booleandisabled: booleanopen_issues_count: integerlicense: any of:
key: required, stringname: required, stringurl: required, string or null, format: urispdx_id: required, string or nullnode_id: required, stringhtml_url: string, format: uriallow_forking: booleanis_template: booleanweb_commit_signoff_required: booleantopics: array of stringvisibility: stringforks: integeropen_issues: integerwatchers: integerdefault_branch: stringpublic: booleanpages: required, array of objects:
page_name: string or nulltitle: string or nullsummary: string or nullaction: stringsha: stringhtml_url: stringaction: required, stringmember: required, Simple User (see above)repository_id: required, integerpush_id: required, integerref: required, stringhead: required, stringbefore: required, stringaction: required, stringnumber: required, integerpull_request: required, Pull Request Minimal:
id: required, integer, format: int64number: required, integerurl: required, stringhead: required, object:
ref: required, stringsha: required, stringrepo: required, objectbase: required, object:
ref: required, stringsha: required, stringrepo: required, objectassignee: Simple User (see above)assignees: array of Simple User (see above)label: Label (see above)labels: array of Label (see above)action: required, stringpull_request: required, Pull Request Minimal (see above)comment: required, object:
id: required, integernode_id: required, stringurl: required, string, format: uripull_request_review_id: required, integer or nulldiff_hunk: required, stringpath: required, stringposition: required, integer or nulloriginal_position: required, integersubject_type: string or nullcommit_id: required, stringuser: required, User:
avatar_url: string, format: urideleted: booleanemail: string or nullevents_url: string, format: uri-templatefollowers_url: string, format: urifollowing_url: string, format: uri-templategists_url: string, format: uri-templategravatar_id: stringhtml_url: string, format: uriid: integer, format: int64login: stringname: stringnode_id: stringorganizations_url: string, format: urireceived_events_url: string, format: urirepos_url: string, format: urisite_admin: booleanstarred_url: string, format: uri-templatesubscriptions_url: string, format: uritype: string, enum: Bot, User, Organizationurl: string, format: uriuser_view_type: stringbody: required, stringcreated_at: required, string, format: date-timeupdated_at: required, string, format: date-timehtml_url: required, string, format: uripull_request_url: required, string, format: uri_links: required, object:
html: required, objectpull_request: required, objectself: required, objectoriginal_commit_id: required, stringreactions: required, Reactions:
+1: integer-1: integerconfused: integereyes: integerheart: integerhooray: integerlaugh: integerrocket: integertotal_count: integerurl: string, format: uriin_reply_to_id: integeraction: required, stringreview: required, object:
id: integernode_id: stringuser: any of:
body: stringcommit_id: stringsubmitted_at: string or nullstate: stringhtml_url: string, format: uripull_request_url: string, format: uri_links: object:
html: required, objectpull_request: required, objectupdated_at: stringpull_request: required, Pull Request Minimal (see above)action: required, stringcomment: required, object:
html_url: string, format: uriurl: string, format: uriid: integernode_id: stringbody: stringpath: string or nullposition: integer or nullline: integer or nullcommit_id: stringuser: any of:
created_at: string, format: date-timeupdated_at: string, format: date-timereactions: Reaction Rollup (see above)action: required, stringrelease: required, all of:
url: required, string, format: urihtml_url: required, string, format: uriassets_url: required, string, format: uriupload_url: required, stringtarball_url: required, string or null, format: urizipball_url: required, string or null, format: uriid: required, integernode_id: required, stringtag_name: required, stringtarget_commitish: required, stringname: required, string or nullbody: string or nulldraft: required, booleanprerelease: required, booleanimmutable: booleancreated_at: required, string, format: date-timepublished_at: required, string or null, format: date-timeupdated_at: string or null, format: date-timeauthor: required, Simple User (see above)assets: required, array of Release Asset:
url: required, string, format: uribrowser_download_url: required, string, format: uriid: required, integernode_id: required, stringname: required, stringlabel: required, string or nullstate: required, string, enum: uploaded, opencontent_type: required, stringsize: required, integerdigest: required, string or nulldownload_count: required, integercreated_at: required, string, format: date-timeupdated_at: required, string, format: date-timeuploader: required, any of:
body_html: stringbody_text: stringmentions_count: integerdiscussion_url: string, format: urireactions: Reaction Rollup (see above)is_short_description_html_truncated: booleanshort_description_html: stringaction: required, stringpublic: required, booleancreated_at: required, string or null, format: date-timeGET /networks/{owner}/{repo}/events
Note
This API is not built to serve real-time use cases. Depending on the time of day, event latency can be anywhere from 30s to 6h.
accept (string)application/vnd.github+json is recommended.owner (string) (required)
The account owner of the repository. The name is not case sensitive.
repo (string) (required)
The name of the repository without the .git extension. The name is not case sensitive.
per_page (integer)
The number of results per page (max 100). For more information, see "Using pagination in the REST API."
Default: 30
page (integer)
The page number of the results to fetch. For more information, see "Using pagination in the REST API."
Default: 1
200 - OK
301 - Moved permanently
304 - Not modified
403 - Forbidden
404 - Resource not found
Request:
curl -L \
-X GET \
https://api.github.com/networks/OWNER/REPO/events
Response schema (Status: 200):
Same response schema as List public events.
GET /orgs/{org}/events
Note
This API is not built to serve real-time use cases. Depending on the time of day, event latency can be anywhere from 30s to 6h.
accept (string)application/vnd.github+json is recommended.org (string) (required)
The organization name. The name is not case sensitive.
per_page (integer)
The number of results per page (max 100). For more information, see "Using pagination in the REST API."
Default: 30
page (integer)
The page number of the results to fetch. For more information, see "Using pagination in the REST API."
Default: 1
Request:
curl -L \
-X GET \
https://api.github.com/orgs/ORG/events
Response schema (Status: 200):
Same response schema as List public events.
GET /repos/{owner}/{repo}/events
Note
This API is not built to serve real-time use cases. Depending on the time of day, event latency can be anywhere from 30s to 6h.
accept (string)application/vnd.github+json is recommended.owner (string) (required)
The account owner of the repository. The name is not case sensitive.
repo (string) (required)
The name of the repository without the .git extension. The name is not case sensitive.
per_page (integer)
The number of results per page (max 100). For more information, see "Using pagination in the REST API."
Default: 30
page (integer)
The page number of the results to fetch. For more information, see "Using pagination in the REST API."
Default: 1
Request:
curl -L \
-X GET \
https://api.github.com/repos/OWNER/REPO/events
Response schema (Status: 200):
Same response schema as List public events.
GET /users/{username}/events
If you are authenticated as the given user, you will see your private events. Otherwise, you'll only see public events. Optional: use the fine-grained token with following permission set to view private events: "Events" user permissions (read).
Note
This API is not built to serve real-time use cases. Depending on the time of day, event latency can be anywhere from 30s to 6h.
accept (string)application/vnd.github+json is recommended.username (string) (required)
The handle for the GitHub user account.
per_page (integer)
The number of results per page (max 100). For more information, see "Using pagination in the REST API."
Default: 30
page (integer)
The page number of the results to fetch. For more information, see "Using pagination in the REST API."
Default: 1
Request:
curl -L \
-X GET \
https://api.github.com/users/USERNAME/events
Response schema (Status: 200):
Same response schema as List public events.
GET /users/{username}/events/orgs/{org}
This is the user's organization dashboard. You must be authenticated as the user to view this.
Note
This API is not built to serve real-time use cases. Depending on the time of day, event latency can be anywhere from 30s to 6h.
accept (string)application/vnd.github+json is recommended.username (string) (required)
The handle for the GitHub user account.
org (string) (required)
The organization name. The name is not case sensitive.
per_page (integer)
The number of results per page (max 100). For more information, see "Using pagination in the REST API."
Default: 30
page (integer)
The page number of the results to fetch. For more information, see "Using pagination in the REST API."
Default: 1
Request:
curl -L \
-X GET \
https://api.github.com/users/USERNAME/events/orgs/ORG
Response schema (Status: 200):
Same response schema as List public events.
GET /users/{username}/events/public
Note
This API is not built to serve real-time use cases. Depending on the time of day, event latency can be anywhere from 30s to 6h.
accept (string)application/vnd.github+json is recommended.username (string) (required)
The handle for the GitHub user account.
per_page (integer)
The number of results per page (max 100). For more information, see "Using pagination in the REST API."
Default: 30
page (integer)
The page number of the results to fetch. For more information, see "Using pagination in the REST API."
Default: 1
Request:
curl -L \
-X GET \
https://api.github.com/users/USERNAME/events/public
Response schema (Status: 200):
Same response schema as List public events.
GET /users/{username}/received_events
These are events that you've received by watching repositories and following users. If you are authenticated as the
given user, you will see private events. Otherwise, you'll only see public events.
Note
This API is not built to serve real-time use cases. Depending on the time of day, event latency can be anywhere from 30s to 6h.
accept (string)application/vnd.github+json is recommended.username (string) (required)
The handle for the GitHub user account.
per_page (integer)
The number of results per page (max 100). For more information, see "Using pagination in the REST API."
Default: 30
page (integer)
The page number of the results to fetch. For more information, see "Using pagination in the REST API."
Default: 1
Request:
curl -L \
-X GET \
https://api.github.com/users/USERNAME/received_events
Response schema (Status: 200):
Same response schema as List public events.
GET /users/{username}/received_events/public
Note
This API is not built to serve real-time use cases. Depending on the time of day, event latency can be anywhere from 30s to 6h.
accept (string)application/vnd.github+json is recommended.username (string) (required)
The handle for the GitHub user account.
per_page (integer)
The number of results per page (max 100). For more information, see "Using pagination in the REST API."
Default: 30
page (integer)
The page number of the results to fetch. For more information, see "Using pagination in the REST API."
Default: 1
Request:
curl -L \
-X GET \
https://api.github.com/users/USERNAME/received_events/public
Response schema (Status: 200):
Same response schema as List public events.