Skip to main content

Data Domains API

The Data Domains API provides CRUD operations for domains, steward management, product assignment, hierarchy navigation, scorecard retrieval, and domain-aware approvers.

Base path: /organizations/{org_slug}/domains

All endpoints require authentication.


Domain CRUD

Create Domain

POST /organizations/{org_slug}/domains

Request Body:

FieldTypeRequiredDescription
namestringDomain name
slugstringURL-safe identifier
descriptionstringDomain purpose/scope
iconstringEmoji or icon identifier
owner_idUUIDOwner user ID (defaults to caller)
parent_domain_idUUIDParent domain for hierarchy

Response: 201 CreatedDataDomainResponse

Errors: 409 Conflict — Slug already exists.


List Domains

GET /organizations/{org_slug}/domains

Response: 200 OKDataDomainListResponse[]

[
{
"id": "uuid",
"name": "Finance",
"slug": "finance",
"description": "All financial data assets",
"icon": "💰",
"owner": {
"id": "uuid",
"email": "cdo@example.com",
"full_name": "Chief Data Officer",
"avatar_url": null
},
"product_count": 15
}
]

Get Domain

GET /organizations/{org_slug}/domains/{domain_slug}

Response: 200 OKDataDomainResponse (includes memberships, children, product count).

Errors: 404 Not Found


Update Domain

PATCH /organizations/{org_slug}/domains/{domain_slug}

Request Body (all fields optional):

FieldTypeDescription
namestringUpdated name
descriptionstringUpdated description
iconstringUpdated icon
owner_idUUIDTransfer ownership
parent_domain_idUUID | nullMove in hierarchy

Response: 200 OKDataDomainResponse


Delete Domain

DELETE /organizations/{org_slug}/domains/{domain_slug}

Response: 204 No Content


Hierarchy

Get Domain Tree

GET /organizations/{org_slug}/domains/tree

Returns all domains with parent_domain_id populated for client-side tree rendering.

Response: 200 OKDataDomainListResponse[] (each item includes parent_domain_id)


Steward Management

Add Steward

POST /organizations/{org_slug}/domains/{domain_slug}/stewards

Request Body:

FieldTypeRequiredDescription
user_idUUIDUser to add
rolestringowner or steward

Response: 201 CreatedDomainMembershipResponse

Errors: 409 Conflict — User already a steward.


Remove Steward

DELETE /organizations/{org_slug}/domains/{domain_slug}/stewards/{user_id}

Response: 204 No Content

Errors: 400 Bad Request — Cannot remove the last owner.


Product Assignment

Assign Product

POST /organizations/{org_slug}/domains/{domain_slug}/products

Request Body:

FieldTypeRequiredDescription
product_idUUIDProduct to assign

Response: 201 CreatedProductDomainAssignmentResponse

Errors: 409 Conflict — Product already assigned to this domain.


Unassign Product

DELETE /organizations/{org_slug}/domains/{domain_slug}/products/{product_id}

Response: 204 No Content


List Domain Products

GET /organizations/{org_slug}/domains/{domain_slug}/products

Query Parameters:

ParameterTypeDefaultDescription
limitint100Max items (1–500)
offsetint0Pagination offset

Response: 200 OK

{
"items": [
{
"id": "uuid",
"name": "orders",
"slug": "orders",
"product_type": "table",
"description": "Order transactions",
"space_id": "uuid"
}
],
"total": 15
}

Governance Scorecard

Get Domain Scorecard

GET /organizations/{org_slug}/domains/{domain_slug}/scorecard

Returns governance health metrics for all products assigned to the domain.

Response: 200 OKDomainScorecardResponse


Domain Approvers

Get Approvers for Product

GET /organizations/{org_slug}/domains/products/{product_id}/domain-approvers

Returns domain owners who can approve access requests for a product based on its domain membership.

Response: 200 OK

[
{
"user": {
"id": "uuid",
"email": "owner@example.com",
"full_name": "Domain Owner",
"avatar_url": null
},
"domain_name": "Finance",
"domain_slug": "finance"
}
]

Response Models

DataDomainResponse

FieldTypeDescription
idUUIDDomain identifier
namestringDomain name
slugstringURL-safe identifier
descriptionstring | nullDomain description
iconstring | nullIcon/emoji
owner_idUUIDPrimary owner
organization_idUUIDParent organization
parent_domain_idUUID | nullParent domain (hierarchy)
created_atdatetimeCreation timestamp
updated_atdatetimeLast update timestamp
ownerUserBrief | nullOwner details
membershipsDomainMembershipResponse[]All steward memberships
childrenDataDomainListResponse[]Child sub-domains
product_countintNumber of assigned products

DataDomainListResponse

FieldTypeDescription
idUUIDDomain identifier
namestringDomain name
slugstringURL-safe identifier
descriptionstring | nullDescription
iconstring | nullIcon
parent_domain_idUUID | nullParent domain
ownerUserBrief | nullOwner details
product_countintProduct count

DomainMembershipResponse

FieldTypeDescription
idUUIDMembership ID
domain_idUUIDDomain ID
user_idUUIDUser ID
rolestringowner or steward
created_atdatetimeMembership creation date
userUserBrief | nullUser details