> For the complete documentation index, see [llms.txt](https://developer.collibra.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://developer.collibra.com/api/references/data-quality/job-runs.md).

# Job Runs

## Trigger a job run

> Starts a run of the specified job. Supports an optional\
> \`backrun\` to backfill prior periods. Returns a receipt with the generated run ID.\
> \
> \*\*Permissions\*\*\
> \- \*\*Required:\*\* \`DATA\_QUALITY\` and \`DATA\_QUALITY\_JOB\_RUN\`\
> \- \*\*Global bypass:\*\*\
> &#x20; \- \`DATA\_QUALITY\` and \`GLOBAL\_MANAGE\_ALL\_RESOURCES\`

```json
{"openapi":"3.0.3","info":{"title":"Data Quality Collibra API","version":"1.3.0"},"tags":[{"name":"Job Runs"}],"servers":[{"description":"Data Quality API","url":"/rest/dq/1.0"}],"security":[{"basicAuth":[]},{"jwtAuth":[]}],"components":{"securitySchemes":{"basicAuth":{"description":"Collibra REST API authentication using Basic Authentication.","type":"http","scheme":"basic"},"jwtAuth":{"description":"Collibra REST API authentication using JSON Web Token.","type":"http","scheme":"bearer","bearerFormat":"JWT"}},"parameters":{"JobNamePath":{"name":"jobName","in":"path","required":true,"description":"Job name","schema":{"$ref":"#/components/schemas/JobName"}}},"schemas":{"JobName":{"type":"string","description":"Job name. Allowed characters by default: letters, digits, `_`, `.`, `-`. **Configurable** via the server env variable `VALIDATION_PATTERN_JOB_NAME`. Default pattern: `^[a-zA-Z0-9_.-]+$`.\n","minLength":1,"maxLength":255,"pattern":"^[a-zA-Z0-9_.-]+$"},"JobRunRequest":{"type":"object","description":"Parameters for a single job run. If omitted, defaults apply (now as a runDate, no backrun).\n","properties":{"runDate":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/RunDateValue"},{"description":"Start of the time slice used only when the `sourceQuery` contains the `${rd}` placeholder.\nThe engine substitutes `${rd}` using `jobSettings.dateFormat`:\n  - DATE → `yyyy-MM-dd`\n  - TIMESTAMP → RFC 3339 `yyyy-MM-dd'T'HH:mm:ss'Z'`\n\nIf `sourceQuery` omits `${rd}`, this value does **not** restrict the data scan and\nonly affects the **run’s date** (e.g., run metadata/labeling, scheduling context).\n\n**Optional**. If omitted, the service uses the current date/time"}]},"runDateEnd":{"$ref":"#/components/schemas/RunDateEndValue"},"backrun":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/Backrun"},{"description":"Optional historical backfill: trigger additional runs for prior periods based on `timeBin` and `binValue`.\n"}]}}},"RunDateValue":{"description":"Start of the time slice used only when the `sourceQuery` contains the `${rd}` placeholder.\nThe engine substitutes `${rd}` using `jobSettings.dateFormat`:\n  - DATE → `yyyy-MM-dd`\n  - TIMESTAMP → RFC 3339 `yyyy-MM-dd'T'HH:mm:ss'Z'` \n\nIf `sourceQuery` omits `${rd}`, this value does **not** restrict the data scan and\nonly affects the **run’s date** (e.g., run metadata/labeling, scheduling context).","oneOf":[{"$ref":"#/components/schemas/DateOnly"},{"$ref":"#/components/schemas/Rfc3339DateTime"}],"discriminator":{"propertyName":"kind","mapping":{"DATE":"#/components/schemas/DateOnly","TIMESTAMP":"#/components/schemas/Rfc3339DateTime"}}},"DateOnly":{"type":"object","required":["kind","value"],"description":"Calendar date, format yyyy-MM-dd.","properties":{"kind":{"type":"string","pattern":"^DATE$"},"value":{"type":"string","format":"date"}}},"Rfc3339DateTime":{"type":"object","required":["kind","value"],"format":"date-time","description":"RFC 3339 timestamp with timezone offset. The server normalizes all inputs to UTC and responses are returned in UTC (trailing 'Z'), seconds precision.","properties":{"kind":{"type":"string","pattern":"^TIMESTAMP$"},"value":{"type":"string","format":"date-time"}}},"RunDateEndValue":{"nullable":true,"oneOf":[{"$ref":"#/components/schemas/DateOnly"},{"$ref":"#/components/schemas/Rfc3339DateTime"}],"discriminator":{"propertyName":"kind","mapping":{"DATE":"#/components/schemas/DateOnly","TIMESTAMP":"#/components/schemas/Rfc3339DateTime"}},"description":"**Exclusive end** of the time slice, used only when the `sourceQuery` contains the `${rdEnd}` placeholder.\nMust be **greater than** `runDate` when both are provided. Formatted per `jobSettings.dateFormat`:\n  - DATE → `yyyy-MM-dd`\n  - TIMESTAMP → RFC 3339 `yyyy-MM-dd'T'HH:mm:ss'Z'`\n\nIf `sourceQuery` omits `${rdEnd}`, this value does **not** restrict the data scan and is ignored for run timing."},"Backrun":{"type":"object","nullable":true,"description":"Enables historical backfill runs relative to the scheduled runDate. If included, additional runs will be triggered for the previous `binValue` time bins using the selected `timeBin`. Example: DAY + 10 -> run the previous 10 days.\n","properties":{"timeBin":{"$ref":"#/components/schemas/BackrunTimeBin"},"binValue":{"type":"integer","minimum":1,"description":"Number of past bins to backfill"}},"required":["timeBin","binValue"]},"BackrunTimeBin":{"type":"string","description":"Time bin used when defining backruns.\n\nCurrent possible values include:\n  * `DAY`   – backrun by day.\n  * `MONTH` – backrun by month.\n  * `YEAR`  – backrun by year.\n\nAdditional values may be introduced in the future"},"JobSubmission":{"type":"object","properties":{"jobRunId":{"type":"string","format":"uuid"}}},"StandardErrorResponse":{"type":"object","description":"Error response returned by the Data Quality API.","required":["statusCode","errorCode","titleMessage","userMessage"],"properties":{"statusCode":{"type":"integer","description":"HTTP status code corresponding to the error."},"errorCode":{"type":"string","description":"Internal error code representing the specific error type."},"titleMessage":{"type":"string","description":"A brief title summarizing the error."},"userMessage":{"type":"string","description":"Detailed, user-friendly message explaining the error and possible remediation steps."}}}},"responses":{"BadRequest":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardErrorResponse"}}}},"Unauthorized":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardErrorResponse"}}}},"Forbidden":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardErrorResponse"}}}},"NotFound":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardErrorResponse"}}}},"InternalServerError":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardErrorResponse"}}}}}},"paths":{"/jobs/{jobName}/run":{"post":{"tags":["Job Runs"],"summary":"Trigger a job run","description":"Starts a run of the specified job. Supports an optional\n`backrun` to backfill prior periods. Returns a receipt with the generated run ID.\n\n**Permissions**\n- **Required:** `DATA_QUALITY` and `DATA_QUALITY_JOB_RUN`\n- **Global bypass:**\n  - `DATA_QUALITY` and `GLOBAL_MANAGE_ALL_RESOURCES`","operationId":"runJob","parameters":[{"$ref":"#/components/parameters/JobNamePath"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobRunRequest"}}}},"responses":{"202":{"description":"Accepted. Run created and queued.","headers":{"Location":{"description":"Path of the created run resource, `/rest/dq/1.0/jobRuns/{jobRunId}`.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobSubmission"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"500":{"$ref":"#/components/responses/InternalServerError"}}}}}}
```

## Search job runs

> Returns job runs that user has permission to view with pagination and filters. Results are sorted by the last updated timestamp in descending order.\
> \
> \*\*Permissions\*\*\
> \- \*\*Required:\*\* \`DATA\_QUALITY\` and \`DATA\_QUALITY\_JOB\_VIEW\`\
> \- \*\*Global bypass:\*\*\
> &#x20; \- \`DATA\_QUALITY\` and \`VIEW\_PERMISSIONS\_VIEW\_ALL\`\
> &#x20; \- \`DATA\_QUALITY\` and \`GLOBAL\_MANAGE\_ALL\_RESOURCES\`

```json
{"openapi":"3.0.3","info":{"title":"Data Quality Collibra API","version":"1.3.0"},"tags":[{"name":"Job Runs"}],"servers":[{"description":"Data Quality API","url":"/rest/dq/1.0"}],"security":[{"basicAuth":[]},{"jwtAuth":[]}],"components":{"securitySchemes":{"basicAuth":{"description":"Collibra REST API authentication using Basic Authentication.","type":"http","scheme":"basic"},"jwtAuth":{"description":"Collibra REST API authentication using JSON Web Token.","type":"http","scheme":"bearer","bearerFormat":"JWT"}},"schemas":{"JobType":{"type":"string","description":"Execution mode for Data Quality job. Pullup jobs are available only when the Pullup preview feature is enabled. Allowed values: \"PUSHDOWN\", \"PULLUP\".\n"},"JobRunStatus":{"type":"string","maxLength":255,"description":"Status of an individual job run.\n\nCurrent possible values include:\n  * `WAITING`\n  * `DISPATCHED`\n  * `SETUP`\n  * `RUNNING`\n  * `SENDING`\n  * `FINISHED`\n  * `CANCELLED`\n  * `FAILED`\n  * `UNKNOWN`\n\nAdditional statuses may be introduced in the future."},"JobRunPaginated":{"type":"object","description":"Paged list of job runs","properties":{"results":{"type":"array","items":{"$ref":"#/components/schemas/JobRun"}},"total":{"type":"integer","format":"int64","minimum":0,"description":"Total number of matching items"},"offset":{"type":"integer","format":"int64","minimum":0,"description":"Current offset"},"limit":{"type":"integer","format":"int64","minimum":0,"description":"Page size"}},"required":["results","total","offset","limit"]},"JobRun":{"type":"object","description":"Individual job run.\n\nFields fall into three populated-when buckets:\n  - **Always populated** (run lifecycle): `jobRunId`, `jobName`,\n    `status`, `runDate`, `activity`, `startedBy`, `startTime`,\n    `updatedAt`.\n  - **Populated for terminal states** (`FINISHED`, `CANCELLED`,\n    `FAILED`) where data is available, otherwise `null`: `endTime`,\n    `executionTimeSeconds`, `score`, `activeMonitors`,\n    `breakingMonitors`, `rowCount`, `executedQuery`.\n  - **Populated when configured / on failure**: `sourceQuery`\n    (only if the job defines one), `exception` (only on `FAILED`).","properties":{"jobRunId":{"type":"string","format":"uuid","description":"Id of the individual job run"},"jobName":{"$ref":"#/components/schemas/JobName"},"runDate":{"$ref":"#/components/schemas/RunDateValue"},"status":{"$ref":"#/components/schemas/JobRunStatus"},"activity":{"$ref":"#/components/schemas/JobActivity"},"exception":{"type":"string","nullable":true,"description":"Job exception message if the run failed"},"startedBy":{"type":"string","format":"uuid","description":"User id who run the job"},"updatedAt":{"type":"string","format":"date-time","description":"Last updated timestamp (UTC)"},"startTime":{"type":"string","format":"date-time","description":"Job start timestamp (UTC)"},"endTime":{"type":"string","format":"date-time","nullable":true,"description":"Timestamp (UTC, ISO 8601) when the run reached a terminal state. Null while in progress."},"executionTimeSeconds":{"type":"integer","format":"int64","minimum":0,"nullable":true,"description":"Wall-clock duration in seconds (`endTime - startTime`). Null while in progress."},"score":{"type":"number","format":"double","minimum":0,"maximum":100,"nullable":true,"description":"Overall data quality score for the run, as a percentage in `[0, 100]`. Null if scoring did not complete."},"activeMonitors":{"type":"integer","format":"int32","minimum":0,"nullable":true,"description":"Count of monitors evaluated during the run. Null if evaluation did not complete."},"breakingMonitors":{"type":"integer","format":"int32","minimum":0,"nullable":true,"description":"Count of monitors that reported a breaking status. Null if evaluation did not complete."},"rowCount":{"type":"integer","format":"int64","minimum":0,"nullable":true,"description":"Number of rows scanned or processed by the run. Null if the data scan did not complete."},"sourceQuery":{"$ref":"#/components/schemas/SourceQuery"},"executedQuery":{"type":"string","nullable":true,"description":"The query actually executed for this run, with `${rd}` /\n`${rdEnd}` substituted using the job's configured `dateFormat`.\nThis is the post-substitution form of `sourceQuery` — the\nschema/table names, predicates, and any literal values it\ncontains are the same surface already exposed via\n`sourceQuery` on `JobDefinition`.\n\nNull if the run failed before substitution."}}},"JobName":{"type":"string","description":"Job name. Allowed characters by default: letters, digits, `_`, `.`, `-`. **Configurable** via the server env variable `VALIDATION_PATTERN_JOB_NAME`. Default pattern: `^[a-zA-Z0-9_.-]+$`.\n","minLength":1,"maxLength":255,"pattern":"^[a-zA-Z0-9_.-]+$"},"RunDateValue":{"description":"Start of the time slice used only when the `sourceQuery` contains the `${rd}` placeholder.\nThe engine substitutes `${rd}` using `jobSettings.dateFormat`:\n  - DATE → `yyyy-MM-dd`\n  - TIMESTAMP → RFC 3339 `yyyy-MM-dd'T'HH:mm:ss'Z'` \n\nIf `sourceQuery` omits `${rd}`, this value does **not** restrict the data scan and\nonly affects the **run’s date** (e.g., run metadata/labeling, scheduling context).","oneOf":[{"$ref":"#/components/schemas/DateOnly"},{"$ref":"#/components/schemas/Rfc3339DateTime"}],"discriminator":{"propertyName":"kind","mapping":{"DATE":"#/components/schemas/DateOnly","TIMESTAMP":"#/components/schemas/Rfc3339DateTime"}}},"DateOnly":{"type":"object","required":["kind","value"],"description":"Calendar date, format yyyy-MM-dd.","properties":{"kind":{"type":"string","pattern":"^DATE$"},"value":{"type":"string","format":"date"}}},"Rfc3339DateTime":{"type":"object","required":["kind","value"],"format":"date-time","description":"RFC 3339 timestamp with timezone offset. The server normalizes all inputs to UTC and responses are returned in UTC (trailing 'Z'), seconds precision.","properties":{"kind":{"type":"string","pattern":"^TIMESTAMP$"},"value":{"type":"string","format":"date-time"}}},"JobActivity":{"type":"string","description":"Current activity within the job run.\n\nCurrent possible values include:\n  * `INIT`\n  * `SCHEMA`\n  * `LOAD`\n  * `DISCOVERY`\n  * `PROFILE`\n  * `RULES`\n  * `HISTOGRAMS`\n  * `CORRELATION`\n  * `LAYERS`\n  * `RESULTS`\n  * `ALERTS`\n  * `\"\"` – no activity / idle (legacy representation).\n\nAdditional activities may be introduced in the future. Clients SHOULD treat\nunknown values as “implementation detail” and not fail on them."},"SourceQuery":{"nullable":true,"type":"string","description":"Source SQL for the job. \n\n- If you want to limit the data slice by date/time, **do not hard-code literal\n  dates** in the SQL. Always use the placeholders `${rd}` (start) and `${rdEnd}`\n  (exclusive end), and pass the actual values via the `runDate` / `runDateEnd`\n  fields of the request.  \n  Example pattern: `WHERE \"trade_date\" >= '${rd}' AND \"trade_date\" < '${rdEnd}'` \n- The engine will substitute `${rd}` / `${rdEnd}` based on your chosen\n  `dateFormat` (DATE or TIMESTAMP). \n- Keep the placeholders inside single quotes in SQL (e.g. `'${rd}'`). \n- If you do not include a date predicate, the job will scan the full table (or\n  whatever the query returns). \n- If omitted, the platform will generate a default(vendor compatible) `SELECT * FROM \"<schema>\".\"<table>\"`"},"StandardErrorResponse":{"type":"object","description":"Error response returned by the Data Quality API.","required":["statusCode","errorCode","titleMessage","userMessage"],"properties":{"statusCode":{"type":"integer","description":"HTTP status code corresponding to the error."},"errorCode":{"type":"string","description":"Internal error code representing the specific error type."},"titleMessage":{"type":"string","description":"A brief title summarizing the error."},"userMessage":{"type":"string","description":"Detailed, user-friendly message explaining the error and possible remediation steps."}}}},"responses":{"Unauthorized":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardErrorResponse"}}}},"Forbidden":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardErrorResponse"}}}},"InternalServerError":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardErrorResponse"}}}}}},"paths":{"/jobRuns":{"get":{"tags":["Job Runs"],"summary":"Search job runs","description":"Returns job runs that user has permission to view with pagination and filters. Results are sorted by the last updated timestamp in descending order.\n\n**Permissions**\n- **Required:** `DATA_QUALITY` and `DATA_QUALITY_JOB_VIEW`\n- **Global bypass:**\n  - `DATA_QUALITY` and `VIEW_PERMISSIONS_VIEW_ALL`\n  - `DATA_QUALITY` and `GLOBAL_MANAGE_ALL_RESOURCES`","operationId":"searchJobRuns","parameters":[{"in":"query","name":"jobName","required":false,"description":"Name filter. Behavior depends on `nameMatchMode`.\nBlank or omitted returns all runs.","schema":{"type":"string","maxLength":255,"default":""}},{"in":"query","name":"nameMatchMode","required":false,"description":"How to compare `jobName`:\n  - EXACT - case-sensitive exact match  \n  - CONTAINS - case-insensitive substring match (default)","schema":{"type":"string","enum":["EXACT","CONTAINS"],"default":"CONTAINS"}},{"in":"query","name":"jobType","required":false,"description":"Filter by a job type. If omitted, all types are returned.\n","schema":{"$ref":"#/components/schemas/JobType"}},{"in":"query","name":"status","required":false,"description":"Filter by job run status. Pass multiple values using repeated params. If omitted, all statuses are returned.\n","schema":{"type":"array","maxItems":20,"items":{"$ref":"#/components/schemas/JobRunStatus"}},"style":"form","explode":true},{"in":"query","name":"limit","required":false,"description":"Number of results per page.","schema":{"type":"integer","minimum":0,"maximum":1000,"default":100}},{"in":"query","name":"offset","required":false,"description":"Result offset.","schema":{"type":"integer","minimum":0,"default":0}}],"responses":{"200":{"description":"Successfully retrieved job runs","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobRunPaginated"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"500":{"$ref":"#/components/responses/InternalServerError"}}}}}}
```

## Get job run

> Returns the job run identified by the given run id.\
> \
> \*\*Permissions\*\*\
> \- \*\*Required:\*\* \`DATA\_QUALITY\` and \`DATA\_QUALITY\_JOB\_VIEW\`\
> \- \*\*Global bypass:\*\*\
> &#x20; \- \`DATA\_QUALITY\` and \`VIEW\_PERMISSIONS\_VIEW\_ALL\`\
> &#x20; \- \`DATA\_QUALITY\` and \`GLOBAL\_MANAGE\_ALL\_RESOURCES\`

```json
{"openapi":"3.0.3","info":{"title":"Data Quality Collibra API","version":"1.3.0"},"tags":[{"name":"Job Runs"}],"servers":[{"description":"Data Quality API","url":"/rest/dq/1.0"}],"security":[{"basicAuth":[]},{"jwtAuth":[]}],"components":{"securitySchemes":{"basicAuth":{"description":"Collibra REST API authentication using Basic Authentication.","type":"http","scheme":"basic"},"jwtAuth":{"description":"Collibra REST API authentication using JSON Web Token.","type":"http","scheme":"bearer","bearerFormat":"JWT"}},"schemas":{"JobRun":{"type":"object","description":"Individual job run.\n\nFields fall into three populated-when buckets:\n  - **Always populated** (run lifecycle): `jobRunId`, `jobName`,\n    `status`, `runDate`, `activity`, `startedBy`, `startTime`,\n    `updatedAt`.\n  - **Populated for terminal states** (`FINISHED`, `CANCELLED`,\n    `FAILED`) where data is available, otherwise `null`: `endTime`,\n    `executionTimeSeconds`, `score`, `activeMonitors`,\n    `breakingMonitors`, `rowCount`, `executedQuery`.\n  - **Populated when configured / on failure**: `sourceQuery`\n    (only if the job defines one), `exception` (only on `FAILED`).","properties":{"jobRunId":{"type":"string","format":"uuid","description":"Id of the individual job run"},"jobName":{"$ref":"#/components/schemas/JobName"},"runDate":{"$ref":"#/components/schemas/RunDateValue"},"status":{"$ref":"#/components/schemas/JobRunStatus"},"activity":{"$ref":"#/components/schemas/JobActivity"},"exception":{"type":"string","nullable":true,"description":"Job exception message if the run failed"},"startedBy":{"type":"string","format":"uuid","description":"User id who run the job"},"updatedAt":{"type":"string","format":"date-time","description":"Last updated timestamp (UTC)"},"startTime":{"type":"string","format":"date-time","description":"Job start timestamp (UTC)"},"endTime":{"type":"string","format":"date-time","nullable":true,"description":"Timestamp (UTC, ISO 8601) when the run reached a terminal state. Null while in progress."},"executionTimeSeconds":{"type":"integer","format":"int64","minimum":0,"nullable":true,"description":"Wall-clock duration in seconds (`endTime - startTime`). Null while in progress."},"score":{"type":"number","format":"double","minimum":0,"maximum":100,"nullable":true,"description":"Overall data quality score for the run, as a percentage in `[0, 100]`. Null if scoring did not complete."},"activeMonitors":{"type":"integer","format":"int32","minimum":0,"nullable":true,"description":"Count of monitors evaluated during the run. Null if evaluation did not complete."},"breakingMonitors":{"type":"integer","format":"int32","minimum":0,"nullable":true,"description":"Count of monitors that reported a breaking status. Null if evaluation did not complete."},"rowCount":{"type":"integer","format":"int64","minimum":0,"nullable":true,"description":"Number of rows scanned or processed by the run. Null if the data scan did not complete."},"sourceQuery":{"$ref":"#/components/schemas/SourceQuery"},"executedQuery":{"type":"string","nullable":true,"description":"The query actually executed for this run, with `${rd}` /\n`${rdEnd}` substituted using the job's configured `dateFormat`.\nThis is the post-substitution form of `sourceQuery` — the\nschema/table names, predicates, and any literal values it\ncontains are the same surface already exposed via\n`sourceQuery` on `JobDefinition`.\n\nNull if the run failed before substitution."}}},"JobName":{"type":"string","description":"Job name. Allowed characters by default: letters, digits, `_`, `.`, `-`. **Configurable** via the server env variable `VALIDATION_PATTERN_JOB_NAME`. Default pattern: `^[a-zA-Z0-9_.-]+$`.\n","minLength":1,"maxLength":255,"pattern":"^[a-zA-Z0-9_.-]+$"},"RunDateValue":{"description":"Start of the time slice used only when the `sourceQuery` contains the `${rd}` placeholder.\nThe engine substitutes `${rd}` using `jobSettings.dateFormat`:\n  - DATE → `yyyy-MM-dd`\n  - TIMESTAMP → RFC 3339 `yyyy-MM-dd'T'HH:mm:ss'Z'` \n\nIf `sourceQuery` omits `${rd}`, this value does **not** restrict the data scan and\nonly affects the **run’s date** (e.g., run metadata/labeling, scheduling context).","oneOf":[{"$ref":"#/components/schemas/DateOnly"},{"$ref":"#/components/schemas/Rfc3339DateTime"}],"discriminator":{"propertyName":"kind","mapping":{"DATE":"#/components/schemas/DateOnly","TIMESTAMP":"#/components/schemas/Rfc3339DateTime"}}},"DateOnly":{"type":"object","required":["kind","value"],"description":"Calendar date, format yyyy-MM-dd.","properties":{"kind":{"type":"string","pattern":"^DATE$"},"value":{"type":"string","format":"date"}}},"Rfc3339DateTime":{"type":"object","required":["kind","value"],"format":"date-time","description":"RFC 3339 timestamp with timezone offset. The server normalizes all inputs to UTC and responses are returned in UTC (trailing 'Z'), seconds precision.","properties":{"kind":{"type":"string","pattern":"^TIMESTAMP$"},"value":{"type":"string","format":"date-time"}}},"JobRunStatus":{"type":"string","maxLength":255,"description":"Status of an individual job run.\n\nCurrent possible values include:\n  * `WAITING`\n  * `DISPATCHED`\n  * `SETUP`\n  * `RUNNING`\n  * `SENDING`\n  * `FINISHED`\n  * `CANCELLED`\n  * `FAILED`\n  * `UNKNOWN`\n\nAdditional statuses may be introduced in the future."},"JobActivity":{"type":"string","description":"Current activity within the job run.\n\nCurrent possible values include:\n  * `INIT`\n  * `SCHEMA`\n  * `LOAD`\n  * `DISCOVERY`\n  * `PROFILE`\n  * `RULES`\n  * `HISTOGRAMS`\n  * `CORRELATION`\n  * `LAYERS`\n  * `RESULTS`\n  * `ALERTS`\n  * `\"\"` – no activity / idle (legacy representation).\n\nAdditional activities may be introduced in the future. Clients SHOULD treat\nunknown values as “implementation detail” and not fail on them."},"SourceQuery":{"nullable":true,"type":"string","description":"Source SQL for the job. \n\n- If you want to limit the data slice by date/time, **do not hard-code literal\n  dates** in the SQL. Always use the placeholders `${rd}` (start) and `${rdEnd}`\n  (exclusive end), and pass the actual values via the `runDate` / `runDateEnd`\n  fields of the request.  \n  Example pattern: `WHERE \"trade_date\" >= '${rd}' AND \"trade_date\" < '${rdEnd}'` \n- The engine will substitute `${rd}` / `${rdEnd}` based on your chosen\n  `dateFormat` (DATE or TIMESTAMP). \n- Keep the placeholders inside single quotes in SQL (e.g. `'${rd}'`). \n- If you do not include a date predicate, the job will scan the full table (or\n  whatever the query returns). \n- If omitted, the platform will generate a default(vendor compatible) `SELECT * FROM \"<schema>\".\"<table>\"`"},"StandardErrorResponse":{"type":"object","description":"Error response returned by the Data Quality API.","required":["statusCode","errorCode","titleMessage","userMessage"],"properties":{"statusCode":{"type":"integer","description":"HTTP status code corresponding to the error."},"errorCode":{"type":"string","description":"Internal error code representing the specific error type."},"titleMessage":{"type":"string","description":"A brief title summarizing the error."},"userMessage":{"type":"string","description":"Detailed, user-friendly message explaining the error and possible remediation steps."}}}},"responses":{"Unauthorized":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardErrorResponse"}}}},"Forbidden":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardErrorResponse"}}}},"NotFound":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardErrorResponse"}}}},"InternalServerError":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardErrorResponse"}}}}}},"paths":{"/jobRuns/{jobRunId}":{"get":{"tags":["Job Runs"],"summary":"Get job run","description":"Returns the job run identified by the given run id.\n\n**Permissions**\n- **Required:** `DATA_QUALITY` and `DATA_QUALITY_JOB_VIEW`\n- **Global bypass:**\n  - `DATA_QUALITY` and `VIEW_PERMISSIONS_VIEW_ALL`\n  - `DATA_QUALITY` and `GLOBAL_MANAGE_ALL_RESOURCES`","operationId":"getJobRunByRunId","parameters":[{"name":"jobRunId","in":"path","required":true,"description":"Job run id","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobRun"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"500":{"$ref":"#/components/responses/InternalServerError"}}}}}}
```

## Delete job run

> Deletes the job run identified by the given run id along with all\
> of its per-run results (profile, scan, monitor, rule, and alert\
> outputs). Idempotent — returns 204 when the run does not exist.\
> Refuses with 409 when the run is in progress; cancel it first.\
> \
> \*\*Permissions\*\*\
> \- \*\*Required:\*\* \`DATA\_QUALITY\` and \`DATA\_QUALITY\_JOB\_DELETE\`\
> \- \*\*Global bypass:\*\*\
> &#x20; \- \`DATA\_QUALITY\` and \`GLOBAL\_MANAGE\_ALL\_RESOURCES\`

```json
{"openapi":"3.0.3","info":{"title":"Data Quality Collibra API","version":"1.3.0"},"tags":[{"name":"Job Runs"}],"servers":[{"description":"Data Quality API","url":"/rest/dq/1.0"}],"security":[{"basicAuth":[]},{"jwtAuth":[]}],"components":{"securitySchemes":{"basicAuth":{"description":"Collibra REST API authentication using Basic Authentication.","type":"http","scheme":"basic"},"jwtAuth":{"description":"Collibra REST API authentication using JSON Web Token.","type":"http","scheme":"bearer","bearerFormat":"JWT"}},"responses":{"BadRequest":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardErrorResponse"}}}},"Unauthorized":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardErrorResponse"}}}},"Forbidden":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardErrorResponse"}}}},"Conflict":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardErrorResponse"}}}},"InternalServerError":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardErrorResponse"}}}}},"schemas":{"StandardErrorResponse":{"type":"object","description":"Error response returned by the Data Quality API.","required":["statusCode","errorCode","titleMessage","userMessage"],"properties":{"statusCode":{"type":"integer","description":"HTTP status code corresponding to the error."},"errorCode":{"type":"string","description":"Internal error code representing the specific error type."},"titleMessage":{"type":"string","description":"A brief title summarizing the error."},"userMessage":{"type":"string","description":"Detailed, user-friendly message explaining the error and possible remediation steps."}}}}},"paths":{"/jobRuns/{jobRunId}":{"delete":{"tags":["Job Runs"],"summary":"Delete job run","description":"Deletes the job run identified by the given run id along with all\nof its per-run results (profile, scan, monitor, rule, and alert\noutputs). Idempotent — returns 204 when the run does not exist.\nRefuses with 409 when the run is in progress; cancel it first.\n\n**Permissions**\n- **Required:** `DATA_QUALITY` and `DATA_QUALITY_JOB_DELETE`\n- **Global bypass:**\n  - `DATA_QUALITY` and `GLOBAL_MANAGE_ALL_RESOURCES`","operationId":"deleteJobRun","parameters":[{"name":"jobRunId","in":"path","required":true,"description":"Job run id","schema":{"type":"string","format":"uuid"}}],"responses":{"204":{"description":"Run deleted (or already absent)"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"409":{"$ref":"#/components/responses/Conflict"},"500":{"$ref":"#/components/responses/InternalServerError"}}}}}}
```

## Cancel job run

> Cancels the job identified by job run id.\
> \
> \*\*Permissions\*\*\
> \- \*\*Required:\*\* \`DATA\_QUALITY\` and \`DATA\_QUALITY\_JOB\_RUN\`\
> \- \*\*Global bypass:\*\*\
> &#x20; \- \`DATA\_QUALITY\` and \`GLOBAL\_MANAGE\_ALL\_RESOURCES\`

```json
{"openapi":"3.0.3","info":{"title":"Data Quality Collibra API","version":"1.3.0"},"tags":[{"name":"Job Runs"}],"servers":[{"description":"Data Quality API","url":"/rest/dq/1.0"}],"security":[{"basicAuth":[]},{"jwtAuth":[]}],"components":{"securitySchemes":{"basicAuth":{"description":"Collibra REST API authentication using Basic Authentication.","type":"http","scheme":"basic"},"jwtAuth":{"description":"Collibra REST API authentication using JSON Web Token.","type":"http","scheme":"bearer","bearerFormat":"JWT"}},"responses":{"Unauthorized":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardErrorResponse"}}}},"Forbidden":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardErrorResponse"}}}},"NotFound":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardErrorResponse"}}}},"InternalServerError":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardErrorResponse"}}}}},"schemas":{"StandardErrorResponse":{"type":"object","description":"Error response returned by the Data Quality API.","required":["statusCode","errorCode","titleMessage","userMessage"],"properties":{"statusCode":{"type":"integer","description":"HTTP status code corresponding to the error."},"errorCode":{"type":"string","description":"Internal error code representing the specific error type."},"titleMessage":{"type":"string","description":"A brief title summarizing the error."},"userMessage":{"type":"string","description":"Detailed, user-friendly message explaining the error and possible remediation steps."}}}}},"paths":{"/jobRuns/{jobRunId}/cancel":{"post":{"tags":["Job Runs"],"summary":"Cancel job run","description":"Cancels the job identified by job run id.\n\n**Permissions**\n- **Required:** `DATA_QUALITY` and `DATA_QUALITY_JOB_RUN`\n- **Global bypass:**\n  - `DATA_QUALITY` and `GLOBAL_MANAGE_ALL_RESOURCES`","operationId":"cancelJob","parameters":[{"name":"jobRunId","in":"path","required":true,"description":"Job run identifier","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Job cancelled successfully. No response body."},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"500":{"$ref":"#/components/responses/InternalServerError"}}}}}}
```

## Get job-run profile results

> Returns detailed column-level profiling statistics produced by a\
> single job run. Use this to understand the data distribution, type\
> inconsistencies, and format anomalies observed during the run.\
> \
> \*\*Permissions\*\*\
> \- \*\*Required:\*\*\
> &#x20; \- \`DATA\_QUALITY\` (global)\
> &#x20; \- \`DATA\_QUALITY\_JOB\_VIEW\` (resource on the job)\
> \- \*\*Global bypass (either of the following):\*\*\
> &#x20; \- \`DATA\_QUALITY\` and \`VIEW\_PERMISSIONS\_VIEW\_ALL\`\
> &#x20; \- \`DATA\_QUALITY\` and \`GLOBAL\_MANAGE\_ALL\_RESOURCES\`

```json
{"openapi":"3.0.3","info":{"title":"Data Quality Collibra API","version":"1.3.0"},"tags":[{"name":"Job Runs"}],"servers":[{"description":"Data Quality API","url":"/rest/dq/1.0"}],"security":[{"basicAuth":[]},{"jwtAuth":[]}],"components":{"securitySchemes":{"basicAuth":{"description":"Collibra REST API authentication using Basic Authentication.","type":"http","scheme":"basic"},"jwtAuth":{"description":"Collibra REST API authentication using JSON Web Token.","type":"http","scheme":"bearer","bearerFormat":"JWT"}},"schemas":{"JobRunProfileResults":{"type":"object","description":"Paginated per-column profiling results captured during a single job\nrun. The header fields (`jobRunId`, `jobName`, `runDate`) identify the\nrun; `results` carries one entry per profiled column for the requested\npage. Results are returned in deterministic order, ascending by column\nname.","required":["results"],"properties":{"jobRunId":{"type":"string","format":"uuid","description":"Unique identifier of the job run that produced these results."},"jobName":{"$ref":"#/components/schemas/JobName"},"runDate":{"allOf":[{"$ref":"#/components/schemas/RunDateValue"},{"description":"The run window of the run that produced these results. Shape\nfollows the job's configured `dateFormat`:\n  * `DATE`      – `{ \"kind\": \"DATE\", \"value\": \"yyyy-MM-dd\" }`\n  * `TIMESTAMP` – `{ \"kind\": \"TIMESTAMP\", \"value\": \"<RFC 3339 in UTC>\" }`"}]},"offset":{"type":"integer","format":"int64","minimum":0,"description":"Index of the first column profile in this page."},"limit":{"type":"integer","format":"int64","minimum":0,"description":"Maximum number of column profiles in this page."},"total":{"type":"integer","format":"int64","minimum":0,"description":"Total number of column profiles available for this run, across all\npages. Only present when the request included `includeTotal=true`."},"results":{"type":"array","description":"One entry per profiled column for the requested page.","items":{"$ref":"#/components/schemas/ColumnProfile"}}}},"JobName":{"type":"string","description":"Job name. Allowed characters by default: letters, digits, `_`, `.`, `-`. **Configurable** via the server env variable `VALIDATION_PATTERN_JOB_NAME`. Default pattern: `^[a-zA-Z0-9_.-]+$`.\n","minLength":1,"maxLength":255,"pattern":"^[a-zA-Z0-9_.-]+$"},"RunDateValue":{"description":"Start of the time slice used only when the `sourceQuery` contains the `${rd}` placeholder.\nThe engine substitutes `${rd}` using `jobSettings.dateFormat`:\n  - DATE → `yyyy-MM-dd`\n  - TIMESTAMP → RFC 3339 `yyyy-MM-dd'T'HH:mm:ss'Z'` \n\nIf `sourceQuery` omits `${rd}`, this value does **not** restrict the data scan and\nonly affects the **run’s date** (e.g., run metadata/labeling, scheduling context).","oneOf":[{"$ref":"#/components/schemas/DateOnly"},{"$ref":"#/components/schemas/Rfc3339DateTime"}],"discriminator":{"propertyName":"kind","mapping":{"DATE":"#/components/schemas/DateOnly","TIMESTAMP":"#/components/schemas/Rfc3339DateTime"}}},"DateOnly":{"type":"object","required":["kind","value"],"description":"Calendar date, format yyyy-MM-dd.","properties":{"kind":{"type":"string","pattern":"^DATE$"},"value":{"type":"string","format":"date"}}},"Rfc3339DateTime":{"type":"object","required":["kind","value"],"format":"date-time","description":"RFC 3339 timestamp with timezone offset. The server normalizes all inputs to UTC and responses are returned in UTC (trailing 'Z'), seconds precision.","properties":{"kind":{"type":"string","pattern":"^TIMESTAMP$"},"value":{"type":"string","format":"date-time"}}},"ColumnProfile":{"type":"object","description":"Profiling statistics for a single column from one job run.","required":["columnName","valueCount","nullCount","emptyCount","uniqueCount"],"properties":{"columnName":{"type":"string","maxLength":255,"description":"Source column name."},"definedType":{"type":"string","nullable":true,"description":"Type declared by the source schema (e.g. `BIGINT`, `VARCHAR(255)`, `DECIMAL`)."},"inferredType":{"type":"string","nullable":true,"description":"Type inferred from the observed values during profiling (e.g. `Int`,\n`String`, `Decimal`, `Long`, `Double`, `Timestamp`). When a column\nholds a mix of types, the value is a comma-separated list ordered\nby detection (e.g. `String, Int`). May differ from `definedType`\nwhen the source schema is wider than the actual data."},"valueCount":{"type":"integer","format":"int64","minimum":0,"description":"Number of non-null, non-empty values observed."},"nullCount":{"type":"integer","format":"int64","minimum":0,"description":"Number of `NULL` values observed."},"emptyCount":{"type":"integer","format":"int64","minimum":0,"description":"Number of empty values (e.g. empty strings) observed."},"uniqueCount":{"type":"integer","format":"int64","minimum":0,"description":"Number of distinct values observed (exact or approximate depending on engine)."},"min":{"type":"string","nullable":true,"description":"Minimum value observed, serialized as a string. Null if no values were observed."},"max":{"type":"string","nullable":true,"description":"Maximum value observed, serialized as a string. Null if no values were observed."},"mean":{"type":"string","nullable":true,"description":"Arithmetic mean (average), serialized as a string. Populated only for numeric columns."},"median":{"type":"string","nullable":true,"description":"Median (50th percentile), serialized as a string. Populated only for numeric columns."},"q1":{"type":"string","nullable":true,"description":"First quartile (25th percentile), serialized as a string. Populated only for numeric columns."},"q3":{"type":"string","nullable":true,"description":"Third quartile (75th percentile), serialized as a string. Populated only for numeric columns."},"topShapes":{"type":"array","nullable":true,"description":"Top observed shape patterns ordered by descending frequency.\nNull if shape analysis did not run.\n\nShapes use a character-class encoding (`#` for digits, `A` for\nletters, etc.).","items":{"$ref":"#/components/schemas/ColumnShape"}}}},"ColumnShape":{"type":"object","description":"A single observed value shape for a column.","required":["pattern","count","percentage"],"properties":{"pattern":{"type":"string","maxLength":255,"description":"The shape pattern (e.g. `######` for six digits)."},"count":{"type":"integer","format":"int64","minimum":0,"description":"Number of values matching this shape."},"percentage":{"type":"number","format":"double","minimum":0,"maximum":100,"description":"Percentage of non-null values matching this shape."}}},"StandardErrorResponse":{"type":"object","description":"Error response returned by the Data Quality API.","required":["statusCode","errorCode","titleMessage","userMessage"],"properties":{"statusCode":{"type":"integer","description":"HTTP status code corresponding to the error."},"errorCode":{"type":"string","description":"Internal error code representing the specific error type."},"titleMessage":{"type":"string","description":"A brief title summarizing the error."},"userMessage":{"type":"string","description":"Detailed, user-friendly message explaining the error and possible remediation steps."}}}},"responses":{"BadRequest":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardErrorResponse"}}}},"Unauthorized":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardErrorResponse"}}}},"Forbidden":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardErrorResponse"}}}},"NotFound":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardErrorResponse"}}}},"InternalServerError":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardErrorResponse"}}}}}},"paths":{"/jobRuns/{jobRunId}/profile":{"get":{"tags":["Job Runs"],"operationId":"getJobRunProfile","summary":"Get job-run profile results","description":"Returns detailed column-level profiling statistics produced by a\nsingle job run. Use this to understand the data distribution, type\ninconsistencies, and format anomalies observed during the run.\n\n**Permissions**\n- **Required:**\n  - `DATA_QUALITY` (global)\n  - `DATA_QUALITY_JOB_VIEW` (resource on the job)\n- **Global bypass (either of the following):**\n  - `DATA_QUALITY` and `VIEW_PERMISSIONS_VIEW_ALL`\n  - `DATA_QUALITY` and `GLOBAL_MANAGE_ALL_RESOURCES`","parameters":[{"name":"jobRunId","in":"path","required":true,"description":"Job run identifier","schema":{"type":"string","format":"uuid"}},{"in":"query","name":"limit","required":false,"description":"Maximum number of column profiles per page.","schema":{"type":"integer","minimum":0,"maximum":500,"default":100}},{"in":"query","name":"offset","required":false,"description":"Index of the first column profile to return.","schema":{"type":"integer","minimum":0,"default":0}},{"in":"query","name":"includeTotal","required":false,"description":"When `true`, the response includes `total` (the count of columns\navailable across all pages). Omitted by default to avoid the\nadditional count query.","schema":{"type":"boolean","default":false}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobRunProfileResults"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"500":{"$ref":"#/components/responses/InternalServerError"}}}}}}
```

## Get job-run monitor results

> Returns the results of the monitors for a job run.\
> \
> \*\*Permissions\*\*\
> \- \*\*Required:\*\* \`DATA\_QUALITY\` and \`DATA\_QUALITY\_JOB\_VIEW\`\
> \- \*\*Global bypass:\*\*\
> &#x20; \- \`DATA\_QUALITY\` and \`VIEW\_PERMISSIONS\_VIEW\_ALL\`\
> &#x20; \- \`DATA\_QUALITY\` and \`GLOBAL\_MANAGE\_ALL\_RESOURCES\`

```json
{"openapi":"3.0.3","info":{"title":"Data Quality Collibra API","version":"1.3.0"},"tags":[{"name":"Job Runs"},{"name":"Monitor Results"}],"servers":[{"description":"Data Quality API","url":"/rest/dq/1.0"}],"security":[{"basicAuth":[]},{"jwtAuth":[]}],"components":{"securitySchemes":{"basicAuth":{"description":"Collibra REST API authentication using Basic Authentication.","type":"http","scheme":"basic"},"jwtAuth":{"description":"Collibra REST API authentication using JSON Web Token.","type":"http","scheme":"bearer","bearerFormat":"JWT"}},"parameters":{"JobRunId":{"name":"jobRunId","in":"path","required":true,"description":"Job run identifier (UUID)","schema":{"type":"string","format":"uuid"}}},"schemas":{"JobRunMonitorsResult":{"type":"object","description":"Combined list of all monitor results for a job run.","required":["adaptiveMonitors","customMonitors"],"properties":{"adaptiveMonitors":{"type":"array","maxItems":500,"items":{"$ref":"#/components/schemas/AdaptiveMonitorResult"}},"customMonitors":{"type":"array","maxItems":500,"items":{"$ref":"#/components/schemas/CustomMonitorResult"}}}},"AdaptiveMonitorResult":{"type":"object","description":"The outcome of an adaptive monitor for a specific job run.","required":["monitorName","monitorType","state"],"properties":{"monitorName":{"type":"string","description":"Name of the monitor."},"monitorType":{"$ref":"#/components/schemas/AdaptiveMonitorType"},"primaryColumn":{"type":"string","description":"Column the monitor applies to. \"ALL\" for dataset-level monitors."},"state":{"$ref":"#/components/schemas/MonitorState"},"observedValue":{"type":"string","description":"The measured metric value for this run."},"expectedMin":{"type":"string","description":"Lower bound of the adaptive expected range."},"expectedMax":{"type":"string","description":"Upper bound of the adaptive expected range."},"tolerance":{"$ref":"#/components/schemas/AdaptiveMonitorTolerance"},"isSuppressed":{"type":"boolean","description":"Whether findings for this result are suppressed."},"dimensions":{"type":"array","maxItems":50,"description":"DQ dimensions associated with this monitor type.","items":{"type":"string"}}}},"AdaptiveMonitorType":{"type":"string","description":"Identifies the adaptive monitor type. Dataset-level monitors apply to the whole dataset; column-level monitors apply per column.\n* 'ROW_COUNT'       - Dataset level count of rows * 'NULL_VALUES'     - Row level count of null values * 'EMPTY_FIELDS'    - Row level count of string empty values * 'UNIQUENESS'      - Row level count of unique values * 'MIN'             - Row level minimum value * 'MAX'             - Row level maximum value * 'MEAN'            - Row level mean value (numerics only) * 'EXECUTION_TIME'  - Dataset level execution time of job * 'SHIFT'           - Column level type ratio * 'SCHEMA_CHANGE'   - Dataset level change in the source schema\n"},"MonitorState":{"type":"string","description":"The current state of a monitor for a given job run.\nThe current available values: * 'LEARNING'    — monitor is in a learning phase and collecting baseline data * 'PASSING'     — observed value is within expected bounds * 'BREAKING'    — observed value is outside expected bounds * 'SUPPRESSED'  — findings are suppressed and excluded from scoring * 'USER_PASSED' — monitor is passed by a user * 'EXCEPTION'   — an exception was encountered executing the monitor * 'STALE'       — monitor was run while suppressed; cannot be set to PASSING, BREAKING, or (if applicable) another active state until the job is rerun * 'SKIPPED'     — execution of monitor skipped\n"},"AdaptiveMonitorTolerance":{"type":"string","description":"Controls how aggressively the adaptive boundary model updates its expected range.\nThe current available values: * 'NARROW' - most strict (slowest to update) * 'NEUTRAL' - default tolerance * 'WIDE' - most lenient (fastest to update).\n","default":"NEUTRAL"},"CustomMonitorResult":{"type":"object","description":"The outcome of a custom monitor for a specific job run.","required":["monitorName","state","score"],"properties":{"monitorName":{"type":"string","description":"Monitor name."},"state":{"$ref":"#/components/schemas/MonitorState"},"score":{"type":"number","format":"double","minimum":0,"maximum":100,"description":"Score based on sum of points per breaking row (0 - 100)."},"breakingPercentage":{"type":"number","format":"double","minimum":0,"maximum":100,"description":"Percentage of records breaking."},"rowsPassing":{"type":"integer","description":"Number of rows that passed."},"rowsBreaking":{"type":"integer","description":"Number of rows that failed."},"rowsTotal":{"type":"integer","description":"Number of total rows."},"exception":{"type":"string","description":"Error message captured when the monitor query failed to execute. Empty when the monitor ran successfully."},"dimensions":{"type":"array","maxItems":50,"description":"DQ dimensions associated with this monitor.","items":{"type":"string"}},"tolerance":{"type":"integer","minimum":0,"maximum":100,"description":"Percentage of tolerated failures before this monitor is flagged as BREAKING (mirrors the value supplied at monitor configuration time)."}}},"StandardErrorResponse":{"type":"object","description":"Error response returned by the Data Quality API.","required":["statusCode","errorCode","titleMessage","userMessage"],"properties":{"statusCode":{"type":"integer","description":"HTTP status code corresponding to the error."},"errorCode":{"type":"string","description":"Internal error code representing the specific error type."},"titleMessage":{"type":"string","description":"A brief title summarizing the error."},"userMessage":{"type":"string","description":"Detailed, user-friendly message explaining the error and possible remediation steps."}}}},"responses":{"BadRequest":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardErrorResponse"}}}},"Unauthorized":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardErrorResponse"}}}},"Forbidden":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardErrorResponse"}}}},"NotFound":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardErrorResponse"}}}},"InternalServerError":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardErrorResponse"}}}}}},"paths":{"/jobRuns/{jobRunId}/monitors":{"get":{"tags":["Job Runs","Monitor Results"],"operationId":"getJobRunMonitors","summary":"Get job-run monitor results","description":"Returns the results of the monitors for a job run.\n\n**Permissions**\n- **Required:** `DATA_QUALITY` and `DATA_QUALITY_JOB_VIEW`\n- **Global bypass:**\n  - `DATA_QUALITY` and `VIEW_PERMISSIONS_VIEW_ALL`\n  - `DATA_QUALITY` and `GLOBAL_MANAGE_ALL_RESOURCES`","parameters":[{"$ref":"#/components/parameters/JobRunId"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobRunMonitorsResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"500":{"$ref":"#/components/responses/InternalServerError"}}}}}}
```

## Bulk update job-run monitor states

> Applies \`pass\` or \`suppress\` operations to multiple monitor results in a single job run.\
> \`PASS\` is valid only for adaptive monitors and retrains them.\
> \`SUPPRESS\` is valid for adaptive and custom monitors, and retrains adaptive monitors.\
> \
> \*\*Permissions\*\*\
> \- \*\*Required:\*\* \`DATA\_QUALITY\` and \`DATA\_QUALITY\_JOB\_EDIT\`\
> \- \*\*Global bypass:\*\*\
> &#x20; \- \`DATA\_QUALITY\` and \`GLOBAL\_MANAGE\_ALL\_RESOURCES\`

```json
{"openapi":"3.0.3","info":{"title":"Data Quality Collibra API","version":"1.3.0"},"tags":[{"name":"Job Runs"},{"name":"Monitor Results"}],"servers":[{"description":"Data Quality API","url":"/rest/dq/1.0"}],"security":[{"basicAuth":[]},{"jwtAuth":[]}],"components":{"securitySchemes":{"basicAuth":{"description":"Collibra REST API authentication using Basic Authentication.","type":"http","scheme":"basic"},"jwtAuth":{"description":"Collibra REST API authentication using JSON Web Token.","type":"http","scheme":"bearer","bearerFormat":"JWT"}},"parameters":{"JobRunId":{"name":"jobRunId","in":"path","required":true,"description":"Job run identifier (UUID)","schema":{"type":"string","format":"uuid"}}},"schemas":{"JobRunMonitorOperationsRequest":{"type":"object","description":"Bulk request to apply pass/suppress operations to monitor results of a job run.","required":["operations"],"properties":{"operations":{"type":"array","minItems":1,"maxItems":500,"description":"List of monitor operations to apply.","items":{"$ref":"#/components/schemas/JobRunMonitorOperation"}}}},"JobRunMonitorOperation":{"type":"object","description":"A single operation to apply to a monitor result for a job run.","required":["monitorName","operation"],"properties":{"monitorName":{"type":"string","minLength":1,"maxLength":255,"pattern":"^[a-zA-Z0-9_-]+( [a-zA-Z0-9_-]+)*$","description":"Unique monitor name."},"operation":{"type":"string","enum":["PASS","SUPPRESS"],"description":"Operation to apply to the monitor result:\n* `PASS`     — Set state to USER_PASSED and retrain (adaptive monitors only).\n* `SUPPRESS` — Set state to suppressed and retrain adaptive monitors."}}},"StandardErrorResponse":{"type":"object","description":"Error response returned by the Data Quality API.","required":["statusCode","errorCode","titleMessage","userMessage"],"properties":{"statusCode":{"type":"integer","description":"HTTP status code corresponding to the error."},"errorCode":{"type":"string","description":"Internal error code representing the specific error type."},"titleMessage":{"type":"string","description":"A brief title summarizing the error."},"userMessage":{"type":"string","description":"Detailed, user-friendly message explaining the error and possible remediation steps."}}}},"responses":{"BadRequest":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardErrorResponse"}}}},"Unauthorized":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardErrorResponse"}}}},"Forbidden":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardErrorResponse"}}}},"NotFound":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardErrorResponse"}}}},"InternalServerError":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StandardErrorResponse"}}}}}},"paths":{"/jobRuns/{jobRunId}/monitors":{"put":{"tags":["Job Runs","Monitor Results"],"operationId":"updateJobRunMonitors","summary":"Bulk update job-run monitor states","description":"Applies `pass` or `suppress` operations to multiple monitor results in a single job run.\n`PASS` is valid only for adaptive monitors and retrains them.\n`SUPPRESS` is valid for adaptive and custom monitors, and retrains adaptive monitors.\n\n**Permissions**\n- **Required:** `DATA_QUALITY` and `DATA_QUALITY_JOB_EDIT`\n- **Global bypass:**\n  - `DATA_QUALITY` and `GLOBAL_MANAGE_ALL_RESOURCES`","parameters":[{"$ref":"#/components/parameters/JobRunId"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobRunMonitorOperationsRequest"}}}},"responses":{"204":{"description":"No Content"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"500":{"$ref":"#/components/responses/InternalServerError"}}}}}}
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://developer.collibra.com/api/references/data-quality/job-runs.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
