> For the complete documentation index, see [llms.txt](https://docs.datasaur.ai/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.datasaur.ai/api/labeling/create-label-set.md).

# Create label set

When creating a span labeling project, you may also want to set up a label set. The example below shows how to create a simple label set with three labels, each assigned a color.

In this case, we’ll use the GraphQL mutation `createLabelSet` to create the label set in Datasaur.

**Mutation**: [createLabelSet](https://api-docs.datasaur.ai/#mutation-createLabelSet).

## cURL

Use the following cURL command to create a label set and attach it to a project. Copy and paste it, then replace the following:

* `access_token` with your own API access token.
* The content of the label set items with your desired labels.
* `project_id` with the ID of the project you want to link it to.

Make sure to adjust these values according to your specific needs before running the command.

```sh
curl --location --request POST 'https://datasaur.ai/graphql' \
--header 'Authorization: Bearer access_token' \
--header 'Content-Type: application/json' \
--data-raw '{"query":"mutation CreateLabelSetMutation($input: CreateLabelSetInput!, $projectId: ID!) { createLabelSet(input: $input, projectId: $projectId) { id }}","variables":{"input":{"name":"Give your new label set a name","index":0,"tagItems":[{"id":"per","parentId":null,"desc":null,"color":"red","tagName":"PER"},{"id":"geo","parentId":null,"desc":null,"color":"green","tagName":"GEO"},{"id":"gpe","parentId":null,"desc":null,"color":null,"tagName":"GPE"}]},"projectId":"<projectId>"}}'
```

For clarity, here’s a formatted version of the request body:

{% code overflow="wrap" lineNumbers="true" %}

```json
{
  "query": "mutation CreateLabelSetMutation($input: CreateLabelSetInput!, $projectId: ID!) { createLabelSet(input: $input, projectId: $projectId) { id }}",
  "variables": {
    "projectId": "<projectId>",
    "input": {
      "name": "Give your new label set a name",
      "index": 0,
      "tagItems": [
        {
          "id": "per",
          "parentId": null,
          "desc": null,
          "color": "red",
          "tagName": "PER"
        },
        {
          "id": "geo",
          "parentId": null,
          "desc": null,
          "color": "green",
          "tagName": "GEO"
        },
        {
          "id": "gpe",
          "parentId": null,
          "desc": null,
          "color": null,
          "tagName": "GPE"
        }
      ]
    }
  }
}

```

{% endcode %}

* **operationName**: you can fill any alphanumeric string in as the operationName. Refer to [this page](https://graphql.org/learn/queries/#operation-name) for best practices on choosing an `operationName`.
* **variables:**
  * **projectId** (optional): In practice, this is required if you want to attach the label set to a particular project. If unspecified, the label set will be created, but you won't be able to see it in the project
  * **input:**
    * **name** (optional)**:** You may give this label set a name so you could refer it in the future from Label Set Library.
    * **index** (optional)**:** The zero-based index or position of the label set. For example, set the value to `0` to place the label set as the first item.
    * **tagItems:**
      * Each tag item includes 3 required fields:
        * **id**: Fill with a random ID. You can use any string as long as it is unique.
        * **parentId**: This is used for hierarchical labels. Use any existing IDs that you have defined. If there is no **parentId**, use `null`.
        * **tagName**: Fill with the actual labels you'd like to use and the user will see. For example: `person`, `geopolitical entity`.
      * A tag item also has 2 optional fields:
        * **desc**: label description.
        * **color:** You can set the color of the label. Refer to [this page](/data-studio-projects/lets-get-labeling/label-sets.md#color-coded-labels).
* **query**: Copy this from the cURL example above.

{% hint style="info" %}
A **tag** has the same meaning as **label**. In the near future we will update the GraphQL Schema to refer to all instances as labels.
{% endhint %}

## Response

Here is the response you can expect after issuing the cURL command. Use the **ID** to create the project.

```json
{
    "data": {
        "createLabelSet": {
            "id": "366"
        }
    },
    "extensions": {}
}
```
