---
title: "exactDataWorkspaceForm"
url: https://developers.dagio.ai/reference/exact-data-workspace-form/
---

# exactDataWorkspaceForm

   
                               
                                                                                 
                                           
                  
           
          
   

This reference describes the full structure of `exactDataWorkspaceForm`. Paths include nested objects, list items and conditional branches. A branch selected by `kind`, `contract` or `mode` only admits its own properties.

## Structure and values

| Field | Options / expected values | Description |
| --- | --- | --- |
| `key` | `string; min length 1; max length 120; /^[a-z][a-z0-9-]*$/u` | **Required.** Stable semantic identifier used by references; changing it changes identity. |
| `label` | `string; min length 1; max length 4000` | **Required.** Human-readable label displayed in the interface. |
| `actionKey` | `string; min length 1; max length 120; /^[a-z][a-z0-9-]*$/u` | **Required.** Reference to a declared Action; rendering does not execute it. |
| `targetDefinitionPath` | `string; min length 1; max length 600; /^workspace\/[a-z0-9-]+(?:\/surface\/[a-z0-9-]+)*$/u` | **Required.** Exact path of the relevant definition type; each reference must exist in the Model and respect declared scope. |
| `mode` | `"create" \| "edit" \| "action"` | **Required.** Defines mode for this object. Observe the type, variants and bounds in the Options column. |
| `fields` | `Array<closed object; semantic validation>; max length 100` | **Required.** Typed value definitions or selections within the enclosing context. |
| `fields[].key` | `string; min length 1; max length 120; /^[a-z][a-z0-9-]*$/u` | **Required.** Stable semantic identifier used by references; changing it changes identity. |
| `fields[].label` | `string; min length 1; max length 4000` | **Required.** Human-readable label displayed in the interface. |
| `fields[].input` | `"text" \| "multiline" \| "number" \| "boolean" \| "date" \| "datetime" \| "choice" \| "surface-reference" \| "decimal" \| "integer" \| "real" \| "object" \| "list"` | **Required.** Control or input selected by the variant; must remain compatible with its binding. |
| `fields[].binding` | `closed object OR closed object OR closed object OR closed object OR closed object OR closed object` | **Required.** Declared value source or destination; does not contain arbitrary scripts. |
| `fields[].binding.[kind=field].kind` | `"field"` | **Required.** Selects the variant and the properties admitted in this branch. |
| `fields[].binding.[kind=field].fieldKey` | `string; min length 1; max length 120; /^[a-zA-Z][a-zA-Z0-9]*$/u` | **Required.** Key of a Field declared on the referenced Surface definition. |
| `fields[].binding.[kind=title].kind` | `"title"` | **Required.** Selects the variant and the properties admitted in this branch. |
| `fields[].binding.[kind=content].kind` | `"content"` | **Required.** Selects the variant and the properties admitted in this branch. |
| `fields[].binding.[kind=anchor].kind` | `"anchor"` | **Required.** Selects the variant and the properties admitted in this branch. |
| `fields[].binding.[kind=anchor].prototypeId` | `string; min length 1; max length 4000` | **Required.** Stable Anchor prototype identity used by its instances. |
| `fields[].binding.[kind=link].kind` | `"link"` | **Required.** Selects the variant and the properties admitted in this branch. |
| `fields[].binding.[kind=link].linkTypePath` | `string; min length 1; max length 4000` | **Required.** Defines link Type Path for this object. Observe the type, variants and bounds in the Options column. |
| `fields[].binding.[kind=link].direction` | `"incoming" \| "outgoing"` | **Required.** Traversal or presentation direction using this contract’s closed values. |
| `fields[].binding.[kind=link].appliesTo` | `"single-created" \| "each-created"; optional` | Optional. Defines applies To for this object. Observe the type, variants and bounds in the Options column. |
| `fields[].binding.[kind=action-input].kind` | `"action-input"` | **Required.** Selects the variant and the properties admitted in this branch. |
| `fields[].binding.[kind=action-input].inputKey` | `string; min length 1; max length 120; /^[a-z][a-z0-9-]*$/u` | **Required.** Stable key reference to the corresponding named declaration; the compiler checks existence and compatibility. |
| `fields[].required` | `true \| false` | **Required.** Whether a value is required by this declaration. |
| `fields[].ruleKeys` | `Array<string; min length 1; max length 120; /^[a-z][a-z0-9-]*$/u>; max length 30` | **Required.** Stable key reference to the corresponding named declaration; the compiler checks existence and compatibility. |
| `fields[].options` | `Array<string; min length 1; max length 4000>; max length 100` | **Required.** Suggested and admitted values for a declared choice. |
| `fields[].selector` | `closed object; optional` | Optional. Defines selector for this object. Observe the type, variants and bounds in the Options column. |
| `fields[].selector.queryKey` | `string; min length 1; max length 120; /^[a-z][a-z0-9-]*$/u` | **Required.** Reference to a declared Query; scope and authorization remain enforced by the data engine. |
| `fields[].selector.multiple` | `true \| false` | **Required.** Defines multiple for this object. Observe the type, variants and bounds in the Options column. |
| `fields[].selector.minimum` | `integer; ≥ 0; ≤ 100` | **Required.** Cardinality or budget bound for the named resource. Exceeding the bound is refused; null denotes no bound only where admitted by the schema. |
| `fields[].selector.maximum` | `integer; ≥ 1; ≤ 100` | **Required.** Cardinality or budget bound for the named resource. Exceeding the bound is refused; null denotes no bound only where admitted by the schema. |
| `fields[].contract` | `"WorkspaceFormControl@2"` | **Required.** Exact discriminant of this contract variant. Match the literal value shown. |
| `fields[].repeatable` | `true \| false` | **Required.** Whether multiple values or instances are admitted. |
| `ruleKeys` | `Array<string; min length 1; max length 120; /^[a-z][a-z0-9-]*$/u>; max length 30` | **Required.** Stable key reference to the corresponding named declaration; the compiler checks existence and compatibility. |
| `contract` | `"WorkspaceForm@2"` | **Required.** Exact discriminant of this contract variant. Match the literal value shown. |

## Reading the contract

A path ending in `[]` describes each list item; `{key}` describes each dictionary value. The `↻` marker refers to the same recursive expression. Closed objects reject additional properties. Semantic validation denotes an additional check: matching a type does not make a reference, permission or transition valid. References must resolve in the Model and the current user context.

An older variant cannot accept properties belonging to a newer variant. The compiler checks the version and consistency of the complete Model.

## Structural example

This fragment passes the schema for this section. Its business references must be defined in the enclosing Model.

```json
{
  "key": "revise-chapter-form",
  "label": "Réviser un chapitre",
  "actionKey": "revise-chapter",
  "targetDefinitionPath": "workspace/workshop/surface/work",
  "mode": "action",
  "fields": [
    {
      "key": "name",
      "label": "Nom du travail",
      "input": "text",
      "binding": {
        "kind": "title"
      },
      "required": true,
      "ruleKeys": [],
      "options": [],
      "contract": "WorkspaceFormControl@2",
      "repeatable": false
    },
    {
      "key": "target",
      "label": "Cible du travail",
      "input": "surface-reference",
      "binding": {
        "kind": "link",
        "linkTypePath": "application/contributes-to",
        "direction": "outgoing",
        "appliesTo": "single-created"
      },
      "required": true,
      "ruleKeys": [],
      "options": [],
      "selector": {
        "queryKey": "chapters",
        "multiple": false,
        "minimum": 1,
        "maximum": 1
      },
      "contract": "WorkspaceFormControl@2",
      "repeatable": false
    },
    {
      "key": "objective",
      "label": "Objectif",
      "input": "multiline",
      "binding": {
        "kind": "field",
        "fieldKey": "objective"
      },
      "required": true,
      "ruleKeys": [],
      "options": [],
      "contract": "WorkspaceFormControl@2",
      "repeatable": false
    },
    {
      "key": "expected-result",
      "label": "Résultat attendu",
      "input": "multiline",
      "binding": {
        "kind": "field",
        "fieldKey": "expectedResult"
      },
      "required": true,
      "ruleKeys": [],
      "options": [],
      "contract": "WorkspaceFormControl@2",
      "repeatable": false
    },
    {
      "key": "completion-criteria",
      "label": "Critères de réussite",
      "input": "multiline",
      "binding": {
        "kind": "field",
        "fieldKey": "completionCriteria"
      },
      "required": true,
      "ruleKeys": [],
      "options": [],
      "contract": "WorkspaceFormControl@2",
      "repeatable": false
    }
  ],
  "ruleKeys": [],
  "contract": "WorkspaceForm@2"
}
```

## Related references

[Complete Model index](https://developers.dagio.ai/reference/) · [Build a Model](https://developers.dagio.ai/models/)

<!-- surface-examples:start -->

## Applied examples : Short creation, complete record

Creation asks for Company and Status. Optional notes are expanded later on the Surface.

### Configuration

Contract object `exactDataWorkspaceForm`. [Properties and accepted values](https://developers.dagio.ai/reference/exact-data-workspace-form/).

```json
{
  "key": "revise-chapter-form",
  "label": "Réviser un chapitre",
  "actionKey": "revise-chapter",
  "targetDefinitionPath": "workspace/workshop/surface/work",
  "mode": "action",
  "fields": [
    {
      "key": "name",
      "label": "Nom du travail",
      "input": "text",
      "binding": {
        "kind": "title"
      },
      "required": true,
      "ruleKeys": [],
      "options": [],
      "contract": "WorkspaceFormControl@2",
      "repeatable": false
    },
    {
      "key": "target",
      "label": "Cible du travail",
      "input": "surface-reference",
      "binding": {
        "kind": "link",
        "linkTypePath": "application/contributes-to",
        "direction": "outgoing",
        "appliesTo": "single-created"
      },
      "required": true,
      "ruleKeys": [],
      "options": [],
      "selector": {
        "queryKey": "chapters",
        "multiple": false,
        "minimum": 1,
        "maximum": 1
      },
      "contract": "WorkspaceFormControl@2",
      "repeatable": false
    },
    {
      "key": "objective",
      "label": "Objectif",
      "input": "multiline",
      "binding": {
        "kind": "field",
        "fieldKey": "objective"
      },
      "required": true,
      "ruleKeys": [],
      "options": [],
      "contract": "WorkspaceFormControl@2",
      "repeatable": false
    },
    {
      "key": "expected-result",
      "label": "Résultat attendu",
      "input": "multiline",
      "binding": {
        "kind": "field",
        "fieldKey": "expectedResult"
      },
      "required": true,
      "ruleKeys": [],
      "options": [],
      "contract": "WorkspaceFormControl@2",
      "repeatable": false
    },
    {
      "key": "completion-criteria",
      "label": "Critères de réussite",
      "input": "multiline",
      "binding": {
        "kind": "field",
        "fieldKey": "completionCriteria"
      },
      "required": true,
      "ruleKeys": [],
      "options": [],
      "contract": "WorkspaceFormControl@2",
      "repeatable": false
    }
  ],
  "ruleKeys": [],
  "contract": "WorkspaceForm@2"
}
```

### Variation and connection

Fragment placed in `forms[].fields[]`. [Properties and accepted values](https://developers.dagio.ai/reference/workspace-model-foundation/).

```json
{
  "contract": "WorkspaceFormControl@2",
  "repeatable": false,
  "key": "notes",
  "label": "Notes",
  "input": "multiline",
  "binding": {
    "kind": "field",
    "fieldKey": "notes"
  },
  "required": false,
  "ruleKeys": [],
  "options": []
}
```

### UI layout example

The illustrative layout below places this configuration in the Clients/Quotes app. Insert each fragment at the stated location, with Field, Query and Action references matching the Model declarations.

1. Company *
2. Status *
3. Notes
4. Create client

<!-- surface-examples:end -->
