Create a Glossary Term
Create a new glossary term within a glossary.
Body Parameters
Name of the glossary term. Must be unique within the parent glossary or parent term.
Fully qualified name of the parent glossary (e.g., BusinessGlossary).
Human-readable display name for the glossary term.
Description of the glossary term in Markdown format.
Fully qualified name of the parent glossary term for creating nested terms (e.g., BusinessGlossary.Revenue).
Array of synonym strings for this term.
Array of fully qualified names of related glossary terms.
Array of owner references (users or teams) to assign to the glossary term. UUID of the owner entity.
Type of owner entity (e.g., user, team).
Name of the owner entity.
Array of classification tags to apply. Fully qualified name of the tag.
Type of label (e.g., Manual, Derived, Propagated).
State of the tag (e.g., Suggested, Confirmed).
Fully qualified name of the domain to assign for governance purposes.
Visual styling for the glossary term. Hex color code (e.g., #FF5733).
URL to a custom icon for the term.
from metadata.sdk import configure
from metadata.sdk.entities import GlossaryTerms
from metadata.generated.schema.api.data.createGlossaryTerm import CreateGlossaryTermRequest
configure(
host = "https://your-company.getcollate.io/api" ,
jwt_token = "your-jwt-token"
)
request = CreateGlossaryTermRequest(
name = "Revenue" ,
glossary = "BusinessGlossary" ,
displayName = "Revenue" ,
description = "Total income generated from business operations" ,
synonyms = [ "Income" , "Earnings" , "Sales" ]
)
term = GlossaryTerms.create(request)
print ( f "Created: { term.fullyQualifiedName } " )
{
"id" : "d3a50b09-g258-7h57-defg-42g1d5517ed4" ,
"name" : "Revenue" ,
"fullyQualifiedName" : "BusinessGlossary.Revenue" ,
"displayName" : "Revenue" ,
"description" : "Total income generated from business operations" ,
"synonyms" : [ "Income" , "Earnings" , "Sales" ],
"glossary" : {
"id" : "c2940a98-f147-6g46-cdef-31f0c4406dc3" ,
"type" : "glossary" ,
"name" : "BusinessGlossary" ,
"fullyQualifiedName" : "BusinessGlossary" ,
"deleted" : false
},
"version" : 0.1 ,
"updatedAt" : 1769984330261 ,
"updatedBy" : "admin" ,
"href" : "http://localhost:8585/api/v1/glossaryTerms/d3a50b09-g258-7h57-defg-42g1d5517ed4" ,
"deleted" : false ,
"owners" : [],
"tags" : [],
"children" : [],
"relatedTerms" : []
}
Returns
Returns the created glossary term object with all specified properties and system-generated fields.
Response
Unique identifier for the glossary term (UUID format).
Fully qualified name in format glossary.termName or glossary.parent.child.
Human-readable display name.
Description of the glossary term in Markdown format.
List of synonym strings for this term.
Reference to the parent glossary. Type of entity (always glossary).
Fully qualified name of the glossary.
Child glossary term references.
Related glossary term references.
List of owners assigned to the glossary term.
Classification tags applied to the glossary term.
Visual styling for the term.
Version number for the entity (starts at 0.1).
Create or Update (PUT)
Use PUT /v1/glossaryTerms instead of POST to perform an upsert. If a glossary term with the same fullyQualifiedName already exists, it will be updated; otherwise, a new glossary term is created. The request body is the same as POST.
curl -X PUT "{base_url}/api/v1/glossaryTerms" \
-H "Authorization: Bearer {access_token}" \
-H "Content-Type: application/json" \
-d '{ ... same body as POST ... }'
PUT will not return a 409 conflict error if the entity already exists — it will update the existing entity instead.
Error Handling
Code Error Type Description 400BAD_REQUESTInvalid request body or missing required fields 401UNAUTHORIZEDInvalid or missing authentication token 403FORBIDDENUser lacks permission to create glossary terms 409ENTITY_ALREADY_EXISTSGlossary term with same name already exists in glossary (POST only)