Skip to main content

Data Catalog API

Manage your data product catalog programmatically.

Endpoints Overview

MethodEndpointDescription
GET/catalog/spaces/{slug}/productsList products
POST/catalog/spaces/{slug}/productsCreate product
GET/catalog/spaces/{slug}/products/{id}Get product
PATCH/catalog/spaces/{slug}/products/{id}Update product
DELETE/catalog/spaces/{slug}/products/{id}Delete product
GET/catalog/spaces/{slug}/products/by-slug/{product_slug}Get by slug

List Products

GET /catalog/spaces/{slug}/products

Query Parameters

ParameterTypeDescription
pageintegerPage number (default: 1)
sizeintegerItems per page (default: 20, max: 100)
searchstringFilter by name/description
tagsstringComma-separated tag IDs
include_archivedbooleanInclude archived products

Example Request

curl -X GET "https://api.qarion.com/catalog/spaces/analytics/products?page=1&size=20" \
-H "Authorization: Bearer YOUR_API_KEY"

Response

{
"items": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "Customer Events",
"slug": "customer-events",
"description": "Raw event stream from web analytics",
"product_type": "table",
"provider": "snowflake",
"tags": [
{"id": "...", "name": "Marketing"}
],
"quality_health": {
"status": "healthy",
"score": 0.95,
"last_check": "2026-01-15T10:30:00Z"
},
"is_archived": false,
"created_at": "2025-06-01T00:00:00Z",
"updated_at": "2026-01-15T10:30:00Z"
}
],
"total": 42,
"page": 1,
"size": 20
}

Create Product

POST /catalog/spaces/{slug}/products

Request Body

{
"name": "Order Metrics",
"slug": "order-metrics",
"description": "Aggregated order statistics",
"documentation": "## Overview\n\nThis table contains...",
"product_type": "table",
"provider": "snowflake",
"hosting_location": "analytics.marts.order_metrics",
"tag_ids": ["tag-uuid-1", "tag-uuid-2"]
}

Required Fields

FieldTypeDescription
namestringDisplay name
slugstringURL-friendly identifier (unique in space)

Optional Fields

FieldTypeDescription
descriptionstringBrief summary
documentationstringMarkdown documentation
product_typestringtable, view, api, dashboard, etc.
providerstringSource platform
hosting_locationstringPhysical location
tag_idsarrayTag UUIDs to assign

Response

Returns the created product with status 201 Created.


Get Product

GET /catalog/spaces/{slug}/products/{id}

Response

{
"id": "...",
"name": "Customer Events",
"slug": "customer-events",
"description": "...",
"documentation": "...",
"product_type": "table",
"provider": "snowflake",
"hosting_location": "raw.events.customer_events",
"fields": [
{
"id": "...",
"name": "event_id",
"data_type": "VARCHAR",
"description": "Unique event identifier",
"is_primary_key": true,
"is_nullable": false
}
],
"governance": {
"owner": {"id": "...", "name": "Alice Johnson"},
"steward": {"id": "...", "name": "Bob Smith"},
"custodian": null
},
"lineage_info": {
"upstream": ["product-uuid-1", "product-uuid-2"],
"downstream": ["product-uuid-3"]
},
"quality_health": {
"status": "healthy",
"score": 0.95,
"checks_passed": 19,
"checks_failed": 1
},
"tags": [...],
"created_at": "...",
"updated_at": "..."
}

Update Product

PATCH /catalog/spaces/{slug}/products/{id}

Request Body

Include only fields to update:

{
"description": "Updated description",
"documentation": "## New Documentation\n...",
"tag_ids": ["new-tag-uuid"]
}

Response

Returns the updated product.


Delete Product

DELETE /catalog/spaces/{slug}/products/{id}

Query Parameters

ParameterTypeDescription
permanentbooleanIf true, permanently delete. If false, archive.

Response

{
"message": "Product archived successfully"
}

Get Product by Slug

Alternative to ID-based lookup:

GET /catalog/spaces/{slug}/products/by-slug/{product_slug}

Useful when you know the slug but not the UUID.


Product Fields

List Fields

GET /catalog/spaces/{slug}/products/{id}/fields

Add Field

POST /catalog/spaces/{slug}/products/{id}/fields
{
"name": "new_column",
"data_type": "VARCHAR",
"description": "Description of the column",
"is_nullable": true
}

Update Field

PATCH /catalog/spaces/{slug}/products/{id}/fields/{field_id}

Product Tags

Update Tags

PUT /catalog/spaces/{slug}/products/{id}/tags
{
"tag_ids": ["tag-1", "tag-2", "tag-3"]
}

Governance Assignments

Update Governance

PUT /catalog/spaces/{slug}/products/{id}/governance
{
"owner_id": "user-uuid",
"steward_id": "user-uuid",
"custodian_id": "user-uuid"
}