curl --request POST \
--url https://ndi-api.nace.ai/v1/domains \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"display_name": "<string>",
"slug": "<string>",
"taxonomy": {
"allow_other": true,
"classes": [
{
"description": "<string>",
"document_type": "<string>",
"group": "<string>",
"subgroup": "<string>",
"aliases": [
"<string>"
]
}
]
}
}
'{
"domain": {
"class_count": 123,
"display_name": "<string>",
"domain_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"ontology": {
"allow_other": false,
"edge_types": [
{
"description": "<string>",
"from_types": [
"<string>"
],
"name": "<string>",
"to_types": [
"<string>"
],
"property_hints": [
"<string>"
]
}
],
"node_types": [
{
"description": "<string>",
"name": "<string>",
"tier": 3,
"identifier_hints": [
"<string>"
],
"property_hints": [
"<string>"
]
}
]
},
"owner": "platform",
"selectable": true,
"slug": "<string>",
"status": "draft",
"taxonomy": {
"allow_other": true,
"classes": [
{
"description": "<string>",
"document_type": "<string>",
"group": "<string>",
"subgroup": "<string>",
"aliases": [
"<string>"
]
}
]
},
"version": 123,
"parent_slug": "<string>",
"published_at": "2023-11-07T05:31:56Z"
},
"validation": {
"effective_class_count": 123,
"effective_edge_type_count": 123,
"effective_node_type_count": 123,
"valid": true,
"errors": [
{
"code": "<string>",
"message": "<string>",
"path": "<string>"
}
]
}
}{
"error": {
"code": "invalid_request",
"detail": null,
"message": "Request body has extra fields that this operation does not accept.",
"request_id": "req-01j9k2n3p4q5r6s7t8v9",
"retryable": false
}
}{
"error": {
"code": "invalid_request",
"detail": null,
"message": "Request body has extra fields that this operation does not accept.",
"request_id": "req-01j9k2n3p4q5r6s7t8v9",
"retryable": false
}
}create_domain
Create a tenant-owned draft. Cost class: fast.
The draft is editable and unusable until published. Validation runs on
every write and is returned every time, so a caller never has to guess
whether a publish will succeed. Omitting ontology copies the platform’s
generic ontology, so a plain taxonomy publishes without graph work.
curl --request POST \
--url https://ndi-api.nace.ai/v1/domains \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"display_name": "<string>",
"slug": "<string>",
"taxonomy": {
"allow_other": true,
"classes": [
{
"description": "<string>",
"document_type": "<string>",
"group": "<string>",
"subgroup": "<string>",
"aliases": [
"<string>"
]
}
]
}
}
'{
"domain": {
"class_count": 123,
"display_name": "<string>",
"domain_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"ontology": {
"allow_other": false,
"edge_types": [
{
"description": "<string>",
"from_types": [
"<string>"
],
"name": "<string>",
"to_types": [
"<string>"
],
"property_hints": [
"<string>"
]
}
],
"node_types": [
{
"description": "<string>",
"name": "<string>",
"tier": 3,
"identifier_hints": [
"<string>"
],
"property_hints": [
"<string>"
]
}
]
},
"owner": "platform",
"selectable": true,
"slug": "<string>",
"status": "draft",
"taxonomy": {
"allow_other": true,
"classes": [
{
"description": "<string>",
"document_type": "<string>",
"group": "<string>",
"subgroup": "<string>",
"aliases": [
"<string>"
]
}
]
},
"version": 123,
"parent_slug": "<string>",
"published_at": "2023-11-07T05:31:56Z"
},
"validation": {
"effective_class_count": 123,
"effective_edge_type_count": 123,
"effective_node_type_count": 123,
"valid": true,
"errors": [
{
"code": "<string>",
"message": "<string>",
"path": "<string>"
}
]
}
}{
"error": {
"code": "invalid_request",
"detail": null,
"message": "Request body has extra fields that this operation does not accept.",
"request_id": "req-01j9k2n3p4q5r6s7t8v9",
"retryable": false
}
}{
"error": {
"code": "invalid_request",
"detail": null,
"message": "Request body has extra fields that this operation does not accept.",
"request_id": "req-01j9k2n3p4q5r6s7t8v9",
"retryable": false
}
}Authorizations
Body
Creates a draft at version 1 in the caller's tenant.
Most domains should omit ontology entirely — the graph shape is far less
corpus-specific than the taxonomy, and defaulting to the platform's generic
ontology keeps rule R0 satisfiable by construction.
1 - 20064^[a-z0-9]+(?:_[a-z0-9]+)*$The classification vocabulary.
Show child attributes
Show child attributes
Omitted copies the platform's generic ontology, so plain taxonomies publish without graph work.
Show child attributes
Show child attributes
Response
Successful Response
A domain with inheritance already resolved.
A caller reading a domain wants the vocabulary that will actually be applied, not a delta they have to merge themselves.
Show child attributes
Show child attributes
Returned on every domain write, so a caller never has to guess whether a publish will succeed.
Show child attributes
Show child attributes