프로젝트 멤버 API
Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
이 엔드포인트를 사용하여 프로젝트 멤버와 상호 작용합니다. 그룹 멤버에 대한 정보는 그룹 멤버 API를 참조하세요. 인증된 사용자가 볼 수 있는 지정된 프로젝트의 모든 직접 멤버를 나열합니다. 이 함수는 사용자 목록을 제한하기 위해 page와 per_page 페이지 매김 매개변수를 사용합니다.
이 엔드포인트를 사용하여 프로젝트 멤버와 상호 작용합니다.
그룹 멤버에 대한 정보는 그룹 멤버 API를 참조하세요.
알려진 문제#
group_saml_identity와group_scim_identity속성은 SSO가 활성화된 그룹의 그룹 소유자에게만 표시됩니다.email속성은 API 요청이 그룹 자체나 해당 그룹의 하위 그룹 또는 프로젝트에 전송될 때, 그룹의 엔터프라이즈 사용자에 대한 그룹 소유자에게만 표시됩니다.
프로젝트의 모든 직접 멤버 목록 조회#
인증된 사용자가 볼 수 있는 지정된 프로젝트의 모든 직접 멤버를 나열합니다. 상속된 멤버를 포함하려면 프로젝트의 모든 멤버 목록 조회를 사용하세요.
이 함수는 사용자 목록을 제한하기 위해 page와 per_page 페이지 매김 매개변수를 사용합니다.
GET /projects/:id/members
| 속성 | 유형 | 필수 여부 | 설명 |
|---|---|---|---|
id |
integer 또는 string | 예 | 프로젝트의 ID 또는 URL 인코딩된 경로. |
query |
string | 아니요 | 이름, 이메일 또는 사용자명에 따라 결과를 필터링합니다. 부분 값을 사용하여 쿼리 범위를 넓힐 수 있습니다. |
user_ids |
integers 배열 | 아니요 | 주어진 사용자 ID에 대해 결과를 필터링합니다. |
skip_users |
integers 배열 | 아니요 | 결과에서 지정된 사용자를 제외합니다. |
show_seat_info |
boolean | 아니요 | 사용자의 시트 정보를 표시합니다. |
curl --header "PRIVATE-TOKEN: <your_access_token>" \
--url "https://gitlab.example.com/api/v4/projects/:id/members"
응답 예시:
[
{
"id": 1,
"username": "raymond_smith",
"name": "Raymond Smith",
"state": "active",
"avatar_url": "https://www.gravatar.com/avatar/c2525a7f58ae3776070e44c106c48e15?s=80&d=identicon",
"web_url": "http://192.168.1.8:3000/root",
"created_at": "2012-09-22T14:13:35Z",
"created_by": {
"id": 2,
"username": "john_doe",
"name": "John Doe",
"state": "active",
"avatar_url": "https://www.gravatar.com/avatar/c2525a7f58ae3776070e44c106c48e15?s=80&d=identicon",
"web_url": "http://192.168.1.8:3000/root"
},
"expires_at": "2012-10-22",
"access_level": 30,
"group_saml_identity": null,
"is_using_seat": true
},
{
"id": 2,
"username": "john_doe",
"name": "John Doe",
"state": "active",
"avatar_url": "https://www.gravatar.com/avatar/c2525a7f58ae3776070e44c106c48e15?s=80&d=identicon",
"web_url": "http://192.168.1.8:3000/root",
"created_at": "2012-09-22T14:13:35Z",
"created_by": {
"id": 1,
"username": "raymond_smith",
"name": "Raymond Smith",
"state": "active",
"avatar_url": "https://www.gravatar.com/avatar/c2525a7f58ae3776070e44c106c48e15?s=80&d=identicon",
"web_url": "http://192.168.1.8:3000/root"
},
"expires_at": "2012-10-22",
"access_level": 30,
"email": "john@example.com",
"group_saml_identity": {
"extern_uid":"ABC-1234567890",
"provider": "group_saml",
"saml_provider_id": 10
}
}
]
프로젝트의 모든 멤버 목록 조회#
히스토리
- GitLab 16.10에서
webui_members_inherited_users플래그와 함께 현재 사용자가 공유 그룹 또는 프로젝트의 멤버인 경우 초대된 비공개 그룹의 멤버를 반환하도록 변경되었습니다. 기본적으로 비활성화. webui_members_inherited_users기능 플래그가 GitLab 17.0에서 GitLab.com 및 GitLab Self-Managed에서 활성화되었습니다.webui_members_inherited_users기능 플래그가 GitLab 17.4에서 제거되었습니다. 초대된 그룹의 멤버가 기본적으로 표시됩니다.
상속된 멤버, 초대된 사용자, 상위 그룹을 통한 권한을 포함하여 인증된 사용자가 볼 수 있는 모든 프로젝트 멤버를 나열합니다.
사용자가 이 프로젝트와 하나 이상의 상위 그룹의 멤버인 경우,
가장 높은 access_level을 가진 멤버십만 반환됩니다.
이는 사용자의 유효 권한을 나타냅니다.
초대된 그룹의 멤버는 다음 중 하나에 해당하는 경우 반환됩니다:
- 초대된 그룹이 공개 상태입니다.
- 요청자도 초대된 그룹의 멤버입니다.
- 요청자가 공유 그룹 또는 프로젝트의 멤버입니다.
초대된 그룹 멤버는 공유 그룹 또는 프로젝트에 공유 멤버십을 갖습니다. 즉, 요청자가 공유 그룹 또는 프로젝트의 멤버이지만 초대된 비공개 그룹의 멤버가 아닌 경우, 이 엔드포인트를 사용하면 요청자는 초대된 비공개 그룹 멤버를 포함한 모든 공유 그룹 또는 프로젝트 멤버를 조회할 수 있습니다.
이 함수는 사용자 목록을 제한하기 위해 page와 per_page 페이지 매김 매개변수를 사용합니다.
GET /projects/:id/members/all
| 속성 | 유형 | 필수 여부 | 설명 |
|---|---|---|---|
id |
integer 또는 string | 예 | 프로젝트의 ID 또는 URL 인코딩된 경로. |
query |
string | 아니요 | 이름, 이메일 또는 사용자명에 따라 결과를 필터링합니다. 부분 값을 사용하여 쿼리 범위를 넓힐 수 있습니다. |
user_ids |
integers 배열 | 아니요 | 주어진 사용자 ID에 대해 결과를 필터링합니다. |
show_seat_info |
boolean | 아니요 | 사용자의 시트 정보를 표시합니다. |
state |
string | 아니요 | 멤버 상태에 따라 결과를 필터링합니다. awaiting 또는 active 중 하나입니다. Premium 및 Ultimate에서만 사용 가능. |
curl --header "PRIVATE-TOKEN: <your_access_token>" \
--url "https://gitlab.example.com/api/v4/projects/:id/members/all"
응답 예시:
[
{
"id": 1,
"username": "raymond_smith",
"name": "Raymond Smith",
"state": "active",
"avatar_url": "https://www.gravatar.com/avatar/c2525a7f58ae3776070e44c106c48e15?s=80&d=identicon",
"web_url": "http://192.168.1.8:3000/root",
"created_at": "2012-09-22T14:13:35Z",
"created_by": {
"id": 2,
"username": "john_doe",
"name": "John Doe",
"state": "active",
"avatar_url": "https://www.gravatar.com/avatar/c2525a7f58ae3776070e44c106c48e15?s=80&d=identicon",
"web_url": "http://192.168.1.8:3000/root"
},
"expires_at": "2012-10-22",
"access_level": 30,
"group_saml_identity": null
},
{
"id": 2,
"username": "john_doe",
"name": "John Doe",
"state": "active",
"avatar_url": "https://www.gravatar.com/avatar/c2525a7f58ae3776070e44c106c48e15?s=80&d=identicon",
"web_url": "http://192.168.1.8:3000/root",
"created_at": "2012-09-22T14:13:35Z",
"created_by": {
"id": 1,
"username": "raymond_smith",
"name": "Raymond Smith",
"state": "active",
"avatar_url": "https://www.gravatar.com/avatar/c2525a7f58ae3776070e44c106c48e15?s=80&d=identicon",
"web_url": "http://192.168.1.8:3000/root"
},
"expires_at": "2012-10-22",
"access_level": 30,
"email": "john@example.com",
"group_saml_identity": {
"extern_uid":"ABC-1234567890",
"provider": "group_saml",
"saml_provider_id": 10
}
},
{
"id": 3,
"username": "foo_bar",
"name": "Foo bar",
"state": "active",
"avatar_url": "https://www.gravatar.com/avatar/c2525a7f58ae3776070e44c106c48e15?s=80&d=identicon",
"web_url": "http://192.168.1.8:3000/root",
"created_at": "2012-10-22T14:13:35Z",
"created_by": {
"id": 2,
"username": "john_doe",
"name": "John Doe",
"state": "active",
"avatar_url": "https://www.gravatar.com/avatar/c2525a7f58ae3776070e44c106c48e15?s=80&d=identicon",
"web_url": "http://192.168.1.8:3000/root"
},
"expires_at": "2012-11-22",
"access_level": 30,
"group_saml_identity": null
}
]
프로젝트 직접 멤버 조회#
지정된 프로젝트의 직접 멤버를 조회합니다. 상속된 멤버를 조회하려면 프로젝트 멤버 조회를 사용하세요.
GET /projects/:id/members/:user_id
| 속성 | 유형 | 필수 여부 | 설명 |
|---|---|---|---|
id |
integer 또는 string | 예 | 프로젝트의 ID 또는 URL 인코딩된 경로. |
user_id |
integer | 예 | 멤버의 사용자 ID. |
curl --header "PRIVATE-TOKEN: <your_access_token>" \
--url "https://gitlab.example.com/api/v4/projects/:id/members/:user_id"
그룹 멤버에서 커스텀 역할을 업데이트하거나 제거하려면 빈 member_role_id 값을 전달합니다:
# 프로젝트 멤버십을 업데이트합니다
curl --request PUT --header "Content-Type: application/json" \
--header "Authorization: Bearer <your_access_token>" \
--data '{"member_role_id": null, "access_level": 10}' \
--url "https://gitlab.example.com/api/v4/projects/<project_id>/members/<user_id>"
응답 예시:
{
"id": 1,
"username": "raymond_smith",
"name": "Raymond Smith",
"state": "active",
"avatar_url": "https://www.gravatar.com/avatar/c2525a7f58ae3776070e44c106c48e15?s=80&d=identicon",
"web_url": "http://192.168.1.8:3000/root",
"access_level": 30,
"email": "john@example.com",
"created_at": "2012-10-22T14:13:35Z",
"created_by": {
"id": 2,
"username": "john_doe",
"name": "John Doe",
"state": "active",
"avatar_url": "https://www.gravatar.com/avatar/c2525a7f58ae3776070e44c106c48e15?s=80&d=identicon",
"web_url": "http://192.168.1.8:3000/root"
},
"expires_at": null,
"group_saml_identity": null
}
프로젝트 멤버 조회#
히스토리
- GitLab 12.4에서 도입되었습니다.
- GitLab 16.10에서
webui_members_inherited_users플래그와 함께 현재 사용자가 공유 그룹 또는 프로젝트의 멤버인 경우 초대된 비공개 그룹의 멤버를 반환하도록 변경되었습니다. 기본적으로 비활성화. - GitLab 17.0에서 GitLab.com 및 GitLab Self-Managed에서 활성화되었습니다.
webui_members_inherited_users기능 플래그가 GitLab 17.4에서 제거되었습니다. 초대된 그룹의 멤버가 기본적으로 표시됩니다.
상위 그룹을 통해 상속되거나 초대된 멤버를 포함하여 지정된 프로젝트 멤버를 조회합니다. 자세한 내용은 프로젝트의 모든 멤버 목록 조회를 참조하세요.
초대된 그룹 멤버는 공유 그룹 또는 프로젝트에 공유 멤버십을 갖습니다. 즉, 요청자가 공유 그룹 또는 프로젝트의 멤버이지만 초대된 비공개 그룹의 멤버가 아닌 경우, 이 엔드포인트를 사용하면 요청자는 초대된 비공개 그룹 멤버를 포함한 모든 공유 그룹 또는 프로젝트 멤버를 조회할 수 있습니다.
GET /projects/:id/members/all/:user_id
| 속성 | 유형 | 필수 여부 | 설명 |
|---|---|---|---|
id |
integer 또는 string | 예 | 프로젝트의 ID 또는 URL 인코딩된 경로. |
user_id |
integer | 예 | 멤버의 사용자 ID. |
curl --header "PRIVATE-TOKEN: <your_access_token>" \
--url "https://gitlab.example.com/api/v4/projects/:id/members/all/:user_id"
응답 예시:
{
"id": 1,
"username": "raymond_smith",
"name": "Raymond Smith",
"state": "active",
"avatar_url": "https://www.gravatar.com/avatar/c2525a7f58ae3776070e44c106c48e15?s=80&d=identicon",
"web_url": "http://192.168.1.8:3000/root",
"access_level": 30,
"created_at": "2012-10-22T14:13:35Z",
"created_by": {
"id": 2,
"username": "john_doe",
"name": "John Doe",
"state": "active",
"avatar_url": "https://www.gravatar.com/avatar/c2525a7f58ae3776070e44c106c48e15?s=80&d=identicon",
"web_url": "http://192.168.1.8:3000/root"
},
"email": "john@example.com",
"expires_at": null,
"group_saml_identity": null
}
프로젝트에 직접 멤버 추가#
지정된 프로젝트에 직접 멤버를 추가합니다.
그룹에 프로젝트 액세스 권한을 부여하려면 그룹과 프로젝트 공유를 참조하세요.
POST /projects/:id/members
| 속성 | 유형 | 필수 여부 | 설명 |
|---|---|---|---|
id |
integer 또는 string | 예 | 프로젝트의 ID 또는 URL 인코딩된 경로. |
user_id |
integer 또는 string | username이 제공되지 않은 경우 예 |
새 멤버의 사용자 ID 또는 쉼표로 구분된 여러 ID. |
username |
string | user_id가 제공되지 않은 경우 예 |
새 멤버의 사용자명 또는 쉼표로 구분된 여러 사용자명. |
access_level |
integer | 예 | 유효한 액세스 레벨. 가능한 값: 0 (액세스 없음), 5 (최소 액세스), 10 (Guest), 15 (Planner), 20 (Reporter), 25 (Security Manager), 30 (Developer), 40 (Maintainer), 또는 50 (Owner). 기본값: 30. |
expires_at |
string | 아니요 | YEAR-MONTH-DAY 형식의 날짜 문자열. |
invite_source |
string | 아니요 | 멤버 생성 프로세스를 시작하는 초대의 출처. GitLab 팀 멤버는 이 비공개 이슈에서 자세한 정보를 볼 수 있습니다: https://gitlab.com/gitlab-org/gitlab/-/issues/327120. |
member_role_id |
integer | 아니요 | Ultimate에서만 사용 가능. 커스텀 멤버 역할의 ID. |
curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" \
--data "user_id=1&access_level=30" \
--url "https://gitlab.example.com/api/v4/projects/:id/members"
응답 예시:
{
"id": 1,
"username": "raymond_smith",
"name": "Raymond Smith",
"state": "active",
"avatar_url": "https://www.gravatar.com/avatar/c2525a7f58ae3776070e44c106c48e15?s=80&d=identicon",
"web_url": "http://192.168.1.8:3000/root",
"created_at": "2012-10-22T14:13:35Z",
"created_by": {
"id": 2,
"username": "john_doe",
"name": "John Doe",
"state": "active",
"avatar_url": "https://www.gravatar.com/avatar/c2525a7f58ae3776070e44c106c48e15?s=80&d=identicon",
"web_url": "http://192.168.1.8:3000/root"
},
"expires_at": "2012-10-22",
"access_level": 30,
"email": "john@example.com",
"group_saml_identity": null
}
역할 승격에 대한 관리자 승인이 활성화된 경우, 기존 사용자를 청구 가능 역할로 승격시키는 멤버십 요청은 관리자 승인이 필요합니다.
비청구 가능 승격 관리를 활성화하려면
먼저 enable_member_promotion_management 애플리케이션 설정을 활성화해야 합니다.
단일 사용자 대기열 등록 예시:
curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" \
--data "user_id=1&access_level=30" \
--url "https://gitlab.example.com/api/v4/projects/:id/members"
{
"message":{
"username_1":"Request queued for administrator approval."
}
}
여러 사용자 대기열 등록 예시:
curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" \
--data "user_id=1,2&access_level=30" \
--url "https://gitlab.example.com/api/v4/projects/:id/members"
{
"queued_users": {
"username_1": "Request queued for administrator approval.",
"username_2": "Request queued for administrator approval."
},
"status": "success"
}
프로젝트 멤버 업데이트#
지정된 프로젝트 멤버를 업데이트합니다.
PUT /projects/:id/members/:user_id
| 속성 | 유형 | 필수 여부 | 설명 |
|---|---|---|---|
id |
integer 또는 string | 예 | 프로젝트의 ID 또는 URL 인코딩된 경로. |
user_id |
integer | 예 | 멤버의 사용자 ID. |
access_level |
integer | 예 | 유효한 액세스 레벨. 가능한 값: 0 (액세스 없음), 5 (최소 액세스), 10 (Guest), 15 (Planner), 20 (Reporter), 25 (Security Manager), 30 (Developer), 40 (Maintainer), 또는 50 (Owner). 기본값: 30. |
expires_at |
string | 아니요 | YEAR-MONTH-DAY 형식의 날짜 문자열. |
member_role_id |
integer | 아니요 | Ultimate에서만 사용 가능. 커스텀 멤버 역할의 ID. 값을 지정하지 않으면 모든 역할이 제거됩니다. |
curl --request PUT --header "PRIVATE-TOKEN: <your_access_token>" \
--url "https://gitlab.example.com/api/v4/projects/:id/members/:user_id?access_level=40"
응답 예시:
{
"id": 1,
"username": "raymond_smith",
"name": "Raymond Smith",
"state": "active",
"avatar_url": "https://www.gravatar.com/avatar/c2525a7f58ae3776070e44c106c48e15?s=80&d=identicon",
"web_url": "http://192.168.1.8:3000/root",
"created_at": "2012-10-22T14:13:35Z",
"created_by": {
"id": 2,
"username": "john_doe",
"name": "John Doe",
"state": "active",
"avatar_url": "https://www.gravatar.com/avatar/c2525a7f58ae3776070e44c106c48e15?s=80&d=identicon",
"web_url": "http://192.168.1.8:3000/root"
},
"expires_at": "2012-10-22",
"access_level": 40,
"email": "john@example.com",
"group_saml_identity": null
}
역할 승격에 대한 관리자 승인이 활성화된 경우, 기존 사용자를 청구 가능 역할로 승격시키는 멤버십 요청은 관리자 승인이 필요합니다.
비청구 가능 승격 관리를 활성화하려면
먼저 enable_member_promotion_management 애플리케이션 설정을 활성화해야 합니다.
응답 예시:
{
"message":{
"username_1":"Request queued for administrator approval."
}
}
프로젝트 직접 멤버 제거#
명시적으로 역할이 할당된 프로젝트에서 사용자를 제거합니다.
사용자가 제거 자격이 있으려면 그룹 멤버여야 합니다. 예를 들어, 사용자가 그룹의 프로젝트에 직접 추가되었지만 이 그룹에 명시적으로 추가되지 않은 경우 이 엔드포인트를 사용하여 제거할 수 없습니다. 자세한 내용은 그룹에서 청구 가능 멤버 제거를 참조하세요.
DELETE /projects/:id/members/:user_id
| 속성 | 유형 | 필수 여부 | 설명 |
|---|---|---|---|
id |
integer 또는 string | 예 | 프로젝트의 ID 또는 URL 인코딩된 경로. |
user_id |
integer | 예 | 멤버의 사용자 ID. |
skip_subresources |
boolean | false | 제거된 멤버의 하위 그룹 및 프로젝트에서 직접 멤버십 삭제를 건너뛸지 여부. 기본값은 false. |
unassign_issuables |
boolean | false | 제거된 멤버가 주어진 프로젝트 내의 이슈 또는 머지 리퀘스트에서 배정 해제되어야 하는지 여부. 기본값은 false. |
요청 예시:
curl --request DELETE --header "PRIVATE-TOKEN: <your_access_token>" \
--url "https://gitlab.example.com/api/v4/projects/:id/members/:user_id"
