---
title: "Add Speak label sets"
method: POST
path: "/labels/speak-sets"
tags: ["Labels"]
---

# Add Speak label sets

`POST /labels/speak-sets`

## Request

- Base URL: `https://api.speakai.co/v1`
- URL: `https://api.speakai.co/v1/labels/speak-sets`
- Auth: API key in header `x-speakai-key` and API key in header `x-access-token`

Adds ready-made sets of labels, each as a group with `source: "speak"`. Requires the **Labels: Create** permission.

| Set | Group | Labels |
| --- | --- | --- |
| `sales_qa` | Sales QA | Unprofessional, Slang, Objection, Great moment, Compliance risk |
| `research` | Research | Pain point, Motivation, Quote for report, Surprise, Follow-up |
| `meetings` | Meetings | Decision, Action item, Risk, Open question |
| `transcript_feedback` | Transcript feedback | Wrong split, Misheard word, Wrong speaker, Bad translation |

Safe to repeat: an active group or label with the same name is reused rather than duplicated, so `createdCount` counts only what is new. A set whose group name is already used by a plain top-level label is skipped and listed in `skippedSets`.

## Request body

- object
  - `sets` string[], required: The sets to add. At least one, no repeats.

## Response `200`

Success

- object
  - `status` 'success': `success` on every 2xx response.
  - `data` object: The result.
    - `groups` object[]: The group for each set that was added or already there.
      - `labelId` string: Id of the label or group.
      - `isGroup` boolean: `true` for a group. A group holds labels and cannot be applied to a transcript.
      - `name` string: Name.
      - `description` string: Description. Left out when none was set.
      - `color` string: `#rrggbb` in lower case. Groups have none.
      - `parentId` string, nullable: `labelId` of the group this label sits in, or `null` at the top level.
      - `source` 'user' | 'speak': `speak` for labels added from a Speak label set, `user` for everything else.
      - `isActive` boolean: `false` once archived.
      - `mergedInto` string: `labelId` this label was merged into. Present only on merged labels.
      - `sortOrder` integer: Position among its siblings.
      - `userId` string: Id of the person who created it.
      - `createdAt` string, date-time: When it was created.
      - `updatedAt` string, date-time: When it last changed.
    - `createdCount` integer: How many groups and labels were created by this request.
    - `skippedSets` string[]: Sets skipped because a plain label already uses the group name.

## Other responses

- `400`: The request failed validation
- `403`: You lack the Labels: Create permission

---

[API](https://skmtc.dev/speakai/apis/speak-ai-api.md) · [All operations](https://skmtc.dev/speakai/apis/speak-ai-api/llms.txt) · [OpenAPI document](https://skmtc.dev/speakai/apis/speak-ai-api/revisions/52d777e6d46e?raw)
