# Job configuration reference

> Source: https://docs.clonepartner.com/reference/job-config/

`job_config` is a runtime-editable schema declared by a job template and copied to each created job. Every run snapshots the current values and exposes them to task JSONata as `job_config.<key>`.

Only `form` and `field_mapping` entries are supported.

## Key rules

```yaml
job_config:
  migration_options:
    type: form
    title: Migration options
    fields: []
```

The map key is both the stored configuration key and JSONata key. It must contain letters, numbers, underscores, or hyphens. Do not add `id` or `config_key` inside the entry.

## `form`

```yaml
job_config:
  migration_options:
    type: form
    title: Migration options
    description: Applied to the next run
    fields:
      - key: stage
        label: Stage
        type: select
        required: true
        default: validate
        options:
          - { label: Validate, value: validate }
          - { label: Migrate, value: migrate }
      - key: notify
        label: Send notification
        type: boolean
        default: false
```

Form field types:

- `text`;
- `number`;
- `boolean`;
- `select`;
- `multi_select`.

Fields can use `required`, `default`, `format`, `depends_on`, and `hide_if_expr`. Text formats include validated email and URL values.

Select fields use inline `options` or a read-only `options_source`.

The stored value is one object keyed by field key.

## Option sources

```yaml
options_source:
  connector: source
  method: proxy_list
  args:
    resource: pipelines
label_expr: $.label
value_expr: $.id
search:
  param: q
```

Option sources support:

- `label_expr`, `value_expr`, and `subtext_expr`;
- a server search argument through `search.param`;
- `search.on_frontend: true` only for a bounded one-page result;
- `transform_expr`;
- `depends_on`.

Options are returned one page at a time with `next_cursor`.

## `field_mapping`

```yaml
job_config:
  contact_fields:
    type: field_mapping
    title: Contact fields
    allow_transform: true
    default:
      - { source_field: email, target_field: email }
    source:
      options_source:
        connector: source
        method: list_fields
      label_expr: $.label
      value_expr: $.name
    target:
      options_source:
        connector: destination
        method: list_fields
      label_expr: $.label
      value_expr: $.name
```

The stored value is an array of:

```json
{
  "source_field": "email",
  "target_field": "email",
  "transform": null
}
```

`allow_transform: true` enables operator-authored JSONata per row. Use it only for trusted authors. `validation_expr` can enforce mapping-level rules.

## API

- `GET /api/jobs/{id}/config` returns schema and current values.
- `PUT /api/jobs/{id}/config/{key}` saves `{ "value": ... }`.
- `PUT /api/jobs/{id}/config` replaces the complete config object for an authorized admin.
- `POST /api/jobs/{id}/config/{key}/options` resolves pageable options.

Read the schema before writing. Values are validated on save.

## Snapshot behavior

Saving job configuration affects future runs. Active and historical runs retain their own snapshot.

See [Configure a job between runs](/guides/job-configuration) and [Dashboard input widgets](/reference/dashboards).
