MATIH Platform is in active MVP development. Documentation reflects current implementation status.
10. Data Catalog & Governance
API Reference

API Reference

This section provides the complete REST API documentation for the Catalog Service, Governance Service, and Data Quality Service.


Catalog Service (Port 8086)

Base URL

http://catalog-service.matih-data-plane.svc.cluster.local:8086/v1

Catalog Browsing

Browse Metadata Hierarchy

GET /v1/catalog/browse?level={level}&dataSource={dataSourceId}
ParameterTypeRequiredValues
levelStringYesdatabases, schemas, tables, columns
dataSourceStringNoData source identifier

Get Table Details

GET /v1/catalog/tables/{tableFqn}

Response (200 OK):

{
  "fqn": "pg-analytics.analytics.public.orders",
  "name": "orders",
  "description": "Customer order transactions",
  "columns": [
    {"name": "order_id", "type": "BIGINT", "nullable": false, "primaryKey": true}
  ],
  "rowCount": 15234567,
  "sizeBytes": 3221225472,
  "owner": "data-engineering-team",
  "tags": ["transactional", "finance"],
  "qualityScore": 0.94,
  "lastUpdatedAt": "2026-02-12T08:00:00Z"
}

Search Catalog

GET /v1/catalog/search?q={query}&type={entityType}&tags={tags}&limit={limit}
ParameterTypeRequiredDescription
qStringYesSearch query
typeStringNoTABLE, COLUMN, DATABASE
tagsStringNoComma-separated tags
limitintNoMax results (default: 20)

Data Sources

Register Data Source

POST /v1/catalog/datasources

Request Body:

{
  "name": "analytics-postgres",
  "type": "POSTGRESQL",
  "connectionSecretRef": "analytics-postgres-credentials",
  "properties": {"sslMode": "require"}
}

List Data Sources

GET /v1/catalog/datasources

Trigger Metadata Ingestion

POST /v1/catalog/datasources/{dataSourceId}/ingest

Delete Data Source

DELETE /v1/catalog/datasources/{dataSourceId}

Lineage

Submit Lineage Event

POST /v1/lineage/events

Request Body: OpenLineage event format (see Data Lineage).

Get Table Lineage Graph

GET /v1/lineage/graph?table={tableFqn}&depth={depth}&direction={direction}
ParameterTypeDefaultDescription
tableStringRequiredStarting table FQN
depthint3Maximum hops
directionStringBOTHUPSTREAM, DOWNSTREAM, BOTH

Get Column Lineage

GET /v1/lineage/columns?table={tableFqn}&column={columnName}

Run Impact Analysis

POST /v1/lineage/impact-analysis

Request Body:

{
  "tableFqn": "raw.orders",
  "changeType": "COLUMN_REMOVED",
  "columnName": "discount_code",
  "includeIndirect": true
}

Classification

Detect PII

POST /v1/catalog/classification/detect-pii

Request Body:

{
  "tableFqn": "analytics.public.customers",
  "sampleSize": 1000,
  "autoClassify": false
}

Apply Tags

POST /v1/catalog/tags

Request Body:

{
  "entityType": "COLUMN",
  "entityFqn": "analytics.public.customers.email",
  "tags": ["PII", "PII:EMAIL"],
  "classification": "RESTRICTED"
}

Get Tags

GET /v1/catalog/tags?entityType={type}&entityFqn={fqn}

Run Classification Rules

POST /v1/catalog/classification/run-rules

Request Body:

{
  "tableFqn": "analytics.public.customers",
  "autoApply": false
}

Data Contracts

Create Contract

POST /v1/catalog/contracts

Request Body:

{
  "name": "Sales Data Contract",
  "dataset": "analytics.public.daily_sales",
  "producer": {"team": "data-engineering"},
  "consumer": {"team": "analytics"},
  "sla": {
    "freshness": {"maxDelayMinutes": 60},
    "quality": {"minScore": 0.95}
  }
}

List Contracts

GET /v1/catalog/contracts?dataset={tableFqn}&status={status}

Get Contract Status

GET /v1/catalog/contracts/{contractId}/status

Glossary

Create Glossary Term

POST /v1/catalog/glossary/terms

Search Glossary

GET /v1/catalog/glossary/search?q={query}

Get Term Details

GET /v1/catalog/glossary/terms/{termId}

Polaris Integration

Manage Polaris Grants

POST /v1/catalog/polaris/grants
GET /v1/catalog/polaris/grants?namespace={namespace}
DELETE /v1/catalog/polaris/grants/{grantId}

OpenMetadata Sync

POST /v1/catalog/sync/trigger
GET /v1/catalog/sync/status

Governance Service (Port 8080)

Base URL

http://governance-service.matih-data-plane.svc.cluster.local:8080/v1

RLS Evaluation

Evaluate RLS Policy

POST /v1/governance/rls/evaluate

Request Body:

{
  "tenantId": "tenant-123",
  "userId": "user-456",
  "userRoles": ["analyst"],
  "userAttributes": {"region": "US-EAST"},
  "resourceFqn": "analytics.public.orders",
  "resourceType": "TABLE",
  "operation": "SELECT"
}

Response (200 OK):

{
  "requiresFiltering": true,
  "whereClause": "region = 'US-EAST'",
  "appliedPolicies": [
    {"policyId": "region-restriction", "policyName": "Region Restriction"}
  ],
  "accessDenied": false
}

Access Policies

Create Access Policy

POST /v1/governance/policies

List Policies

GET /v1/governance/policies?resource={resourceFqn}

Evaluate Access

POST /v1/governance/access/evaluate

Compliance

Get Compliance Status

GET /v1/governance/compliance/status?framework={framework}

| Framework Values | GDPR, HIPAA, SOC2, PCI_DSS |

Submit Data Subject Request

POST /v1/governance/compliance/dsr

Get Retention Policies

GET /v1/governance/compliance/retention?classification={classification}

Access Reviews

List Pending Reviews

GET /v1/governance/access-reviews?status=PENDING

Submit Review Decision

POST /v1/governance/access-reviews/{reviewId}/decision

Audit Log

Query Audit Log

GET /v1/governance/audit?resource={resourceFqn}&startDate={date}&endDate={date}

Data Quality Service (Port 8000)

Base URL

http://data-quality-service.matih-data-plane.svc.cluster.local:8000/v1

Validation Rules

Create Rule

POST /v1/quality/rules

Request Body:

{
  "name": "order_amount_positive",
  "tableFqn": "analytics.public.orders",
  "ruleType": "RANGE",
  "column": "amount",
  "config": {"min": 0.01},
  "severity": "CRITICAL",
  "schedule": "0 */6 * * *"
}

List Rules

GET /v1/quality/rules?table={tableFqn}

Run Validation

POST /v1/quality/validations/run

Request Body:

{
  "tableFqn": "analytics.public.orders",
  "rules": ["rule-001", "rule-002"]
}

Get Validation Results

GET /v1/quality/validations?table={tableFqn}&startDate={date}

Quality Scores

Get Table Score

GET /v1/quality/scores?table={tableFqn}

Get Score History

GET /v1/quality/scores/history?table={tableFqn}&days={days}

Get Score Trends

GET /v1/quality/scores/trends?period=30d

Anomaly Detection

Get Anomalies

GET /v1/quality/anomalies?table={tableFqn}&status=OPEN

Acknowledge Anomaly

POST /v1/quality/anomalies/{anomalyId}/acknowledge

Data Profiling

Run Profile

POST /v1/quality/profiles/run

Request Body:

{
  "tableFqn": "analytics.public.orders",
  "sampleSize": 10000,
  "computeHistograms": true
}

Get Profile Results

GET /v1/quality/profiles?table={tableFqn}

SLA Monitoring

Get SLA Dashboard

GET /v1/quality/sla/dashboard

Get Contract SLA Status

GET /v1/quality/sla/contracts/{contractId}

Common Response Codes

StatusDescription
200Success
201Created
202Accepted (async operation)
400Bad request (validation error)
401Unauthorized (invalid or missing JWT)
403Forbidden (insufficient permissions)
404Resource not found
409Conflict (duplicate resource)
429Rate limited
500Internal server error

Related Sections