Data Catalog API
Manage your data product catalog programmatically.
Endpoints Overview
| Method | Endpoint | Description |
|---|---|---|
| GET | /catalog/spaces/{slug}/products | List products |
| POST | /catalog/spaces/{slug}/products | Create 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
| Parameter | Type | Description |
|---|---|---|
page | integer | Page number (default: 1) |
size | integer | Items per page (default: 20, max: 100) |
search | string | Filter by name/description |
tags | string | Comma-separated tag IDs |
include_archived | boolean | Include 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
| Field | Type | Description |
|---|---|---|
name | string | Display name |
slug | string | URL-friendly identifier (unique in space) |
Optional Fields
| Field | Type | Description |
|---|---|---|
description | string | Brief summary |
documentation | string | Markdown documentation |
product_type | string | table, view, api, dashboard, etc. |
provider | string | Source platform |
hosting_location | string | Physical location |
tag_ids | array | Tag 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
| Parameter | Type | Description |
|---|---|---|
permanent | boolean | If 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"
}