> ## 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>
## Related topics
- [Overview](/en/api-reference/tag-groups.md)
- [List tags in group](/en/api-reference/list-tags-in-group.md)
- [List tags across groups](/en/api-reference/list-tags-across-groups.md)
This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.
Tag groups

