> ## Documentation Index
> Fetch the complete documentation index at: https://docs.usefini.com/llms.txt
> Use this file to discover all available pages before exploring further.

# List tag groups

> List the tag groups visible to your workspace API key, including Fini defaults and workspace-owned custom groups.

Returns every tag group visible to the workspace API key, ordered by `createdAt` descending.

## Headers

<ParamField header="Authorization" type="string" required>
  Bearer token containing your Fini workspace API key. Format: `Bearer fini_...` The key needs `read` scope.
</ParamField>

<RequestExample>
  ```bash cURL theme={null}
  curl --request GET \
    --url 'https://api-prod.usefini.com/v2/tag-groups/public' \
    --header 'Authorization: Bearer fini_your_api_key'
  ```

  ```python Python theme={null}
  import requests

  response = requests.get(
      "https://api-prod.usefini.com/v2/tag-groups/public",
      headers={"Authorization": "Bearer fini_your_api_key"},
  )
  tag_groups = response.json()
  ```

  ```javascript Node.js theme={null}
  const response = await fetch(
    "https://api-prod.usefini.com/v2/tag-groups/public",
    {
      headers: {
        Authorization: "Bearer fini_your_api_key",
      },
    }
  );
  const tagGroups = await response.json();
  ```
</RequestExample>

## Response

The response is a top-level array of [`TagGroup`](/en/api-reference/tag-groups#taggroup-object) objects.

<ResponseExample>
  ```json 200 OK theme={null}
  [
    {
      "id": "4fbcebbd-693d-4fb8-84b2-c8fd0edee4c5",
      "createdAt": "2026-06-12T10:14:22.000Z",
      "companyId": "38ba4db0-31db-4669-bb95-7b8313c4016b",
      "title": "Order Intent",
      "description": "Primary order-related intent used for routing and reporting.",
      "prompt": "Choose the single tag that best describes the customer's order request.",
      "multiselect": false,
      "updatedAt": "2026-06-12T10:14:22.000Z",
      "mandatory": false,
      "isOutputTagGroup": false
    },
    {
      "id": "a7f8e849-0a1c-4d95-a311-0cb1ffbe4b4d",
      "createdAt": "2026-05-01T08:00:00.000Z",
      "companyId": null,
      "title": "Conversation Status",
      "description": "Tracks the final state of the conversation.",
      "prompt": "Select the final conversation state based on the assistant's most recent handling outcome.",
      "multiselect": false,
      "updatedAt": "2026-05-01T08:00:00.000Z",
      "mandatory": true,
      "isOutputTagGroup": false
    }
  ]
  ```

  ```json 401 Unauthorized theme={null}
  {
    "statusCode": 401,
    "message": "Invalid or revoked API key",
    "error": "Unauthorized"
  }
  ```

  ```json 403 Forbidden theme={null}
  {
    "statusCode": 403,
    "message": "API key does not have the required scope for this operation",
    "error": "Forbidden"
  }
  ```
</ResponseExample>

## Errors

<AccordionGroup>
  <Accordion title="401 Unauthorized" icon="lock">
    The API key is missing, malformed, revoked, or invalid.
  </Accordion>

  <Accordion title="403 Forbidden" icon="shield-halved">
    The API key does not include the `read` scope required for this route.
  </Accordion>

  <Accordion title="500 Internal Server Error" icon="triangle-exclamation">
    Fini failed while loading tag groups from storage.
  </Accordion>
</AccordionGroup>
