projects.md 20.1 KB
Newer Older
Marin Jankovski's avatar
Marin Jankovski committed
1
# Projects
2

3 4 5 6

### Project visibility level

Project in GitLab has be either private, internal or public.
7
You can determine it by `visibility_level` field in project.
8 9 10

Constants for project visibility levels are next:

11
* Private. `visibility_level` is `0`.
12 13 14 15
  Project access must be granted explicitly for each user.

* Internal. `visibility_level` is `10`.
  The project can be cloned by any logged in user.
16

17 18 19 20
* Public. `visibility_level` is `20`.
  The project can be cloned without any authentication.


21
## List projects
Nihad Abbasov's avatar
Nihad Abbasov committed
22

23
Get a list of projects accessible by the authenticated user.
Nihad Abbasov's avatar
Nihad Abbasov committed
24 25 26 27 28

```
GET /projects
```

29 30
Parameters:

31
- `archived` (optional) - if passed, limit by archived status
32 33
- `order_by` (optional) - Return requests ordered by `id`, `name`, `path`, `created_at`, `updated_at` or `last_activity_at` fields. Default is `created_at`
- `sort` (optional) - Return requests sorted in `asc` or `desc` order. Default is `desc`
34
- `search` (optional) - Return list of authorized projects according to a search criteria
Valery Sizov's avatar
Valery Sizov committed
35
- `ci_enabled_first` - Return projects ordered by ci_enabled flag. Projects with enabled GitLab CI go first
36

Nihad Abbasov's avatar
Nihad Abbasov committed
37 38 39
```json
[
  {
Marin Jankovski's avatar
Marin Jankovski committed
40
    "id": 4,
Nihad Abbasov's avatar
Nihad Abbasov committed
41 42
    "description": null,
    "default_branch": "master",
Marin Jankovski's avatar
Marin Jankovski committed
43
    "public": false,
44
    "visibility_level": 0,
Marin Jankovski's avatar
Marin Jankovski committed
45 46 47
    "ssh_url_to_repo": "git@example.com:diaspora/diaspora-client.git",
    "http_url_to_repo": "http://example.com/diaspora/diaspora-client.git",
    "web_url": "http://example.com/diaspora/diaspora-client",
48 49 50 51
    "tag_list": [
      "example",
      "disapora client"
    ],
Nihad Abbasov's avatar
Nihad Abbasov committed
52
    "owner": {
Marin Jankovski's avatar
Marin Jankovski committed
53 54 55
      "id": 3,
      "name": "Diaspora",
      "created_at": "2013-09-30T13: 46: 02Z"
Nihad Abbasov's avatar
Nihad Abbasov committed
56
    },
Marin Jankovski's avatar
Marin Jankovski committed
57 58 59 60 61 62
    "name": "Diaspora Client",
    "name_with_namespace": "Diaspora / Diaspora Client",
    "path": "diaspora-client",
    "path_with_namespace": "diaspora/diaspora-client",
    "issues_enabled": true,
    "merge_requests_enabled": true,
63
    "builds_enabled": true,
Nihad Abbasov's avatar
Nihad Abbasov committed
64
    "wiki_enabled": true,
Marin Jankovski's avatar
Marin Jankovski committed
65 66 67
    "snippets_enabled": false,
    "created_at": "2013-09-30T13: 46: 02Z",
    "last_activity_at": "2013-09-30T13: 46: 02Z",
68
    "creator_id": 3,
Marin Jankovski's avatar
Marin Jankovski committed
69 70 71 72 73 74 75 76
    "namespace": {
      "created_at": "2013-09-30T13: 46: 02Z",
      "description": "",
      "id": 3,
      "name": "Diaspora",
      "owner_id": 1,
      "path": "diaspora",
      "updated_at": "2013-09-30T13: 46: 02Z"
77
    },
sue445's avatar
sue445 committed
78 79
    "archived": false,
    "avatar_url": "http://example.com/uploads/project/avatar/4/uploads/avatar.png"
Nihad Abbasov's avatar
Nihad Abbasov committed
80 81
  },
  {
Marin Jankovski's avatar
Marin Jankovski committed
82
    "id": 6,
Nihad Abbasov's avatar
Nihad Abbasov committed
83
    "description": null,
Marin Jankovski's avatar
Marin Jankovski committed
84 85
    "default_branch": "master",
    "public": false,
86
    "visibility_level": 0,
Marin Jankovski's avatar
Marin Jankovski committed
87 88 89
    "ssh_url_to_repo": "git@example.com:brightbox/puppet.git",
    "http_url_to_repo": "http://example.com/brightbox/puppet.git",
    "web_url": "http://example.com/brightbox/puppet",
90 91 92 93
    "tag_list": [
      "example",
      "puppet"
    ],
Johannes Schleifenbaum's avatar
Johannes Schleifenbaum committed
94
    "owner": {
Marin Jankovski's avatar
Marin Jankovski committed
95 96 97
      "id": 4,
      "name": "Brightbox",
      "created_at": "2013-09-30T13:46:02Z"
Nihad Abbasov's avatar
Nihad Abbasov committed
98
    },
Marin Jankovski's avatar
Marin Jankovski committed
99 100 101 102
    "name": "Puppet",
    "name_with_namespace": "Brightbox / Puppet",
    "path": "puppet",
    "path_with_namespace": "brightbox/puppet",
Nihad Abbasov's avatar
Nihad Abbasov committed
103 104
    "issues_enabled": true,
    "merge_requests_enabled": true,
105
    "builds_enabled": true,
Nihad Abbasov's avatar
Nihad Abbasov committed
106
    "wiki_enabled": true,
Marin Jankovski's avatar
Marin Jankovski committed
107 108 109
    "snippets_enabled": false,
    "created_at": "2013-09-30T13:46:02Z",
    "last_activity_at": "2013-09-30T13:46:02Z",
110
    "creator_id": 3,
Johannes Schleifenbaum's avatar
Johannes Schleifenbaum committed
111
    "namespace": {
Marin Jankovski's avatar
Marin Jankovski committed
112 113 114 115 116 117 118
      "created_at": "2013-09-30T13:46:02Z",
      "description": "",
      "id": 4,
      "name": "Brightbox",
      "owner_id": 1,
      "path": "brightbox",
      "updated_at": "2013-09-30T13:46:02Z"
119
    },
sue445's avatar
sue445 committed
120 121
    "archived": false,
    "avatar_url": null
Nihad Abbasov's avatar
Nihad Abbasov committed
122 123 124 125
  }
]
```

126
### List owned projects
127

128
Get a list of projects which are owned by the authenticated user.
129 130 131 132 133

```
GET /projects/owned
```

134 135 136 137 138 139
Parameters:

- `archived` (optional) - if passed, limit by archived status
- `order_by` (optional) - Return requests ordered by `id`, `name`, `path`, `created_at`, `updated_at` or `last_activity_at` fields. Default is `created_at`
- `sort` (optional) - Return requests sorted in `asc` or `desc` order. Default is `desc`
- `search` (optional) - Return list of authorized projects according to a search criteria
Valery Sizov's avatar
Valery Sizov committed
140
- `ci_enabled_first` - Return projects ordered by ci_enabled flag. Projects with enabled GitLab CI go first
141

142
### List ALL projects
143 144 145 146 147 148 149

Get a list of all GitLab projects (admin only).

```
GET /projects/all
```

150 151 152 153 154 155
Parameters:

- `archived` (optional) - if passed, limit by archived status
- `order_by` (optional) - Return requests ordered by `id`, `name`, `path`, `created_at`, `updated_at` or `last_activity_at` fields. Default is `created_at`
- `sort` (optional) - Return requests sorted in `asc` or `desc` order. Default is `desc`
- `search` (optional) - Return list of authorized projects according to a search criteria
Valery Sizov's avatar
Valery Sizov committed
156
- `ci_enabled_first` - Return projects ordered by ci_enabled flag. Projects with enabled GitLab CI go first
157

158
### Get single project
Nihad Abbasov's avatar
Nihad Abbasov committed
159

160
Get a specific project, identified by project ID or NAMESPACE/PROJECT_NAME, which is owned by the authenticated user.
Marin Jankovski's avatar
Marin Jankovski committed
161
If using namespaced projects call make sure that the NAMESPACE/PROJECT_NAME is URL-encoded, eg. `/api/v3/projects/diaspora%2Fdiaspora` (where `/` is represented by `%2F`).
Nihad Abbasov's avatar
Nihad Abbasov committed
162 163 164 165 166 167 168

```
GET /projects/:id
```

Parameters:

169
- `id` (required) - The ID or NAMESPACE/PROJECT_NAME of a project
Nihad Abbasov's avatar
Nihad Abbasov committed
170

171 172
```json
{
Marin Jankovski's avatar
Marin Jankovski committed
173
  "id": 3,
174
  "description": null,
Marin Jankovski's avatar
Marin Jankovski committed
175 176
  "default_branch": "master",
  "public": false,
177
  "visibility_level": 0,
Marin Jankovski's avatar
Marin Jankovski committed
178 179 180
  "ssh_url_to_repo": "git@example.com:diaspora/diaspora-project-site.git",
  "http_url_to_repo": "http://example.com/diaspora/diaspora-project-site.git",
  "web_url": "http://example.com/diaspora/diaspora-project-site",
181 182 183 184
  "tag_list": [
    "example",
    "disapora project"
  ],
185
  "owner": {
Marin Jankovski's avatar
Marin Jankovski committed
186 187 188
    "id": 3,
    "name": "Diaspora",
    "created_at": "2013-09-30T13: 46: 02Z"
189
  },
Marin Jankovski's avatar
Marin Jankovski committed
190 191 192 193
  "name": "Diaspora Project Site",
  "name_with_namespace": "Diaspora / Diaspora Project Site",
  "path": "diaspora-project-site",
  "path_with_namespace": "diaspora/diaspora-project-site",
194 195
  "issues_enabled": true,
  "merge_requests_enabled": true,
196
  "builds_enabled": true,
197
  "wiki_enabled": true,
Marin Jankovski's avatar
Marin Jankovski committed
198 199 200
  "snippets_enabled": false,
  "created_at": "2013-09-30T13: 46: 02Z",
  "last_activity_at": "2013-09-30T13: 46: 02Z",
201
  "creator_id": 3,
Marin Jankovski's avatar
Marin Jankovski committed
202 203 204 205 206 207 208 209
  "namespace": {
    "created_at": "2013-09-30T13: 46: 02Z",
    "description": "",
    "id": 3,
    "name": "Diaspora",
    "owner_id": 1,
    "path": "diaspora",
    "updated_at": "2013-09-30T13: 46: 02Z"
Johannes Schleifenbaum's avatar
Johannes Schleifenbaum committed
210
  },
Dmitriy Zaporozhets's avatar
Dmitriy Zaporozhets committed
211 212 213 214 215 216 217 218 219
  "permissions": {
    "project_access": {
      "access_level": 10,
      "notification_level": 3
    },
    "group_access": {
      "access_level": 50,
      "notification_level": 3
    }
220
  },
sue445's avatar
sue445 committed
221 222
  "archived": false,
  "avatar_url": "http://example.com/uploads/project/avatar/3/uploads/avatar.png"
223 224 225
}
```

Dmitriy Zaporozhets's avatar
Dmitriy Zaporozhets committed
226 227
### Get project events

228
Get the events for the specified project.
Dmitriy Zaporozhets's avatar
Dmitriy Zaporozhets committed
229 230 231 232 233 234 235 236
Sorted from newest to latest

```
GET /projects/:id/events
```

Parameters:

237
- `id` (required) - The ID or NAMESPACE/PROJECT_NAME of a project
Dmitriy Zaporozhets's avatar
Dmitriy Zaporozhets committed
238 239

```json
Johannes Schleifenbaum's avatar
Johannes Schleifenbaum committed
240 241 242 243 244 245 246 247 248
[
  {
    "title": null,
    "project_id": 15,
    "action_name": "closed",
    "target_id": 830,
    "target_type": "Issue",
    "author_id": 1,
    "data": null,
249 250 251 252 253 254 255 256 257 258
    "target_title": "Public project search field",
    "author": {
      "name": "Dmitriy Zaporozhets",
      "username": "root",
      "id": 1,
      "state": "active",
      "avatar_url": "http://localhost:3000/uploads/user/avatar/1/fox_avatar.png",
      "web_url": "http://localhost:3000/u/root"
    },
    "author_username": "root"
Johannes Schleifenbaum's avatar
Johannes Schleifenbaum committed
259 260 261 262 263 264 265 266
  },
  {
    "title": null,
    "project_id": 15,
    "action_name": "opened",
    "target_id": null,
    "target_type": null,
    "author_id": 1,
267 268 269 270 271 272 273 274
    "author": {
      "name": "Dmitriy Zaporozhets",
      "username": "root",
      "id": 1,
      "state": "active",
      "avatar_url": "http://localhost:3000/uploads/user/avatar/1/fox_avatar.png",
      "web_url": "http://localhost:3000/u/root"
    },
275
    "author_username": "john",
Johannes Schleifenbaum's avatar
Johannes Schleifenbaum committed
276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300
    "data": {
      "before": "50d4420237a9de7be1304607147aec22e4a14af7",
      "after": "c5feabde2d8cd023215af4d2ceeb7a64839fc428",
      "ref": "refs/heads/master",
      "user_id": 1,
      "user_name": "Dmitriy Zaporozhets",
      "repository": {
        "name": "gitlabhq",
        "url": "git@dev.gitlab.org:gitlab/gitlabhq.git",
        "description": "GitLab: self hosted Git management software. \r\nDistributed under the MIT License.",
        "homepage": "https://dev.gitlab.org/gitlab/gitlabhq"
      },
      "commits": [
        {
          "id": "c5feabde2d8cd023215af4d2ceeb7a64839fc428",
          "message": "Add simple search to projects in public area",
          "timestamp": "2013-05-13T18:18:08+00:00",
          "url": "https://dev.gitlab.org/gitlab/gitlabhq/commit/c5feabde2d8cd023215af4d2ceeb7a64839fc428",
          "author": {
            "name": "Dmitriy Zaporozhets",
            "email": "dmitriy.zaporozhets@gmail.com"
          }
        }
      ],
      "total_commits_count": 1
Dmitriy Zaporozhets's avatar
Dmitriy Zaporozhets committed
301
    },
Johannes Schleifenbaum's avatar
Johannes Schleifenbaum committed
302
    "target_title": null
Dmitriy Zaporozhets's avatar
Dmitriy Zaporozhets committed
303
  },
Johannes Schleifenbaum's avatar
Johannes Schleifenbaum committed
304 305 306 307 308 309 310 311
  {
    "title": null,
    "project_id": 15,
    "action_name": "closed",
    "target_id": 840,
    "target_type": "Issue",
    "author_id": 1,
    "data": null,
312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360
    "target_title": "Finish & merge Code search PR",
    "author": {
      "name": "Dmitriy Zaporozhets",
      "username": "root",
      "id": 1,
      "state": "active",
      "avatar_url": "http://localhost:3000/uploads/user/avatar/1/fox_avatar.png",
      "web_url": "http://localhost:3000/u/root"
    },
    "author_username": "root"
  },
  {
    "title": null,
    "project_id": 15,
    "action_name": "commented on",
    "target_id": 1312,
    "target_type": "Note",
    "author_id": 1,
    "data": null,
    "target_title": null,
    "created_at": "2015-12-04T10:33:58.089Z",
    "note": {
      "id": 1312,
      "body": "What an awesome day!",
      "attachment": null,
      "author": {
        "name": "Dmitriy Zaporozhets",
        "username": "root",
        "id": 1,
        "state": "active",
        "avatar_url": "http://localhost:3000/uploads/user/avatar/1/fox_avatar.png",
        "web_url": "http://localhost:3000/u/root"
      },
      "created_at": "2015-12-04T10:33:56.698Z",
      "system": false,
      "upvote": false,
      "downvote": false,
      "noteable_id": 377,
      "noteable_type": "Issue"
    },
    "author": {
      "name": "Dmitriy Zaporozhets",
      "username": "root",
      "id": 1,
      "state": "active",
      "avatar_url": "http://localhost:3000/uploads/user/avatar/1/fox_avatar.png",
      "web_url": "http://localhost:3000/u/root"
    },
    "author_username": "root"
Johannes Schleifenbaum's avatar
Johannes Schleifenbaum committed
361 362
  }
]
Dmitriy Zaporozhets's avatar
Dmitriy Zaporozhets committed
363 364
```

365
### Create project
366

367
Creates a new project owned by the authenticated user.
368 369 370 371 372 373 374

```
POST /projects
```

Parameters:

375
- `name` (required) - new project name
376
- `path` (optional) - custom repository name for new project. By default generated based on name
377 378 379 380
- `namespace_id` (optional) - namespace for the new project (defaults to user)
- `description` (optional) - short project description
- `issues_enabled` (optional)
- `merge_requests_enabled` (optional)
381
- `builds_enabled` (optional)
382 383 384 385 386
- `wiki_enabled` (optional)
- `snippets_enabled` (optional)
- `public` (optional) - if `true` same as setting visibility_level = 20
- `visibility_level` (optional)
- `import_url` (optional)
387

388 389
### Create project for user

390
Creates a new project owned by the specified user. Available only for admins.
391 392 393 394 395 396 397

```
POST /projects/user/:user_id
```

Parameters:

398 399 400 401 402 403
- `user_id` (required) - user_id of owner
- `name` (required) - new project name
- `description` (optional) - short project description
- `default_branch` (optional) - 'master' by default
- `issues_enabled` (optional)
- `merge_requests_enabled` (optional)
404
- `builds_enabled` (optional)
405 406 407 408 409
- `wiki_enabled` (optional)
- `snippets_enabled` (optional)
- `public` (optional) - if `true` same as setting visibility_level = 20
- `visibility_level` (optional)
- `import_url` (optional)
410

411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427
### Edit project

Updates an existing project

```
PUT /projects/:id
```

Parameters:

- `id` (required) - The ID of a project
- `name` (optional) - project name
- `path` (optional) - repository name for project
- `description` (optional) - short project description
- `default_branch` (optional)
- `issues_enabled` (optional)
- `merge_requests_enabled` (optional)
428
- `builds_enabled` (optional)
429 430 431 432 433
- `wiki_enabled` (optional)
- `snippets_enabled` (optional)
- `public` (optional) - if `true` same as setting visibility_level = 20
- `visibility_level` (optional)

434
On success, method returns 200 with the updated project. If parameters are
435 436
invalid, 400 is returned.

437 438 439 440 441 442 443 444 445 446 447 448
### Fork project

Forks a project into the user namespace of the authenticated user.

```
POST /projects/fork/:id
```

Parameters:

- `id` (required) - The ID of the project to be forked

449
### Remove project
450

451
Removes a project including all associated resources (issues, merge requests etc.)
452 453 454 455 456 457 458

```
DELETE /projects/:id
```

Parameters:

459
- `id` (required) - The ID of a project
460 461 462 463

## Team members

### List project team members
miks's avatar
miks committed
464

465
Get a list of a project's team members.
miks's avatar
miks committed
466 467

```
468
GET /projects/:id/members
miks's avatar
miks committed
469 470 471 472
```

Parameters:

473 474
- `id` (required) - The ID or NAMESPACE/PROJECT_NAME of a project
- `query` (optional) - Query string to search for members
475 476

### Get project team member
miks's avatar
miks committed
477

478
Gets a project team member.
479

480 481 482 483 484
```
GET /projects/:id/members/:user_id
```

Parameters:
485

486 487
- `id` (required) - The ID or NAMESPACE/PROJECT_NAME of a project
- `user_id` (required) - The ID of a user
488 489 490 491

```json
{
  "id": 1,
492
  "username": "john_smith",
493 494
  "email": "john@example.com",
  "name": "John Smith",
Marin Jankovski's avatar
Marin Jankovski committed
495
  "state": "active",
496 497 498
  "created_at": "2012-05-23T08:00:58Z",
  "access_level": 40
}
499
```
500

501
### Add project team member
502

503 504
Adds a user to a project team. This is an idempotent method and can be called multiple times
with the same parameters. Adding team membership to a user that is already a member does not
505
affect the existing membership.
506 507 508

```
POST /projects/:id/members
509 510 511 512
```

Parameters:

513 514 515
- `id` (required) - The ID or NAMESPACE/PROJECT_NAME of a project
- `user_id` (required) - The ID of a user to add
- `access_level` (required) - Project access level
516 517

### Edit project team member
miks's avatar
miks committed
518

519
Updates a project team member to a specified access level.
miks's avatar
miks committed
520 521

```
522
PUT /projects/:id/members/:user_id
miks's avatar
miks committed
523 524 525 526
```

Parameters:

527 528 529
- `id` (required) - The ID or NAMESPACE/PROJECT_NAME of a project
- `user_id` (required) - The ID of a team member
- `access_level` (required) - Project access level
530 531

### Remove project team member
miks's avatar
miks committed
532

533
Removes a user from a project team.
miks's avatar
miks committed
534 535

```
536
DELETE /projects/:id/members/:user_id
miks's avatar
miks committed
537 538 539 540
```

Parameters:

541 542
- `id` (required) - The ID or NAMESPACE/PROJECT_NAME of a project
- `user_id` (required) - The ID of a team member
miks's avatar
miks committed
543

544 545 546
This method is idempotent and can be called multiple times with the same parameters.
Revoking team membership for a user who is not currently a team member is considered success.
Please note that the returned JSON currently differs slightly. Thus you should not
547
rely on the returned JSON structure.
Nihad Abbasov's avatar
Nihad Abbasov committed
548

549 550
## Hooks

551 552 553
Also called Project Hooks and Webhooks.
These are different for [System Hooks](system_hooks.md) that are system wide.

554 555
### List project hooks

556
Get a list of project hooks.
miks's avatar
miks committed
557 558 559 560 561 562 563

```
GET /projects/:id/hooks
```

Parameters:

564
- `id` (required) - The ID or NAMESPACE/PROJECT_NAME of a project
miks's avatar
miks committed
565

566
### Get project hook
567

568
Get a specific hook for a project.
569 570 571 572 573

```
GET /projects/:id/hooks/:hook_id
```

574
Parameters:
575

576 577
- `id` (required) - The ID or NAMESPACE/PROJECT_NAME of a project
- `hook_id` (required) - The ID of a project hook
578

579 580 581 582
```json
{
  "id": 1,
  "url": "http://example.com/hook",
583 584 585 586
  "project_id": 3,
  "push_events": "true",
  "issues_events": "true",
  "merge_requests_events": "true",
587 588
  "note_events": "true",
  "enable_ssl_verification": "true",
589 590 591 592 593 594
  "created_at": "2012-10-12T17:04:47Z"
}
```

### Add project hook

595
Adds a hook to a specified project.
miks's avatar
miks committed
596 597 598 599 600 601 602

```
POST /projects/:id/hooks
```

Parameters:

603 604 605 606 607
- `id` (required) - The ID or NAMESPACE/PROJECT_NAME of a project
- `url` (required) - The hook URL
- `push_events` - Trigger hook on push events
- `issues_events` - Trigger hook on issues events
- `merge_requests_events` - Trigger hook on merge_requests events
608
- `tag_push_events` - Trigger hook on push_tag events
609
- `note_events` - Trigger hook on note events
610
- `enable_ssl_verification` - Do SSL verification when triggering the hook
611

612 613
### Edit project hook

614
Edits a hook for a specified project.
615 616 617 618 619 620 621

```
PUT /projects/:id/hooks/:hook_id
```

Parameters:

622 623 624 625 626 627
- `id` (required) - The ID or NAMESPACE/PROJECT_NAME of a project
- `hook_id` (required) - The ID of a project hook
- `url` (required) - The hook URL
- `push_events` - Trigger hook on push events
- `issues_events` - Trigger hook on issues events
- `merge_requests_events` - Trigger hook on merge_requests events
628
- `tag_push_events` - Trigger hook on push_tag events
629
- `note_events` - Trigger hook on note events
630
- `enable_ssl_verification` - Do SSL verification when triggering the hook
631

632
### Delete project hook
miks's avatar
miks committed
633

634
Removes a hook from a project. This is an idempotent method and can be called multiple times.
635
Either the hook is available or not.
miks's avatar
miks committed
636 637

```
638
DELETE /projects/:id/hooks/:hook_id
miks's avatar
miks committed
639 640 641 642
```

Parameters:

643 644
- `id` (required) - The ID or NAMESPACE/PROJECT_NAME of a project
- `hook_id` (required) - The ID of hook to delete
miks's avatar
miks committed
645

646 647
Note the JSON response differs if the hook is available or not. If the project hook
is available before it is returned in the JSON response or an empty response is returned.
648 649 650 651 652 653 654 655 656 657 658 659 660

## Branches

### List branches

Lists all branches of a project.

```
GET /projects/:id/repository/branches
```

Parameters:

661
- `id` (required) - The ID or NAMESPACE/PROJECT_NAME of a project
662

Marin Jankovski's avatar
Marin Jankovski committed
663 664 665
```json
[
  {
Johannes Schleifenbaum's avatar
Johannes Schleifenbaum committed
666
    "name": "async",
Marin Jankovski's avatar
Marin Jankovski committed
667
    "commit": {
Johannes Schleifenbaum's avatar
Johannes Schleifenbaum committed
668 669 670 671 672 673
      "id": "a2b702edecdf41f07b42653eb1abe30ce98b9fca",
      "parents": [
        {
          "id": "3f94fc7c85061973edc9906ae170cc269b07ca55"
        }
      ],
Marin Jankovski's avatar
Marin Jankovski committed
674
      "tree": "c68537c6534a02cc2b176ca1549f4ffa190b58ee",
675
      "message": "give Caolan credit where it's due (up top)",
Marin Jankovski's avatar
Marin Jankovski committed
676
      "author": {
Johannes Schleifenbaum's avatar
Johannes Schleifenbaum committed
677 678
        "name": "Jeremy Ashkenas",
        "email": "jashkenas@example.com"
Marin Jankovski's avatar
Marin Jankovski committed
679 680
      },
      "committer": {
Johannes Schleifenbaum's avatar
Johannes Schleifenbaum committed
681 682
        "name": "Jeremy Ashkenas",
        "email": "jashkenas@example.com"
Marin Jankovski's avatar
Marin Jankovski committed
683
      },
Johannes Schleifenbaum's avatar
Johannes Schleifenbaum committed
684 685
      "authored_date": "2010-12-08T21:28:50+00:00",
      "committed_date": "2010-12-08T21:28:50+00:00"
Marin Jankovski's avatar
Marin Jankovski committed
686
    },
Johannes Schleifenbaum's avatar
Johannes Schleifenbaum committed
687
    "protected": false
Marin Jankovski's avatar
Marin Jankovski committed
688 689 690 691 692
  },
  {
    "name": "gh-pages",
    "commit": {
      "id": "101c10a60019fe870d21868835f65c25d64968fc",
Johannes Schleifenbaum's avatar
Johannes Schleifenbaum committed
693 694 695 696 697
      "parents": [
        {
          "id": "9c15d2e26945a665131af5d7b6d30a06ba338aaa"
        }
      ],
Marin Jankovski's avatar
Marin Jankovski committed
698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714
      "tree": "fb5cc9d45da3014b17a876ad539976a0fb9b352a",
      "message": "Underscore.js 1.5.2",
      "author": {
        "name": "Jeremy Ashkenas",
        "email": "jashkenas@example.com"
      },
      "committer": {
        "name": "Jeremy Ashkenas",
        "email": "jashkenas@example.com"
      },
      "authored_date": "2013-09-07T12: 58: 21+00: 00",
      "committed_date": "2013-09-07T12: 58: 21+00: 00"
    },
    "protected": false
  }
]
```
715 716 717 718 719 720 721 722 723 724 725

### List single branch

Lists a specific branch of a project.

```
GET /projects/:id/repository/branches/:branch
```

Parameters:

726 727
- `id` (required) - The ID or NAMESPACE/PROJECT_NAME of a project
- `branch` (required) - The name of the branch.
728 729 730 731 732 733 734 735 736 737 738

### Protect single branch

Protects a single branch of a project.

```
PUT /projects/:id/repository/branches/:branch/protect
```

Parameters:

739 740
- `id` (required) - The ID or NAMESPACE/PROJECT_NAME of a project
- `branch` (required) - The name of the branch.
741 742 743 744 745 746 747 748 749 750 751

### Unprotect single branch

Unprotects a single branch of a project.

```
PUT /projects/:id/repository/branches/:branch/unprotect
```

Parameters:

752 753
- `id` (required) - The ID or NAMESPACE/PROJECT_NAME of a project
- `branch` (required) - The name of the branch.
754 755 756

## Admin fork relation

757
Allows modification of the forked relationship between existing projects. Available only for admins.
758 759 760 761 762 763 764 765 766

### Create a forked from/to relation between existing projects.

```
POST /projects/:id/fork/:forked_from_id
```

Parameters:

767 768
- `id` (required) - The ID of the project
- `forked_from_id:` (required) - The ID of the project that was forked from
769 770 771 772 773 774 775 776 777

### Delete an existing forked from relationship

```
DELETE /projects/:id/fork
```

Parameter:

778
- `id` (required) - The ID of the project
779 780 781

## Search for projects by name

782
Search for projects by name which are accessible to the authenticated user.
783 784 785 786 787 788 789

```
GET /projects/search/:query
```

Parameters:

790 791 792 793 794
- `query` (required) - A string contained in the project name
- `per_page` (optional) - number of projects to return per page
- `page` (optional) - the page to retrieve
- `order_by` (optional) - Return requests ordered by `id`, `name`, `created_at` or `last_activity_at` fields
- `sort` (optional) - Return requests sorted in `asc` or `desc` order