协作者的 REST API 端点
使用 REST API 管理仓库的协作者。
列出仓库协作者
对于组织拥有的仓库,协作者列表包括外部协作者、作为直接协作者的组织成员、通过团队成员资格获得访问权限的组织成员、通过默认组织权限获得访问权限的组织成员以及组织所有者。组织成员对组织拥有的仓库具有写入、维护或管理员权限,可以使用此端点。
团队成员将包括子团队的成员。
经过身份验证的用户必须对仓库具有推送访问权限才能使用此端点。
OAuth 应用程序令牌和个人访问令牌(经典)需要 read:org
和 repo
范围才能使用此端点。
用于“列出仓库协作者”的细粒度访问令牌
此端点适用于以下细粒度令牌类型
细粒度令牌必须具有以下权限集
- “元数据”仓库权限(读取)
“列出仓库协作者”的参数
名称、类型、描述 |
---|
accept string 建议设置为 |
名称、类型、描述 |
---|
owner string 必需仓库的帐户所有者。名称不区分大小写。 |
repo string 必需仓库的名称,不包括 |
名称、类型、描述 |
---|
affiliation string 根据其关联性过滤返回的协作者。 默认: 可以是以下之一: |
permission string 根据协作者在仓库上的权限过滤协作者。如果未指定,将返回所有协作者。 可以是以下之一:: |
per_page 整数 每页结果数(最大 100)。有关更多信息,请参阅“在 REST API 中使用分页”。 默认值: |
page 整数 要获取的结果页码。有关更多信息,请参阅“在 REST API 中使用分页”。 默认值: |
“列出仓库合作者”的 HTTP 响应状态码
状态码 | 描述 |
---|---|
200 | OK |
404 | 资源未找到 |
“列出仓库合作者”的代码示例
请求示例
curl -L \ -H "Accept: application/vnd.github+json" \ -H "Authorization: Bearer <YOUR-TOKEN>" \ -H "X-GitHub-Api-Version: 2022-11-28" \ https://api.github.com/repos/OWNER/REPO/collaborators
响应
状态:200
[ { "login": "octocat", "id": 1, "node_id": "MDQ6VXNlcjE=", "avatar_url": "https://github.com/images/error/octocat_happy.gif", "gravatar_id": "", "url": "https://api.github.com/users/octocat", "html_url": "https://github.com/octocat", "followers_url": "https://api.github.com/users/octocat/followers", "following_url": "https://api.github.com/users/octocat/following{/other_user}", "gists_url": "https://api.github.com/users/octocat/gists{/gist_id}", "starred_url": "https://api.github.com/users/octocat/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/octocat/subscriptions", "organizations_url": "https://api.github.com/users/octocat/orgs", "repos_url": "https://api.github.com/users/octocat/repos", "events_url": "https://api.github.com/users/octocat/events{/privacy}", "received_events_url": "https://api.github.com/users/octocat/received_events", "type": "User", "site_admin": false, "permissions": { "pull": true, "triage": true, "push": true, "maintain": false, "admin": false }, "role_name": "write" } ]
检查用户是否为仓库合作者
对于组织拥有的仓库,合作者列表包括外部合作者、作为直接合作者的组织成员、通过团队成员资格获得访问权限的组织成员、通过默认组织权限获得访问权限的组织成员以及组织所有者。
团队成员将包括子团队的成员。
经过身份验证的用户必须对仓库具有推送访问权限才能使用此端点。
OAuth 应用程序令牌和个人访问令牌(经典)需要 read:org
和 repo
范围才能使用此端点。
“检查用户是否为仓库合作者”的细粒度访问令牌
此端点适用于以下细粒度令牌类型
细粒度令牌必须具有以下权限集
- “元数据”仓库权限(读取)
“检查用户是否为仓库合作者”的参数
名称、类型、描述 |
---|
accept string 建议设置为 |
名称、类型、描述 |
---|
owner string 必需仓库的帐户所有者。名称不区分大小写。 |
repo string 必需仓库的名称,不包括 |
username 字符串 必需GitHub 用户帐户的用户名。 |
“检查用户是否为仓库合作者”的 HTTP 响应状态码
状态码 | 描述 |
---|---|
204 | 如果用户是合作者,则返回响应 |
404 | 如果用户不是合作者,则返回“未找到” |
“检查用户是否为仓库合作者”的代码示例
请求示例
curl -L \ -H "Accept: application/vnd.github+json" \ -H "Authorization: Bearer <YOUR-TOKEN>" \ -H "X-GitHub-Api-Version: 2022-11-28" \ https://api.github.com/repos/OWNER/REPO/collaborators/USERNAME
如果用户是合作者,则返回响应
状态:204
添加仓库合作者
此端点会触发 通知。使用此端点过快地创建内容可能会导致二级速率限制。有关更多信息,请参阅“API 速率限制”和“使用 REST API 的最佳实践”。
企业管理员可能会限制添加外部合作者。有关更多信息,请参阅“在企业中执行仓库管理策略”。
有关权限级别的更多信息,请参阅“组织拥有的仓库的权限级别”。当组织基础角色存在时,对组织成员可以授予哪些权限存在限制。在这种情况下,授予的权限必须等于或高于组织基础权限。否则,请求将失败,并显示
Cannot assign {member} permission of {role name}
请注意,如果您选择不传递任何参数,则在调用此端点时需要将 Content-Length
设置为零。有关更多信息,请参阅“HTTP 方法”。
受邀者将收到一条通知,告知他们已受邀加入仓库,他们必须接受或拒绝邀请。他们可以通过通知页面、收到的电子邮件或使用 API 来执行此操作。
更新现有合作者的权限级别
该端点也可以用于更改现有协作者的权限,而无需先删除并重新添加协作者。要更改权限,请使用相同的端点并传递不同的permission
参数。响应将是204
,没有其他指示权限级别已更改。
速率限制
您每天最多可以向一个仓库发送 50 个邀请。请注意,如果您邀请组织成员加入组织仓库,则没有限制。
用于“添加仓库协作者”的细粒度访问令牌
此端点适用于以下细粒度令牌类型
细粒度令牌必须具有以下权限集
- “管理”仓库权限(写入)
用于“添加仓库协作者”的参数
名称、类型、描述 |
---|
accept string 建议设置为 |
名称、类型、描述 |
---|
owner string 必需仓库的帐户所有者。名称不区分大小写。 |
repo string 必需仓库的名称,不包括 |
username 字符串 必需GitHub 用户帐户的用户名。 |
名称、类型、描述 |
---|
permission string 要授予协作者的权限。**仅对组织拥有的仓库有效。**我们接受以下要设置的权限: 默认: |
用于“添加仓库协作者”的 HTTP 响应状态码
状态码 | 描述 |
---|---|
201 | 创建新邀请时的响应 |
204 | 响应时
|
403 | 禁止 |
422 | 验证失败,或端点已被垃圾邮件攻击。 |
用于“添加仓库协作者”的代码示例
请求示例
curl -L \ -X PUT \ -H "Accept: application/vnd.github+json" \ -H "Authorization: Bearer <YOUR-TOKEN>" \ -H "X-GitHub-Api-Version: 2022-11-28" \ https://api.github.com/repos/OWNER/REPO/collaborators/USERNAME \ -d '{"permission":"triage"}'
创建新邀请时的响应
状态:201
{
"id": 1,
"node_id": "MDEwOlJlcG9zaXRvcnkxMjk2MjY5",
"repository": {
"id": 1296269,
"node_id": "MDEwOlJlcG9zaXRvcnkxMjk2MjY5",
"name": "Hello-World",
"full_name": "octocat/Hello-World",
"owner": {
"login": "octocat",
"id": 1,
"node_id": "MDQ6VXNlcjE=",
"avatar_url": "https://github.com/images/error/octocat_happy.gif",
"gravatar_id": "",
"url": "https://api.github.com/users/octocat",
"html_url": "https://github.com/octocat",
"followers_url": "https://api.github.com/users/octocat/followers",
"following_url": "https://api.github.com/users/octocat/following{/other_user}",
"gists_url": "https://api.github.com/users/octocat/gists{/gist_id}",
"starred_url": "https://api.github.com/users/octocat/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/octocat/subscriptions",
"organizations_url": "https://api.github.com/users/octocat/orgs",
"repos_url": "https://api.github.com/users/octocat/repos",
"events_url": "https://api.github.com/users/octocat/events{/privacy}",
"received_events_url": "https://api.github.com/users/octocat/received_events",
"type": "User",
"site_admin": false
},
"private": false,
"html_url": "https://github.com/octocat/Hello-World",
"description": "This your first repo!",
"fork": false,
"url": "https://api.github.com/repos/octocat/Hello-World",
"archive_url": "https://api.github.com/repos/octocat/Hello-World/{archive_format}{/ref}",
"assignees_url": "https://api.github.com/repos/octocat/Hello-World/assignees{/user}",
"blobs_url": "https://api.github.com/repos/octocat/Hello-World/git/blobs{/sha}",
"branches_url": "https://api.github.com/repos/octocat/Hello-World/branches{/branch}",
"collaborators_url": "https://api.github.com/repos/octocat/Hello-World/collaborators{/collaborator}",
"comments_url": "https://api.github.com/repos/octocat/Hello-World/comments{/number}",
"commits_url": "https://api.github.com/repos/octocat/Hello-World/commits{/sha}",
"compare_url": "https://api.github.com/repos/octocat/Hello-World/compare/{base}...{head}",
"contents_url": "https://api.github.com/repos/octocat/Hello-World/contents/{+path}",
"contributors_url": "https://api.github.com/repos/octocat/Hello-World/contributors",
"deployments_url": "https://api.github.com/repos/octocat/Hello-World/deployments",
"downloads_url": "https://api.github.com/repos/octocat/Hello-World/downloads",
"events_url": "https://api.github.com/repos/octocat/Hello-World/events",
"forks_url": "https://api.github.com/repos/octocat/Hello-World/forks",
"git_commits_url": "https://api.github.com/repos/octocat/Hello-World/git/commits{/sha}",
"git_refs_url": "https://api.github.com/repos/octocat/Hello-World/git/refs{/sha}",
"git_tags_url": "https://api.github.com/repos/octocat/Hello-World/git/tags{/sha}",
"git_url": "git:github.com/octocat/Hello-World.git",
"issue_comment_url": "https://api.github.com/repos/octocat/Hello-World/issues/comments{/number}",
"issue_events_url": "https://api.github.com/repos/octocat/Hello-World/issues/events{/number}",
"issues_url": "https://api.github.com/repos/octocat/Hello-World/issues{/number}",
"keys_url": "https://api.github.com/repos/octocat/Hello-World/keys{/key_id}",
"labels_url": "https://api.github.com/repos/octocat/Hello-World/labels{/name}",
"languages_url": "https://api.github.com/repos/octocat/Hello-World/languages",
"merges_url": "https://api.github.com/repos/octocat/Hello-World/merges",
"milestones_url": "https://api.github.com/repos/octocat/Hello-World/milestones{/number}",
"notifications_url": "https://api.github.com/repos/octocat/Hello-World/notifications{?since,all,participating}",
"pulls_url": "https://api.github.com/repos/octocat/Hello-World/pulls{/number}",
"releases_url": "https://api.github.com/repos/octocat/Hello-World/releases{/id}",
"ssh_url": "[email protected]:octocat/Hello-World.git",
"stargazers_url": "https://api.github.com/repos/octocat/Hello-World/stargazers",
"statuses_url": "https://api.github.com/repos/octocat/Hello-World/statuses/{sha}",
"subscribers_url": "https://api.github.com/repos/octocat/Hello-World/subscribers",
"subscription_url": "https://api.github.com/repos/octocat/Hello-World/subscription",
"tags_url": "https://api.github.com/repos/octocat/Hello-World/tags",
"teams_url": "https://api.github.com/repos/octocat/Hello-World/teams",
"trees_url": "https://api.github.com/repos/octocat/Hello-World/git/trees{/sha}",
"hooks_url": "http://api.github.com/repos/octocat/Hello-World/hooks"
},
"invitee": {
"login": "octocat",
"id": 1,
"node_id": "MDQ6VXNlcjE=",
"avatar_url": "https://github.com/images/error/octocat_happy.gif",
"gravatar_id": "",
"url": "https://api.github.com/users/octocat",
"html_url": "https://github.com/octocat",
"followers_url": "https://api.github.com/users/octocat/followers",
"following_url": "https://api.github.com/users/octocat/following{/other_user}",
"gists_url": "https://api.github.com/users/octocat/gists{/gist_id}",
"starred_url": "https://api.github.com/users/octocat/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/octocat/subscriptions",
"organizations_url": "https://api.github.com/users/octocat/orgs",
"repos_url": "https://api.github.com/users/octocat/repos",
"events_url": "https://api.github.com/users/octocat/events{/privacy}",
"received_events_url": "https://api.github.com/users/octocat/received_events",
"type": "User",
"site_admin": false
},
"inviter": {
"login": "octocat",
"id": 1,
"node_id": "MDQ6VXNlcjE=",
"avatar_url": "https://github.com/images/error/octocat_happy.gif",
"gravatar_id": "",
"url": "https://api.github.com/users/octocat",
"html_url": "https://github.com/octocat",
"followers_url": "https://api.github.com/users/octocat/followers",
"following_url": "https://api.github.com/users/octocat/following{/other_user}",
"gists_url": "https://api.github.com/users/octocat/gists{/gist_id}",
"starred_url": "https://api.github.com/users/octocat/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/octocat/subscriptions",
"organizations_url": "https://api.github.com/users/octocat/orgs",
"repos_url": "https://api.github.com/users/octocat/repos",
"events_url": "https://api.github.com/users/octocat/events{/privacy}",
"received_events_url": "https://api.github.com/users/octocat/received_events",
"type": "User",
"site_admin": false
},
"permissions": "write",
"created_at": "2016-06-13T14:52:50-05:00",
"url": "https://api.github.com/user/repository_invitations/1296269",
"html_url": "https://github.com/octocat/Hello-World/invitations"
}
删除仓库协作者
从仓库中删除协作者。
要使用此端点,经过身份验证的用户必须是仓库的管理员或将自己作为目标进行删除。
此端点还
- 取消任何未完成的邀请
- 取消分配用户对任何问题的分配
- 如果用户不是组织成员,并且不是任何其他组织存储库的合作者,则会移除其对组织项目的访问权限。
- 取消对存储库的关注。
- 更新对包的访问权限。
移除用户作为合作者会对分支产生以下影响。
- 如果用户通过其对该存储库的成员资格访问了分支,则用户也将从分支中移除。
- 如果用户拥有该存储库的自己的分支,则该分支将被删除。
- 如果用户仍然对存储库具有读取权限,则来自分支的该用户的打开的拉取请求将被拒绝。
注意:用户仍然可以通过组织权限(如基本存储库权限)访问存储库。
虽然 API 会立即响应,但额外的权限更新可能需要一些额外的时间才能在后台完成。
有关分支权限的更多信息,请参阅“关于分支的权限和可见性”。
用于“移除存储库合作者”的细粒度访问令牌。
此端点适用于以下细粒度令牌类型
细粒度令牌必须具有以下权限集
- “管理”仓库权限(写入)
用于“移除存储库合作者”的参数。
名称、类型、描述 |
---|
accept string 建议设置为 |
名称、类型、描述 |
---|
owner string 必需仓库的帐户所有者。名称不区分大小写。 |
repo string 必需仓库的名称,不包括 |
username 字符串 必需GitHub 用户帐户的用户名。 |
用于“移除存储库合作者”的 HTTP 响应状态代码。
状态码 | 描述 |
---|---|
204 | 当合作者从存储库中移除时,将返回无内容。 |
403 | 禁止 |
422 | 验证失败,或端点已被垃圾邮件攻击。 |
用于“移除存储库合作者”的代码示例。
请求示例
curl -L \ -X DELETE \ -H "Accept: application/vnd.github+json" \ -H "Authorization: Bearer <YOUR-TOKEN>" \ -H "X-GitHub-Api-Version: 2022-11-28" \ https://api.github.com/repos/OWNER/REPO/collaborators/USERNAME
当合作者从存储库中移除时,将返回无内容。
状态:204
获取用户的存储库权限
检查合作者的存储库权限。可能的存储库权限为 admin
、write
、read
和 none
。
注意:permission
属性提供 admin
、write
、read
和 none
的传统基本角色,其中 maintain
角色映射到 write
,triage
角色映射到 read
。要确定分配给合作者的角色,请参阅 role_name
属性,它将提供完整的角色名称,包括自定义角色。permissions
哈希也可以用于确定合作者对存储库的哪个基本访问级别。
获取用户仓库权限的细粒度访问令牌
此端点适用于以下细粒度令牌类型
细粒度令牌必须具有以下权限集
- “元数据”仓库权限(读取)
获取用户仓库权限的参数
名称、类型、描述 |
---|
accept string 建议设置为 |
名称、类型、描述 |
---|
owner string 必需仓库的帐户所有者。名称不区分大小写。 |
repo string 必需仓库的名称,不包括 |
username 字符串 必需GitHub 用户帐户的用户名。 |
获取用户仓库权限的 HTTP 响应状态码
状态码 | 描述 |
---|---|
200 | 如果用户具有管理员权限 |
404 | 资源未找到 |
获取用户仓库权限的代码示例
请求示例
curl -L \ -H "Accept: application/vnd.github+json" \ -H "Authorization: Bearer <YOUR-TOKEN>" \ -H "X-GitHub-Api-Version: 2022-11-28" \ https://api.github.com/repos/OWNER/REPO/collaborators/USERNAME/permission
如果用户具有管理员权限
状态:200
{ "permission": "admin", "role_name": "admin", "user": { "login": "octocat", "id": 1, "node_id": "MDQ6VXNlcjE=", "avatar_url": "https://github.com/images/error/octocat_happy.gif", "gravatar_id": "", "url": "https://api.github.com/users/octocat", "html_url": "https://github.com/octocat", "followers_url": "https://api.github.com/users/octocat/followers", "following_url": "https://api.github.com/users/octocat/following{/other_user}", "gists_url": "https://api.github.com/users/octocat/gists{/gist_id}", "starred_url": "https://api.github.com/users/octocat/starred{/owner}{/repo}", "subscriptions_url": "https://api.github.com/users/octocat/subscriptions", "organizations_url": "https://api.github.com/users/octocat/orgs", "repos_url": "https://api.github.com/users/octocat/repos", "events_url": "https://api.github.com/users/octocat/events{/privacy}", "received_events_url": "https://api.github.com/users/octocat/received_events", "type": "User", "site_admin": false } }