Use this workflow when you want to refine how Humm understands your business entities, relationships, metrics, and glossary terms.
Before You Begin
You will need:
- Your organization ID
- A Humm API token
- The Config API base URL, usually
https://config.heyhumm.ai/api
Ontology updates create a new version. Fetch the current ontology first, make your edits locally, and include a short change_log when you save.
Recommended Flow
- Fetch the current ontology
- Save the JSON or YAML locally
- Draft your changes
- Review the diff
- Apply the
PUT
- Verify the new version
1. Fetch the Current Ontology
JSON:
curl --request GET \
--url "https://config.heyhumm.ai/api/organization/$ORG_ID/ontology" \
--header "Authorization: Bearer $HUMM_PAT"
YAML:
curl --request GET \
--url "https://config.heyhumm.ai/api/organization/$ORG_ID/ontology?format=yaml" \
--header "Authorization: Bearer $HUMM_PAT"
2. Apply the Update
You can send either ontology JSON or yaml. YAML is often easier to diff and review.
curl --request PUT \
--url "https://config.heyhumm.ai/api/organization/$ORG_ID/ontology" \
--header "Authorization: Bearer $HUMM_PAT" \
--header "Content-Type: application/json" \
--data '{
"change_log": "Add Subscription entity and define NRR",
"yaml": "metadata:\n organization_name: Acme Corp\nbusiness_entities:\n - name: Subscription\n type: Thing\n description: Recurring customer contract\nrelationships: []\ndata_entity_mappings: {}\nkey_metrics:\n - name: Net Revenue Retention\n description: Revenue retained from existing customers including expansion\n involved_entities:\n - Subscription\nbusiness_glossary:\n NRR: Net Revenue Retention\nbusiness_rules: []\n"
}'
Python Example
import difflib
import os
import requests
import yaml
base_url = "https://config.heyhumm.ai/api"
headers = {"Authorization": f"Bearer {os.environ['HUMM_PAT']}"}
org_id = os.environ["ORG_ID"]
current = requests.get(
f"{base_url}/organization/{org_id}/ontology",
params={"format": "yaml"},
headers=headers,
timeout=30,
)
current.raise_for_status()
current_yaml = current.json()["yaml"]
ontology = yaml.safe_load(current_yaml) or {}
glossary = dict(ontology.get("business_glossary") or {})
glossary["NRR"] = "Net Revenue Retention"
ontology["business_glossary"] = glossary
proposed_yaml = yaml.safe_dump(ontology, sort_keys=False, default_flow_style=False)
print("\n".join(difflib.unified_diff(
current_yaml.splitlines(),
proposed_yaml.splitlines(),
fromfile="before.yaml",
tofile="after.yaml",
lineterm="",
)))
approved = input("Apply ontology update? [y/N] ").strip().lower() == "y"
if approved:
res = requests.put(
f"{base_url}/organization/{org_id}/ontology",
headers={**headers, "Content-Type": "application/json"},
json={
"yaml": proposed_yaml,
"change_log": "Add NRR glossary term",
},
timeout=30,
)
res.raise_for_status()
print(res.json()["version"])
TypeScript Example
const baseUrl = "https://config.heyhumm.ai/api";
async function updateOntology(orgId: string, token: string) {
const current = await fetch(
`${baseUrl}/organization/${orgId}/ontology`,
{ headers: { Authorization: `Bearer ${token}` } },
);
if (!current.ok) throw new Error(`Fetch failed: ${current.status}`);
const body = await current.json();
const ontology = body.ontology ?? {};
const proposedOntology = {
...ontology,
business_glossary: {
...(ontology.business_glossary ?? {}),
NRR: "Net Revenue Retention",
},
};
console.log("Preview only:");
console.log({
before: ontology.business_glossary ?? {},
after: proposedOntology.business_glossary,
});
const res = await fetch(`${baseUrl}/organization/${orgId}/ontology`, {
method: "PUT",
headers: {
Authorization: `Bearer ${token}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
ontology: proposedOntology,
change_log: "Add NRR glossary term",
}),
});
if (!res.ok) throw new Error(`Update failed: ${res.status}`);
return res.json();
}
Prompt Your Assistant
Use the Humm Config API to update our ontology.
Organization:
- Use this organization ID: $ORG_ID
Change request:
- Add or update the ontology based on the change I describe
Workflow:
1. Fetch the current ontology in YAML form first
2. Save the current YAML locally as a backup
3. Review the current ontology before editing:
- metadata
- business_entities
- relationships
- key_metrics
- business_glossary
- business_rules
4. Draft the proposed YAML locally
5. Keep the change narrow and intentional:
- preserve existing structure and formatting when possible
- add only the entities, relationships, metrics, glossary terms, or rules needed for this change
- do not rename unrelated concepts
6. Validate the proposal before applying it:
- relationships should reference real entities
- descriptions should stay concise
- the change should fit the existing ontology instead of rewriting it broadly
7. Show me:
- the YAML diff
- a short summary of what changed
- any validation concerns or assumptions
8. Wait for my approval before calling PUT
9. Include a clear change_log in the write request
10. After the write succeeds, re-fetch:
- the current ontology
- the ontology versions list
11. Confirm:
- the version number increased
- the saved ontology matches the approved diff
- the version history includes the intended change_log
Constraints:
- Do not call PUT until I approve the diff
- Prefer YAML for review unless I explicitly ask for JSON
- If the request is ambiguous, identify the missing business detail before making edits
Verification
After saving, verify both the current ontology and version history:
curl --request GET \
--url "https://config.heyhumm.ai/api/organization/$ORG_ID/ontology" \
--header "Authorization: Bearer $HUMM_PAT"
curl --request GET \
--url "https://config.heyhumm.ai/api/organization/$ORG_ID/ontology/versions" \
--header "Authorization: Bearer $HUMM_PAT"
Confirm:
- The returned ontology matches the approved changes
- The version number increased
- The version history includes your
change_log
Notes
- YAML is easier to review when you want a human in the loop.
- JSON is a better fit if you generate ontology updates programmatically.
- Do not append duplicate top-level YAML keys like
business_glossary to the end of the document. Parse and update the existing structure instead, or send the merged JSON ontology payload.
- Keep changes narrow and intentional. Large ontology rewrites are harder to review and debug.