curl --request POST \
--url https://app.octavehq.com/api/v2/tag-group/create \
--header 'Content-Type: application/json' \
--header 'api_key: <api-key>' \
--data '
{
"name": "Imperative",
"entityType": "use_case",
"description": "<string>",
"values": [
"Spend Control",
"Procurement Efficiency"
],
"isInferable": true,
"backfill": true
}
'import requests
url = "https://app.octavehq.com/api/v2/tag-group/create"
payload = {
"name": "Imperative",
"entityType": "use_case",
"description": "<string>",
"values": ["Spend Control", "Procurement Efficiency"],
"isInferable": True,
"backfill": True
}
headers = {
"api_key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {api_key: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: 'Imperative',
entityType: 'use_case',
description: '<string>',
values: ['Spend Control', 'Procurement Efficiency'],
isInferable: true,
backfill: true
})
};
fetch('https://app.octavehq.com/api/v2/tag-group/create', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.octavehq.com/api/v2/tag-group/create",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'name' => 'Imperative',
'entityType' => 'use_case',
'description' => '<string>',
'values' => [
'Spend Control',
'Procurement Efficiency'
],
'isInferable' => true,
'backfill' => true
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"api_key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://app.octavehq.com/api/v2/tag-group/create"
payload := strings.NewReader("{\n \"name\": \"Imperative\",\n \"entityType\": \"use_case\",\n \"description\": \"<string>\",\n \"values\": [\n \"Spend Control\",\n \"Procurement Efficiency\"\n ],\n \"isInferable\": true,\n \"backfill\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("api_key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://app.octavehq.com/api/v2/tag-group/create")
.header("api_key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Imperative\",\n \"entityType\": \"use_case\",\n \"description\": \"<string>\",\n \"values\": [\n \"Spend Control\",\n \"Procurement Efficiency\"\n ],\n \"isInferable\": true,\n \"backfill\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.octavehq.com/api/v2/tag-group/create")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["api_key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"Imperative\",\n \"entityType\": \"use_case\",\n \"description\": \"<string>\",\n \"values\": [\n \"Spend Control\",\n \"Procurement Efficiency\"\n ],\n \"isInferable\": true,\n \"backfill\": true\n}"
response = http.request(request)
puts response.read_body{
"_metadata": {
"requestId": "requestId",
"timestamp": "2021-01-01T00:00:00.000Z",
"usage": 0,
"message": "message"
},
"data": {
"oId": "tg_1234",
"name": "<string>",
"entityType": "use_case",
"isInferable": true,
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"tags": [
{
"oId": "tag_1234",
"name": "<string>",
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"position": 123
}
],
"backfill": {
"queuedCount": 123,
"remainingCount": 123
},
"description": "<string>"
}
}{
"_metadata": {
"requestId": "requestId",
"timestamp": "2021-01-01T00:00:00.000Z",
"usage": 0,
"message": "message"
},
"message": "<string>"
}{
"_metadata": {
"requestId": "requestId",
"timestamp": "2021-01-01T00:00:00.000Z",
"usage": 0,
"message": "message"
},
"message": "<string>"
}Create Tag Group
Create a reporting tag group (a faceted dimension) for one library entity type, optionally with its initial values. Set isInferable to have Octave auto-infer a value for new entities of the type, and backfill to also queue inference for existing ones.
curl --request POST \
--url https://app.octavehq.com/api/v2/tag-group/create \
--header 'Content-Type: application/json' \
--header 'api_key: <api-key>' \
--data '
{
"name": "Imperative",
"entityType": "use_case",
"description": "<string>",
"values": [
"Spend Control",
"Procurement Efficiency"
],
"isInferable": true,
"backfill": true
}
'import requests
url = "https://app.octavehq.com/api/v2/tag-group/create"
payload = {
"name": "Imperative",
"entityType": "use_case",
"description": "<string>",
"values": ["Spend Control", "Procurement Efficiency"],
"isInferable": True,
"backfill": True
}
headers = {
"api_key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {api_key: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: 'Imperative',
entityType: 'use_case',
description: '<string>',
values: ['Spend Control', 'Procurement Efficiency'],
isInferable: true,
backfill: true
})
};
fetch('https://app.octavehq.com/api/v2/tag-group/create', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.octavehq.com/api/v2/tag-group/create",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'name' => 'Imperative',
'entityType' => 'use_case',
'description' => '<string>',
'values' => [
'Spend Control',
'Procurement Efficiency'
],
'isInferable' => true,
'backfill' => true
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"api_key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://app.octavehq.com/api/v2/tag-group/create"
payload := strings.NewReader("{\n \"name\": \"Imperative\",\n \"entityType\": \"use_case\",\n \"description\": \"<string>\",\n \"values\": [\n \"Spend Control\",\n \"Procurement Efficiency\"\n ],\n \"isInferable\": true,\n \"backfill\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("api_key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://app.octavehq.com/api/v2/tag-group/create")
.header("api_key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Imperative\",\n \"entityType\": \"use_case\",\n \"description\": \"<string>\",\n \"values\": [\n \"Spend Control\",\n \"Procurement Efficiency\"\n ],\n \"isInferable\": true,\n \"backfill\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.octavehq.com/api/v2/tag-group/create")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["api_key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"Imperative\",\n \"entityType\": \"use_case\",\n \"description\": \"<string>\",\n \"values\": [\n \"Spend Control\",\n \"Procurement Efficiency\"\n ],\n \"isInferable\": true,\n \"backfill\": true\n}"
response = http.request(request)
puts response.read_body{
"_metadata": {
"requestId": "requestId",
"timestamp": "2021-01-01T00:00:00.000Z",
"usage": 0,
"message": "message"
},
"data": {
"oId": "tg_1234",
"name": "<string>",
"entityType": "use_case",
"isInferable": true,
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"tags": [
{
"oId": "tag_1234",
"name": "<string>",
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"position": 123
}
],
"backfill": {
"queuedCount": 123,
"remainingCount": 123
},
"description": "<string>"
}
}{
"_metadata": {
"requestId": "requestId",
"timestamp": "2021-01-01T00:00:00.000Z",
"usage": 0,
"message": "message"
},
"message": "<string>"
}{
"_metadata": {
"requestId": "requestId",
"timestamp": "2021-01-01T00:00:00.000Z",
"usage": 0,
"message": "message"
},
"message": "<string>"
}Authorizations
Body
Tag group name
1"Imperative"
The library entity type this group tags. Defaults to segment.
segment, persona, use_case, proof_point, reference, competitor, alternative, buying_trigger, objection, product, service, solution, core_feature "use_case"
What this dimension captures
Initial tag values, mutually exclusive — an entity carries at most one per group
1["Spend Control", "Procurement Efficiency"]
Auto-infer a value for each new entity of the type. Defaults to false (values assigned by hand).
When true, queue inference for existing entities not yet in the group right after saving. Requires the group to be auto-infer and to have at least one value. Costs one LLM call per queued entity. Defaults to false.