Use the REST API to interact with reactions on GitHub.
You can create and manage reactions to comments, issues, pull requests, and discussions on GitHub. When creating a reaction, the allowed values for the content parameter are as follows (with the corresponding emoji for reference):
| Content | Emoji |
|---|---|
+1 |
👍 |
-1 |
👎 |
laugh |
😄 |
confused |
😕 |
heart |
❤️ |
hooray |
🎉 |
rocket |
🚀 |
eyes |
👀 |
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 /repos/{owner}/{repo}/comments/{comment_id}/reactions
List the reactions to a commit comment.
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.
comment_id (integer) (required)
The unique identifier of the comment.
content (string)
Returns a single reaction type. Omit this parameter to list all reactions to a commit comment.
Can be one of: +1, -1, laugh, confused, heart, hooray, rocket, eyes
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
404 - Resource not found
Request:
curl -L \
-X GET \
https://api.github.com/repos/OWNER/REPO/comments/COMMENT_ID/reactions
Response schema (Status: 200):
Array of Reaction:
id: required, integernode_id: required, stringuser: 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: stringcontent: required, string, enum: +1, -1, laugh, confused, heart, hooray, rocket, eyescreated_at: required, string, format: date-timePOST /repos/{owner}/{repo}/comments/{comment_id}/reactions
Create a reaction to a commit comment. A response with an HTTP 200 status means that you already added the reaction type to this commit comment.
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.
comment_id (integer) (required)
The unique identifier of the comment.
content (string) (required)+1, -1, laugh, confused, heart, hooray, rocket, eyes200 - Reaction exists
201 - Reaction created
422 - Validation failed, or the endpoint has been spammed.
Request:
curl -L \
-X POST \
https://api.github.com/repos/OWNER/REPO/comments/COMMENT_ID/reactions \
-d '{
"content": "heart"
}'
Response schema (Status: 200):
id: required, integernode_id: required, stringuser: 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: stringcontent: required, string, enum: +1, -1, laugh, confused, heart, hooray, rocket, eyescreated_at: required, string, format: date-timeRequest:
curl -L \
-X POST \
https://api.github.com/repos/OWNER/REPO/comments/COMMENT_ID/reactions \
-d '{
"content": "heart"
}'
Response schema (Status: 201):
id: required, integernode_id: required, stringuser: 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: stringcontent: required, string, enum: +1, -1, laugh, confused, heart, hooray, rocket, eyescreated_at: required, string, format: date-timeDELETE /repos/{owner}/{repo}/comments/{comment_id}/reactions/{reaction_id}
Note
You can also specify a repository by repository_id using the route DELETE /repositories/:repository_id/comments/:comment_id/reactions/:reaction_id.
Delete a reaction to a commit comment.
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.
comment_id (integer) (required)
The unique identifier of the comment.
reaction_id (integer) (required)
The unique identifier of the reaction.
Request:
curl -L \
-X DELETE \
https://api.github.com/repos/OWNER/REPO/comments/COMMENT_ID/reactions/REACTION_ID
Response schema (Status: 204):
GET /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions
List the reactions to an issue comment.
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.
comment_id (integer) (required)
The unique identifier of the comment.
content (string)
Returns a single reaction type. Omit this parameter to list all reactions to an issue comment.
Can be one of: +1, -1, laugh, confused, heart, hooray, rocket, eyes
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
404 - Resource not found
Request:
curl -L \
-X GET \
https://api.github.com/repos/OWNER/REPO/issues/comments/COMMENT_ID/reactions
Response schema (Status: 200):
Same response schema as List reactions for a commit comment.
POST /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions
Create a reaction to an issue comment. A response with an HTTP 200 status means that you already added the reaction type to this issue comment.
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.
comment_id (integer) (required)
The unique identifier of the comment.
content (string) (required)+1, -1, laugh, confused, heart, hooray, rocket, eyes200 - Reaction exists
201 - Reaction created
422 - Validation failed, or the endpoint has been spammed.
Request:
curl -L \
-X POST \
https://api.github.com/repos/OWNER/REPO/issues/comments/COMMENT_ID/reactions \
-d '{
"content": "heart"
}'
Response schema (Status: 200):
Same response schema as Create reaction for a commit comment.
Request:
curl -L \
-X POST \
https://api.github.com/repos/OWNER/REPO/issues/comments/COMMENT_ID/reactions \
-d '{
"content": "heart"
}'
Response schema (Status: 201):
Same response schema as Create reaction for a commit comment.
DELETE /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions/{reaction_id}
Note
You can also specify a repository by repository_id using the route DELETE delete /repositories/:repository_id/issues/comments/:comment_id/reactions/:reaction_id.
Delete a reaction to an issue comment.
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.
comment_id (integer) (required)
The unique identifier of the comment.
reaction_id (integer) (required)
The unique identifier of the reaction.
Request:
curl -L \
-X DELETE \
https://api.github.com/repos/OWNER/REPO/issues/comments/COMMENT_ID/reactions/REACTION_ID
Response schema (Status: 204):
GET /repos/{owner}/{repo}/issues/{issue_number}/reactions
List the reactions to an issue.
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.
issue_number (integer) (required)
The number that identifies the issue.
content (string)
Returns a single reaction type. Omit this parameter to list all reactions to an issue.
Can be one of: +1, -1, laugh, confused, heart, hooray, rocket, eyes
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
404 - Resource not found
410 - Gone
Request:
curl -L \
-X GET \
https://api.github.com/repos/OWNER/REPO/issues/ISSUE_NUMBER/reactions
Response schema (Status: 200):
Same response schema as List reactions for a commit comment.
POST /repos/{owner}/{repo}/issues/{issue_number}/reactions
Create a reaction to an issue. A response with an HTTP 200 status means that you already added the reaction type to this issue.
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.
issue_number (integer) (required)
The number that identifies the issue.
content (string) (required)+1, -1, laugh, confused, heart, hooray, rocket, eyes200 - OK
201 - Created
422 - Validation failed, or the endpoint has been spammed.
Request:
curl -L \
-X POST \
https://api.github.com/repos/OWNER/REPO/issues/ISSUE_NUMBER/reactions \
-d '{
"content": "heart"
}'
Response schema (Status: 200):
Same response schema as Create reaction for a commit comment.
Request:
curl -L \
-X POST \
https://api.github.com/repos/OWNER/REPO/issues/ISSUE_NUMBER/reactions \
-d '{
"content": "heart"
}'
Response schema (Status: 201):
Same response schema as Create reaction for a commit comment.
DELETE /repos/{owner}/{repo}/issues/{issue_number}/reactions/{reaction_id}
Note
You can also specify a repository by repository_id using the route DELETE /repositories/:repository_id/issues/:issue_number/reactions/:reaction_id.
Delete a reaction to an issue.
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.
issue_number (integer) (required)
The number that identifies the issue.
reaction_id (integer) (required)
The unique identifier of the reaction.
Request:
curl -L \
-X DELETE \
https://api.github.com/repos/OWNER/REPO/issues/ISSUE_NUMBER/reactions/REACTION_ID
Response schema (Status: 204):
GET /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions
List the reactions to a pull request review comment.
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.
comment_id (integer) (required)
The unique identifier of the comment.
content (string)
Returns a single reaction type. Omit this parameter to list all reactions to a pull request review comment.
Can be one of: +1, -1, laugh, confused, heart, hooray, rocket, eyes
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
404 - Resource not found
Request:
curl -L \
-X GET \
https://api.github.com/repos/OWNER/REPO/pulls/comments/COMMENT_ID/reactions
Response schema (Status: 200):
Same response schema as List reactions for a commit comment.
POST /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions
Create a reaction to a pull request review comment. A response with an HTTP 200 status means that you already added the reaction type to this pull request review comment.
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.
comment_id (integer) (required)
The unique identifier of the comment.
content (string) (required)+1, -1, laugh, confused, heart, hooray, rocket, eyes200 - Reaction exists
201 - Reaction created
422 - Validation failed, or the endpoint has been spammed.
Request:
curl -L \
-X POST \
https://api.github.com/repos/OWNER/REPO/pulls/comments/COMMENT_ID/reactions \
-d '{
"content": "heart"
}'
Response schema (Status: 200):
Same response schema as Create reaction for a commit comment.
Request:
curl -L \
-X POST \
https://api.github.com/repos/OWNER/REPO/pulls/comments/COMMENT_ID/reactions \
-d '{
"content": "heart"
}'
Response schema (Status: 201):
Same response schema as Create reaction for a commit comment.
DELETE /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions/{reaction_id}
Note
You can also specify a repository by repository_id using the route DELETE /repositories/:repository_id/pulls/comments/:comment_id/reactions/:reaction_id.
Delete a reaction to a pull request review comment.
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.
comment_id (integer) (required)
The unique identifier of the comment.
reaction_id (integer) (required)
The unique identifier of the reaction.
Request:
curl -L \
-X DELETE \
https://api.github.com/repos/OWNER/REPO/pulls/comments/COMMENT_ID/reactions/REACTION_ID
Response schema (Status: 204):
GET /repos/{owner}/{repo}/releases/{release_id}/reactions
List the reactions to a release.
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.
release_id (integer) (required)
The unique identifier of the release.
content (string)
Returns a single reaction type. Omit this parameter to list all reactions to a release.
Can be one of: +1, laugh, heart, hooray, rocket, eyes
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
404 - Resource not found
Request:
curl -L \
-X GET \
https://api.github.com/repos/OWNER/REPO/releases/RELEASE_ID/reactions
Response schema (Status: 200):
Same response schema as List reactions for a commit comment.
POST /repos/{owner}/{repo}/releases/{release_id}/reactions
Create a reaction to a release. A response with a Status: 200 OK means that you already added the reaction type to this release.
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.
release_id (integer) (required)
The unique identifier of the release.
content (string) (required)+1, laugh, heart, hooray, rocket, eyes200 - Reaction exists
201 - Reaction created
422 - Validation failed, or the endpoint has been spammed.
Request:
curl -L \
-X POST \
https://api.github.com/repos/OWNER/REPO/releases/RELEASE_ID/reactions \
-d '{
"content": "heart"
}'
Response schema (Status: 200):
Same response schema as Create reaction for a commit comment.
Request:
curl -L \
-X POST \
https://api.github.com/repos/OWNER/REPO/releases/RELEASE_ID/reactions \
-d '{
"content": "heart"
}'
Response schema (Status: 201):
Same response schema as Create reaction for a commit comment.
DELETE /repos/{owner}/{repo}/releases/{release_id}/reactions/{reaction_id}
Note
You can also specify a repository by repository_id using the route DELETE delete /repositories/:repository_id/releases/:release_id/reactions/:reaction_id.
Delete a reaction to a release.
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.
release_id (integer) (required)
The unique identifier of the release.
reaction_id (integer) (required)
The unique identifier of the reaction.
Request:
curl -L \
-X DELETE \
https://api.github.com/repos/OWNER/REPO/releases/RELEASE_ID/reactions/REACTION_ID
Response schema (Status: 204):