> 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/jobs.md).

# Jobs

## Search jobs

> Returns only jobs that user has permission to view. Results are sorted by 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 \`RESOURCE\_MANAGE\_ALL\`

```json
{"openapi":"3.0.3","info":{"title":"Data Quality Collibra API","version":"1.3.0"},"tags":[{"name":"Jobs"}],"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"},"JobDefinitionPaginated":{"type":"object","description":"Paged list of jobs","properties":{"results":{"type":"array","items":{"$ref":"#/components/schemas/JobDefinition"}},"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."}}},"JobDefinition":{"type":"object","properties":{"jobName":{"$ref":"#/components/schemas/JobName"},"jobType":{"$ref":"#/components/schemas/JobType"},"sourceQuery":{"$ref":"#/components/schemas/SourceQuery"},"runDate":{"$ref":"#/components/schemas/RunDateValue"},"runDateEnd":{"$ref":"#/components/schemas/RunDateEndValue"},"dataLocation":{"$ref":"#/components/schemas/DataLocation"},"jobSettings":{"$ref":"#/components/schemas/JobSettings"},"monitoringSettings":{"$ref":"#/components/schemas/JobMonitoringSettings"},"notifications":{"$ref":"#/components/schemas/JobNotifications"},"schedulingSettings":{"$ref":"#/components/schemas/SchedulingSettings"}}},"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_.-]+$"},"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>\"`"},"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."},"DataLocation":{"description":"Identifies where the job reads data from. Combines the platform connection and the specific catalog/schema/table location inside that connection.\n","required":["edgeSiteName","edgeConnectionName","dataSourceName","schemaName","tableName"],"type":"object","properties":{"edgeSiteName":{"description":"Edge site name","type":"string"},"edgeConnectionName":{"type":"string","description":"Edge connection name"},"dataSourceName":{"type":"string","description":"Data source (database/catalog) name"},"databaseProductName":{"$ref":"#/components/schemas/DatabaseProduct"},"schemaName":{"description":"Schema name","type":"string"},"tableName":{"description":"Table name","type":"string"}}},"DatabaseProduct":{"type":"string","readOnly":true,"description":"The database vendor associated with the connection.\n\nCurrent possible values include:\n    * `ATHENA`\n    * `BIGQUERY`\n    * `DATABRICKS`\n    * `DB2`\n    * `MYSQL`\n    * `POSTGRES`\n    * `REDSHIFT`\n    * `SAP`\n    * `SNOWFLAKE`\n    * `SQLSERVER`\n    * `TRINO`\n\n  Additional values will be introduced in the future."},"JobSettings":{"type":"object","description":"Job-level execution settings, including date format and pushdown/pullup tuning. Pullup jobs are available only when the Pullup preview feature is enabled.\n","properties":{"dateFormat":{"$ref":"#/components/schemas/DateFormat"},"pushdownSettings":{"$ref":"#/components/schemas/PushdownSettings"},"pullupSettings":{"$ref":"#/components/schemas/PullupSettings"}}},"DateFormat":{"type":"string","default":"DATE","description":"Date format used for `runDate` / `runDateEnd`.\nSupported values:\n  - DATE -> yyyy-MM-dd \n  - TIMESTAMP -> RFC 3339 timestamp, example - 2025-10-23T13:50:02Z","enum":["DATE","TIMESTAMP"]},"PushdownSettings":{"type":"object","nullable":true,"description":"Settings for pushdown execution. Controls concurrency used by the source system connection.\nProvide this object only when the job's jobType is PUSHDOWN. Omit or set to null for non-pushdown jobs.","properties":{"connections":{"type":"integer","minimum":1,"default":10,"description":"Number of concurrent source connections\n"},"threads":{"type":"integer","minimum":1,"default":5,"description":"Worker threads per connection for pushdown queries\n"}}},"PullupSettings":{"type":"object","nullable":true,"description":"Settings for pullup execution. Controls partitioning and Spark sizing.\nProvide this object only when the job's jobType is PULLUP. Omit or set to null for non-pullup jobs.\n\nPullup functionality is available only when the Pullup preview feature is enabled.","properties":{"loadOptions":{"$ref":"#/components/schemas/LoadOptions"},"sparkJobSizing":{"$ref":"#/components/schemas/SparkJobSizing"},"sparkSqlProperties":{"type":"object","nullable":true,"description":"Arbitrary Spark SQL session properties as key/value pairs\n","additionalProperties":{"type":"string"}}}},"LoadOptions":{"type":"object","nullable":true,"description":"Data loading options applied when reading from the source\n","properties":{"numPartitions":{"type":"integer","minimum":0,"default":0,"description":"Number of Spark input partitions\n"},"parallelJdbcOptions":{"$ref":"#/components/schemas/ParallelJdbcOptions"}}},"ParallelJdbcOptions":{"nullable":true,"description":"Options for parallel JDBC partitioning. Choose a `mode`, which determines which\nfields are required: \n - `AUTO` – system selects column & partitions \n - `AUTO_COLUMN` – system selects column; you provide `partitionNumber`\n - `MANUAL` – you provide `partitionColumn` and `partitionNumber`","oneOf":[{"$ref":"#/components/schemas/ParallelJdbcOptionsAuto"},{"$ref":"#/components/schemas/ParallelJdbcOptionsAutoColumn"},{"$ref":"#/components/schemas/ParallelJdbcOptionsManual"}],"discriminator":{"propertyName":"mode","mapping":{"AUTO":"#/components/schemas/ParallelJdbcOptionsAuto","AUTO_COLUMN":"#/components/schemas/ParallelJdbcOptionsAutoColumn","MANUAL":"#/components/schemas/ParallelJdbcOptionsManual"}},"default":null},"ParallelJdbcOptionsAuto":{"type":"object","description":"Automatic column & partition selection.","properties":{"mode":{"type":"string","description":"Partitioning mode.\n\nFor this schema, the value MUST be `AUTO`."}},"required":["mode"],"additionalProperties":false},"ParallelJdbcOptionsAutoColumn":{"type":"object","description":"Automatic column selection; you specify the number of partitions.","properties":{"mode":{"type":"string","description":"Partitioning mode.\n\nFor this schema, the value MUST be `AUTO_COLUMN`."},"partitionNumber":{"type":"integer","minimum":0,"description":"Number of partitions to use."}},"required":["mode","partitionNumber"],"additionalProperties":false},"ParallelJdbcOptionsManual":{"type":"object","description":"You specify both the partition column and number of partitions.","properties":{"mode":{"type":"string","description":"Partitioning mode.\n\nFor this schema, the value MUST be `MANUAL`."},"partitionColumn":{"type":"string","description":"Numeric/integer column to partition on."},"partitionNumber":{"type":"integer","minimum":1,"description":"Number of partitions to use."}},"required":["mode","partitionColumn","partitionNumber"],"additionalProperties":false},"SparkJobSizing":{"type":"object","nullable":true,"description":"Optional manual sizing for Spark resources.\n\nIf this object is **omitted or null**, the platform automatically selects\nSpark resources based on the source query.","properties":{"numExecutors":{"type":"integer","minimum":1,"description":"Number of executors to use (upper bound).","default":1},"driverCores":{"type":"integer","minimum":1,"description":"Number of driver CPU cores.","default":1},"numExecutorCores":{"type":"integer","minimum":1,"description":"Number of CPU cores per executor.","default":1},"executorMemoryGb":{"allOf":[{"$ref":"#/components/schemas/SparkMemoryGB"},{"description":"Maximum memory per executor in GB.","default":1}]},"driverMemoryGb":{"allOf":[{"$ref":"#/components/schemas/SparkMemoryGB"},{"description":"Driver memory in GB.","default":1}]},"memoryOverheadGb":{"allOf":[{"$ref":"#/components/schemas/SparkMemoryGB"},{"description":"Additional off-heap memory per executor in GB.","nullable":true,"default":null}]}},"additionalProperties":false},"SparkMemoryGB":{"type":"integer","description":"Memory amount in gigabytes. The unit is in **GB**, fractional values are not supported\n"},"JobMonitoringSettings":{"type":"object","description":"Monitoring configuration for the job.  This structure is designed for future extensibility to include additional monitor types.","properties":{"adaptiveMonitors":{"$ref":"#/components/schemas/AdaptiveMonitors"},"customMonitors":{"type":"array","maxItems":65535,"items":{"$ref":"#/components/schemas/CustomMonitors"}}}},"AdaptiveMonitors":{"type":"object","description":"Feature toggles for adaptive monitors computed during profiling. All data quality jobs always run profiling with data type detection and schema-change checks enabled.\n","properties":{"descriptiveStatistics":{"type":"boolean","default":false,"description":"Show descriptive statistics in profiling results (e.g., count, min, mean, max). Note: may expose sensitive values such as minimum/maximum. If disabled, all column values are masked in the profiling results.\n"},"emptyFields":{"type":"boolean","default":true,"description":"Detect changes in the number of empty values in numeric columns.\n"},"executionTime":{"type":"boolean","default":false,"description":"Track changes in total execution time of the data job.\n"},"max":{"type":"boolean","default":false,"description":"Detect changes in the highest value across numeric columns.\n"},"mean":{"type":"boolean","default":false,"description":"Detect changes in the average (mean) value across numeric columns.\n"},"min":{"type":"boolean","default":false,"description":"Detect changes in the lowest value across numeric columns.\n"},"nullValues":{"type":"boolean","default":true,"description":"Detect changes in the number of NULL values across all columns.\n"},"rowCount":{"type":"boolean","default":true,"description":"Track changes in the total number of rows.\n"},"uniqueness":{"type":"boolean","default":true,"description":"Track changes in the number of distinct values across all columns.\n"},"settings":{"$ref":"#/components/schemas/AdaptiveMonitorSettings"}}},"AdaptiveMonitorSettings":{"type":"object","description":"Optional learning/tuning parameters applied to the above monitors.\n","properties":{"dataLookBack":{"type":"integer","minimum":0,"default":10,"description":"Number of historical runs to consider when detecting changes (0 = no look back).\n"},"learningPhase":{"type":"integer","minimum":0,"default":4,"description":"Number of initial runs used to learn a baseline before signaling changes (0 = no learning phase).    \n"}}},"CustomMonitors":{"type":"object","description":"A user-defined custom data quality monitor.","required":["monitorName","customQuery"],"properties":{"monitorName":{"type":"string","description":"Unique monitor name.","pattern":"^[a-zA-Z0-9_-]+$","minLength":1,"maxLength":255},"customQuery":{"type":"string","description":"The SQL query."},"filterQuery":{"type":"string","description":"Optional SQL filter clause applied to the monitor."},"primaryColumn":{"type":"string","description":"Column the monitor is scoped to."},"description":{"type":"string","description":"Human-readable description of the monitor.","maxLength":256},"dimensions":{"type":"array","maxItems":50,"description":"DQ dimensions this monitor measures.","items":{"type":"string"}},"notifications":{"type":"array","maxItems":500,"description":"Alert notification configurations.","items":{"$ref":"#/components/schemas/CustomMonitorNotification"}},"tolerance":{"type":"integer","description":"Number as a percentage of tolerated failures before flagging the monitor as breaking.","minimum":0,"maximum":100},"isActive":{"type":"boolean","description":"Whether the monitor is active."},"isSuppressed":{"type":"boolean","description":"Whether the monitor is suppressed."}}},"CustomMonitorNotification":{"type":"object","description":"Alert notification configuration attached to a custom monitor.","required":["notificationType","enabled","message","name"],"properties":{"notificationType":{"$ref":"#/components/schemas/CustomMonitorNotificationType"},"enabled":{"type":"boolean","description":"Whether this notification is active."},"message":{"type":"string","description":"Custom notification message.","maxLength":256},"channels":{"type":"array","maxItems":500,"description":"Channels to send out notifications.","items":{"$ref":"#/components/schemas/NotificationChannel"}},"name":{"type":"string","description":"Unique identifier for this notification entry."}}},"CustomMonitorNotificationType":{"type":"string","description":"Determines when a notification is triggered.\nThe current available values: * 'PASSING'   — monitor transitions to a passing state * 'BREAKING'  — monitor fails * 'EXCEPTION' — monitor encounters an execution error\n"},"NotificationChannel":{"type":"object","description":"Notification delivery channel and its destination/parameters.\n\nCurrent supported channel type:\n  * `EMAIL` – send notifications via email to the given recipients.\n\nAdditional channel types (e.g., `SLACK`) may be introduced in the future.","properties":{"channel":{"type":"string","description":"Delivery channel type.\n\nCurrent value:\n  * `EMAIL`\n\nAdditional values MAY be added in future versions."},"recipients":{"type":"array","minItems":1,"description":"Platform usernames to receive email notifications when `channel = EMAIL`\n(e.g., `jsmith`, `adoe`).","items":{"type":"string"}}},"additionalProperties":true},"JobNotifications":{"type":"object","description":"Controls which events trigger a notification, which channels deliver them, and what message is sent. This schema is **channel-extensible**: it starts with EMAIL and will be updated in future versions to support additional channels (e.g., Slack) without breaking existing clients.\n","properties":{"notificationOptions":{"type":"array","description":"Per-event settings. Add one item per event to monitor.","items":{"$ref":"#/components/schemas/NotificationOption"}},"globalMessage":{"type":"string","description":"Default message template when `useIndividualMessages` is false."},"useIndividualMessages":{"type":"boolean","description":"If true, use each option's `message`; otherwise use `globalMessage`."},"channels":{"type":"array","minItems":1,"description":"Delivery channels and their destinations","items":{"$ref":"#/components/schemas/NotificationChannel"}}},"required":["notificationOptions","channels"]},"NotificationOption":{"type":"object","description":"Configuration for a single notification event.\n","required":["notificationType","enabled"],"properties":{"notificationType":{"$ref":"#/components/schemas/NotificationType"},"enabled":{"type":"boolean","description":"Whether this notification is active."},"message":{"type":"string","description":"Custom message for this notification. Used when `useIndividualMessages` is `true`. If omitted or blank, the service falls back to `globalMessage`, if that is also blank, a system default template is used.\n"},"quantity":{"type":"integer","minimum":0,"nullable":true,"description":"Threshold used **only** for specific types:  \n  - `ROWS_LESS_THAN_LIMIT` – minimum expected row count.  \n  - `RUNS_WITHOUT_DATA` – number of consecutive empty runs (N).  \n  - `DAYS_WITHOUT_DATA` – number of days with no data (N).  \n  - `SCORE_LESS_THAN_LIMIT` – minimum acceptable score.  \n  - `RUN_TIME_MORE_THEN_LIMIT` – maximum allowed runtime in minutes.  \nIgnored for other types."}}},"NotificationType":{"type":"string","description":"The event that triggers this notification.\n\nCurrent possible values include:\n  * `JOB_FAILED`            – sent when a job run fails.\n  * `JOB_COMPLETED`         – sent when a job run finishes successfully.\n  * `ROWS_LESS_THAN_LIMIT`  – sent when produced row count is below a limit.\n  * `RUNS_WITHOUT_DATA`     – sent after N consecutive runs produced no data.\n  * `DAYS_WITHOUT_DATA`     – sent when no data was produced for N days.\n  * `SCORE_LESS_THAN_LIMIT` – sent when quality score is below a limit.\n  * `RUN_TIME_MORE_THEN_LIMIT` – sent when runtime exceeds a limit (in minutes).\n\nAdditional notification types may be introduced in the future."},"SchedulingSettings":{"nullable":true,"description":"Controls when a scheduled job runs and how `runDate` is adjusted. Exactly **one** schedule mode is allowed. **Optional** If omitted or null, the job will not be scheduled.\n","oneOf":[{"$ref":"#/components/schemas/SchedulingHourly"},{"$ref":"#/components/schemas/SchedulingDaily"},{"$ref":"#/components/schemas/SchedulingMonthly"}],"discriminator":{"propertyName":"schedulerMode","mapping":{"HOURLY":"#/components/schemas/SchedulingHourly","DAILY":"#/components/schemas/SchedulingDaily","MONTHLY":"#/components/schemas/SchedulingMonthly"}}},"SchedulingHourly":{"allOf":[{"$ref":"#/components/schemas/SchedulingBase"},{"type":"object","required":["hourly","schedulerMode"],"description":"Hourly schedule configuration. If scheduleRunTime is set \"14:30:00\", the job runs at 14:30, 15:30, 16:30, etc.","properties":{"schedulerMode":{"type":"string","description":"Schedule type.\n\nFor this schema, the value MUST be `HOURLY`."},"hourly":{"type":"object","description":"Hourly schedule rules.","required":["hourlyOffset"],"properties":{"hourlyOffset":{"type":"string","description":"Run-date offset in hours relative to the scheduled time.\n\nCurrent possible values include:\n  * `SCHEDULED` – use the scheduled date/time.\n  * `ONE_HOUR` – run date is 1 hour before the scheduled time.\n  * `TWO_HOURS` – run date is 2 hours before the scheduled time.\n\nAdditional values MAY be added in future versions."}}}}}]},"SchedulingBase":{"type":"object","required":["isActive","scheduledRunTime","schedulerMode"],"properties":{"isActive":{"type":"boolean","description":"Enable/disable the schedule (disabled schedules do not trigger runs)."},"scheduledRunTime":{"type":"string","description":"Time of day in **UTC**, format `HH:mm:ss`.  (24 hours) Example: `14:10:00` means the job starts at 14:10:00 UTC.\n"},"schedulerMode":{"type":"string","description":"Schedule type.\n\nCurrent possible values:\n  * `HOURLY`\n  * `DAILY`\n  * `MONTHLY`\n\nAdditional modes MAY be added in future versions."}}},"SchedulingDaily":{"allOf":[{"$ref":"#/components/schemas/SchedulingBase"},{"type":"object","required":["daily","schedulerMode"],"properties":{"schedulerMode":{"type":"string","description":"Schedule type.\n\nFor this schema, the value MUST be `DAILY`."},"daily":{"type":"object","description":"Daily schedule rules.","required":["dailyOffset","daysOfWeek"],"properties":{"dailyOffset":{"type":"string","description":"Run-date offset in days relative to the scheduled day.\n\nCurrent possible values include:\n  * `SCHEDULED`\n  * `ONE_DAY`\n  * `TWO_DAYS`\n  * `THREE_DAYS`\n  * `FOUR_DAYS`\n  * `FIVE_DAYS`\n  * `SIX_DAYS`\n  * `SEVEN_DAYS`\n\nAdditional values MAY be added in future versions."},"daysOfWeek":{"type":"array","minItems":1,"items":{"type":"string","enum":["MONDAY","TUESDAY","WEDNESDAY","THURSDAY","FRIDAY","SATURDAY","SUNDAY"]},"description":"Days of week to run."}}}}}]},"SchedulingMonthly":{"allOf":[{"$ref":"#/components/schemas/SchedulingBase"},{"type":"object","required":["monthly","schedulerMode"],"properties":{"schedulerMode":{"type":"string","description":"Schedule type.\n\nFor this schema, the value MUST be `MONTHLY`."},"monthly":{"type":"object","description":"Monthly schedule rules.","required":["monthlyRepeat","monthlyOffset"],"properties":{"monthlyRepeat":{"type":"string","description":"Which day of the month to run the job on.\n\nCurrent possible values:\n  * `FIRST` – first day of the month\n  * `LAST`  – last day of the month\n  * `DAY`   – specific calendar day (requires `dayNumber` in 1–31 range)\n\nAdditional values MAY be added in future versions."},"monthlyOffset":{"type":"string","description":"Run-date offset applied to the scheduled monthly day.\n\nCurrent possible values include:\n  * `SCHEDULED`              - use the scheduled date\n  * `FIRST_OF_CURRENT_MONTH` - first day of the current month\n  * `LAST_OF_CURRENT_MONTH`  - last day of the current month\n  * `FIRST_OF_PRIOR_MONTH`   - first day of the prior month\n  * `LAST_OF_PRIOR_MONTH`    - last day of the prior month\n\nAdditional values may be added in future versions."},"dayNumber":{"type":"integer","minimum":1,"maximum":31,"nullable":true,"description":"Required when `monthlyRepeat = DAY`."}}}}}]},"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":{"/jobs":{"get":{"tags":["Jobs"],"summary":"Search jobs","description":"Returns only jobs that user has permission to view. Results are sorted by 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 `RESOURCE_MANAGE_ALL`","operationId":"searchJobs","parameters":[{"in":"query","name":"jobName","required":false,"description":"Fuzzy, case-insensitive name filter. Uses SQL `LIKE` semantics: `%jobName%` Blank or omitted returns all jobs\n","schema":{"type":"string","maxLength":255,"default":""}},{"in":"query","name":"edgeSiteName","required":false,"description":"Edge Site Name","schema":{"type":"string","maxLength":255}},{"in":"query","name":"edgeConnectionName","required":false,"description":"Edge connection name","schema":{"type":"string","maxLength":255}},{"in":"query","name":"dataSourceName","required":false,"description":"Data source (database/catalog) name","schema":{"type":"string","maxLength":255}},{"in":"query","name":"schemaName","required":false,"description":"Filter by schema name","schema":{"type":"string","maxLength":255}},{"in":"query","name":"tableName","required":false,"description":"Filter by table or view name","schema":{"type":"string","maxLength":255}},{"in":"query","name":"jobType","required":false,"description":"Filter by a job type. If omitted, both job types are returned\n","schema":{"$ref":"#/components/schemas/JobType"}},{"in":"query","name":"limit","required":false,"description":"Number of results per page","schema":{"type":"integer","minimum":0,"maximum":500,"default":100}},{"in":"query","name":"offset","required":false,"description":"Result offset","schema":{"type":"integer","minimum":0,"default":0}}],"responses":{"200":{"description":"Successfully retrieved jobs","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobDefinitionPaginated"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"500":{"$ref":"#/components/responses/InternalServerError"}}}}}}
```

## Create and optionally run a job

> Creates a job and immediately queues a run.\
> This endpoint is asynchronous: it returns a run receipt with identifiers\
> \
> \*\*Permissions\*\*\
> \- \*\*Required:\*\* \`DATA\_QUALITY\` and \`DATA\_QUALITY\_JOB\_CREATE\`\
> \- \*\*Global bypass:\*\*\
> &#x20; \- \`DATA\_QUALITY\` and \`RESOURCE\_MANAGE\_ALL\`

```json
{"openapi":"3.0.3","info":{"title":"Data Quality Collibra API","version":"1.3.0"},"tags":[{"name":"Jobs"}],"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":{"JobDefinitionCreateRequest":{"type":"object","required":["jobType","dataLocation"],"properties":{"queueRun":{"type":"boolean","default":true,"description":"Indicates whether the created job should be queued to run immediately after creation.\n\nCurrently **queueRun** will always treated as true, whether the client provides a value or omits the field. Create-only behavior is not supported yet.\nIn future versions, this field will become fully optional and will default to false."},"jobName":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/JobName"}],"description":"Unique name of the job to create/run.\n\n**Optional**. If omitted or null, the system generates a default unique name\nusing the pattern `<schema>.<table>`. If that name already exists, an\nunderscore plus a counter is appended, e.g. `<schema>.<table>_1`, `<schema>.<table>_2`, etc."},"jobType":{"$ref":"#/components/schemas/JobType"},"sourceQuery":{"$ref":"#/components/schemas/SourceQuery"},"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**. May be omitted or set to null.\nIf not provided, the system will use the current date/time as the run date."}]},"runDateEnd":{"$ref":"#/components/schemas/RunDateEndValue"},"dataLocation":{"$ref":"#/components/schemas/DataLocation"},"backrun":{"$ref":"#/components/schemas/Backrun"},"jobSettings":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/JobSettings"},{"description":"Job-level execution settings.\n\n**Optional**. May be omitted or set to null.\nIf not provided, default settings will be applied based on `jobType`.\nProvide only the fields you want to override, any unspecified fields fall back to defaults."}]},"monitoringSettings":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/JobMonitoringSettings"},{"description":"Monitoring configuration for the job, excluding custom rules. Currently, only adaptive rules are supported. \nThis structure is designed for future extensibility to include additional monitor types.  \n\n**Optional**. May be omitted or set to null.\nIf not provided, default monitoring settings will be applied. Provide only the fields\nyou want to override, any unspecified fields fall back to defaults."}]},"notifications":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/JobNotifications"},{"description":"Notification configuration for a job. Controls which events trigger a notification, who receives it, \nand which message is sent.\n\n**Optional**. May be omitted or set to null.\nIf not provided, no notifications will be configured."}]},"schedulingSettings":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/SchedulingSettings"},{"description":"Controls when a scheduled job runs and how the runDate is adjusted by schedule-specific offsets. \nThe scheduler runs at the given UTC time and applies the selected mode (HOURLY/DAILY/MONTHLY).\n\n**Optional**. May be omitted or set to null.\nIf not provided, no scheduling settings will be applied."}]}}},"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_.-]+$"},"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"},"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>\"`"},"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."},"DataLocation":{"description":"Identifies where the job reads data from. Combines the platform connection and the specific catalog/schema/table location inside that connection.\n","required":["edgeSiteName","edgeConnectionName","dataSourceName","schemaName","tableName"],"type":"object","properties":{"edgeSiteName":{"description":"Edge site name","type":"string"},"edgeConnectionName":{"type":"string","description":"Edge connection name"},"dataSourceName":{"type":"string","description":"Data source (database/catalog) name"},"databaseProductName":{"$ref":"#/components/schemas/DatabaseProduct"},"schemaName":{"description":"Schema name","type":"string"},"tableName":{"description":"Table name","type":"string"}}},"DatabaseProduct":{"type":"string","readOnly":true,"description":"The database vendor associated with the connection.\n\nCurrent possible values include:\n    * `ATHENA`\n    * `BIGQUERY`\n    * `DATABRICKS`\n    * `DB2`\n    * `MYSQL`\n    * `POSTGRES`\n    * `REDSHIFT`\n    * `SAP`\n    * `SNOWFLAKE`\n    * `SQLSERVER`\n    * `TRINO`\n\n  Additional values will be introduced in the future."},"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"},"JobSettings":{"type":"object","description":"Job-level execution settings, including date format and pushdown/pullup tuning. Pullup jobs are available only when the Pullup preview feature is enabled.\n","properties":{"dateFormat":{"$ref":"#/components/schemas/DateFormat"},"pushdownSettings":{"$ref":"#/components/schemas/PushdownSettings"},"pullupSettings":{"$ref":"#/components/schemas/PullupSettings"}}},"DateFormat":{"type":"string","default":"DATE","description":"Date format used for `runDate` / `runDateEnd`.\nSupported values:\n  - DATE -> yyyy-MM-dd \n  - TIMESTAMP -> RFC 3339 timestamp, example - 2025-10-23T13:50:02Z","enum":["DATE","TIMESTAMP"]},"PushdownSettings":{"type":"object","nullable":true,"description":"Settings for pushdown execution. Controls concurrency used by the source system connection.\nProvide this object only when the job's jobType is PUSHDOWN. Omit or set to null for non-pushdown jobs.","properties":{"connections":{"type":"integer","minimum":1,"default":10,"description":"Number of concurrent source connections\n"},"threads":{"type":"integer","minimum":1,"default":5,"description":"Worker threads per connection for pushdown queries\n"}}},"PullupSettings":{"type":"object","nullable":true,"description":"Settings for pullup execution. Controls partitioning and Spark sizing.\nProvide this object only when the job's jobType is PULLUP. Omit or set to null for non-pullup jobs.\n\nPullup functionality is available only when the Pullup preview feature is enabled.","properties":{"loadOptions":{"$ref":"#/components/schemas/LoadOptions"},"sparkJobSizing":{"$ref":"#/components/schemas/SparkJobSizing"},"sparkSqlProperties":{"type":"object","nullable":true,"description":"Arbitrary Spark SQL session properties as key/value pairs\n","additionalProperties":{"type":"string"}}}},"LoadOptions":{"type":"object","nullable":true,"description":"Data loading options applied when reading from the source\n","properties":{"numPartitions":{"type":"integer","minimum":0,"default":0,"description":"Number of Spark input partitions\n"},"parallelJdbcOptions":{"$ref":"#/components/schemas/ParallelJdbcOptions"}}},"ParallelJdbcOptions":{"nullable":true,"description":"Options for parallel JDBC partitioning. Choose a `mode`, which determines which\nfields are required: \n - `AUTO` – system selects column & partitions \n - `AUTO_COLUMN` – system selects column; you provide `partitionNumber`\n - `MANUAL` – you provide `partitionColumn` and `partitionNumber`","oneOf":[{"$ref":"#/components/schemas/ParallelJdbcOptionsAuto"},{"$ref":"#/components/schemas/ParallelJdbcOptionsAutoColumn"},{"$ref":"#/components/schemas/ParallelJdbcOptionsManual"}],"discriminator":{"propertyName":"mode","mapping":{"AUTO":"#/components/schemas/ParallelJdbcOptionsAuto","AUTO_COLUMN":"#/components/schemas/ParallelJdbcOptionsAutoColumn","MANUAL":"#/components/schemas/ParallelJdbcOptionsManual"}},"default":null},"ParallelJdbcOptionsAuto":{"type":"object","description":"Automatic column & partition selection.","properties":{"mode":{"type":"string","description":"Partitioning mode.\n\nFor this schema, the value MUST be `AUTO`."}},"required":["mode"],"additionalProperties":false},"ParallelJdbcOptionsAutoColumn":{"type":"object","description":"Automatic column selection; you specify the number of partitions.","properties":{"mode":{"type":"string","description":"Partitioning mode.\n\nFor this schema, the value MUST be `AUTO_COLUMN`."},"partitionNumber":{"type":"integer","minimum":0,"description":"Number of partitions to use."}},"required":["mode","partitionNumber"],"additionalProperties":false},"ParallelJdbcOptionsManual":{"type":"object","description":"You specify both the partition column and number of partitions.","properties":{"mode":{"type":"string","description":"Partitioning mode.\n\nFor this schema, the value MUST be `MANUAL`."},"partitionColumn":{"type":"string","description":"Numeric/integer column to partition on."},"partitionNumber":{"type":"integer","minimum":1,"description":"Number of partitions to use."}},"required":["mode","partitionColumn","partitionNumber"],"additionalProperties":false},"SparkJobSizing":{"type":"object","nullable":true,"description":"Optional manual sizing for Spark resources.\n\nIf this object is **omitted or null**, the platform automatically selects\nSpark resources based on the source query.","properties":{"numExecutors":{"type":"integer","minimum":1,"description":"Number of executors to use (upper bound).","default":1},"driverCores":{"type":"integer","minimum":1,"description":"Number of driver CPU cores.","default":1},"numExecutorCores":{"type":"integer","minimum":1,"description":"Number of CPU cores per executor.","default":1},"executorMemoryGb":{"allOf":[{"$ref":"#/components/schemas/SparkMemoryGB"},{"description":"Maximum memory per executor in GB.","default":1}]},"driverMemoryGb":{"allOf":[{"$ref":"#/components/schemas/SparkMemoryGB"},{"description":"Driver memory in GB.","default":1}]},"memoryOverheadGb":{"allOf":[{"$ref":"#/components/schemas/SparkMemoryGB"},{"description":"Additional off-heap memory per executor in GB.","nullable":true,"default":null}]}},"additionalProperties":false},"SparkMemoryGB":{"type":"integer","description":"Memory amount in gigabytes. The unit is in **GB**, fractional values are not supported\n"},"JobMonitoringSettings":{"type":"object","description":"Monitoring configuration for the job.  This structure is designed for future extensibility to include additional monitor types.","properties":{"adaptiveMonitors":{"$ref":"#/components/schemas/AdaptiveMonitors"},"customMonitors":{"type":"array","maxItems":65535,"items":{"$ref":"#/components/schemas/CustomMonitors"}}}},"AdaptiveMonitors":{"type":"object","description":"Feature toggles for adaptive monitors computed during profiling. All data quality jobs always run profiling with data type detection and schema-change checks enabled.\n","properties":{"descriptiveStatistics":{"type":"boolean","default":false,"description":"Show descriptive statistics in profiling results (e.g., count, min, mean, max). Note: may expose sensitive values such as minimum/maximum. If disabled, all column values are masked in the profiling results.\n"},"emptyFields":{"type":"boolean","default":true,"description":"Detect changes in the number of empty values in numeric columns.\n"},"executionTime":{"type":"boolean","default":false,"description":"Track changes in total execution time of the data job.\n"},"max":{"type":"boolean","default":false,"description":"Detect changes in the highest value across numeric columns.\n"},"mean":{"type":"boolean","default":false,"description":"Detect changes in the average (mean) value across numeric columns.\n"},"min":{"type":"boolean","default":false,"description":"Detect changes in the lowest value across numeric columns.\n"},"nullValues":{"type":"boolean","default":true,"description":"Detect changes in the number of NULL values across all columns.\n"},"rowCount":{"type":"boolean","default":true,"description":"Track changes in the total number of rows.\n"},"uniqueness":{"type":"boolean","default":true,"description":"Track changes in the number of distinct values across all columns.\n"},"settings":{"$ref":"#/components/schemas/AdaptiveMonitorSettings"}}},"AdaptiveMonitorSettings":{"type":"object","description":"Optional learning/tuning parameters applied to the above monitors.\n","properties":{"dataLookBack":{"type":"integer","minimum":0,"default":10,"description":"Number of historical runs to consider when detecting changes (0 = no look back).\n"},"learningPhase":{"type":"integer","minimum":0,"default":4,"description":"Number of initial runs used to learn a baseline before signaling changes (0 = no learning phase).    \n"}}},"CustomMonitors":{"type":"object","description":"A user-defined custom data quality monitor.","required":["monitorName","customQuery"],"properties":{"monitorName":{"type":"string","description":"Unique monitor name.","pattern":"^[a-zA-Z0-9_-]+$","minLength":1,"maxLength":255},"customQuery":{"type":"string","description":"The SQL query."},"filterQuery":{"type":"string","description":"Optional SQL filter clause applied to the monitor."},"primaryColumn":{"type":"string","description":"Column the monitor is scoped to."},"description":{"type":"string","description":"Human-readable description of the monitor.","maxLength":256},"dimensions":{"type":"array","maxItems":50,"description":"DQ dimensions this monitor measures.","items":{"type":"string"}},"notifications":{"type":"array","maxItems":500,"description":"Alert notification configurations.","items":{"$ref":"#/components/schemas/CustomMonitorNotification"}},"tolerance":{"type":"integer","description":"Number as a percentage of tolerated failures before flagging the monitor as breaking.","minimum":0,"maximum":100},"isActive":{"type":"boolean","description":"Whether the monitor is active."},"isSuppressed":{"type":"boolean","description":"Whether the monitor is suppressed."}}},"CustomMonitorNotification":{"type":"object","description":"Alert notification configuration attached to a custom monitor.","required":["notificationType","enabled","message","name"],"properties":{"notificationType":{"$ref":"#/components/schemas/CustomMonitorNotificationType"},"enabled":{"type":"boolean","description":"Whether this notification is active."},"message":{"type":"string","description":"Custom notification message.","maxLength":256},"channels":{"type":"array","maxItems":500,"description":"Channels to send out notifications.","items":{"$ref":"#/components/schemas/NotificationChannel"}},"name":{"type":"string","description":"Unique identifier for this notification entry."}}},"CustomMonitorNotificationType":{"type":"string","description":"Determines when a notification is triggered.\nThe current available values: * 'PASSING'   — monitor transitions to a passing state * 'BREAKING'  — monitor fails * 'EXCEPTION' — monitor encounters an execution error\n"},"NotificationChannel":{"type":"object","description":"Notification delivery channel and its destination/parameters.\n\nCurrent supported channel type:\n  * `EMAIL` – send notifications via email to the given recipients.\n\nAdditional channel types (e.g., `SLACK`) may be introduced in the future.","properties":{"channel":{"type":"string","description":"Delivery channel type.\n\nCurrent value:\n  * `EMAIL`\n\nAdditional values MAY be added in future versions."},"recipients":{"type":"array","minItems":1,"description":"Platform usernames to receive email notifications when `channel = EMAIL`\n(e.g., `jsmith`, `adoe`).","items":{"type":"string"}}},"additionalProperties":true},"JobNotifications":{"type":"object","description":"Controls which events trigger a notification, which channels deliver them, and what message is sent. This schema is **channel-extensible**: it starts with EMAIL and will be updated in future versions to support additional channels (e.g., Slack) without breaking existing clients.\n","properties":{"notificationOptions":{"type":"array","description":"Per-event settings. Add one item per event to monitor.","items":{"$ref":"#/components/schemas/NotificationOption"}},"globalMessage":{"type":"string","description":"Default message template when `useIndividualMessages` is false."},"useIndividualMessages":{"type":"boolean","description":"If true, use each option's `message`; otherwise use `globalMessage`."},"channels":{"type":"array","minItems":1,"description":"Delivery channels and their destinations","items":{"$ref":"#/components/schemas/NotificationChannel"}}},"required":["notificationOptions","channels"]},"NotificationOption":{"type":"object","description":"Configuration for a single notification event.\n","required":["notificationType","enabled"],"properties":{"notificationType":{"$ref":"#/components/schemas/NotificationType"},"enabled":{"type":"boolean","description":"Whether this notification is active."},"message":{"type":"string","description":"Custom message for this notification. Used when `useIndividualMessages` is `true`. If omitted or blank, the service falls back to `globalMessage`, if that is also blank, a system default template is used.\n"},"quantity":{"type":"integer","minimum":0,"nullable":true,"description":"Threshold used **only** for specific types:  \n  - `ROWS_LESS_THAN_LIMIT` – minimum expected row count.  \n  - `RUNS_WITHOUT_DATA` – number of consecutive empty runs (N).  \n  - `DAYS_WITHOUT_DATA` – number of days with no data (N).  \n  - `SCORE_LESS_THAN_LIMIT` – minimum acceptable score.  \n  - `RUN_TIME_MORE_THEN_LIMIT` – maximum allowed runtime in minutes.  \nIgnored for other types."}}},"NotificationType":{"type":"string","description":"The event that triggers this notification.\n\nCurrent possible values include:\n  * `JOB_FAILED`            – sent when a job run fails.\n  * `JOB_COMPLETED`         – sent when a job run finishes successfully.\n  * `ROWS_LESS_THAN_LIMIT`  – sent when produced row count is below a limit.\n  * `RUNS_WITHOUT_DATA`     – sent after N consecutive runs produced no data.\n  * `DAYS_WITHOUT_DATA`     – sent when no data was produced for N days.\n  * `SCORE_LESS_THAN_LIMIT` – sent when quality score is below a limit.\n  * `RUN_TIME_MORE_THEN_LIMIT` – sent when runtime exceeds a limit (in minutes).\n\nAdditional notification types may be introduced in the future."},"SchedulingSettings":{"nullable":true,"description":"Controls when a scheduled job runs and how `runDate` is adjusted. Exactly **one** schedule mode is allowed. **Optional** If omitted or null, the job will not be scheduled.\n","oneOf":[{"$ref":"#/components/schemas/SchedulingHourly"},{"$ref":"#/components/schemas/SchedulingDaily"},{"$ref":"#/components/schemas/SchedulingMonthly"}],"discriminator":{"propertyName":"schedulerMode","mapping":{"HOURLY":"#/components/schemas/SchedulingHourly","DAILY":"#/components/schemas/SchedulingDaily","MONTHLY":"#/components/schemas/SchedulingMonthly"}}},"SchedulingHourly":{"allOf":[{"$ref":"#/components/schemas/SchedulingBase"},{"type":"object","required":["hourly","schedulerMode"],"description":"Hourly schedule configuration. If scheduleRunTime is set \"14:30:00\", the job runs at 14:30, 15:30, 16:30, etc.","properties":{"schedulerMode":{"type":"string","description":"Schedule type.\n\nFor this schema, the value MUST be `HOURLY`."},"hourly":{"type":"object","description":"Hourly schedule rules.","required":["hourlyOffset"],"properties":{"hourlyOffset":{"type":"string","description":"Run-date offset in hours relative to the scheduled time.\n\nCurrent possible values include:\n  * `SCHEDULED` – use the scheduled date/time.\n  * `ONE_HOUR` – run date is 1 hour before the scheduled time.\n  * `TWO_HOURS` – run date is 2 hours before the scheduled time.\n\nAdditional values MAY be added in future versions."}}}}}]},"SchedulingBase":{"type":"object","required":["isActive","scheduledRunTime","schedulerMode"],"properties":{"isActive":{"type":"boolean","description":"Enable/disable the schedule (disabled schedules do not trigger runs)."},"scheduledRunTime":{"type":"string","description":"Time of day in **UTC**, format `HH:mm:ss`.  (24 hours) Example: `14:10:00` means the job starts at 14:10:00 UTC.\n"},"schedulerMode":{"type":"string","description":"Schedule type.\n\nCurrent possible values:\n  * `HOURLY`\n  * `DAILY`\n  * `MONTHLY`\n\nAdditional modes MAY be added in future versions."}}},"SchedulingDaily":{"allOf":[{"$ref":"#/components/schemas/SchedulingBase"},{"type":"object","required":["daily","schedulerMode"],"properties":{"schedulerMode":{"type":"string","description":"Schedule type.\n\nFor this schema, the value MUST be `DAILY`."},"daily":{"type":"object","description":"Daily schedule rules.","required":["dailyOffset","daysOfWeek"],"properties":{"dailyOffset":{"type":"string","description":"Run-date offset in days relative to the scheduled day.\n\nCurrent possible values include:\n  * `SCHEDULED`\n  * `ONE_DAY`\n  * `TWO_DAYS`\n  * `THREE_DAYS`\n  * `FOUR_DAYS`\n  * `FIVE_DAYS`\n  * `SIX_DAYS`\n  * `SEVEN_DAYS`\n\nAdditional values MAY be added in future versions."},"daysOfWeek":{"type":"array","minItems":1,"items":{"type":"string","enum":["MONDAY","TUESDAY","WEDNESDAY","THURSDAY","FRIDAY","SATURDAY","SUNDAY"]},"description":"Days of week to run."}}}}}]},"SchedulingMonthly":{"allOf":[{"$ref":"#/components/schemas/SchedulingBase"},{"type":"object","required":["monthly","schedulerMode"],"properties":{"schedulerMode":{"type":"string","description":"Schedule type.\n\nFor this schema, the value MUST be `MONTHLY`."},"monthly":{"type":"object","description":"Monthly schedule rules.","required":["monthlyRepeat","monthlyOffset"],"properties":{"monthlyRepeat":{"type":"string","description":"Which day of the month to run the job on.\n\nCurrent possible values:\n  * `FIRST` – first day of the month\n  * `LAST`  – last day of the month\n  * `DAY`   – specific calendar day (requires `dayNumber` in 1–31 range)\n\nAdditional values MAY be added in future versions."},"monthlyOffset":{"type":"string","description":"Run-date offset applied to the scheduled monthly day.\n\nCurrent possible values include:\n  * `SCHEDULED`              - use the scheduled date\n  * `FIRST_OF_CURRENT_MONTH` - first day of the current month\n  * `LAST_OF_CURRENT_MONTH`  - last day of the current month\n  * `FIRST_OF_PRIOR_MONTH`   - first day of the prior month\n  * `LAST_OF_PRIOR_MONTH`    - last day of the prior month\n\nAdditional values may be added in future versions."},"dayNumber":{"type":"integer","minimum":1,"maximum":31,"nullable":true,"description":"Required when `monthlyRepeat = DAY`."}}}}}]},"JobDefinitionCreateResponse":{"allOf":[{"$ref":"#/components/schemas/JobDefinition"},{"type":"object","description":"Response for job creation. Contains all fields of `JobDefinition`\nplus an optional identifier of the queued run when `queueRun = true`.","properties":{"jobRunId":{"type":"string","format":"uuid","nullable":true,"description":"Identifier of the queued job run, if the job was scheduled\nto run immediately after creation.\n\n- Present when `queueRun = true` and the run was successfully queued.\n- `false` when the job was created without an immediate run (future state)."}}}]},"JobDefinition":{"type":"object","properties":{"jobName":{"$ref":"#/components/schemas/JobName"},"jobType":{"$ref":"#/components/schemas/JobType"},"sourceQuery":{"$ref":"#/components/schemas/SourceQuery"},"runDate":{"$ref":"#/components/schemas/RunDateValue"},"runDateEnd":{"$ref":"#/components/schemas/RunDateEndValue"},"dataLocation":{"$ref":"#/components/schemas/DataLocation"},"jobSettings":{"$ref":"#/components/schemas/JobSettings"},"monitoringSettings":{"$ref":"#/components/schemas/JobMonitoringSettings"},"notifications":{"$ref":"#/components/schemas/JobNotifications"},"schedulingSettings":{"$ref":"#/components/schemas/SchedulingSettings"}}},"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":{"post":{"tags":["Jobs"],"summary":"Create and optionally run a job","description":"Creates a job and immediately queues a run.\nThis endpoint is asynchronous: it returns a run receipt with identifiers\n\n**Permissions**\n- **Required:** `DATA_QUALITY` and `DATA_QUALITY_JOB_CREATE`\n- **Global bypass:**\n  - `DATA_QUALITY` and `RESOURCE_MANAGE_ALL`","operationId":"createJob","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobDefinitionCreateRequest"}}}},"responses":{"201":{"description":"Job created and run queued.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobDefinitionCreateResponse"}}}},"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

> Returns the job definition for the specified job name\
> \
> \*\*Permissions\*\*\
> \- \*\*Required:\*\* \`DATA\_QUALITY\` and \`DATA\_QUALITY\_JOB\_VIEW\`\
> \- \*\*Global bypass:\*\*\
> &#x20; \- \`DATA\_QUALITY\` and \`VIEW\_PERMISSIONS\_VIEW\_ALL\`\
> &#x20; \- \`DATA\_QUALITY\` and \`RESOURCE\_MANAGE\_ALL\`

```json
{"openapi":"3.0.3","info":{"title":"Data Quality Collibra API","version":"1.3.0"},"tags":[{"name":"Jobs"}],"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_.-]+$"},"JobDefinition":{"type":"object","properties":{"jobName":{"$ref":"#/components/schemas/JobName"},"jobType":{"$ref":"#/components/schemas/JobType"},"sourceQuery":{"$ref":"#/components/schemas/SourceQuery"},"runDate":{"$ref":"#/components/schemas/RunDateValue"},"runDateEnd":{"$ref":"#/components/schemas/RunDateEndValue"},"dataLocation":{"$ref":"#/components/schemas/DataLocation"},"jobSettings":{"$ref":"#/components/schemas/JobSettings"},"monitoringSettings":{"$ref":"#/components/schemas/JobMonitoringSettings"},"notifications":{"$ref":"#/components/schemas/JobNotifications"},"schedulingSettings":{"$ref":"#/components/schemas/SchedulingSettings"}}},"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"},"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>\"`"},"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."},"DataLocation":{"description":"Identifies where the job reads data from. Combines the platform connection and the specific catalog/schema/table location inside that connection.\n","required":["edgeSiteName","edgeConnectionName","dataSourceName","schemaName","tableName"],"type":"object","properties":{"edgeSiteName":{"description":"Edge site name","type":"string"},"edgeConnectionName":{"type":"string","description":"Edge connection name"},"dataSourceName":{"type":"string","description":"Data source (database/catalog) name"},"databaseProductName":{"$ref":"#/components/schemas/DatabaseProduct"},"schemaName":{"description":"Schema name","type":"string"},"tableName":{"description":"Table name","type":"string"}}},"DatabaseProduct":{"type":"string","readOnly":true,"description":"The database vendor associated with the connection.\n\nCurrent possible values include:\n    * `ATHENA`\n    * `BIGQUERY`\n    * `DATABRICKS`\n    * `DB2`\n    * `MYSQL`\n    * `POSTGRES`\n    * `REDSHIFT`\n    * `SAP`\n    * `SNOWFLAKE`\n    * `SQLSERVER`\n    * `TRINO`\n\n  Additional values will be introduced in the future."},"JobSettings":{"type":"object","description":"Job-level execution settings, including date format and pushdown/pullup tuning. Pullup jobs are available only when the Pullup preview feature is enabled.\n","properties":{"dateFormat":{"$ref":"#/components/schemas/DateFormat"},"pushdownSettings":{"$ref":"#/components/schemas/PushdownSettings"},"pullupSettings":{"$ref":"#/components/schemas/PullupSettings"}}},"DateFormat":{"type":"string","default":"DATE","description":"Date format used for `runDate` / `runDateEnd`.\nSupported values:\n  - DATE -> yyyy-MM-dd \n  - TIMESTAMP -> RFC 3339 timestamp, example - 2025-10-23T13:50:02Z","enum":["DATE","TIMESTAMP"]},"PushdownSettings":{"type":"object","nullable":true,"description":"Settings for pushdown execution. Controls concurrency used by the source system connection.\nProvide this object only when the job's jobType is PUSHDOWN. Omit or set to null for non-pushdown jobs.","properties":{"connections":{"type":"integer","minimum":1,"default":10,"description":"Number of concurrent source connections\n"},"threads":{"type":"integer","minimum":1,"default":5,"description":"Worker threads per connection for pushdown queries\n"}}},"PullupSettings":{"type":"object","nullable":true,"description":"Settings for pullup execution. Controls partitioning and Spark sizing.\nProvide this object only when the job's jobType is PULLUP. Omit or set to null for non-pullup jobs.\n\nPullup functionality is available only when the Pullup preview feature is enabled.","properties":{"loadOptions":{"$ref":"#/components/schemas/LoadOptions"},"sparkJobSizing":{"$ref":"#/components/schemas/SparkJobSizing"},"sparkSqlProperties":{"type":"object","nullable":true,"description":"Arbitrary Spark SQL session properties as key/value pairs\n","additionalProperties":{"type":"string"}}}},"LoadOptions":{"type":"object","nullable":true,"description":"Data loading options applied when reading from the source\n","properties":{"numPartitions":{"type":"integer","minimum":0,"default":0,"description":"Number of Spark input partitions\n"},"parallelJdbcOptions":{"$ref":"#/components/schemas/ParallelJdbcOptions"}}},"ParallelJdbcOptions":{"nullable":true,"description":"Options for parallel JDBC partitioning. Choose a `mode`, which determines which\nfields are required: \n - `AUTO` – system selects column & partitions \n - `AUTO_COLUMN` – system selects column; you provide `partitionNumber`\n - `MANUAL` – you provide `partitionColumn` and `partitionNumber`","oneOf":[{"$ref":"#/components/schemas/ParallelJdbcOptionsAuto"},{"$ref":"#/components/schemas/ParallelJdbcOptionsAutoColumn"},{"$ref":"#/components/schemas/ParallelJdbcOptionsManual"}],"discriminator":{"propertyName":"mode","mapping":{"AUTO":"#/components/schemas/ParallelJdbcOptionsAuto","AUTO_COLUMN":"#/components/schemas/ParallelJdbcOptionsAutoColumn","MANUAL":"#/components/schemas/ParallelJdbcOptionsManual"}},"default":null},"ParallelJdbcOptionsAuto":{"type":"object","description":"Automatic column & partition selection.","properties":{"mode":{"type":"string","description":"Partitioning mode.\n\nFor this schema, the value MUST be `AUTO`."}},"required":["mode"],"additionalProperties":false},"ParallelJdbcOptionsAutoColumn":{"type":"object","description":"Automatic column selection; you specify the number of partitions.","properties":{"mode":{"type":"string","description":"Partitioning mode.\n\nFor this schema, the value MUST be `AUTO_COLUMN`."},"partitionNumber":{"type":"integer","minimum":0,"description":"Number of partitions to use."}},"required":["mode","partitionNumber"],"additionalProperties":false},"ParallelJdbcOptionsManual":{"type":"object","description":"You specify both the partition column and number of partitions.","properties":{"mode":{"type":"string","description":"Partitioning mode.\n\nFor this schema, the value MUST be `MANUAL`."},"partitionColumn":{"type":"string","description":"Numeric/integer column to partition on."},"partitionNumber":{"type":"integer","minimum":1,"description":"Number of partitions to use."}},"required":["mode","partitionColumn","partitionNumber"],"additionalProperties":false},"SparkJobSizing":{"type":"object","nullable":true,"description":"Optional manual sizing for Spark resources.\n\nIf this object is **omitted or null**, the platform automatically selects\nSpark resources based on the source query.","properties":{"numExecutors":{"type":"integer","minimum":1,"description":"Number of executors to use (upper bound).","default":1},"driverCores":{"type":"integer","minimum":1,"description":"Number of driver CPU cores.","default":1},"numExecutorCores":{"type":"integer","minimum":1,"description":"Number of CPU cores per executor.","default":1},"executorMemoryGb":{"allOf":[{"$ref":"#/components/schemas/SparkMemoryGB"},{"description":"Maximum memory per executor in GB.","default":1}]},"driverMemoryGb":{"allOf":[{"$ref":"#/components/schemas/SparkMemoryGB"},{"description":"Driver memory in GB.","default":1}]},"memoryOverheadGb":{"allOf":[{"$ref":"#/components/schemas/SparkMemoryGB"},{"description":"Additional off-heap memory per executor in GB.","nullable":true,"default":null}]}},"additionalProperties":false},"SparkMemoryGB":{"type":"integer","description":"Memory amount in gigabytes. The unit is in **GB**, fractional values are not supported\n"},"JobMonitoringSettings":{"type":"object","description":"Monitoring configuration for the job.  This structure is designed for future extensibility to include additional monitor types.","properties":{"adaptiveMonitors":{"$ref":"#/components/schemas/AdaptiveMonitors"},"customMonitors":{"type":"array","maxItems":65535,"items":{"$ref":"#/components/schemas/CustomMonitors"}}}},"AdaptiveMonitors":{"type":"object","description":"Feature toggles for adaptive monitors computed during profiling. All data quality jobs always run profiling with data type detection and schema-change checks enabled.\n","properties":{"descriptiveStatistics":{"type":"boolean","default":false,"description":"Show descriptive statistics in profiling results (e.g., count, min, mean, max). Note: may expose sensitive values such as minimum/maximum. If disabled, all column values are masked in the profiling results.\n"},"emptyFields":{"type":"boolean","default":true,"description":"Detect changes in the number of empty values in numeric columns.\n"},"executionTime":{"type":"boolean","default":false,"description":"Track changes in total execution time of the data job.\n"},"max":{"type":"boolean","default":false,"description":"Detect changes in the highest value across numeric columns.\n"},"mean":{"type":"boolean","default":false,"description":"Detect changes in the average (mean) value across numeric columns.\n"},"min":{"type":"boolean","default":false,"description":"Detect changes in the lowest value across numeric columns.\n"},"nullValues":{"type":"boolean","default":true,"description":"Detect changes in the number of NULL values across all columns.\n"},"rowCount":{"type":"boolean","default":true,"description":"Track changes in the total number of rows.\n"},"uniqueness":{"type":"boolean","default":true,"description":"Track changes in the number of distinct values across all columns.\n"},"settings":{"$ref":"#/components/schemas/AdaptiveMonitorSettings"}}},"AdaptiveMonitorSettings":{"type":"object","description":"Optional learning/tuning parameters applied to the above monitors.\n","properties":{"dataLookBack":{"type":"integer","minimum":0,"default":10,"description":"Number of historical runs to consider when detecting changes (0 = no look back).\n"},"learningPhase":{"type":"integer","minimum":0,"default":4,"description":"Number of initial runs used to learn a baseline before signaling changes (0 = no learning phase).    \n"}}},"CustomMonitors":{"type":"object","description":"A user-defined custom data quality monitor.","required":["monitorName","customQuery"],"properties":{"monitorName":{"type":"string","description":"Unique monitor name.","pattern":"^[a-zA-Z0-9_-]+$","minLength":1,"maxLength":255},"customQuery":{"type":"string","description":"The SQL query."},"filterQuery":{"type":"string","description":"Optional SQL filter clause applied to the monitor."},"primaryColumn":{"type":"string","description":"Column the monitor is scoped to."},"description":{"type":"string","description":"Human-readable description of the monitor.","maxLength":256},"dimensions":{"type":"array","maxItems":50,"description":"DQ dimensions this monitor measures.","items":{"type":"string"}},"notifications":{"type":"array","maxItems":500,"description":"Alert notification configurations.","items":{"$ref":"#/components/schemas/CustomMonitorNotification"}},"tolerance":{"type":"integer","description":"Number as a percentage of tolerated failures before flagging the monitor as breaking.","minimum":0,"maximum":100},"isActive":{"type":"boolean","description":"Whether the monitor is active."},"isSuppressed":{"type":"boolean","description":"Whether the monitor is suppressed."}}},"CustomMonitorNotification":{"type":"object","description":"Alert notification configuration attached to a custom monitor.","required":["notificationType","enabled","message","name"],"properties":{"notificationType":{"$ref":"#/components/schemas/CustomMonitorNotificationType"},"enabled":{"type":"boolean","description":"Whether this notification is active."},"message":{"type":"string","description":"Custom notification message.","maxLength":256},"channels":{"type":"array","maxItems":500,"description":"Channels to send out notifications.","items":{"$ref":"#/components/schemas/NotificationChannel"}},"name":{"type":"string","description":"Unique identifier for this notification entry."}}},"CustomMonitorNotificationType":{"type":"string","description":"Determines when a notification is triggered.\nThe current available values: * 'PASSING'   — monitor transitions to a passing state * 'BREAKING'  — monitor fails * 'EXCEPTION' — monitor encounters an execution error\n"},"NotificationChannel":{"type":"object","description":"Notification delivery channel and its destination/parameters.\n\nCurrent supported channel type:\n  * `EMAIL` – send notifications via email to the given recipients.\n\nAdditional channel types (e.g., `SLACK`) may be introduced in the future.","properties":{"channel":{"type":"string","description":"Delivery channel type.\n\nCurrent value:\n  * `EMAIL`\n\nAdditional values MAY be added in future versions."},"recipients":{"type":"array","minItems":1,"description":"Platform usernames to receive email notifications when `channel = EMAIL`\n(e.g., `jsmith`, `adoe`).","items":{"type":"string"}}},"additionalProperties":true},"JobNotifications":{"type":"object","description":"Controls which events trigger a notification, which channels deliver them, and what message is sent. This schema is **channel-extensible**: it starts with EMAIL and will be updated in future versions to support additional channels (e.g., Slack) without breaking existing clients.\n","properties":{"notificationOptions":{"type":"array","description":"Per-event settings. Add one item per event to monitor.","items":{"$ref":"#/components/schemas/NotificationOption"}},"globalMessage":{"type":"string","description":"Default message template when `useIndividualMessages` is false."},"useIndividualMessages":{"type":"boolean","description":"If true, use each option's `message`; otherwise use `globalMessage`."},"channels":{"type":"array","minItems":1,"description":"Delivery channels and their destinations","items":{"$ref":"#/components/schemas/NotificationChannel"}}},"required":["notificationOptions","channels"]},"NotificationOption":{"type":"object","description":"Configuration for a single notification event.\n","required":["notificationType","enabled"],"properties":{"notificationType":{"$ref":"#/components/schemas/NotificationType"},"enabled":{"type":"boolean","description":"Whether this notification is active."},"message":{"type":"string","description":"Custom message for this notification. Used when `useIndividualMessages` is `true`. If omitted or blank, the service falls back to `globalMessage`, if that is also blank, a system default template is used.\n"},"quantity":{"type":"integer","minimum":0,"nullable":true,"description":"Threshold used **only** for specific types:  \n  - `ROWS_LESS_THAN_LIMIT` – minimum expected row count.  \n  - `RUNS_WITHOUT_DATA` – number of consecutive empty runs (N).  \n  - `DAYS_WITHOUT_DATA` – number of days with no data (N).  \n  - `SCORE_LESS_THAN_LIMIT` – minimum acceptable score.  \n  - `RUN_TIME_MORE_THEN_LIMIT` – maximum allowed runtime in minutes.  \nIgnored for other types."}}},"NotificationType":{"type":"string","description":"The event that triggers this notification.\n\nCurrent possible values include:\n  * `JOB_FAILED`            – sent when a job run fails.\n  * `JOB_COMPLETED`         – sent when a job run finishes successfully.\n  * `ROWS_LESS_THAN_LIMIT`  – sent when produced row count is below a limit.\n  * `RUNS_WITHOUT_DATA`     – sent after N consecutive runs produced no data.\n  * `DAYS_WITHOUT_DATA`     – sent when no data was produced for N days.\n  * `SCORE_LESS_THAN_LIMIT` – sent when quality score is below a limit.\n  * `RUN_TIME_MORE_THEN_LIMIT` – sent when runtime exceeds a limit (in minutes).\n\nAdditional notification types may be introduced in the future."},"SchedulingSettings":{"nullable":true,"description":"Controls when a scheduled job runs and how `runDate` is adjusted. Exactly **one** schedule mode is allowed. **Optional** If omitted or null, the job will not be scheduled.\n","oneOf":[{"$ref":"#/components/schemas/SchedulingHourly"},{"$ref":"#/components/schemas/SchedulingDaily"},{"$ref":"#/components/schemas/SchedulingMonthly"}],"discriminator":{"propertyName":"schedulerMode","mapping":{"HOURLY":"#/components/schemas/SchedulingHourly","DAILY":"#/components/schemas/SchedulingDaily","MONTHLY":"#/components/schemas/SchedulingMonthly"}}},"SchedulingHourly":{"allOf":[{"$ref":"#/components/schemas/SchedulingBase"},{"type":"object","required":["hourly","schedulerMode"],"description":"Hourly schedule configuration. If scheduleRunTime is set \"14:30:00\", the job runs at 14:30, 15:30, 16:30, etc.","properties":{"schedulerMode":{"type":"string","description":"Schedule type.\n\nFor this schema, the value MUST be `HOURLY`."},"hourly":{"type":"object","description":"Hourly schedule rules.","required":["hourlyOffset"],"properties":{"hourlyOffset":{"type":"string","description":"Run-date offset in hours relative to the scheduled time.\n\nCurrent possible values include:\n  * `SCHEDULED` – use the scheduled date/time.\n  * `ONE_HOUR` – run date is 1 hour before the scheduled time.\n  * `TWO_HOURS` – run date is 2 hours before the scheduled time.\n\nAdditional values MAY be added in future versions."}}}}}]},"SchedulingBase":{"type":"object","required":["isActive","scheduledRunTime","schedulerMode"],"properties":{"isActive":{"type":"boolean","description":"Enable/disable the schedule (disabled schedules do not trigger runs)."},"scheduledRunTime":{"type":"string","description":"Time of day in **UTC**, format `HH:mm:ss`.  (24 hours) Example: `14:10:00` means the job starts at 14:10:00 UTC.\n"},"schedulerMode":{"type":"string","description":"Schedule type.\n\nCurrent possible values:\n  * `HOURLY`\n  * `DAILY`\n  * `MONTHLY`\n\nAdditional modes MAY be added in future versions."}}},"SchedulingDaily":{"allOf":[{"$ref":"#/components/schemas/SchedulingBase"},{"type":"object","required":["daily","schedulerMode"],"properties":{"schedulerMode":{"type":"string","description":"Schedule type.\n\nFor this schema, the value MUST be `DAILY`."},"daily":{"type":"object","description":"Daily schedule rules.","required":["dailyOffset","daysOfWeek"],"properties":{"dailyOffset":{"type":"string","description":"Run-date offset in days relative to the scheduled day.\n\nCurrent possible values include:\n  * `SCHEDULED`\n  * `ONE_DAY`\n  * `TWO_DAYS`\n  * `THREE_DAYS`\n  * `FOUR_DAYS`\n  * `FIVE_DAYS`\n  * `SIX_DAYS`\n  * `SEVEN_DAYS`\n\nAdditional values MAY be added in future versions."},"daysOfWeek":{"type":"array","minItems":1,"items":{"type":"string","enum":["MONDAY","TUESDAY","WEDNESDAY","THURSDAY","FRIDAY","SATURDAY","SUNDAY"]},"description":"Days of week to run."}}}}}]},"SchedulingMonthly":{"allOf":[{"$ref":"#/components/schemas/SchedulingBase"},{"type":"object","required":["monthly","schedulerMode"],"properties":{"schedulerMode":{"type":"string","description":"Schedule type.\n\nFor this schema, the value MUST be `MONTHLY`."},"monthly":{"type":"object","description":"Monthly schedule rules.","required":["monthlyRepeat","monthlyOffset"],"properties":{"monthlyRepeat":{"type":"string","description":"Which day of the month to run the job on.\n\nCurrent possible values:\n  * `FIRST` – first day of the month\n  * `LAST`  – last day of the month\n  * `DAY`   – specific calendar day (requires `dayNumber` in 1–31 range)\n\nAdditional values MAY be added in future versions."},"monthlyOffset":{"type":"string","description":"Run-date offset applied to the scheduled monthly day.\n\nCurrent possible values include:\n  * `SCHEDULED`              - use the scheduled date\n  * `FIRST_OF_CURRENT_MONTH` - first day of the current month\n  * `LAST_OF_CURRENT_MONTH`  - last day of the current month\n  * `FIRST_OF_PRIOR_MONTH`   - first day of the prior month\n  * `LAST_OF_PRIOR_MONTH`    - last day of the prior month\n\nAdditional values may be added in future versions."},"dayNumber":{"type":"integer","minimum":1,"maximum":31,"nullable":true,"description":"Required when `monthlyRepeat = DAY`."}}}}}]},"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":{"/jobs/{jobName}":{"get":{"tags":["Jobs"],"summary":"Get job","description":"Returns the job definition for the specified job name\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 `RESOURCE_MANAGE_ALL`","operationId":"getJob","parameters":[{"$ref":"#/components/parameters/JobNamePath"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobDefinition"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"500":{"$ref":"#/components/responses/InternalServerError"}}}}}}
```

## Delete job

> Deletes job identified by the given job name.\
> \
> \*\*Permissions\*\*\
> \- \*\*Required:\*\* \`DATA\_QUALITY\` and \`DATA\_QUALITY\_JOB\_DELETE\`\
> \- \*\*Global bypass:\*\*\
> &#x20; \- \`DATA\_QUALITY\` and \`RESOURCE\_MANAGE\_ALL\`

```json
{"openapi":"3.0.3","info":{"title":"Data Quality Collibra API","version":"1.3.0"},"tags":[{"name":"Jobs"}],"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_.-]+$"},"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":{"/jobs/{jobName}":{"delete":{"tags":["Jobs"],"summary":"Delete job","description":"Deletes job identified by the given job name.\n\n**Permissions**\n- **Required:** `DATA_QUALITY` and `DATA_QUALITY_JOB_DELETE`\n- **Global bypass:**\n  - `DATA_QUALITY` and `RESOURCE_MANAGE_ALL`","operationId":"deleteJob","parameters":[{"$ref":"#/components/parameters/JobNamePath"}],"responses":{"204":{"description":"Job successfully deleted"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"500":{"$ref":"#/components/responses/InternalServerError"}}}}}}
```

## Update job

> Update existing job definition.\
> Include only the fields you wish to update, omitted fields will remain unchanged.\
> \
> \*\*Permissions\*\*\
> \- \*\*Required:\*\* \`DATA\_QUALITY\` and \`DATA\_QUALITY\_JOB\_EDIT\`\
> \- \*\*Global bypass:\*\*\
> &#x20; \- \`DATA\_QUALITY\` and \`RESOURCE\_MANAGE\_ALL\`

```json
{"openapi":"3.0.3","info":{"title":"Data Quality Collibra API","version":"1.3.0"},"tags":[{"name":"Jobs"}],"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_.-]+$"},"JobDefinitionUpdateRequest":{"type":"object","properties":{"jobName":{"type":"string","description":"The name of an existing job definition to update"},"sourceQuery":{"$ref":"#/components/schemas/SourceQuery"},"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**. May be omitted or set to null.\nIf not provided, no updates will be made to existing run date."}]},"runDateEnd":{"$ref":"#/components/schemas/RunDateEndValue"},"dataLocation":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/DataLocation"},{"description":"Data location details for the job, including edge site, connection, data source, schema, and table.\nIf table was moved/renamed, provide the new details here.\n\n**Optional**. May be omitted or set to null.\nIf not provided, no updates will be made to existing data location."}]},"jobSettings":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/JobSettingsPatch"},{"description":"Job-level execution settings. \n\n**Optional**. May be omitted or set to null.\nIf not provided, no updates will be made to existing job settings."}]},"monitoringSettings":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/JobMonitoringSettingsPatch"},{"description":"Monitoring configuration for the job, excluding custom rules. Currently, only adaptive rules are supported. \nThis structure is designed for future extensibility to include additional monitor types.  \n\n**Optional**. May be omitted or set to null.\nIf not provided, no updates will be made to existing monitoring settings."}]},"notifications":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/JobNotifications"},{"description":"Notification configuration for a job. Controls which events trigger a notification, who receives it, \nand which message is sent.\n\n**Optional**. May be omitted or set to null.\nIf not provided, no updates will be made to existing notifications."}]},"schedulingSettings":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/SchedulingSettings"},{"description":"Controls when a scheduled job runs and how the runDate is adjusted by schedule-specific offsets. \nThe scheduler runs at the given UTC time and applies the selected mode (HOURLY/DAILY/MONTHLY).\n\n**Optional**. May be omitted or set to null.\nIf not provided, no updates will be made to existing scheduling settings."}]}}},"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>\"`"},"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."},"DataLocation":{"description":"Identifies where the job reads data from. Combines the platform connection and the specific catalog/schema/table location inside that connection.\n","required":["edgeSiteName","edgeConnectionName","dataSourceName","schemaName","tableName"],"type":"object","properties":{"edgeSiteName":{"description":"Edge site name","type":"string"},"edgeConnectionName":{"type":"string","description":"Edge connection name"},"dataSourceName":{"type":"string","description":"Data source (database/catalog) name"},"databaseProductName":{"$ref":"#/components/schemas/DatabaseProduct"},"schemaName":{"description":"Schema name","type":"string"},"tableName":{"description":"Table name","type":"string"}}},"DatabaseProduct":{"type":"string","readOnly":true,"description":"The database vendor associated with the connection.\n\nCurrent possible values include:\n    * `ATHENA`\n    * `BIGQUERY`\n    * `DATABRICKS`\n    * `DB2`\n    * `MYSQL`\n    * `POSTGRES`\n    * `REDSHIFT`\n    * `SAP`\n    * `SNOWFLAKE`\n    * `SQLSERVER`\n    * `TRINO`\n\n  Additional values will be introduced in the future."},"JobSettingsPatch":{"type":"object","nullable":true,"properties":{"dateFormat":{"$ref":"#/components/schemas/DateFormatPatch"},"pushdownSettings":{"$ref":"#/components/schemas/PushdownSettingsPatch"},"pullupSettings":{"$ref":"#/components/schemas/PullupSettingsPatch"}}},"DateFormatPatch":{"type":"string","nullable":true,"description":"Date format used for `runDate` / `runDateEnd`.\nSupported values:\n  - DATE -> yyyy-MM-dd \n  - TIMESTAMP -> RFC 3339 timestamp, example - 2025-10-23T13:50:02Z","enum":["DATE","TIMESTAMP"]},"PushdownSettingsPatch":{"type":"object","nullable":true,"description":"Settings for pushdown execution. Controls concurrency used by the source system connection.\nProvide this object only when the job's jobType is PUSHDOWN. Omit or set to null for non-pushdown jobs.","properties":{"connections":{"type":"integer","description":"Number of concurrent source connections\n","minimum":1,"nullable":true},"threads":{"type":"integer","description":"Worker threads per connection for pushdown queries\n","minimum":1,"nullable":true}}},"PullupSettingsPatch":{"type":"object","nullable":true,"description":"Settings for pullup execution. Controls partitioning and Spark sizing.\nProvide this object only when the job's jobType is PULLUP. Omit or set to null for non-pullup jobs.\n\nPullup functionality is available only when the Pullup preview feature is enabled.","properties":{"loadOptions":{"$ref":"#/components/schemas/LoadOptionsPatch"},"sparkJobSizing":{"$ref":"#/components/schemas/SparkJobSizingPatch"},"sparkSqlProperties":{"type":"object","nullable":true,"description":"Arbitrary Spark SQL session properties as key/value pairs\n","additionalProperties":{"type":"string"}}}},"LoadOptionsPatch":{"type":"object","nullable":true,"description":"Data loading options applied when reading from the source\n","properties":{"numPartitions":{"type":"integer","nullable":true,"minimum":0,"description":"Number of Spark input partitions\n"},"parallelJdbcOptions":{"$ref":"#/components/schemas/ParallelJdbcOptions"}}},"ParallelJdbcOptions":{"nullable":true,"description":"Options for parallel JDBC partitioning. Choose a `mode`, which determines which\nfields are required: \n - `AUTO` – system selects column & partitions \n - `AUTO_COLUMN` – system selects column; you provide `partitionNumber`\n - `MANUAL` – you provide `partitionColumn` and `partitionNumber`","oneOf":[{"$ref":"#/components/schemas/ParallelJdbcOptionsAuto"},{"$ref":"#/components/schemas/ParallelJdbcOptionsAutoColumn"},{"$ref":"#/components/schemas/ParallelJdbcOptionsManual"}],"discriminator":{"propertyName":"mode","mapping":{"AUTO":"#/components/schemas/ParallelJdbcOptionsAuto","AUTO_COLUMN":"#/components/schemas/ParallelJdbcOptionsAutoColumn","MANUAL":"#/components/schemas/ParallelJdbcOptionsManual"}},"default":null},"ParallelJdbcOptionsAuto":{"type":"object","description":"Automatic column & partition selection.","properties":{"mode":{"type":"string","description":"Partitioning mode.\n\nFor this schema, the value MUST be `AUTO`."}},"required":["mode"],"additionalProperties":false},"ParallelJdbcOptionsAutoColumn":{"type":"object","description":"Automatic column selection; you specify the number of partitions.","properties":{"mode":{"type":"string","description":"Partitioning mode.\n\nFor this schema, the value MUST be `AUTO_COLUMN`."},"partitionNumber":{"type":"integer","minimum":0,"description":"Number of partitions to use."}},"required":["mode","partitionNumber"],"additionalProperties":false},"ParallelJdbcOptionsManual":{"type":"object","description":"You specify both the partition column and number of partitions.","properties":{"mode":{"type":"string","description":"Partitioning mode.\n\nFor this schema, the value MUST be `MANUAL`."},"partitionColumn":{"type":"string","description":"Numeric/integer column to partition on."},"partitionNumber":{"type":"integer","minimum":1,"description":"Number of partitions to use."}},"required":["mode","partitionColumn","partitionNumber"],"additionalProperties":false},"SparkJobSizingPatch":{"type":"object","nullable":true,"description":"Optional manual sizing for Spark resources.\n\nIf this object is **omitted or null**, the platform automatically selects\nSpark resources based on the source query.","properties":{"numExecutors":{"type":"integer","minimum":1,"description":"Number of executors to use (upper bound)."},"driverCores":{"type":"integer","minimum":1,"description":"Number of driver CPU cores."},"numExecutorCores":{"type":"integer","minimum":1,"description":"Number of CPU cores per executor."},"executorMemoryGb":{"allOf":[{"$ref":"#/components/schemas/SparkMemoryGB"},{"description":"Maximum memory per executor in GB."}]},"driverMemoryGb":{"allOf":[{"$ref":"#/components/schemas/SparkMemoryGB"},{"description":"Driver memory in GB."}]},"memoryOverheadGb":{"allOf":[{"$ref":"#/components/schemas/SparkMemoryGB"},{"description":"Additional off-heap memory per executor in GB.","nullable":true}]}},"additionalProperties":false},"SparkMemoryGB":{"type":"integer","description":"Memory amount in gigabytes. The unit is in **GB**, fractional values are not supported\n"},"JobMonitoringSettingsPatch":{"type":"object","description":"Monitoring configuration for the job.  This structure is designed for future extensibility to include additional monitor types.","properties":{"adaptiveMonitors":{"$ref":"#/components/schemas/AdaptiveMonitorsPatch"},"customMonitors":{"type":"array","maxItems":65535,"items":{"$ref":"#/components/schemas/CustomMonitorsPatch"}}}},"AdaptiveMonitorsPatch":{"type":"object","description":"Feature toggles for adaptive monitors computed during profiling. All data quality jobs always run profiling with data type detection and schema-change checks enabled.\n","properties":{"descriptiveStatistics":{"type":"boolean","nullable":true,"description":"Show descriptive statistics in profiling results (e.g., count, min, mean, max). Note: may expose sensitive values such as minimum/maximum. If disabled, all column values are masked in the profiling results.\n"},"emptyFields":{"type":"boolean","nullable":true,"description":"Detect changes in the number of empty values in numeric columns.\n"},"executionTime":{"type":"boolean","nullable":true,"description":"Track changes in total execution time of the data job.\n"},"max":{"type":"boolean","nullable":true,"description":"Detect changes in the highest value across numeric columns.\n"},"mean":{"type":"boolean","nullable":true,"description":"Detect changes in the average (mean) value across numeric columns.\n"},"min":{"type":"boolean","nullable":true,"description":"Detect changes in the lowest value across numeric columns.\n"},"nullValues":{"type":"boolean","nullable":true,"description":"Detect changes in the number of NULL values across all columns.\n"},"rowCount":{"type":"boolean","nullable":true,"description":"Track changes in the total number of rows.\n"},"uniqueness":{"type":"boolean","nullable":true,"description":"Track changes in the number of distinct values across all columns.\n"},"settings":{"$ref":"#/components/schemas/AdaptiveMonitorSettingsPatch"}}},"AdaptiveMonitorSettingsPatch":{"type":"object","description":"Optional learning/tuning parameters applied to the above monitors.\n","properties":{"dataLookBack":{"type":"integer","nullable":true,"minimum":0,"description":"Number of historical runs to consider when detecting changes (0 = no look back).\n"},"learningPhase":{"type":"integer","minimum":0,"nullable":true,"description":"Number of initial runs used to learn a baseline before signaling changes (0 = no learning phase).\n"}}},"CustomMonitorsPatch":{"type":"object","description":"An update to a user-defined custom data quality monitor.","properties":{"monitorName":{"type":"string","description":"Unique monitor name.","pattern":"^[a-zA-Z0-9_-]+$","minLength":1,"maxLength":255},"customQuery":{"type":"string","description":"The SQL query."},"filterQuery":{"type":"string","description":"Optional SQL filter clause applied to the monitor."},"primaryColumn":{"type":"string","description":"Column the monitor is scoped to."},"description":{"type":"string","description":"Description of the monitor.","maxLength":256},"dimensions":{"type":"array","maxItems":50,"description":"DQ dimensions this monitor measures.","items":{"type":"string"}},"notifications":{"type":"array","maxItems":500,"description":"Alert notification configurations.","items":{"$ref":"#/components/schemas/CustomMonitorNotification"}},"tolerance":{"type":"integer","description":"Number as a percentage of tolerated failures before flagging the monitor as breaking.","minimum":0,"maximum":100},"isActive":{"type":"boolean","description":"Whether the monitor is active."},"isSuppressed":{"type":"boolean","description":"Whether the monitor is suppressed."},"opIndicator":{"type":"string","enum":["CREATE","UPDATE","DELETE","NOOP"],"description":"Operation to be performed for this monitor"}}},"CustomMonitorNotification":{"type":"object","description":"Alert notification configuration attached to a custom monitor.","required":["notificationType","enabled","message","name"],"properties":{"notificationType":{"$ref":"#/components/schemas/CustomMonitorNotificationType"},"enabled":{"type":"boolean","description":"Whether this notification is active."},"message":{"type":"string","description":"Custom notification message.","maxLength":256},"channels":{"type":"array","maxItems":500,"description":"Channels to send out notifications.","items":{"$ref":"#/components/schemas/NotificationChannel"}},"name":{"type":"string","description":"Unique identifier for this notification entry."}}},"CustomMonitorNotificationType":{"type":"string","description":"Determines when a notification is triggered.\nThe current available values: * 'PASSING'   — monitor transitions to a passing state * 'BREAKING'  — monitor fails * 'EXCEPTION' — monitor encounters an execution error\n"},"NotificationChannel":{"type":"object","description":"Notification delivery channel and its destination/parameters.\n\nCurrent supported channel type:\n  * `EMAIL` – send notifications via email to the given recipients.\n\nAdditional channel types (e.g., `SLACK`) may be introduced in the future.","properties":{"channel":{"type":"string","description":"Delivery channel type.\n\nCurrent value:\n  * `EMAIL`\n\nAdditional values MAY be added in future versions."},"recipients":{"type":"array","minItems":1,"description":"Platform usernames to receive email notifications when `channel = EMAIL`\n(e.g., `jsmith`, `adoe`).","items":{"type":"string"}}},"additionalProperties":true},"JobNotifications":{"type":"object","description":"Controls which events trigger a notification, which channels deliver them, and what message is sent. This schema is **channel-extensible**: it starts with EMAIL and will be updated in future versions to support additional channels (e.g., Slack) without breaking existing clients.\n","properties":{"notificationOptions":{"type":"array","description":"Per-event settings. Add one item per event to monitor.","items":{"$ref":"#/components/schemas/NotificationOption"}},"globalMessage":{"type":"string","description":"Default message template when `useIndividualMessages` is false."},"useIndividualMessages":{"type":"boolean","description":"If true, use each option's `message`; otherwise use `globalMessage`."},"channels":{"type":"array","minItems":1,"description":"Delivery channels and their destinations","items":{"$ref":"#/components/schemas/NotificationChannel"}}},"required":["notificationOptions","channels"]},"NotificationOption":{"type":"object","description":"Configuration for a single notification event.\n","required":["notificationType","enabled"],"properties":{"notificationType":{"$ref":"#/components/schemas/NotificationType"},"enabled":{"type":"boolean","description":"Whether this notification is active."},"message":{"type":"string","description":"Custom message for this notification. Used when `useIndividualMessages` is `true`. If omitted or blank, the service falls back to `globalMessage`, if that is also blank, a system default template is used.\n"},"quantity":{"type":"integer","minimum":0,"nullable":true,"description":"Threshold used **only** for specific types:  \n  - `ROWS_LESS_THAN_LIMIT` – minimum expected row count.  \n  - `RUNS_WITHOUT_DATA` – number of consecutive empty runs (N).  \n  - `DAYS_WITHOUT_DATA` – number of days with no data (N).  \n  - `SCORE_LESS_THAN_LIMIT` – minimum acceptable score.  \n  - `RUN_TIME_MORE_THEN_LIMIT` – maximum allowed runtime in minutes.  \nIgnored for other types."}}},"NotificationType":{"type":"string","description":"The event that triggers this notification.\n\nCurrent possible values include:\n  * `JOB_FAILED`            – sent when a job run fails.\n  * `JOB_COMPLETED`         – sent when a job run finishes successfully.\n  * `ROWS_LESS_THAN_LIMIT`  – sent when produced row count is below a limit.\n  * `RUNS_WITHOUT_DATA`     – sent after N consecutive runs produced no data.\n  * `DAYS_WITHOUT_DATA`     – sent when no data was produced for N days.\n  * `SCORE_LESS_THAN_LIMIT` – sent when quality score is below a limit.\n  * `RUN_TIME_MORE_THEN_LIMIT` – sent when runtime exceeds a limit (in minutes).\n\nAdditional notification types may be introduced in the future."},"SchedulingSettings":{"nullable":true,"description":"Controls when a scheduled job runs and how `runDate` is adjusted. Exactly **one** schedule mode is allowed. **Optional** If omitted or null, the job will not be scheduled.\n","oneOf":[{"$ref":"#/components/schemas/SchedulingHourly"},{"$ref":"#/components/schemas/SchedulingDaily"},{"$ref":"#/components/schemas/SchedulingMonthly"}],"discriminator":{"propertyName":"schedulerMode","mapping":{"HOURLY":"#/components/schemas/SchedulingHourly","DAILY":"#/components/schemas/SchedulingDaily","MONTHLY":"#/components/schemas/SchedulingMonthly"}}},"SchedulingHourly":{"allOf":[{"$ref":"#/components/schemas/SchedulingBase"},{"type":"object","required":["hourly","schedulerMode"],"description":"Hourly schedule configuration. If scheduleRunTime is set \"14:30:00\", the job runs at 14:30, 15:30, 16:30, etc.","properties":{"schedulerMode":{"type":"string","description":"Schedule type.\n\nFor this schema, the value MUST be `HOURLY`."},"hourly":{"type":"object","description":"Hourly schedule rules.","required":["hourlyOffset"],"properties":{"hourlyOffset":{"type":"string","description":"Run-date offset in hours relative to the scheduled time.\n\nCurrent possible values include:\n  * `SCHEDULED` – use the scheduled date/time.\n  * `ONE_HOUR` – run date is 1 hour before the scheduled time.\n  * `TWO_HOURS` – run date is 2 hours before the scheduled time.\n\nAdditional values MAY be added in future versions."}}}}}]},"SchedulingBase":{"type":"object","required":["isActive","scheduledRunTime","schedulerMode"],"properties":{"isActive":{"type":"boolean","description":"Enable/disable the schedule (disabled schedules do not trigger runs)."},"scheduledRunTime":{"type":"string","description":"Time of day in **UTC**, format `HH:mm:ss`.  (24 hours) Example: `14:10:00` means the job starts at 14:10:00 UTC.\n"},"schedulerMode":{"type":"string","description":"Schedule type.\n\nCurrent possible values:\n  * `HOURLY`\n  * `DAILY`\n  * `MONTHLY`\n\nAdditional modes MAY be added in future versions."}}},"SchedulingDaily":{"allOf":[{"$ref":"#/components/schemas/SchedulingBase"},{"type":"object","required":["daily","schedulerMode"],"properties":{"schedulerMode":{"type":"string","description":"Schedule type.\n\nFor this schema, the value MUST be `DAILY`."},"daily":{"type":"object","description":"Daily schedule rules.","required":["dailyOffset","daysOfWeek"],"properties":{"dailyOffset":{"type":"string","description":"Run-date offset in days relative to the scheduled day.\n\nCurrent possible values include:\n  * `SCHEDULED`\n  * `ONE_DAY`\n  * `TWO_DAYS`\n  * `THREE_DAYS`\n  * `FOUR_DAYS`\n  * `FIVE_DAYS`\n  * `SIX_DAYS`\n  * `SEVEN_DAYS`\n\nAdditional values MAY be added in future versions."},"daysOfWeek":{"type":"array","minItems":1,"items":{"type":"string","enum":["MONDAY","TUESDAY","WEDNESDAY","THURSDAY","FRIDAY","SATURDAY","SUNDAY"]},"description":"Days of week to run."}}}}}]},"SchedulingMonthly":{"allOf":[{"$ref":"#/components/schemas/SchedulingBase"},{"type":"object","required":["monthly","schedulerMode"],"properties":{"schedulerMode":{"type":"string","description":"Schedule type.\n\nFor this schema, the value MUST be `MONTHLY`."},"monthly":{"type":"object","description":"Monthly schedule rules.","required":["monthlyRepeat","monthlyOffset"],"properties":{"monthlyRepeat":{"type":"string","description":"Which day of the month to run the job on.\n\nCurrent possible values:\n  * `FIRST` – first day of the month\n  * `LAST`  – last day of the month\n  * `DAY`   – specific calendar day (requires `dayNumber` in 1–31 range)\n\nAdditional values MAY be added in future versions."},"monthlyOffset":{"type":"string","description":"Run-date offset applied to the scheduled monthly day.\n\nCurrent possible values include:\n  * `SCHEDULED`              - use the scheduled date\n  * `FIRST_OF_CURRENT_MONTH` - first day of the current month\n  * `LAST_OF_CURRENT_MONTH`  - last day of the current month\n  * `FIRST_OF_PRIOR_MONTH`   - first day of the prior month\n  * `LAST_OF_PRIOR_MONTH`    - last day of the prior month\n\nAdditional values may be added in future versions."},"dayNumber":{"type":"integer","minimum":1,"maximum":31,"nullable":true,"description":"Required when `monthlyRepeat = DAY`."}}}}}]},"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}":{"patch":{"tags":["Jobs"],"summary":"Update job","description":"Update existing job definition.\nInclude only the fields you wish to update, omitted fields will remain unchanged.\n\n**Permissions**\n- **Required:** `DATA_QUALITY` and `DATA_QUALITY_JOB_EDIT`\n- **Global bypass:**\n  - `DATA_QUALITY` and `RESOURCE_MANAGE_ALL`","operationId":"updateJob","parameters":[{"$ref":"#/components/parameters/JobNamePath"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobDefinitionUpdateRequest"}}}},"responses":{"200":{"description":"OK. Job updated successfully. No response body."},"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"}}}}}}
```
