InfoGrab DocsInfoGrab Docs

그룹 멤버 API

요약

그룹 멤버를 다루려면 이 엔드포인트를 사용합니다. 프로젝트 멤버에 대한 정보는 프로젝트 멤버 API를 참고합니다. 지정한 그룹의 모든 직접 멤버를 조회합니다. 이 함수는 사용자 목록을 제한하기 위해 페이지네이션 파라미터 page와 per_page를 받습니다.

히스토리

그룹 멤버를 다루려면 이 엔드포인트를 사용합니다.

프로젝트 멤버에 대한 정보는 프로젝트 멤버 API를 참고합니다.

알려진 문제#

  • group_saml_identity 및 group_scim_identity 속성은 SSO가 활성화된 그룹의 그룹 Owner 에게만 표시됩니다.
  • email 속성은 그룹 자체 또는 그 그룹의 하위 그룹이나 프로젝트로 API 요청을 보낼 때, 그룹의 엔터프라이즈 사용자에 한해 그룹 Owner 에게만 표시됩니다.
  • two_factor_enabled 속성은 그룹 Owner와 관리자에게만 표시됩니다.

모든 그룹 멤버 목록 조회#

지정한 그룹의 모든 직접 멤버를 조회합니다. 상위 그룹을 통해 상속된 멤버나 초대된 그룹의 멤버는 반환하지 않고 직접 멤버만 반환합니다.

이 함수는 사용자 목록을 제한하기 위해 페이지네이션 파라미터 page와 per_page를 받습니다.

GET /groups/:id/members
속성 유형 필수 설명
id integer or string yes 그룹의 ID 또는 URL 인코딩된 그룹 경로.
query string no 지정한 이름, 이메일, 사용자 이름을 기준으로 결과를 필터링합니다. 부분 값을 사용하면 쿼리 범위가 넓어집니다.
user_ids array of integers no 지정한 사용자 ID로 결과를 필터링합니다.
skip_users array of integers no 건너뛸 사용자를 결과에서 제외합니다.
show_seat_info boolean no 사용자의 시트 정보를 표시합니다.
curl --request GET \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/groups/: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",
    "two_factor_enabled": true,
    "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",
    "two_factor_enabled": false,
    "access_level": 30,
    "email": "john@example.com",
    "group_saml_identity": {
      "extern_uid":"ABC-1234567890",
      "provider": "group_saml",
      "saml_provider_id": 10
    }
  }
]

상속 및 초대 멤버를 포함한 모든 그룹 멤버 목록 조회#

히스토리

상속된 멤버, 초대된 사용자, 상위 그룹을 통한 권한을 포함하여 지정한 그룹의 모든 멤버를 조회합니다.

사용자가 이 그룹과 하나 이상의 상위 그룹에 동시에 속해 있으면, access_level 이 가장 높은 멤버십만 반환됩니다. 이 값이 해당 사용자의 실질 권한을 나타냅니다.

초대된 그룹의 멤버는 다음 중 하나에 해당하면 반환됩니다.

  • 초대된 그룹이 공개 그룹인 경우.
  • 요청자가 초대된 그룹의 멤버이기도 한 경우.
  • 요청자가 공유 그룹의 멤버인 경우.
Note

초대된 그룹의 멤버는 공유 그룹에서 공유 멤버십을 가집니다. 따라서 요청자가 공유 그룹의 멤버이지만 초대된 비공개 그룹의 멤버가 아니더라도, 이 엔드포인트를 사용하면 초대된 비공개 그룹의 멤버를 포함한 공유 그룹의 모든 멤버를 가져올 수 있습니다.

이 함수는 사용자 목록을 제한하기 위해 페이지네이션 파라미터 page와 per_page를 받습니다.

GET /groups/:id/members/all
속성 유형 필수 설명
id integer or string yes 그룹의 ID 또는 URL 인코딩된 그룹 경로.
query string no 지정한 이름, 이메일, 사용자 이름을 기준으로 결과를 필터링합니다. 부분 값을 사용하면 쿼리 범위가 넓어집니다.
user_ids array of integers no 지정한 사용자 ID로 결과를 필터링합니다.
show_seat_info boolean no 사용자의 시트 정보를 표시합니다.
state string no 멤버 상태(awaiting 또는 active)로 결과를 필터링합니다. Premium 및 Ultimate 전용입니다.
curl --request GET \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/groups/: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",
    "two_factor_enabled": true,
    "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",
    "two_factor_enabled": false,
    "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",
    "two_factor_enabled": false,
    "access_level": 30,
    "group_saml_identity": null
  }
]

그룹 멤버 조회#

그룹에서 지정한 멤버를 조회합니다. 상위 그룹을 통해 상속된 멤버는 반환하지 않고 직접 멤버만 반환합니다.

GET /groups/:id/members/:user_id
속성 유형 필수 설명
id integer or string yes 그룹의 ID 또는 URL 인코딩된 그룹 경로.
user_id integer yes 멤버의 사용자 ID.
curl --request GET \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/groups/:id/members/:user_id"

그룹 멤버의 커스텀 역할을 업데이트하거나 제거하려면 member_role_id 값을 비워서 전달합니다.

# Updates a group membership
curl --request PUT \
  --header "Content-Type: application/json" \
  --header "Authorization: Bearer <your_access_token>" \
  --data '{"member_role_id": null, "access_level": 10}' "https://gitlab.example.com/api/v4/groups/<group_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,
  "two_factor_enabled": true,
  "group_saml_identity": null
}

상속 및 초대 멤버를 포함한 그룹 멤버 조회#

히스토리

상위 그룹을 통해 상속되거나 초대된 멤버를 포함하여 그룹에서 지정한 멤버를 조회합니다. 자세한 내용은 상속된 모든 멤버 조회를 참고합니다.

Note

초대된 그룹의 멤버는 공유 그룹에서 공유 멤버십을 가집니다. 따라서 요청자가 공유 그룹의 멤버이지만 초대된 비공개 그룹의 멤버가 아니더라도, 이 엔드포인트를 사용하면 초대된 비공개 그룹의 멤버를 포함한 공유 그룹의 모든 멤버를 가져올 수 있습니다.

GET /groups/:id/members/all/:user_id
속성 유형 필수 설명
id integer or string yes 그룹의 ID 또는 URL 인코딩된 그룹 경로.
user_id integer yes 멤버의 사용자 ID.
curl --request GET \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/groups/: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,
  "two_factor_enabled": true,
  "group_saml_identity": null
}

청구 가능한 모든 그룹 멤버 목록 조회#

지정한 그룹의 모든 청구 가능 멤버를 조회합니다. 목록에는 하위 그룹과 프로젝트의 멤버가 포함됩니다.

사전 요구 사항:

  • 청구 권한에 설명된 대로 청구 권한 API 엔드포인트에 접근하려면 Owner 권한이 있어야 합니다.
  • 이 API 엔드포인트는 최상위 그룹에서만 동작합니다. 하위 그룹에서는 동작하지 않습니다.

이 함수는 사용자 목록을 제한하기 위해 페이지네이션 파라미터 page와 per_page를 받습니다.

search 파라미터로 청구 가능 그룹 멤버를 이름으로 검색하고, sort로 결과를 정렬합니다.

GET /groups/:id/billable_members
속성 유형 필수 설명
id integer or string yes 그룹의 ID 또는 URL 인코딩된 경로.
search string no 이름, 사용자 이름, 공개 이메일로 그룹 멤버를 검색하는 쿼리 문자열.
sort string no 정렬 속성과 순서를 지정하는 파라미터를 담은 쿼리 문자열. 지원되는 값은 아래를 참고합니다.

sort 속성에 대해 지원되는 값은 다음과 같습니다.

값 설명
access_level_asc 액세스 수준, 오름차순
access_level_desc 액세스 수준, 내림차순
last_joined 마지막으로 참여
name_asc 이름, 오름차순
name_desc 이름, 내림차순
oldest_joined 가장 오래 전에 참여
oldest_sign_in 가장 오래된 로그인
recent_sign_in 최근 로그인
last_activity_on_asc 마지막 활동 날짜, 오름차순
last_activity_on_desc 마지막 활동 날짜, 내림차순
curl --request GET \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/groups/:id/billable_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",
    "last_activity_on": "2021-01-27",
    "membership_type": "group_member",
    "removable": true,
    "created_at": "2021-01-03T12:16:02.000Z",
    "last_login_at": "2022-10-09T01:33:06.000Z"
  },
  {
    "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",
    "last_activity_on": "2021-01-25",
    "membership_type": "group_member",
    "removable": true,
    "created_at": "2021-01-04T18:46:42.000Z",
    "last_login_at": "2022-09-29T22:18:46.000Z"
  },
  {
    "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",
    "last_activity_on": "2021-01-20",
    "membership_type": "group_invite",
    "removable": false,
    "created_at": "2021-01-09T07:12:31.000Z",
    "last_login_at": "2022-10-10T07:28:56.000Z"
  }
]

청구 가능 그룹 멤버의 모든 멤버십 목록 조회#

그룹에서 지정한 청구 가능 멤버의 모든 멤버십을 조회합니다.

사전 요구 사항:

  • 응답에는 직접 멤버십만 표시됩니다. 상속된 멤버십은 포함되지 않습니다.
  • 이 API 엔드포인트는 최상위 그룹에서만 동작합니다. 하위 그룹에서는 동작하지 않습니다.
  • 이 API 엔드포인트에는 그룹의 멤버십을 관리할 권한이 필요합니다.

사용자가 속한 모든 프로젝트와 그룹을 조회합니다. 그룹 계층에 포함된 프로젝트와 그룹만 포함됩니다. 예를 들어 요청한 그룹이 Top-Level Group 이고 요청한 사용자가 Top-Level Group / Subgroup One과 Other Group / Subgroup Two 양쪽의 직접 멤버라면, Other Group / Subgroup Two는 Top-Level Group 계층에 없으므로 Top-Level Group / Subgroup One만 반환됩니다.

이 API 엔드포인트는 멤버십 목록을 제한하기 위해 페이지네이션 파라미터 page와 per_page를 받습니다.

GET /groups/:id/billable_members/:user_id/memberships
속성 유형 필수 설명
id integer or string yes 그룹의 ID 또는 URL 인코딩된 경로.
user_id integer yes 청구 가능 멤버의 사용자 ID.
curl --request GET \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/groups/:id/billable_members/:user_id/memberships"

응답 예시:

[
  {
    "id": 168,
    "source_id": 131,
    "source_full_name": "Top-Level Group / Subgroup One",
    "source_members_url": "https://gitlab.example.com/groups/root-group/sub-group-one/-/group_members",
    "created_at": "2021-03-31T17:28:44.812Z",
    "expires_at": "2022-03-21",
    "access_level": {
      "string_value": "Developer",
      "integer_value": 30
    }
  },
  {
    "id": 169,
    "source_id": 63,
    "source_full_name": "Top-Level Group / Subgroup One / My Project",
    "source_members_url": "https://gitlab.example.com/root-group/sub-group-one/my-project/-/project_members",
    "created_at": "2021-03-31T17:29:14.934Z",
    "expires_at": null,
    "access_level": {
      "string_value": "Maintainer",
      "integer_value": 40
    }
  }
]

청구 가능 그룹 멤버의 모든 간접 멤버십 목록 조회#

히스토리

그룹의 청구 가능 멤버에 대한 간접 멤버십 목록을 가져옵니다.

사전 요구 사항:

  • 이 API 엔드포인트는 최상위 그룹에서만 동작합니다. 하위 그룹에서는 동작하지 않습니다.
  • 이 API 엔드포인트에는 그룹의 멤버십을 관리할 권한이 필요합니다.

사용자가 속한 프로젝트와 그룹 중 요청한 최상위 그룹에 초대된 항목을 모두 조회합니다. 예를 들어 요청한 그룹이 Top-Level Group 이고 요청한 사용자가 Top-Level Group에 초대된 Other Group / Subgroup Two의 직접 멤버라면, Other Group / Subgroup Two만 반환됩니다.

응답에는 간접 멤버십만 표시됩니다. 직접 멤버십은 포함되지 않습니다.

이 API 엔드포인트는 멤버십 목록을 제한하기 위해 페이지네이션 파라미터 page와 per_page를 받습니다.

GET /groups/:id/billable_members/:user_id/indirect
속성 유형 필수 설명
id integer or string yes 그룹의 ID 또는 URL 인코딩된 경로.
user_id integer yes 청구 가능 멤버의 사용자 ID.
curl --request GET \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/groups/:id/billable_members/:user_id/indirect"

응답 예시:

[
  {
    "id": 168,
    "source_id": 132,
    "source_full_name": "Invited Group / Subgroup One",
    "source_members_url": "https://gitlab.example.com/groups/invited-group/sub-group-one/-/group_members",
    "created_at": "2021-03-31T17:28:44.812Z",
    "expires_at": "2022-03-21",
    "access_level": {
      "string_value": "Developer",
      "integer_value": 30
    }
  }
]

청구 가능 그룹 멤버 제거#

지정한 청구 가능 멤버를 그룹과 그 하위 그룹 및 프로젝트에서 제거합니다.

제거 대상이 되기 위해 사용자가 그룹 멤버일 필요는 없습니다. 예를 들어 사용자가 그룹 내 프로젝트에 직접 추가된 경우에도 이 API 엔드포인트로 해당 사용자를 제거할 수 있습니다.

Note

멤버 제거는 비동기로 처리되므로 변경이 완료되기까지 몇 분이 걸립니다.

DELETE /groups/:id/billable_members/:user_id
속성 유형 필수 설명
id integer or string yes 그룹의 ID 또는 URL 인코딩된 경로.
user_id integer yes 멤버의 사용자 ID.
curl --request DELETE \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/groups/:id/billable_members/:user_id"

사용자의 그룹 멤버십 상태 변경#

그룹에서 지정한 사용자의 멤버십 상태를 변경합니다.

사용자가 무료 사용자 제한을 초과한 경우, 그룹 또는 프로젝트에 대한 멤버십 상태를 awaiting 또는 active로 변경하면 해당 그룹 또는 프로젝트에 접근할 수 있게 됩니다. 이 변경은 모든 하위 그룹과 프로젝트에 적용됩니다.

PUT /groups/:id/members/:user_id/state
속성 유형 필수 설명
id integer or string yes 그룹의 ID 또는 URL 인코딩된 경로.
user_id integer yes 멤버의 사용자 ID.
state string yes 사용자의 새 상태. 상태는 awaiting 또는 active 중 하나입니다.
curl --request PUT \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/groups/:id/members/:user_id/state?state=active"

응답 예시:

{
  "success":true
}

그룹 멤버 추가#

지정한 그룹에 멤버를 추가합니다.

POST /groups/:id/members
속성 유형 필수 설명
id integer or string yes 그룹의 ID 또는 URL 인코딩된 그룹 경로.
user_id integer or string yes, if username is not provided 새 멤버의 사용자 ID 또는 쉼표로 구분한 여러 ID.
username string yes, if user_id is not provided 새 멤버의 사용자 이름 또는 쉼표로 구분한 여러 사용자 이름.
access_level integer yes 유효한 액세스 수준. 가능한 값: 0(No access), 5(Minimal access), 10(Guest), 15(Planner), 20(Reporter), 25(Security Manager), 30(Developer), 40(Maintainer), 50(Owner). 기본값: 30.
expires_at string no YEAR-MONTH-DAY 형식의 날짜 문자열.
invite_source string no 멤버 생성 절차를 시작한 초대의 출처. GitLab 팀 멤버는 다음 비공개 이슈에서 자세한 내용을 확인할 수 있습니다: https://gitlab.com/gitlab-org/gitlab/-/issues/327120>.
member_role_id integer no Ultimate 전용. 커스텀 멤버 역할의 ID.
curl --request POST \
     --header "PRIVATE-TOKEN: <your_access_token>" \
     --data "user_id=1&access_level=30" "https://gitlab.example.com/api/v4/groups/: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
}
Note

역할 승격에 대한 관리자 승인이 켜져 있으면, 기존 사용자를 청구 가능 역할로 승격하는 멤버십 요청에는 관리자 승인이 필요합니다.

Manage Non-Billable Promotions를 활성화하려면 먼저 enable_member_promotion_management 애플리케이션 설정을 활성화해야 합니다.

단일 사용자를 대기열에 추가하는 예시:

curl --request POST \
     --header "PRIVATE-TOKEN: <your_access_token>" \
     --data "user_id=1&access_level=30" "https://gitlab.example.com/api/v4/groups/: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" "https://gitlab.example.com/api/v4/groups/:id/members"
curl --request POST \
     --header "PRIVATE-TOKEN: <your_access_token>" \
     --data "user_id=1,2&access_level=30" "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 /groups/:id/members/:user_id
속성 유형 필수 설명
id integer or string yes 그룹의 ID 또는 URL 인코딩된 그룹 경로.
user_id integer yes 멤버의 사용자 ID.
access_level integer yes 유효한 액세스 수준. 가능한 값: 0(No access), 5(Minimal access), 10(Guest), 15(Planner), 20(Reporter), 25(Security Manager), 30(Developer), 40(Maintainer), 50(Owner), 60(Admin). 기본값: 30.
expires_at string no YEAR-MONTH-DAY 형식의 날짜 문자열.
member_role_id integer no Ultimate 전용. 커스텀 멤버 역할의 ID. 값을 지정하지 않으면 모든 역할이 제거됩니다.
curl --request PUT \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/groups/: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
}
Note

역할 승격에 대한 관리자 승인이 켜져 있으면, 기존 사용자를 청구 가능 역할로 승격하는 멤버십 요청에는 관리자 승인이 필요합니다.

Manage non-billable promotions를 활성화하려면 먼저 enable_member_promotion_management 애플리케이션 설정을 활성화해야 합니다.

응답 예시:

{
  "message":{
    "username_1":"Request queued for administrator approval."
  }
}

그룹 멤버의 재정의 플래그 설정#

기본적으로 LDAP 그룹 멤버의 액세스 수준은 Group Sync를 통해 LDAP가 지정한 값으로 설정됩니다. 이 엔드포인트를 호출하면 액세스 수준 재정의를 허용할 수 있습니다.

POST /groups/:id/members/:user_id/override
속성 유형 필수 설명
id integer or string yes 그룹의 ID 또는 URL 인코딩된 경로.
user_id integer yes 멤버의 사용자 ID.
curl --request POST \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/groups/:id/members/:user_id/override"

응답 예시:

{
  "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",
  "override": true
}

그룹 멤버의 재정의 제거#

재정의 플래그를 false로 설정하여 LDAP Group Sync가 액세스 수준을 LDAP가 규정한 값으로 되돌릴 수 있게 합니다.

DELETE /groups/:id/members/:user_id/override
속성 유형 필수 설명
id integer or string yes 그룹의 ID 또는 URL 인코딩된 경로.
user_id integer yes 멤버의 사용자 ID.
curl --request DELETE \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/groups/:id/members/:user_id/override"

응답 예시:

{
  "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",
  "override": false
}

그룹 멤버 제거#

권한이 명시적으로 할당된 그룹에서 지정한 사용자를 제거합니다.

제거 대상이 되려면 사용자가 그룹 멤버여야 합니다. 예를 들어 사용자가 그룹 내 프로젝트에는 직접 추가되었지만 이 그룹에는 명시적으로 추가되지 않았다면, 이 API 엔드포인트로는 제거할 수 없습니다. 다른 방법은 그룹에서 청구 가능 멤버 제거를 참고합니다.

DELETE /groups/:id/members/:user_id
속성 유형 필수 설명
id integer or string yes 그룹의 ID 또는 URL 인코딩된 그룹 경로.
user_id integer yes 멤버의 사용자 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/groups/:id/members/:user_id"
curl --request DELETE \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/:id/members/:user_id"

그룹 멤버 승인#

그룹과 그 하위 그룹 및 프로젝트에서 대기 중인 지정한 사용자를 승인합니다.

PUT /groups/:id/members/:member_id/approve
속성 유형 필수 설명
id integer or string yes 최상위 그룹의 ID 또는 URL 인코딩된 최상위 그룹 경로.
member_id integer yes 멤버의 ID.

요청 예시:

curl --request PUT \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/groups/:id/members/:member_id/approve"

모든 대기 중인 그룹 멤버 승인#

지정한 그룹과 그 하위 그룹 및 프로젝트에서 대기 중인 모든 사용자를 승인합니다.

POST /groups/:id/members/approve_all
속성 유형 필수 설명
id integer or string yes 최상위 그룹의 ID 또는 URL 인코딩된 최상위 그룹 경로.

요청 예시:

curl --request POST \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/groups/:id/members/approve_all"

그룹 및 해당 하위 그룹과 프로젝트의 모든 대기 중인 그룹 멤버 목록 조회#

지정한 그룹과 그 하위 그룹 및 프로젝트에서 awaiting 상태인 모든 멤버와, 초대되었으나 GitLab 계정이 없는 사용자를 조회합니다.

사전 요구 사항:

  • 이 API 엔드포인트는 최상위 그룹에서만 동작합니다. 하위 그룹에서는 동작하지 않습니다.
  • 이 API 엔드포인트에는 그룹의 멤버를 관리할 권한이 필요합니다.

이 요청은 최상위 그룹 계층에 속한 모든 그룹과 프로젝트에서 조건에 맞는 그룹 멤버와 프로젝트 멤버를 모두 반환합니다.

멤버가 아직 GitLab 계정에 가입하지 않은 초대 사용자인 경우, 초대에 사용된 이메일 주소가 반환됩니다.

이 API 엔드포인트는 멤버십 목록을 제한하기 위해 페이지네이션 파라미터 page와 per_page를 받습니다.

GET /groups/:id/pending_members
속성 유형 필수 설명
id integer or string yes 그룹의 ID 또는 URL 인코딩된 경로.
curl --request GET \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/groups/:id/pending_members"

응답 예시:

[
  {
    "id": 168,
    "name": "Alex Garcia",
    "username": "alex_garcia",
    "email": "alex@example.com",
    "avatar_url": "http://example.com/uploads/user/avatar/1/cd8.jpeg",
    "web_url": "http://example.com/alex_garcia",
    "approved": false,
    "invited": false
  },
  {
    "id": 169,
    "email": "sidney@example.com",
    "avatar_url": "http://gravatar.com/../e346561cd8.jpeg",
    "approved": false,
    "invited": true
  },
  {
    "id": 170,
    "email": "zhang@example.com",
    "avatar_url": "http://gravatar.com/../e32131cd8.jpeg",
    "approved": true,
    "invited": true
  }
]

그룹 멤버 API

GitLab v19.5
Tier: Free, Premium, Ultimate
Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
원문 보기

요약

그룹 멤버를 다루려면 이 엔드포인트를 사용합니다. 프로젝트 멤버에 대한 정보는 프로젝트 멤버 API를 참고합니다. 지정한 그룹의 모든 직접 멤버를 조회합니다. 이 함수는 사용자 목록을 제한하기 위해 페이지네이션 파라미터 page와 per_page를 받습니다.

히스토리

그룹 멤버를 다루려면 이 엔드포인트를 사용합니다.

프로젝트 멤버에 대한 정보는 프로젝트 멤버 API를 참고합니다.

알려진 문제#

  • group_saml_identity 및 group_scim_identity 속성은 SSO가 활성화된 그룹의 그룹 Owner 에게만 표시됩니다.
  • email 속성은 그룹 자체 또는 그 그룹의 하위 그룹이나 프로젝트로 API 요청을 보낼 때, 그룹의 엔터프라이즈 사용자에 한해 그룹 Owner 에게만 표시됩니다.
  • two_factor_enabled 속성은 그룹 Owner와 관리자에게만 표시됩니다.

모든 그룹 멤버 목록 조회#

지정한 그룹의 모든 직접 멤버를 조회합니다. 상위 그룹을 통해 상속된 멤버나 초대된 그룹의 멤버는 반환하지 않고 직접 멤버만 반환합니다.

이 함수는 사용자 목록을 제한하기 위해 페이지네이션 파라미터 page와 per_page를 받습니다.

GET /groups/:id/members
속성 유형 필수 설명
id integer or string yes 그룹의 ID 또는 URL 인코딩된 그룹 경로.
query string no 지정한 이름, 이메일, 사용자 이름을 기준으로 결과를 필터링합니다. 부분 값을 사용하면 쿼리 범위가 넓어집니다.
user_ids array of integers no 지정한 사용자 ID로 결과를 필터링합니다.
skip_users array of integers no 건너뛸 사용자를 결과에서 제외합니다.
show_seat_info boolean no 사용자의 시트 정보를 표시합니다.
curl --request GET \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/groups/: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",
    "two_factor_enabled": true,
    "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",
    "two_factor_enabled": false,
    "access_level": 30,
    "email": "john@example.com",
    "group_saml_identity": {
      "extern_uid":"ABC-1234567890",
      "provider": "group_saml",
      "saml_provider_id": 10
    }
  }
]

상속 및 초대 멤버를 포함한 모든 그룹 멤버 목록 조회#

히스토리

상속된 멤버, 초대된 사용자, 상위 그룹을 통한 권한을 포함하여 지정한 그룹의 모든 멤버를 조회합니다.

사용자가 이 그룹과 하나 이상의 상위 그룹에 동시에 속해 있으면, access_level 이 가장 높은 멤버십만 반환됩니다. 이 값이 해당 사용자의 실질 권한을 나타냅니다.

초대된 그룹의 멤버는 다음 중 하나에 해당하면 반환됩니다.

  • 초대된 그룹이 공개 그룹인 경우.
  • 요청자가 초대된 그룹의 멤버이기도 한 경우.
  • 요청자가 공유 그룹의 멤버인 경우.
Note

초대된 그룹의 멤버는 공유 그룹에서 공유 멤버십을 가집니다. 따라서 요청자가 공유 그룹의 멤버이지만 초대된 비공개 그룹의 멤버가 아니더라도, 이 엔드포인트를 사용하면 초대된 비공개 그룹의 멤버를 포함한 공유 그룹의 모든 멤버를 가져올 수 있습니다.

이 함수는 사용자 목록을 제한하기 위해 페이지네이션 파라미터 page와 per_page를 받습니다.

GET /groups/:id/members/all
속성 유형 필수 설명
id integer or string yes 그룹의 ID 또는 URL 인코딩된 그룹 경로.
query string no 지정한 이름, 이메일, 사용자 이름을 기준으로 결과를 필터링합니다. 부분 값을 사용하면 쿼리 범위가 넓어집니다.
user_ids array of integers no 지정한 사용자 ID로 결과를 필터링합니다.
show_seat_info boolean no 사용자의 시트 정보를 표시합니다.
state string no 멤버 상태(awaiting 또는 active)로 결과를 필터링합니다. Premium 및 Ultimate 전용입니다.
curl --request GET \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/groups/: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",
    "two_factor_enabled": true,
    "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",
    "two_factor_enabled": false,
    "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",
    "two_factor_enabled": false,
    "access_level": 30,
    "group_saml_identity": null
  }
]

그룹 멤버 조회#

그룹에서 지정한 멤버를 조회합니다. 상위 그룹을 통해 상속된 멤버는 반환하지 않고 직접 멤버만 반환합니다.

GET /groups/:id/members/:user_id
속성 유형 필수 설명
id integer or string yes 그룹의 ID 또는 URL 인코딩된 그룹 경로.
user_id integer yes 멤버의 사용자 ID.
curl --request GET \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/groups/:id/members/:user_id"

그룹 멤버의 커스텀 역할을 업데이트하거나 제거하려면 member_role_id 값을 비워서 전달합니다.

# Updates a group membership
curl --request PUT \
  --header "Content-Type: application/json" \
  --header "Authorization: Bearer <your_access_token>" \
  --data '{"member_role_id": null, "access_level": 10}' "https://gitlab.example.com/api/v4/groups/<group_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,
  "two_factor_enabled": true,
  "group_saml_identity": null
}

상속 및 초대 멤버를 포함한 그룹 멤버 조회#

히스토리

상위 그룹을 통해 상속되거나 초대된 멤버를 포함하여 그룹에서 지정한 멤버를 조회합니다. 자세한 내용은 상속된 모든 멤버 조회를 참고합니다.

Note

초대된 그룹의 멤버는 공유 그룹에서 공유 멤버십을 가집니다. 따라서 요청자가 공유 그룹의 멤버이지만 초대된 비공개 그룹의 멤버가 아니더라도, 이 엔드포인트를 사용하면 초대된 비공개 그룹의 멤버를 포함한 공유 그룹의 모든 멤버를 가져올 수 있습니다.

GET /groups/:id/members/all/:user_id
속성 유형 필수 설명
id integer or string yes 그룹의 ID 또는 URL 인코딩된 그룹 경로.
user_id integer yes 멤버의 사용자 ID.
curl --request GET \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/groups/: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,
  "two_factor_enabled": true,
  "group_saml_identity": null
}

청구 가능한 모든 그룹 멤버 목록 조회#

지정한 그룹의 모든 청구 가능 멤버를 조회합니다. 목록에는 하위 그룹과 프로젝트의 멤버가 포함됩니다.

사전 요구 사항:

  • 청구 권한에 설명된 대로 청구 권한 API 엔드포인트에 접근하려면 Owner 권한이 있어야 합니다.
  • 이 API 엔드포인트는 최상위 그룹에서만 동작합니다. 하위 그룹에서는 동작하지 않습니다.

이 함수는 사용자 목록을 제한하기 위해 페이지네이션 파라미터 page와 per_page를 받습니다.

search 파라미터로 청구 가능 그룹 멤버를 이름으로 검색하고, sort로 결과를 정렬합니다.

GET /groups/:id/billable_members
속성 유형 필수 설명
id integer or string yes 그룹의 ID 또는 URL 인코딩된 경로.
search string no 이름, 사용자 이름, 공개 이메일로 그룹 멤버를 검색하는 쿼리 문자열.
sort string no 정렬 속성과 순서를 지정하는 파라미터를 담은 쿼리 문자열. 지원되는 값은 아래를 참고합니다.

sort 속성에 대해 지원되는 값은 다음과 같습니다.

값 설명
access_level_asc 액세스 수준, 오름차순
access_level_desc 액세스 수준, 내림차순
last_joined 마지막으로 참여
name_asc 이름, 오름차순
name_desc 이름, 내림차순
oldest_joined 가장 오래 전에 참여
oldest_sign_in 가장 오래된 로그인
recent_sign_in 최근 로그인
last_activity_on_asc 마지막 활동 날짜, 오름차순
last_activity_on_desc 마지막 활동 날짜, 내림차순
curl --request GET \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/groups/:id/billable_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",
    "last_activity_on": "2021-01-27",
    "membership_type": "group_member",
    "removable": true,
    "created_at": "2021-01-03T12:16:02.000Z",
    "last_login_at": "2022-10-09T01:33:06.000Z"
  },
  {
    "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",
    "last_activity_on": "2021-01-25",
    "membership_type": "group_member",
    "removable": true,
    "created_at": "2021-01-04T18:46:42.000Z",
    "last_login_at": "2022-09-29T22:18:46.000Z"
  },
  {
    "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",
    "last_activity_on": "2021-01-20",
    "membership_type": "group_invite",
    "removable": false,
    "created_at": "2021-01-09T07:12:31.000Z",
    "last_login_at": "2022-10-10T07:28:56.000Z"
  }
]

청구 가능 그룹 멤버의 모든 멤버십 목록 조회#

그룹에서 지정한 청구 가능 멤버의 모든 멤버십을 조회합니다.

사전 요구 사항:

  • 응답에는 직접 멤버십만 표시됩니다. 상속된 멤버십은 포함되지 않습니다.
  • 이 API 엔드포인트는 최상위 그룹에서만 동작합니다. 하위 그룹에서는 동작하지 않습니다.
  • 이 API 엔드포인트에는 그룹의 멤버십을 관리할 권한이 필요합니다.

사용자가 속한 모든 프로젝트와 그룹을 조회합니다. 그룹 계층에 포함된 프로젝트와 그룹만 포함됩니다. 예를 들어 요청한 그룹이 Top-Level Group 이고 요청한 사용자가 Top-Level Group / Subgroup One과 Other Group / Subgroup Two 양쪽의 직접 멤버라면, Other Group / Subgroup Two는 Top-Level Group 계층에 없으므로 Top-Level Group / Subgroup One만 반환됩니다.

이 API 엔드포인트는 멤버십 목록을 제한하기 위해 페이지네이션 파라미터 page와 per_page를 받습니다.

GET /groups/:id/billable_members/:user_id/memberships
속성 유형 필수 설명
id integer or string yes 그룹의 ID 또는 URL 인코딩된 경로.
user_id integer yes 청구 가능 멤버의 사용자 ID.
curl --request GET \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/groups/:id/billable_members/:user_id/memberships"

응답 예시:

[
  {
    "id": 168,
    "source_id": 131,
    "source_full_name": "Top-Level Group / Subgroup One",
    "source_members_url": "https://gitlab.example.com/groups/root-group/sub-group-one/-/group_members",
    "created_at": "2021-03-31T17:28:44.812Z",
    "expires_at": "2022-03-21",
    "access_level": {
      "string_value": "Developer",
      "integer_value": 30
    }
  },
  {
    "id": 169,
    "source_id": 63,
    "source_full_name": "Top-Level Group / Subgroup One / My Project",
    "source_members_url": "https://gitlab.example.com/root-group/sub-group-one/my-project/-/project_members",
    "created_at": "2021-03-31T17:29:14.934Z",
    "expires_at": null,
    "access_level": {
      "string_value": "Maintainer",
      "integer_value": 40
    }
  }
]

청구 가능 그룹 멤버의 모든 간접 멤버십 목록 조회#

히스토리

그룹의 청구 가능 멤버에 대한 간접 멤버십 목록을 가져옵니다.

사전 요구 사항:

  • 이 API 엔드포인트는 최상위 그룹에서만 동작합니다. 하위 그룹에서는 동작하지 않습니다.
  • 이 API 엔드포인트에는 그룹의 멤버십을 관리할 권한이 필요합니다.

사용자가 속한 프로젝트와 그룹 중 요청한 최상위 그룹에 초대된 항목을 모두 조회합니다. 예를 들어 요청한 그룹이 Top-Level Group 이고 요청한 사용자가 Top-Level Group에 초대된 Other Group / Subgroup Two의 직접 멤버라면, Other Group / Subgroup Two만 반환됩니다.

응답에는 간접 멤버십만 표시됩니다. 직접 멤버십은 포함되지 않습니다.

이 API 엔드포인트는 멤버십 목록을 제한하기 위해 페이지네이션 파라미터 page와 per_page를 받습니다.

GET /groups/:id/billable_members/:user_id/indirect
속성 유형 필수 설명
id integer or string yes 그룹의 ID 또는 URL 인코딩된 경로.
user_id integer yes 청구 가능 멤버의 사용자 ID.
curl --request GET \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/groups/:id/billable_members/:user_id/indirect"

응답 예시:

[
  {
    "id": 168,
    "source_id": 132,
    "source_full_name": "Invited Group / Subgroup One",
    "source_members_url": "https://gitlab.example.com/groups/invited-group/sub-group-one/-/group_members",
    "created_at": "2021-03-31T17:28:44.812Z",
    "expires_at": "2022-03-21",
    "access_level": {
      "string_value": "Developer",
      "integer_value": 30
    }
  }
]

청구 가능 그룹 멤버 제거#

지정한 청구 가능 멤버를 그룹과 그 하위 그룹 및 프로젝트에서 제거합니다.

제거 대상이 되기 위해 사용자가 그룹 멤버일 필요는 없습니다. 예를 들어 사용자가 그룹 내 프로젝트에 직접 추가된 경우에도 이 API 엔드포인트로 해당 사용자를 제거할 수 있습니다.

Note

멤버 제거는 비동기로 처리되므로 변경이 완료되기까지 몇 분이 걸립니다.

DELETE /groups/:id/billable_members/:user_id
속성 유형 필수 설명
id integer or string yes 그룹의 ID 또는 URL 인코딩된 경로.
user_id integer yes 멤버의 사용자 ID.
curl --request DELETE \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/groups/:id/billable_members/:user_id"

사용자의 그룹 멤버십 상태 변경#

그룹에서 지정한 사용자의 멤버십 상태를 변경합니다.

사용자가 무료 사용자 제한을 초과한 경우, 그룹 또는 프로젝트에 대한 멤버십 상태를 awaiting 또는 active로 변경하면 해당 그룹 또는 프로젝트에 접근할 수 있게 됩니다. 이 변경은 모든 하위 그룹과 프로젝트에 적용됩니다.

PUT /groups/:id/members/:user_id/state
속성 유형 필수 설명
id integer or string yes 그룹의 ID 또는 URL 인코딩된 경로.
user_id integer yes 멤버의 사용자 ID.
state string yes 사용자의 새 상태. 상태는 awaiting 또는 active 중 하나입니다.
curl --request PUT \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/groups/:id/members/:user_id/state?state=active"

응답 예시:

{
  "success":true
}

그룹 멤버 추가#

지정한 그룹에 멤버를 추가합니다.

POST /groups/:id/members
속성 유형 필수 설명
id integer or string yes 그룹의 ID 또는 URL 인코딩된 그룹 경로.
user_id integer or string yes, if username is not provided 새 멤버의 사용자 ID 또는 쉼표로 구분한 여러 ID.
username string yes, if user_id is not provided 새 멤버의 사용자 이름 또는 쉼표로 구분한 여러 사용자 이름.
access_level integer yes 유효한 액세스 수준. 가능한 값: 0(No access), 5(Minimal access), 10(Guest), 15(Planner), 20(Reporter), 25(Security Manager), 30(Developer), 40(Maintainer), 50(Owner). 기본값: 30.
expires_at string no YEAR-MONTH-DAY 형식의 날짜 문자열.
invite_source string no 멤버 생성 절차를 시작한 초대의 출처. GitLab 팀 멤버는 다음 비공개 이슈에서 자세한 내용을 확인할 수 있습니다: https://gitlab.com/gitlab-org/gitlab/-/issues/327120>.
member_role_id integer no Ultimate 전용. 커스텀 멤버 역할의 ID.
curl --request POST \
     --header "PRIVATE-TOKEN: <your_access_token>" \
     --data "user_id=1&access_level=30" "https://gitlab.example.com/api/v4/groups/: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
}
Note

역할 승격에 대한 관리자 승인이 켜져 있으면, 기존 사용자를 청구 가능 역할로 승격하는 멤버십 요청에는 관리자 승인이 필요합니다.

Manage Non-Billable Promotions를 활성화하려면 먼저 enable_member_promotion_management 애플리케이션 설정을 활성화해야 합니다.

단일 사용자를 대기열에 추가하는 예시:

curl --request POST \
     --header "PRIVATE-TOKEN: <your_access_token>" \
     --data "user_id=1&access_level=30" "https://gitlab.example.com/api/v4/groups/: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" "https://gitlab.example.com/api/v4/groups/:id/members"
curl --request POST \
     --header "PRIVATE-TOKEN: <your_access_token>" \
     --data "user_id=1,2&access_level=30" "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 /groups/:id/members/:user_id
속성 유형 필수 설명
id integer or string yes 그룹의 ID 또는 URL 인코딩된 그룹 경로.
user_id integer yes 멤버의 사용자 ID.
access_level integer yes 유효한 액세스 수준. 가능한 값: 0(No access), 5(Minimal access), 10(Guest), 15(Planner), 20(Reporter), 25(Security Manager), 30(Developer), 40(Maintainer), 50(Owner), 60(Admin). 기본값: 30.
expires_at string no YEAR-MONTH-DAY 형식의 날짜 문자열.
member_role_id integer no Ultimate 전용. 커스텀 멤버 역할의 ID. 값을 지정하지 않으면 모든 역할이 제거됩니다.
curl --request PUT \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/groups/: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
}
Note

역할 승격에 대한 관리자 승인이 켜져 있으면, 기존 사용자를 청구 가능 역할로 승격하는 멤버십 요청에는 관리자 승인이 필요합니다.

Manage non-billable promotions를 활성화하려면 먼저 enable_member_promotion_management 애플리케이션 설정을 활성화해야 합니다.

응답 예시:

{
  "message":{
    "username_1":"Request queued for administrator approval."
  }
}

그룹 멤버의 재정의 플래그 설정#

기본적으로 LDAP 그룹 멤버의 액세스 수준은 Group Sync를 통해 LDAP가 지정한 값으로 설정됩니다. 이 엔드포인트를 호출하면 액세스 수준 재정의를 허용할 수 있습니다.

POST /groups/:id/members/:user_id/override
속성 유형 필수 설명
id integer or string yes 그룹의 ID 또는 URL 인코딩된 경로.
user_id integer yes 멤버의 사용자 ID.
curl --request POST \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/groups/:id/members/:user_id/override"

응답 예시:

{
  "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",
  "override": true
}

그룹 멤버의 재정의 제거#

재정의 플래그를 false로 설정하여 LDAP Group Sync가 액세스 수준을 LDAP가 규정한 값으로 되돌릴 수 있게 합니다.

DELETE /groups/:id/members/:user_id/override
속성 유형 필수 설명
id integer or string yes 그룹의 ID 또는 URL 인코딩된 경로.
user_id integer yes 멤버의 사용자 ID.
curl --request DELETE \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/groups/:id/members/:user_id/override"

응답 예시:

{
  "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",
  "override": false
}

그룹 멤버 제거#

권한이 명시적으로 할당된 그룹에서 지정한 사용자를 제거합니다.

제거 대상이 되려면 사용자가 그룹 멤버여야 합니다. 예를 들어 사용자가 그룹 내 프로젝트에는 직접 추가되었지만 이 그룹에는 명시적으로 추가되지 않았다면, 이 API 엔드포인트로는 제거할 수 없습니다. 다른 방법은 그룹에서 청구 가능 멤버 제거를 참고합니다.

DELETE /groups/:id/members/:user_id
속성 유형 필수 설명
id integer or string yes 그룹의 ID 또는 URL 인코딩된 그룹 경로.
user_id integer yes 멤버의 사용자 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/groups/:id/members/:user_id"
curl --request DELETE \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/:id/members/:user_id"

그룹 멤버 승인#

그룹과 그 하위 그룹 및 프로젝트에서 대기 중인 지정한 사용자를 승인합니다.

PUT /groups/:id/members/:member_id/approve
속성 유형 필수 설명
id integer or string yes 최상위 그룹의 ID 또는 URL 인코딩된 최상위 그룹 경로.
member_id integer yes 멤버의 ID.

요청 예시:

curl --request PUT \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/groups/:id/members/:member_id/approve"

모든 대기 중인 그룹 멤버 승인#

지정한 그룹과 그 하위 그룹 및 프로젝트에서 대기 중인 모든 사용자를 승인합니다.

POST /groups/:id/members/approve_all
속성 유형 필수 설명
id integer or string yes 최상위 그룹의 ID 또는 URL 인코딩된 최상위 그룹 경로.

요청 예시:

curl --request POST \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/groups/:id/members/approve_all"

그룹 및 해당 하위 그룹과 프로젝트의 모든 대기 중인 그룹 멤버 목록 조회#

지정한 그룹과 그 하위 그룹 및 프로젝트에서 awaiting 상태인 모든 멤버와, 초대되었으나 GitLab 계정이 없는 사용자를 조회합니다.

사전 요구 사항:

  • 이 API 엔드포인트는 최상위 그룹에서만 동작합니다. 하위 그룹에서는 동작하지 않습니다.
  • 이 API 엔드포인트에는 그룹의 멤버를 관리할 권한이 필요합니다.

이 요청은 최상위 그룹 계층에 속한 모든 그룹과 프로젝트에서 조건에 맞는 그룹 멤버와 프로젝트 멤버를 모두 반환합니다.

멤버가 아직 GitLab 계정에 가입하지 않은 초대 사용자인 경우, 초대에 사용된 이메일 주소가 반환됩니다.

이 API 엔드포인트는 멤버십 목록을 제한하기 위해 페이지네이션 파라미터 page와 per_page를 받습니다.

GET /groups/:id/pending_members
속성 유형 필수 설명
id integer or string yes 그룹의 ID 또는 URL 인코딩된 경로.
curl --request GET \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/groups/:id/pending_members"

응답 예시:

[
  {
    "id": 168,
    "name": "Alex Garcia",
    "username": "alex_garcia",
    "email": "alex@example.com",
    "avatar_url": "http://example.com/uploads/user/avatar/1/cd8.jpeg",
    "web_url": "http://example.com/alex_garcia",
    "approved": false,
    "invited": false
  },
  {
    "id": 169,
    "email": "sidney@example.com",
    "avatar_url": "http://gravatar.com/../e346561cd8.jpeg",
    "approved": false,
    "invited": true
  },
  {
    "id": 170,
    "email": "zhang@example.com",
    "avatar_url": "http://gravatar.com/../e32131cd8.jpeg",
    "approved": true,
    "invited": true
  }
]