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

# exactDataWorkspaceFormControl

   
                                      
                                                                                        
                                                   
                  
           
          
   

This reference describes the full structure of `exactDataWorkspaceFormControl`. 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. |
| `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. |
| `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. |
| `binding.[kind=field].kind` | `"field"` | **Required.** Selects the variant and the properties admitted in this branch. |
| `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. |
| `binding.[kind=title].kind` | `"title"` | **Required.** Selects the variant and the properties admitted in this branch. |
| `binding.[kind=content].kind` | `"content"` | **Required.** Selects the variant and the properties admitted in this branch. |
| `binding.[kind=anchor].kind` | `"anchor"` | **Required.** Selects the variant and the properties admitted in this branch. |
| `binding.[kind=anchor].prototypeId` | `string; min length 1; max length 4000` | **Required.** Stable Anchor prototype identity used by its instances. |
| `binding.[kind=link].kind` | `"link"` | **Required.** Selects the variant and the properties admitted in this branch. |
| `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. |
| `binding.[kind=link].direction` | `"incoming" \| "outgoing"` | **Required.** Traversal or presentation direction using this contract’s closed values. |
| `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. |
| `binding.[kind=action-input].kind` | `"action-input"` | **Required.** Selects the variant and the properties admitted in this branch. |
| `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. |
| `required` | `true \| false` | **Required.** Whether a value is required by this declaration. |
| `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. |
| `options` | `Array<string; min length 1; max length 4000>; max length 100` | **Required.** Suggested and admitted values for a declared choice. |
| `selector` | `closed object; optional` | Optional. Defines selector for this object. Observe the type, variants and bounds in the Options column. |
| `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. |
| `selector.multiple` | `true \| false` | **Required.** Defines multiple for this object. Observe the type, variants and bounds in the Options column. |
| `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. |
| `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. |
| `contract` | `"WorkspaceFormControl@2"` | **Required.** Exact discriminant of this contract variant. Match the literal value shown. |
| `repeatable` | `true \| false` | **Required.** Whether multiple values or instances are admitted. |

## 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": "name",
  "label": "Nom du travail",
  "input": "text",
  "binding": {
    "kind": "title"
  },
  "required": true,
  "ruleKeys": [],
  "options": [],
  "contract": "WorkspaceFormControl@2",
  "repeatable": false
}
```

## 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 `exactDataWorkspaceFormControl`. [Properties and accepted values](https://developers.dagio.ai/reference/exact-data-workspace-form-control/).

```json
{
  "key": "name",
  "label": "Nom du travail",
  "input": "text",
  "binding": {
    "kind": "title"
  },
  "required": true,
  "ruleKeys": [],
  "options": [],
  "contract": "WorkspaceFormControl@2",
  "repeatable": false
}
```

### 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 -->
