2021-01-29 00:20:46 +05:30
---
stage: Manage
group: Import
2022-11-25 23:54:43 +05:30
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
2021-01-29 00:20:46 +05:30
---
2023-05-27 22:25:52 +05:30
# Group import and export API **(FREE)**
2020-03-13 15:44:24 +05:30
2020-05-24 23:13:21 +05:30
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/20353) in GitLab 12.8.
2020-03-13 15:44:24 +05:30
2023-05-27 22:25:52 +05:30
Use the group import and export API to export a group structure and import it to a new location.
When you use the group import and export API with the [project import and export API ](project_import_export.md ), you can preserve connections with
2020-04-08 14:13:33 +05:30
group-level relationships, such as connections between project issues and group epics.
2020-03-13 15:44:24 +05:30
2020-04-08 14:13:33 +05:30
Group exports include the following:
2020-03-13 15:44:24 +05:30
2020-04-08 14:13:33 +05:30
- Group milestones
- Group boards
- Group labels
- Group badges
- Group members
2021-03-11 19:13:27 +05:30
- Subgroups. Each subgroup includes all data above
- Group wikis ** (PREMIUM SELF)**
2020-03-13 15:44:24 +05:30
2023-05-27 22:25:52 +05:30
To preserve group-level relationships from imported projects, you should run group import and export first. This way, you can import project exports into the desired group structure.
Imported groups have a `private` visibility level unless you import them into a parent group.
If you import groups into a parent group, the subgroups inherit by default a similar level of visibility.
To preserve the member list and their respective permissions on imported groups, review the users in these groups. Make sure these users exist before importing the desired groups.
2020-03-13 15:44:24 +05:30
## Schedule new export
Start a new group export.
2020-04-08 14:13:33 +05:30
```plaintext
2020-03-13 15:44:24 +05:30
POST /groups/:id/export
```
| Attribute | Type | Required | Description |
| --------- | -------------- | -------- | ---------------------------------------- |
2020-05-24 23:13:21 +05:30
| `id` | integer/string | yes | ID of the group owned by the authenticated user |
2020-03-13 15:44:24 +05:30
```shell
2020-06-23 00:09:42 +05:30
curl --request POST --header "PRIVATE-TOKEN: < your_access_token > " "https://gitlab.example.com/api/v4/groups/1/export"
2020-03-13 15:44:24 +05:30
```
```json
{
"message": "202 Accepted"
}
```
## Export download
Download the finished export.
2020-05-24 23:13:21 +05:30
```plaintext
2020-03-13 15:44:24 +05:30
GET /groups/:id/export/download
```
| Attribute | Type | Required | Description |
| --------- | -------------- | -------- | ---------------------------------------- |
| `id` | integer/string | yes | ID of the group owned by the authenticated user |
```shell
2021-11-18 22:05:49 +05:30
group=1
token=secret
curl --request GET\
--header "PRIVATE-TOKEN: ${token}" \
--output download_group_${group}.tar.gz \
"https://gitlab.example.com/api/v4/groups/${group}/export/download"
2020-03-13 15:44:24 +05:30
```
```shell
ls *export.tar.gz
2020-12-05_22-11-148_namespace_export.tar.gz
```
2020-04-08 14:13:33 +05:30
Time spent on exporting a group may vary depending on a size of the group. This endpoint
returns either:
- The exported archive (when available)
- A 404 message
2020-03-13 15:44:24 +05:30
## Import a file
2020-05-24 23:13:21 +05:30
```plaintext
2020-03-13 15:44:24 +05:30
POST /groups/import
```
| Attribute | Type | Required | Description |
| --------- | -------------- | -------- | ---------------------------------------- |
| `name` | string | yes | The name of the group to be imported |
| `path` | string | yes | Name and path for new group |
| `file` | string | yes | The file to be uploaded |
2023-04-23 21:23:45 +05:30
| `parent_id` | integer | no | ID of a parent group to import the group into. Defaults to the current user's namespace if not provided. |
2020-03-13 15:44:24 +05:30
To upload a file from your file system, use the `--form` argument. This causes
cURL to post data using the header `Content-Type: multipart/form-data` .
The `file=` parameter must point to a file on your file system and be preceded
by `@` . For example:
```shell
2021-09-04 01:27:46 +05:30
curl --request POST --header "PRIVATE-TOKEN: < your_access_token > " \
--form "name=imported-group" --form "path=imported-group" \
--form "file=@/path/to/file" "https://gitlab.example.com/api/v4/groups/import"
2020-03-13 15:44:24 +05:30
```
2020-04-08 14:13:33 +05:30
2021-02-22 17:27:13 +05:30
NOTE:
2021-03-08 18:12:59 +05:30
The maximum import file size can be set by the Administrator, default is `0` (unlimited).
2023-03-04 22:38:38 +05:30
As an administrator, you can modify the maximum import file size. To do so, use the `max_import_size` option in the [Application settings API ](settings.md#change-application-settings ) or the [Admin Area ](../user/admin_area/settings/account_and_limit_settings.md ). Default [modified ](https://gitlab.com/gitlab-org/gitlab/-/issues/251106 ) from 50 MB to 0 in GitLab 13.8.