Skip to main content

Quality API

Manage quality checks, execute validations, and monitor data health across products.

Endpoints Overview

MethodEndpointDescription
POST/quality/checksCreate check
GET/quality/checksList quality checks
GET/quality/checks/statsAggregated check stats
GET/quality/checks/{id}Get check details
GET/quality/checks/{id}/statsSingle check stats
PATCH/quality/checks/{id}Update check
POST/quality/checks/{id}/runTrigger execution
GET/quality/checks/{id}/executionsExecution history
POST/quality/checks/{id}/archiveToggle archive status
PATCH/quality/executions/{id}/ignoreToggle execution ignored flag

Slug-Based Endpoints

MethodEndpointDescription
GET/s/{space}/quality/{slug}Get check by slug
GET/s/{space}/quality/{slug}/executionsExecution history by slug
POST/s/{space}/quality/{slug}/runTrigger execution by slug
POST/s/{space}/quality/{slug}/pushPush external result
GET/s/{space}/quality/products/{slug}Checks for a product

Change Governance Endpoints

MethodEndpointDescription
POST/quality/checks/{id}/proposePropose a configuration change
POST/quality/changes/{id}/approveApprove a proposal
POST/quality/changes/{id}/rejectReject a proposal

Analytics Endpoints

MethodEndpointDescription
GET/quality/trends/{product_id}Product quality trend
GET/quality/executionsSpace-wide executions
GET/quality/trendSpace-wide daily trend
GET/quality/execution-statsSpace execution stats

Check Types

TypeDescription
sql_metricReturns a numeric value from a SQL query
sql_conditionAsserts a SQL condition (e.g. count of bad rows = 0)
field_checksMultiple field-level validations in a single check
reconciliationCompare values between source and target queries
anomalySmart alerts based on historical baselines
customExternal metric pushed via API
manualManually inputted metric via UI
null_checkVerify null/not-null constraints
uniquenessCheck for duplicate values
type_checkValidate data types
range_checkNumeric/date range validation
pattern_checkRegex pattern matching
enum_checkValidate against allowed values
length_checkString length validation
freshness_checkDate/timestamp freshness

Create Quality Check

POST /quality/checks

Request Body

{
"name": "No Future Dates",
"slug": "no-future-dates",
"check_type": "sql_metric",
"description": "Ensure no orders have a future date",
"product_ids": ["product-uuid-1", "product-uuid-2"],
"field_id": "field-uuid",
"connector_id": "connector-uuid",
"configuration": {
"sql_query": "SELECT COUNT(*) FROM orders WHERE order_date > {{cutoff_date}}",
"expected_value": 0,
"comparison": "equals"
},
"threshold_config": {
"warn": 5,
"crit": 10
},
"schedule_cron": "0 8 * * *",
"parameters": [
{
"name": "cutoff_date",
"type": "date",
"default": "CURRENT_DATE",
"description": "Upper bound date for validation",
"required": false
}
]
}

Key Fields

FieldTypeDescription
namestringRequired. Descriptive identifier
slugstringURL-friendly identifier, unique per space
check_typestringRequired. One of the check types above
product_idsUUID[]Associate with multiple data products
product_idUUID(Deprecated) Single product backward compat
field_idUUIDSpecific field within a product
connector_idUUIDData connector for SQL execution
configurationobjectCheck-type-specific configuration
threshold_configobjectWarning/critical thresholds
schedule_cronstringCron expression for scheduling
parametersobject[]Query parameter definitions

Parameter Definition

FieldTypeDefaultDescription
namestringRequired. Parameter name matching {{name}} in SQL
typestring"string"string, number, date, boolean
defaultstringnullDefault value if not overridden at runtime
descriptionstringnullHuman-readable description
requiredbooleanfalseWhether a value must be supplied at execution

List Quality Checks

GET /quality/checks

Query Parameters

ParameterTypeDescription
space_iduuidFilter by space
include_archivedbooleanInclude deprecated checks (default: false)

Response

{
"items": [
{
"id": "...",
"name": "No Future Dates",
"slug": "no-future-dates",
"check_type": "sql_metric",
"product_ids": ["uuid-1", "uuid-2"],
"product_names": ["Orders", "Sales"],
"parameters": [
{ "name": "cutoff_date", "type": "date", "default": "CURRENT_DATE" }
],
"latest_status": "pass",
"latest_value": 0.0,
"last_executed_at": "2026-01-15T10:30:00Z",
"is_archived": false
}
]
}

Trigger Check Execution

POST /quality/checks/{id}/run

Manually triggers a check outside its schedule. Supply optional runtime parameter overrides in the request body.

Request Body (optional)

{
"parameters": {
"cutoff_date": "2026-01-01"
}
}

For manual check types, pass a value directly:

{
"manual_value": 42.5
}

Response

{
"id": "execution-uuid",
"check_id": "check-uuid",
"status": "pass",
"actual_value": 0.0,
"executed_at": "2026-01-15T10:30:00Z",
"execution_message": "0 rows with future dates",
"execution_details": { ... },
"batch_id": null,
"field_name": null,
"field_check_type": null,
"is_ignored": false
}

Execution Response Fields

FieldTypeDescription
idUUIDExecution identifier
check_idUUIDParent check
statusstringpass, warning, fail, error
actual_valuefloatMeasured metric
executed_atdatetimeWhen the check ran
execution_messagestringHuman-readable result
execution_detailsobjectDetailed per-field results (field checks)
batch_idUUIDGroups field-check sub-executions
field_namestringColumn name (field checks only)
field_check_typestringSub-check type (field checks only)
is_ignoredbooleanExcluded from statistics

Get Execution History

GET /quality/checks/{id}/executions

Query Parameters

ParameterTypeDescription
pageintegerPage number
sizeintegerItems per page

Response

Paginated list of CheckExecutionResponse objects (see fields above). Total count is returned via X-Total-Count header.


Toggle Execution Ignored

PATCH /quality/executions/{id}/ignore

Mark an execution as ignored so it is excluded from statistics.

{
"is_ignored": true
}

Toggle Archive

POST /quality/checks/{id}/archive

Toggles the is_deprecated flag. Archived checks are hidden from default listings.


Slug-Based API

These endpoints use human-readable slugs instead of UUIDs, designed for external system integration (CI/CD, dbt, Airflow).

Get Check by Slug

GET /s/{space_slug}/quality/{check_slug}

Trigger by Slug

POST /s/{space_slug}/quality/{check_slug}/run

Same body format as the UUID-based trigger endpoint.

Push External Result

POST /s/{space_slug}/quality/{check_slug}/push
{
"status": "pass",
"actual_value": 0.0,
"execution_message": "Pipeline validation passed",
"parameters": {
"cutoff_date": "2026-01-15"
}
}

Get Product Checks by Slug

GET /s/{space_slug}/quality/products/{product_slug}

Returns all quality checks associated with the given product.


Change Governance

For critical checks, modifications can be routed through an approval workflow.

Propose a Change

POST /quality/checks/{id}/propose
{
"proposed_configuration": { "sql_query": "SELECT ..." },
"proposed_name": "Updated Check Name",
"proposed_description": "New description",
"is_deprecation_request": false
}

Approve a Proposal

POST /quality/changes/{id}/approve

Reject a Proposal

POST /quality/changes/{id}/reject

Change Response

{
"id": "...",
"check_id": "...",
"requested_by_id": "...",
"approved_by_id": null,
"proposed_configuration": { ... },
"proposed_name": "Updated Name",
"status": "pending",
"created_at": "2026-01-15T10:00:00Z",
"decided_at": null,
"is_deprecation_request": false
}

Analytics

Product Quality Trend

GET /quality/trends/{product_id}

Returns daily pass/fail aggregation for a specific product.

{
"product_id": "...",
"trends": [
{ "date": "2026-01-15", "pass_count": 10, "fail_count": 2, "avg_value": 0.5 },
{ "date": "2026-01-14", "pass_count": 12, "fail_count": 0, "avg_value": 0.0 }
]
}

Space Quality Trend

GET /quality/trend?days=30

Space Execution Stats

GET /quality/execution-stats
ParameterTypeDescription
time_filterstringTime window filter
status_filterstringFilter by status
searchstringSearch checks by name

Alerts

List Alerts

GET /alerts

Query Parameters

ParameterTypeDescription
space_iduuidFilter by space
statusstringopen, resolved
severitystringcritical, high, medium, low

Response

{
"items": [
{
"id": "...",
"execution_id": "...",
"status": "open",
"severity": "high",
"description": "Data is stale (26 hours old)",
"created_at": "2026-01-15T09:30:00Z",
"resolved_at": null
}
]
}

Acknowledge / Resolve Alert

PATCH /alerts/{id}
{
"status": "resolved",
"notes": "Pipeline backfill completed"
}