Use the REST API to manage assignees on issues and pull requests.
You can use the REST API to view, add, and remove assignees on issues and pull requests. Every pull request is an issue, but not every issue is a pull request. For this reason, "shared" actions for both features, like managing assignees, labels, and milestones, are provided within the Issues endpoints.
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}/assignees
Lists the available assignees for issues in a repository.
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
404 - Resource not found
Request:
curl -L \
-X GET \
https://api.github.com/repos/OWNER/REPO/assignees
Response schema (Status: 200):
Array of Simple User:
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: stringGET /repos/{owner}/{repo}/assignees/{assignee}
Checks if a user has permission to be assigned to an issue in this repository.
If the assignee can be assigned to issues in the repository, a 204 header with no content is returned.
Otherwise a 404 status code is returned.
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.
assignee (string) (required)
204 - If the assignee can be assigned to issues in the repository, a 204 header with no content is returned.
404 - Otherwise a 404 status code is returned.
Request:
curl -L \
-X GET \
https://api.github.com/repos/OWNER/REPO/assignees/ASSIGNEE
Response schema (Status: 204):
POST /repos/{owner}/{repo}/issues/{issue_number}/assignees
Adds up to 10 assignees to an issue. Users already assigned to an issue are not replaced.
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.
assignees (array)Request:
curl -L \
-X POST \
https://api.github.com/repos/OWNER/REPO/issues/ISSUE_NUMBER/assignees \
-d '{
"assignees": [
"hubot",
"other_user"
]
}'
Response schema (Status: 201):
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:
key: required, stringname: required, stringurl: required, string or null, format: urispdx_id: required, string or nullnode_id: required, stringhtml_url: string, format: uriforks: required, integerpermissions: object:
admin: required, booleanpull: required, booleantriage: booleanpush: required, booleanmaintain: booleanowner: required, Simple User (see above)private: 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: object:
lexical_search_ok: booleanlexical_commit_sha: stringperformed_via_github_app: any of:
id: required, integerslug: stringnode_id: required, stringclient_id: stringowner: required, one of:
description: string or nullhtml_url: required, string, format: uriwebsite_url: string or null, format: uriid: required, integernode_id: required, stringname: required, stringslug: required, stringcreated_at: required, string or null, format: date-timeupdated_at: required, string or null, format: date-timeavatar_url: required, string, format: uriname: 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: string:
issues: stringchecks: stringmetadata: stringcontents: stringdeployments: 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: Reaction Rollup (see above)pin: any of:
pinned_at: required, string, format: date-timepinned_by: required, any of:
minimized: any of:
reason: required, string or nullissue_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 null:
id: required, integer, format: int64name: required, stringcolor: required, stringmulti_select_options: array of objects or null:
id: required, integer, format: int64name: required, stringcolor: required, stringDELETE /repos/{owner}/{repo}/issues/{issue_number}/assignees
Removes one or more assignees from 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.
assignees (array of strings)Request:
curl -L \
-X DELETE \
https://api.github.com/repos/OWNER/REPO/issues/ISSUE_NUMBER/assignees \
-d '{
"assignees": [
"hubot",
"other_user"
]
}'
Response schema (Status: 200):
Same response schema as Add assignees to an issue.
GET /repos/{owner}/{repo}/issues/{issue_number}/assignees/{assignee}
Checks if a user has permission to be assigned to a specific issue.
If the assignee can be assigned to this issue, a 204 status code with no content is returned.
Otherwise a 404 status code is returned.
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.
assignee (string) (required)
204 - Response if assignee can be assigned to issue_number
404 - Response if assignee can not be assigned to issue_number
Request:
curl -L \
-X GET \
https://api.github.com/repos/OWNER/REPO/issues/ISSUE_NUMBER/assignees/ASSIGNEE
Response schema (Status: 204):