2021-01-29 00:20:46 +05:30
---
2021-06-08 01:23:25 +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
---
2022-01-26 12:08:38 +05:30
# Import API **(FREE)**
2019-03-02 22:35:43 +05:30
## Import repository from GitHub
2023-03-04 22:38:38 +05:30
Import your projects from GitHub to GitLab using the API.
2019-03-02 22:35:43 +05:30
2020-04-08 14:13:33 +05:30
```plaintext
2019-03-02 22:35:43 +05:30
POST /import/github
```
2022-11-25 23:54:43 +05:30
| Attribute | Type | Required | Description |
|-------------------------|---------|----------|-------------------------------------------------------------------------------------|
| `personal_access_token` | string | yes | GitHub personal access token |
| `repo_id` | integer | yes | GitHub repository ID |
| `new_name` | string | no | New repository name |
| `target_namespace` | string | yes | Namespace to import repository into. Supports subgroups like `/namespace/subgroup` |
| `github_hostname` | string | no | Custom GitHub Enterprise hostname. Do not set for GitHub.com. |
| `optional_stages` | object | no | [Additional items to import ](../user/project/import/github.md#select-additional-items-to-import ). [Introduced ](https://gitlab.com/gitlab-org/gitlab/-/issues/373705 ) in GitLab 15.5 |
2019-03-02 22:35:43 +05:30
2020-03-13 15:44:24 +05:30
```shell
2021-01-29 00:20:46 +05:30
curl --request POST \
--url "https://gitlab.example.com/api/v4/import/github" \
--header "content-type: application/json" \
--header "PRIVATE-TOKEN: < your_access_token > " \
--data '{
"personal_access_token": "aBc123abC12aBc123abC12abC123+_A/c123",
"repo_id": "12345",
"target_namespace": "group/subgroup",
2021-09-30 23:02:18 +05:30
"new_name": "NEW-NAME",
2022-11-25 23:54:43 +05:30
"github_hostname": "https://github.example.com",
"optional_stages": {
"single_endpoint_issue_events_import": true,
"single_endpoint_notes_import": true,
"attachments_import": true
}
2021-01-29 00:20:46 +05:30
}'
2019-03-02 22:35:43 +05:30
```
2022-11-25 23:54:43 +05:30
The following keys are available for `optional_stages` :
- `single_endpoint_issue_events_import` , for issue and pull request events import.
- `single_endpoint_notes_import` , for an alternative and more thorough comments import.
- `attachments_import` , for Markdown attachments import.
For more information, see [Select additional items to import ](../user/project/import/github.md#select-additional-items-to-import ).
2019-03-02 22:35:43 +05:30
Example response:
```json
{
"id": 27,
"name": "my-repo",
"full_path": "/root/my-repo",
"full_name": "Administrator / my-repo"
}
```
2020-07-28 23:09:34 +05:30
2023-03-04 22:38:38 +05:30
### Import a public project through the API using a group access token
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/362683) in GitLab 15.7, projects are not imported into a [bot user's](../user/group/settings/group_access_tokens.md#bot-users-for-groups) namespace in any circumstances. Projects imported into a bot user's namespace could not be deleted by users with valid tokens, which represented a security risk.
When you import a project from GitHub to GitLab through the API using a group access
token:
- The GitLab project inherits the original project's visibility settings. As a result, the project is publicly accessible if the original project is public.
- If the `path` or `target_namespace` does not exist, the project import fails.
2022-11-25 23:54:43 +05:30
## Cancel GitHub project import
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/364783) in GitLab 15.5.
Cancel an in-progress GitHub project import using the API.
```plaintext
POST /import/github/cancel
```
| Attribute | Type | Required | Description |
|------------|---------|----------|---------------------|
| `project_id` | integer | yes | GitLab project ID |
```shell
curl --request POST \
--url "https://gitlab.example.com/api/v4/import/github/cancel" \
--header "content-type: application/json" \
--header "PRIVATE-TOKEN: < your_access_token > " \
--data '{
"project_id": 12345
}'
```
Example response:
```json
{
"id": 160,
"name": "my-repo",
"full_path": "/root/my-repo",
"full_name": "Administrator / my-repo",
"import_source": "source/source-repo",
"import_status": "canceled",
"human_import_status_name": "canceled",
"provider_link": "/source/source-repo"
}
```
Returns the following status codes:
- `200 OK` : the project import is being canceled.
- `400 Bad Request` : the project import cannot be canceled.
- `404 Not Found` : the project associated with `project_id` does not exist.
2020-07-28 23:09:34 +05:30
## Import repository from Bitbucket Server
Import your projects from Bitbucket Server to GitLab via the API.
2021-02-22 17:27:13 +05:30
NOTE:
2020-07-28 23:09:34 +05:30
The Bitbucket Project Key is only used for finding the repository in Bitbucket.
You must specify a `target_namespace` if you want to import the repository to a GitLab group.
2021-02-22 17:27:13 +05:30
If you do not specify `target_namespace` , the project imports to your personal user namespace.
2020-07-28 23:09:34 +05:30
```plaintext
POST /import/bitbucket_server
```
| Attribute | Type | Required | Description |
|------------|---------|----------|---------------------|
| `bitbucket_server_url` | string | yes | Bitbucket Server URL |
| `bitbucket_server_username` | string | yes | Bitbucket Server Username |
| `personal_access_token` | string | yes | Bitbucket Server personal access token/password |
| `bitbucket_server_project` | string | yes | Bitbucket Project Key |
| `bitbucket_server_repo` | string | yes | Bitbucket Repository Name |
2021-01-03 14:25:43 +05:30
| `new_name` | string | no | New repository name |
2021-01-29 00:20:46 +05:30
| `target_namespace` | string | no | Namespace to import repository into. Supports subgroups like `/namespace/subgroup` |
2020-07-28 23:09:34 +05:30
```shell
curl --request POST \
2021-02-22 17:27:13 +05:30
--url "https://gitlab.example.com/api/v4/import/bitbucket_server" \
2020-07-28 23:09:34 +05:30
--header "content-type: application/json" \
2021-03-08 18:12:59 +05:30
--header "PRIVATE-TOKEN: < your_access_token > " \
2020-07-28 23:09:34 +05:30
--data '{
"bitbucket_server_url": "http://bitbucket.example.com",
"bitbucket_server_username": "root",
"personal_access_token": "Nzk4MDcxODY4MDAyOiP8y410zF3tGAyLnHRv/E0+3xYs",
"bitbucket_server_project": "NEW",
"bitbucket_server_repo": "my-repo"
}'
```
2021-12-11 22:18:48 +05:30
## Automate group and project import **(PREMIUM)**
For information on automating user, group, and project import API calls, see
[Automate group and project import ](../user/project/import/index.md#automate-group-and-project-import ).