--- stage: Plan group: Project Management info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#designated-technical-writers --- # Issue Boards API Every API call to boards must be authenticated. If a user is not a member of a project and the project is private, a `GET` request on that project will result to a `404` status code. ## Project Board Lists Issue Boards in the given project. ```plaintext GET /projects/:id/boards ``` | Attribute | Type | Required | Description | | --------- | ---- | -------- | ----------- | | `id` | integer/string | yes | The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding) owned by the authenticated user | ```shell curl --header "PRIVATE-TOKEN: " "https://gitlab.example.com/api/v4/projects/5/boards" ``` Example response: ```json [ { "id" : 1, "project": { "id": 5, "name": "Diaspora Project Site", "name_with_namespace": "Diaspora / Diaspora Project Site", "path": "diaspora-project-site", "path_with_namespace": "diaspora/diaspora-project-site", "http_url_to_repo": "http://example.com/diaspora/diaspora-project-site.git", "web_url": "http://example.com/diaspora/diaspora-project-site" }, "milestone": { "id": 12, "title": "10.0" }, "lists" : [ { "id" : 1, "label" : { "name" : "Testing", "color" : "#F0AD4E", "description" : null }, "position" : 1, "max_issue_count": 0, "max_issue_weight": 0, "limit_metric": null }, { "id" : 2, "label" : { "name" : "Ready", "color" : "#FF0000", "description" : null }, "position" : 2, "max_issue_count": 0, "max_issue_weight": 0, "limit_metric": null }, { "id" : 3, "label" : { "name" : "Production", "color" : "#FF5F00", "description" : null }, "position" : 3, "max_issue_count": 0, "max_issue_weight": 0, "limit_metric": null } ] } ] ``` ## Single board Get a single board. ```plaintext GET /projects/:id/boards/:board_id ``` | Attribute | Type | Required | Description | | --------- | ---- | -------- | ----------- | | `id` | integer/string | yes | The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding) owned by the authenticated user | | `board_id` | integer | yes | The ID of a board | ```shell curl --header "PRIVATE-TOKEN: " "https://gitlab.example.com/api/v4/projects/5/boards/1" ``` Example response: ```json { "id": 1, "name": "project issue board", "project": { "id": 5, "name": "Diaspora Project Site", "name_with_namespace": "Diaspora / Diaspora Project Site", "path": "diaspora-project-site", "path_with_namespace": "diaspora/diaspora-project-site", "http_url_to_repo": "http://example.com/diaspora/diaspora-project-site.git", "web_url": "http://example.com/diaspora/diaspora-project-site" }, "milestone": { "id": 12, "title": "10.0" }, "lists" : [ { "id" : 1, "label" : { "name" : "Testing", "color" : "#F0AD4E", "description" : null }, "position" : 1, "max_issue_count": 0, "max_issue_weight": 0, "limit_metric": null }, { "id" : 2, "label" : { "name" : "Ready", "color" : "#FF0000", "description" : null }, "position" : 2, "max_issue_count": 0, "max_issue_weight": 0, "limit_metric": null }, { "id" : 3, "label" : { "name" : "Production", "color" : "#FF5F00", "description" : null }, "position" : 3, "max_issue_count": 0, "max_issue_weight": 0, "limit_metric": null } ] } ``` ## Create a board **(STARTER)** Creates a board. ```plaintext POST /projects/:id/boards ``` | Attribute | Type | Required | Description | | --------- | ---- | -------- | ----------- | | `id` | integer/string | yes | The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding) owned by the authenticated user | | `name` | string | yes | The name of the new board | ```shell curl --request POST --header "PRIVATE-TOKEN: " "https://gitlab.example.com/api/v4/projects/5/boards?name=newboard" ``` Example response: ```json { "id": 1, "project": { "id": 5, "name": "Diaspora Project Site", "name_with_namespace": "Diaspora / Diaspora Project Site", "path": "diaspora-project-site", "path_with_namespace": "diaspora/diaspora-project-site", "http_url_to_repo": "http://example.com/diaspora/diaspora-project-site.git", "web_url": "http://example.com/diaspora/diaspora-project-site" }, "name": "newboard", "milestone": { "id": 12 "title": "10.0" }, "lists" : [ { "id" : 1, "label" : { "name" : "Testing", "color" : "#F0AD4E", "description" : null }, "position" : 1, "max_issue_count": 0, "max_issue_weight": 0, "limit_metric": null }, { "id" : 2, "label" : { "name" : "Ready", "color" : "#FF0000", "description" : null }, "position" : 2, "max_issue_count": 0, "max_issue_weight": 0, "limit_metric": null }, { "id" : 3, "label" : { "name" : "Production", "color" : "#FF5F00", "description" : null }, "position" : 3, "max_issue_count": 0, "max_issue_weight": 0, "limit_metric": null } ] } ``` ## Update a board **(STARTER)** > [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/5954) in [GitLab Starter](https://about.gitlab.com/pricing/) 11.1. Updates a board. ```plaintext PUT /projects/:id/boards/:board_id ``` | Attribute | Type | Required | Description | | ------------------- | -------------- | -------- | ----------- | | `id` | integer/string | yes | The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding) owned by the authenticated user | | `board_id` | integer | yes | The ID of a board | | `name` | string | no | The new name of the board | | `assignee_id` | integer | no | The assignee the board should be scoped to | | `milestone_id` | integer | no | The milestone the board should be scoped to | | `labels` | string | no | Comma-separated list of label names which the board should be scoped to | | `weight` | integer | no | The weight range from 0 to 9, to which the board should be scoped to | ```shell curl --request PUT --header "PRIVATE-TOKEN: " "https://gitlab.example.com/api/v4/projects/5/boards/1?name=new_name&milestone_id=43&assignee_id=1&labels=Doing&weight=4" ``` Example response: ```json { "id": 1, "project": { "id": 5, "name": "Diaspora Project Site", "name_with_namespace": "Diaspora / Diaspora Project Site", "path": "diaspora-project-site", "path_with_namespace": "diaspora/diaspora-project-site", "created_at": "2018-07-03T05:48:49.982Z", "default_branch": null, "tag_list": [], "ssh_url_to_repo": "ssh://user@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", "readme_url": null, "avatar_url": null, "star_count": 0, "forks_count": 0, "last_activity_at": "2018-07-03T05:48:49.982Z" }, "lists": [], "name": "new_name", "group": null, "milestone": { "id": 43, "iid": 1, "project_id": 15, "title": "Milestone 1", "description": "Milestone 1 desc", "state": "active", "created_at": "2018-07-03T06:36:42.618Z", "updated_at": "2018-07-03T06:36:42.618Z", "due_date": null, "start_date": null, "web_url": "http://example.com/root/board1/milestones/1" }, "assignee": { "id": 1, "name": "Administrator", "username": "root", "state": "active", "avatar_url": "https://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon", "web_url": "http://example.com/root" }, "labels": [{ "id": 10, "name": "Doing", "color": "#5CB85C", "description": null }], "weight": 4 } ``` ## Delete a board **(STARTER)** Deletes a board. ```plaintext DELETE /projects/:id/boards/:board_id ``` | Attribute | Type | Required | Description | | --------- | ---- | -------- | ----------- | | `id` | integer/string | yes | The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding) owned by the authenticated user | | `board_id` | integer | yes | The ID of a board | ```shell curl --request DELETE --header "PRIVATE-TOKEN: " "https://gitlab.example.com/api/v4/projects/5/boards/1" ``` ## List board lists Get a list of the board's lists. Does not include `open` and `closed` lists ```plaintext GET /projects/:id/boards/:board_id/lists ``` | Attribute | Type | Required | Description | | --------- | ---- | -------- | ----------- | | `id` | integer/string | yes | The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding) owned by the authenticated user | | `board_id` | integer | yes | The ID of a board | ```shell curl --header "PRIVATE-TOKEN: " "https://gitlab.example.com/api/v4/projects/5/boards/1/lists" ``` Example response: ```json [ { "id" : 1, "label" : { "name" : "Testing", "color" : "#F0AD4E", "description" : null }, "position" : 1, "max_issue_count": 0, "max_issue_weight": 0, "limit_metric": null }, { "id" : 2, "label" : { "name" : "Ready", "color" : "#FF0000", "description" : null }, "position" : 2, "max_issue_count": 0, "max_issue_weight": 0, "limit_metric": null }, { "id" : 3, "label" : { "name" : "Production", "color" : "#FF5F00", "description" : null }, "position" : 3, "max_issue_count": 0, "max_issue_weight": 0, "limit_metric": null } ] ``` ## Single board list Get a single board list. ```plaintext GET /projects/:id/boards/:board_id/lists/:list_id ``` | Attribute | Type | Required | Description | | --------- | ---- | -------- | ----------- | | `id` | integer/string | yes | The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding) owned by the authenticated user | | `board_id` | integer | yes | The ID of a board | | `list_id`| integer | yes | The ID of a board's list | ```shell curl --header "PRIVATE-TOKEN: " "https://gitlab.example.com/api/v4/projects/5/boards/1/lists/1" ``` Example response: ```json { "id" : 1, "label" : { "name" : "Testing", "color" : "#F0AD4E", "description" : null }, "position" : 1, "max_issue_count": 0, "max_issue_weight": 0, "limit_metric": null } ``` ## New board list Creates a new Issue Board list. ```plaintext POST /projects/:id/boards/:board_id/lists ``` | Attribute | Type | Required | Description | | --------- | ---- | -------- | ----------- | | `id` | integer/string | yes | The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding) owned by the authenticated user | | `board_id` | integer | yes | The ID of a board | | `label_id` | integer | no | The ID of a label | | `assignee_id` **(PREMIUM)** | integer | no | The ID of a user | | `milestone_id` **(PREMIUM)** | integer | no | The ID of a milestone | NOTE: **Note:** Label, assignee and milestone arguments are mutually exclusive, that is, only one of them are accepted in a request. Check the [Issue Board docs](../user/project/issue_board.md#summary-of-features-per-tier) for more information regarding the required license for each list type. ```shell curl --request POST --header "PRIVATE-TOKEN: " "https://gitlab.example.com/api/v4/projects/5/boards/1/lists?label_id=5" ``` Example response: ```json { "id" : 1, "label" : { "name" : "Testing", "color" : "#F0AD4E", "description" : null }, "position" : 1, "max_issue_count": 0, "max_issue_weight": 0, "limit_metric": null } ``` ## Edit board list Updates an existing Issue Board list. This call is used to change list position. ```plaintext PUT /projects/:id/boards/:board_id/lists/:list_id ``` | Attribute | Type | Required | Description | | --------- | ---- | -------- | ----------- | | `id` | integer/string | yes | The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding) owned by the authenticated user | | `board_id` | integer | yes | The ID of a board | | `list_id` | integer | yes | The ID of a board's list | | `position` | integer | yes | The position of the list | ```shell curl --request PUT --header "PRIVATE-TOKEN: " "https://gitlab.example.com/api/v4/projects/5/boards/1/lists/1?position=2" ``` Example response: ```json { "id" : 1, "label" : { "name" : "Testing", "color" : "#F0AD4E", "description" : null }, "position" : 1, "max_issue_count": 0, "max_issue_weight": 0, "limit_metric": null } ``` ## Delete a board list Only for admins and project owners. Deletes the board list in question. ```plaintext DELETE /projects/:id/boards/:board_id/lists/:list_id ``` | Attribute | Type | Required | Description | | --------- | ---- | -------- | ----------- | | `id` | integer/string | yes | The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding) owned by the authenticated user | | `board_id` | integer | yes | The ID of a board | | `list_id` | integer | yes | The ID of a board's list | ```shell curl --request DELETE --header "PRIVATE-TOKEN: " "https://gitlab.example.com/api/v4/projects/5/boards/1/lists/1" ```