curl --request POST \
--url 'https://api-prod.usefini.com/v2/tag-groups/public' \
--header 'Authorization: Bearer fini_your_api_key' \
--header 'Content-Type: application/json' \
--data '{
"title": "Resolution Outcome",
"description": "Post-reply outcome tags for downstream workflows.",
"prompt": "Apply the tag that best describes how the assistant handled the conversation.",
"multiselect": false,
"isOutputTagGroup": true
}'
import requests
response = requests.post(
"https://api-prod.usefini.com/v2/tag-groups/public",
headers={
"Authorization": "Bearer fini_your_api_key",
"Content-Type": "application/json",
},
json={
"title": "Resolution Outcome",
"description": "Post-reply outcome tags for downstream workflows.",
"prompt": "Apply the tag that best describes how the assistant handled the conversation.",
"multiselect": False,
"isOutputTagGroup": True,
},
)
tag_group = response.json()
const response = await fetch(
"https://api-prod.usefini.com/v2/tag-groups/public",
{
method: "POST",
headers: {
Authorization: "Bearer fini_your_api_key",
"Content-Type": "application/json",
},
body: JSON.stringify({
title: "Resolution Outcome",
description: "Post-reply outcome tags for downstream workflows.",
prompt:
"Apply the tag that best describes how the assistant handled the conversation.",
multiselect: false,
isOutputTagGroup: true,
}),
}
);
const tagGroup = await response.json();
{
"id": "f770d0bb-d5ea-44e7-a92a-fcfa2d5a32d5",
"createdAt": "2026-06-19T07:30:11.000Z",
"companyId": "38ba4db0-31db-4669-bb95-7b8313c4016b",
"title": "Resolution Outcome",
"description": "Post-reply outcome tags for downstream workflows.",
"prompt": "Apply the tag that best describes how the assistant handled the conversation.",
"multiselect": false,
"updatedAt": "2026-06-19T07:30:11.000Z",
"mandatory": false,
"isOutputTagGroup": true
}
{
"statusCode": 400,
"message": [
"title should not be empty"
],
"error": "Bad Request"
}
Tag groups
Create tag group
Create a custom tag group.
POST
/
v2
/
tag-groups
/
public
curl --request POST \
--url 'https://api-prod.usefini.com/v2/tag-groups/public' \
--header 'Authorization: Bearer fini_your_api_key' \
--header 'Content-Type: application/json' \
--data '{
"title": "Resolution Outcome",
"description": "Post-reply outcome tags for downstream workflows.",
"prompt": "Apply the tag that best describes how the assistant handled the conversation.",
"multiselect": false,
"isOutputTagGroup": true
}'
import requests
response = requests.post(
"https://api-prod.usefini.com/v2/tag-groups/public",
headers={
"Authorization": "Bearer fini_your_api_key",
"Content-Type": "application/json",
},
json={
"title": "Resolution Outcome",
"description": "Post-reply outcome tags for downstream workflows.",
"prompt": "Apply the tag that best describes how the assistant handled the conversation.",
"multiselect": False,
"isOutputTagGroup": True,
},
)
tag_group = response.json()
const response = await fetch(
"https://api-prod.usefini.com/v2/tag-groups/public",
{
method: "POST",
headers: {
Authorization: "Bearer fini_your_api_key",
"Content-Type": "application/json",
},
body: JSON.stringify({
title: "Resolution Outcome",
description: "Post-reply outcome tags for downstream workflows.",
prompt:
"Apply the tag that best describes how the assistant handled the conversation.",
multiselect: false,
isOutputTagGroup: true,
}),
}
);
const tagGroup = await response.json();
{
"id": "f770d0bb-d5ea-44e7-a92a-fcfa2d5a32d5",
"createdAt": "2026-06-19T07:30:11.000Z",
"companyId": "38ba4db0-31db-4669-bb95-7b8313c4016b",
"title": "Resolution Outcome",
"description": "Post-reply outcome tags for downstream workflows.",
"prompt": "Apply the tag that best describes how the assistant handled the conversation.",
"multiselect": false,
"updatedAt": "2026-06-19T07:30:11.000Z",
"mandatory": false,
"isOutputTagGroup": true
}
{
"statusCode": 400,
"message": [
"title should not be empty"
],
"error": "Bad Request"
}
Creates a custom tag group and returns the stored
TagGroup.
Headers
Bearer token containing your Fini workspace API key. Format:
Bearer fini_... The key needs write scope.application/jsonBody parameters
Group title.
Optional group description.
Optional AI-instruction text for the group’s tag selection logic.
Optional flag controlling whether the group allows multiple tags per conversation.
Optional flag for output-only groups. If
true, this group will not be available in Rulebooks, including intent-based rules, so leave it false for routing or other Rulebook conditions.curl --request POST \
--url 'https://api-prod.usefini.com/v2/tag-groups/public' \
--header 'Authorization: Bearer fini_your_api_key' \
--header 'Content-Type: application/json' \
--data '{
"title": "Resolution Outcome",
"description": "Post-reply outcome tags for downstream workflows.",
"prompt": "Apply the tag that best describes how the assistant handled the conversation.",
"multiselect": false,
"isOutputTagGroup": true
}'
import requests
response = requests.post(
"https://api-prod.usefini.com/v2/tag-groups/public",
headers={
"Authorization": "Bearer fini_your_api_key",
"Content-Type": "application/json",
},
json={
"title": "Resolution Outcome",
"description": "Post-reply outcome tags for downstream workflows.",
"prompt": "Apply the tag that best describes how the assistant handled the conversation.",
"multiselect": False,
"isOutputTagGroup": True,
},
)
tag_group = response.json()
const response = await fetch(
"https://api-prod.usefini.com/v2/tag-groups/public",
{
method: "POST",
headers: {
Authorization: "Bearer fini_your_api_key",
"Content-Type": "application/json",
},
body: JSON.stringify({
title: "Resolution Outcome",
description: "Post-reply outcome tags for downstream workflows.",
prompt:
"Apply the tag that best describes how the assistant handled the conversation.",
multiselect: false,
isOutputTagGroup: true,
}),
}
);
const tagGroup = await response.json();
Response
Returns the createdTagGroup.
{
"id": "f770d0bb-d5ea-44e7-a92a-fcfa2d5a32d5",
"createdAt": "2026-06-19T07:30:11.000Z",
"companyId": "38ba4db0-31db-4669-bb95-7b8313c4016b",
"title": "Resolution Outcome",
"description": "Post-reply outcome tags for downstream workflows.",
"prompt": "Apply the tag that best describes how the assistant handled the conversation.",
"multiselect": false,
"updatedAt": "2026-06-19T07:30:11.000Z",
"mandatory": false,
"isOutputTagGroup": true
}
{
"statusCode": 400,
"message": [
"title should not be empty"
],
"error": "Bad Request"
}
Errors
400 Bad Request
400 Bad Request
The body is malformed or missing the required
title.401 Unauthorized
401 Unauthorized
The API key is missing, malformed, revoked, or invalid.
403 Forbidden
403 Forbidden
The API key does not include the
write scope required for this route.500 Internal Server Error
500 Internal Server Error
Fini failed while creating the tag group in storage.
Was this page helpful?
⌘I

