Skip to content

Promote API

This page documents the API endpoints for running promote operations and viewing their results. Use these endpoints to programmatically promote quality checks, computed fields, computed tables, and computed files across your Qualytics deployment.

All endpoints use the base URL of your Qualytics deployment (e.g., https://your-instance.qualytics.io/api).

Interactive API reference

For the full, interactive API reference — including request schemas, response examples, and an in-browser request runner — visit demo.qualytics.io/api/docs.

Run a Promote Operation

All promote operations use the same endpoint, distinguished by the type field in the request body. The operation runs asynchronously — you receive an operation ID immediately and can poll for results.

Endpoint: POST /api/operations/run

Permission: Editor team permission on both the source and the destination — applies to every promote type. See Permissions for details.


Promote Quality Checks

Promotes quality check definitions from one container to another.

Request Body:

Property Type Required Default Description
type string Yes Must be promote_quality_check
datastore_id integer Yes The source datastore ID
container_id integer Yes The source container ID
destination_container_id integer Yes The destination container ID
check_ids list[integer] No Specific quality check IDs to promote. Mutually exclusive with check_tags
check_tags list[string] No Tags to filter quality checks for promotion. Mutually exclusive with check_ids
check_additional_tags list[string] No Tags to add to promoted checks at the destination
as_draft boolean No true When true, promoted checks are created as Draft. When false, new checks are validated and created as Active

Note

If neither check_ids nor check_tags is specified, all Active and Draft quality checks on the source container are promoted. Checks in Archived or Discarded status are always excluded — even when listed explicitly by ID.

Active validation runs in batches of 10

When as_draft is false, the platform validates each new destination check against the destination container before persisting it. Validation runs in batches of 10 via a single dataplane roundtrip per batch. If a check fails validation (or the batch errors out), the just-created destination row is removed and the source check is recorded as failed for that batch — no orphan check is left behind. Active promotions of thousands of checks proceed in many such batches; promotion time scales linearly with the number of validation batches.

Example request
curl -X POST "https://your-instance.qualytics.io/api/operations/run" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "promote_quality_check",
    "datastore_id": 1,
    "container_id": 10,
    "destination_container_id": 20,
    "check_tags": ["pii-checks"],
    "check_additional_tags": ["promoted-from-staging"],
    "as_draft": true
  }'

Promote Computed Fields

Promotes computed field definitions from one container to another.

Request Body:

Property Type Required Default Description
type string Yes Must be promote_computed_field
datastore_id integer Yes The source datastore ID
container_id integer Yes The source container ID
destination_container_id integer Yes The destination container ID
computed_field_ids list[integer] No Specific computed field IDs to promote. Mutually exclusive with computed_field_tags
computed_field_tags list[string] No Tags to filter computed fields for promotion. Mutually exclusive with computed_field_ids
computed_field_additional_tags list[string] No Tags to add to promoted computed fields at the destination

Note

If neither computed_field_ids nor computed_field_tags is specified, all computed fields on the source container are promoted.

Example request
curl -X POST "https://your-instance.qualytics.io/api/operations/run" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "promote_computed_field",
    "datastore_id": 1,
    "container_id": 10,
    "destination_container_id": 30,
    "computed_field_ids": [101, 102, 103]
  }'

Promote Computed Tables

Promotes computed table definitions from one JDBC datastore to another.

Request Body:

Property Type Required Default Description
type string Yes Must be promote_computed_table
datastore_id integer Yes The source datastore ID
destination_datastore_id integer Yes The destination JDBC datastore ID
container_ids list[integer] No Specific computed table container IDs to promote. Mutually exclusive with container_tags
container_tags list[string] No Tags to filter computed tables for promotion. Mutually exclusive with container_ids
container_additional_tags list[string] No Tags to add to promoted computed tables at the destination

Note

If neither container_ids nor container_tags is specified, all computed tables on the source datastore are promoted.

Example request
curl -X POST "https://your-instance.qualytics.io/api/operations/run" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "promote_computed_table",
    "datastore_id": 1,
    "destination_datastore_id": 2,
    "container_tags": ["analytics"],
    "container_additional_tags": ["promoted"]
  }'

Promote Computed Files

Promotes computed file definitions from one DFS datastore to another, with explicit file pattern mapping.

Request Body:

Property Type Required Default Description
type string Yes Must be promote_computed_file
datastore_id integer Yes The source datastore ID
destination_datastore_id integer Yes The destination DFS datastore ID
source_container_mappings list[object] Yes Mapping of each source computed file to a destination file pattern (see below)
container_additional_tags list[string] No Tags to add to promoted computed files at the destination

source_container_mappings object:

Property Type Required Description
container_id integer Yes The source computed file container ID
destination_container_id integer Yes The destination file pattern container ID on the destination datastore
Example request
curl -X POST "https://your-instance.qualytics.io/api/operations/run" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "promote_computed_file",
    "datastore_id": 1,
    "destination_datastore_id": 3,
    "source_container_mappings": [
      { "container_id": 50, "destination_container_id": 60 },
      { "container_id": 51, "destination_container_id": 61 }
    ],
    "container_additional_tags": ["promoted"]
  }'

View Promote Operation Results

Get Operation Details

Retrieves the full details of a promote operation, including per-entity results.

Endpoint: GET /api/operations/{id}

Path Parameters:

Parameter Type Required Description
id integer Yes The operation ID
Example request and response

Request:

curl -X GET "https://your-instance.qualytics.io/api/operations/500" \
  -H "Authorization: Bearer YOUR_TOKEN"

Response (abbreviated):

{
  "id": 500,
  "type": "promote",
  "promote_type": "quality_check",
  "result": "success",
  "start_time": "2026-03-10T14:30:00Z",
  "end_time": "2026-03-10T14:30:15Z",
  "triggered_by": "jane@example.com",
  "datastore": { "id": 1, "name": "Staging Warehouse" },
  "destination_datastore": { "id": 2, "name": "Production Warehouse" },
  "container": { "id": 10, "name": "orders" },
  "destination_container": { "id": 20, "name": "orders" },
  "as_draft": true,
  "status": {
    "total": 5,
    "created": 3,
    "updated": 1,
    "skipped": 1,
    "failed": 0
  },
  "results": [
    {
      "source_entity_id": 101,
      "source_entity": {
        "id": 101,
        "description": "Email format validation",
        "rule_type": "matches_pattern",
        "status": "active"
      },
      "entity_type": "quality_check",
      "result": "created",
      "destination_entity_id": 201,
      "destination_entity": {
        "id": 201,
        "description": "Email format validation",
        "rule_type": "matches_pattern",
        "status": "draft"
      },
      "message": null
    }
  ]
}

Filter Promote Results

You can filter the entities in a promote operation by their result status using dedicated sub-endpoints.

Quality Check Results

Endpoint: GET /api/operations/{id}/quality-checks

Query Parameters:

Parameter Type Required Description
search string No Filter by check description or rule type
promote_result list[string] No Filter by result: created, updated, skipped, failed

Computed Field Results

Endpoint: GET /api/operations/{id}/fields

Query Parameters:

Parameter Type Required Description
search string No Filter by field name
promote_result list[string] No Filter by result: created, updated, skipped, failed

Computed Table / File Results

Endpoint: GET /api/operations/{id}/containers

Query Parameters:

Parameter Type Required Description
search string No Filter by container name
promote_result list[string] No Filter by result: created, updated, skipped, failed

Response Schema Reference

Promote Operation Fields

The operation envelope includes a few promote-specific fields alongside the standard operation shape:

Property Type Description
type string Always promote for promote operations
promote_type string One of: quality_check, computed_field, computed_table, computed_file — identifies which entity type was promoted
as_draft boolean Present only on quality_check promotions; shows the request setting

Promote Status

Every promote operation response includes a status object summarizing the results:

Property Type Description
total integer Total number of entities in the operation
created integer Number of new entities created at the destination
updated integer Number of existing entities updated at the destination
skipped integer Number of entities skipped (definition identical to destination)
failed integer Number of entities that failed to promote

Promote Result (Per Entity)

Each entity in the results array has the following structure:

Property Type Description
source_entity_id integer ID of the source entity
source_entity object or null Source entity details (null if deleted)
entity_type string One of: quality_check, computed_field, computed_table, computed_file
result string One of: created, updated, skipped, failed
destination_entity_id integer or null ID of the destination entity (if applicable)
destination_entity object or null Destination entity details (if applicable)
message string or null Additional context (e.g., error details, warnings)

Common message values

The message field is null for clean created/updated/skipped outcomes. When promotion succeeds with a caveat or fails entirely, the message is filled in. Recurring examples:

Promote Type result Example message
Quality Checks created / updated "Promoted as Draft: source fields ['email'] could not be resolved on the destination"
Quality Checks failed "Validation failed: field 'email' not found on destination container"
Computed Fields failed "Source field(s) ['amount_usd'] not available on destination — their parent computed field may have failed to promote"
Computed Fields updated "Reactivated non-active field on destination"
Computed Tables failed "Cannot promote over non-computed-table container (type: table)"
Computed Files failed "Cannot promote over non-computed-file container (type: file_pattern)"
Any failed "Source and destination must be different" (request-level — surfaced as a 422 before any entity is processed)

These messages are informational and intended for human review on the Activity page. They are not stable identifiers; do not parse them programmatically — use the result field for automation.

Operation Result Values

Value Description
success At least one entity was created, updated, or skipped
failure All entities failed
running The operation is still in progress
aborted The operation was aborted from the Activity page; already-processed entities keep their result

Permission Summary

Every promote type uses the same gate: the caller must have Editor team permission on both the source and the destination. If either side is missing, the API returns 403 Forbidden and the operation is not enqueued. See Permissions for the full breakdown of user roles and team permissions.