> 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.0.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, excluding custom rules. Currently, only adaptive rules are supported. This structure is designed for future extensibility to include additional monitor types.","properties":{"adaptiveMonitors":{"$ref":"#/components/schemas/AdaptiveMonitors"}}},"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"}}},"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."},"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},"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.0.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, excluding custom rules. Currently, only adaptive rules are supported. This structure is designed for future extensibility to include additional monitor types.","properties":{"adaptiveMonitors":{"$ref":"#/components/schemas/AdaptiveMonitors"}}},"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"}}},"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."},"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},"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.0.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, excluding custom rules. Currently, only adaptive rules are supported. This structure is designed for future extensibility to include additional monitor types.","properties":{"adaptiveMonitors":{"$ref":"#/components/schemas/AdaptiveMonitors"}}},"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"}}},"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."},"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},"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.0.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.0.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, excluding custom rules. Currently, only adaptive rules are supported. This structure is designed for future extensibility to include additional monitor types.","properties":{"adaptiveMonitors":{"$ref":"#/components/schemas/AdaptiveMonitorsPatch"}}},"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"}}},"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."},"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},"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"}}}}}}
```


---

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

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

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://developer.collibra.com/api/references/data-quality/jobs.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

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