---
title: "workspaceRecordPresentation"
url: https://developers.dagio.ai/reference/workspace-record-presentation/
---

# workspaceRecordPresentation

   
                                    
                                                                                      
                                               
                  
           
          
   

This reference describes the full structure of `workspaceRecordPresentation`. 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 |
| --- | --- | --- |
| `contract` | `"WorkspaceRecordPresentation@1"` | **Required.** Exact discriminant of this contract variant. Match the literal value shown. |
| `recordProfiles` | `Array<closed object>; max length 100` | **Required.** Record profiles defining identity, cards, detail and settings. |
| `recordProfiles[].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. |
| `recordProfiles[].definitionPaths` | `Array<string; min length 1; max length 600; /^workspace\/[a-z0-9-]+(?:\/surface\/[a-z0-9-]+)+$/u>; min length 1; max length 100` | **Required.** Defines definition Paths for this object. Observe the type, variants and bounds in the Options column. |
| `recordProfiles[].editActionKey` | `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. |
| `recordProfiles[].identity` | `closed object` | **Required.** Sources for information identifying the record to users. |
| `recordProfiles[].identity.title` | `closed object OR closed object OR closed object` | **Required.** Title of the object or section in the interface. |
| `recordProfiles[].identity.title.[kind=native].kind` | `"native"` | **Required.** Selects the variant and the properties admitted in this branch. |
| `recordProfiles[].identity.title.[kind=native].property` | `"title" \| "description" \| "createdAt" \| "updatedAt"` | **Required.** Recognized native property name; this selector does not allow arbitrary access. |
| `recordProfiles[].identity.title.[kind=field].kind` | `"field"` | **Required.** Selects the variant and the properties admitted in this branch. |
| `recordProfiles[].identity.title.[kind=field].fieldPath` | `string; min length 8; max length 127; /^fields\/[a-zA-Z][a-zA-Z0-9]*$/u` | **Required.** Semantic Field selector, using the fields/ prefix. |
| `recordProfiles[].identity.title.[kind=calculation].kind` | `"calculation"` | **Required.** Selects the variant and the properties admitted in this branch. |
| `recordProfiles[].identity.title.[kind=calculation].calculationKey` | `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. |
| `recordProfiles[].identity.avatar` | `closed object` | **Required.** Visual identity presentation under the admitted variant. |
| `recordProfiles[].identity.avatar.kind` | `"initials"` | **Required.** Selects the variant and the properties admitted in this branch. |
| `recordProfiles[].identity.avatar.maximumLetters` | `integer; ≥ 1; ≤ 4` | **Required.** Cardinality or budget bound for the named resource. Exceeding the bound is refused; null denotes no bound only where admitted by the schema. |
| `recordProfiles[].identity.subtitle` | `closed object OR closed object OR closed object; null` | **Required.** Subtitle source or explicit absence where null is admitted. |
| `recordProfiles[].identity.subtitle.[kind=native].kind` | `"native"` | **Required.** Selects the variant and the properties admitted in this branch. |
| `recordProfiles[].identity.subtitle.[kind=native].property` | `"title" \| "description" \| "createdAt" \| "updatedAt"` | **Required.** Recognized native property name; this selector does not allow arbitrary access. |
| `recordProfiles[].identity.subtitle.[kind=field].kind` | `"field"` | **Required.** Selects the variant and the properties admitted in this branch. |
| `recordProfiles[].identity.subtitle.[kind=field].fieldPath` | `string; min length 8; max length 127; /^fields\/[a-zA-Z][a-zA-Z0-9]*$/u` | **Required.** Semantic Field selector, using the fields/ prefix. |
| `recordProfiles[].identity.subtitle.[kind=calculation].kind` | `"calculation"` | **Required.** Selects the variant and the properties admitted in this branch. |
| `recordProfiles[].identity.subtitle.[kind=calculation].calculationKey` | `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. |
| `recordProfiles[].valueLabels` | `Array<closed object>; max length 100` | **Required.** Mappings from stable values to user-facing labels. |
| `recordProfiles[].valueLabels[].fieldPath` | `string; min length 8; max length 127; /^fields\/[a-zA-Z][a-zA-Z0-9]*$/u` | **Required.** Semantic Field selector, using the fields/ prefix. |
| `recordProfiles[].valueLabels[].values` | `Array<closed object>; min length 1; max length 100` | **Required.** Set of admitted or compared values according to the declared operation. |
| `recordProfiles[].valueLabels[].values[].value` | `string; max length 4000 OR number OR true \| false` | **Required.** Effective value interpreted according to the enclosing type and discriminant. |
| `recordProfiles[].valueLabels[].values[].label` | `string; min length 1; max length 4000` | **Required.** Human-readable label displayed in the interface. |
| `recordProfiles[].card` | `closed object` | **Required.** Summary record presentation within a collection. |
| `recordProfiles[].card.summary` | `closed object OR closed object OR closed object; null` | **Required.** Defines summary for this object. Observe the type, variants and bounds in the Options column. |
| `recordProfiles[].card.summary.[kind=native].kind` | `"native"` | **Required.** Selects the variant and the properties admitted in this branch. |
| `recordProfiles[].card.summary.[kind=native].property` | `"title" \| "description" \| "createdAt" \| "updatedAt"` | **Required.** Recognized native property name; this selector does not allow arbitrary access. |
| `recordProfiles[].card.summary.[kind=field].kind` | `"field"` | **Required.** Selects the variant and the properties admitted in this branch. |
| `recordProfiles[].card.summary.[kind=field].fieldPath` | `string; min length 8; max length 127; /^fields\/[a-zA-Z][a-zA-Z0-9]*$/u` | **Required.** Semantic Field selector, using the fields/ prefix. |
| `recordProfiles[].card.summary.[kind=calculation].kind` | `"calculation"` | **Required.** Selects the variant and the properties admitted in this branch. |
| `recordProfiles[].card.summary.[kind=calculation].calculationKey` | `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. |
| `recordProfiles[].card.tags` | `closed object; null` | **Required.** Classification or display configuration for admitted tags. |
| `recordProfiles[].card.tags.namespace` | `"user"` | **Required.** Namespace determining value vocabulary and scope. |
| `recordProfiles[].card.tags.maximumVisible` | `integer; ≥ 0; ≤ 20` | **Required.** Maximum number of items in the bounded preview; the full collection remains accessible separately. |
| `recordProfiles[].card.metricKeys` | `Array<string; min length 1; max length 120; /^[a-z][a-z0-9-]*$/u>; max length 20` | **Required.** Stable key reference to the corresponding named declaration; the compiler checks existence and compatibility. |
| `recordProfiles[].card.openLabel` | `string; min length 1; max length 4000` | **Required.** Label opening the object’s detail. |
| `recordProfiles[].queryBindings` | `Array<closed object>; max length 100` | **Required.** Bindings from named Queries to parameter values supplied by context. |
| `recordProfiles[].queryBindings[].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. |
| `recordProfiles[].queryBindings[].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. |
| `recordProfiles[].queryBindings[].parameters` | `Record<string; min length 1; max length 120; /^[a-z][a-z0-9-]*$/u OR string; min length 1; max length 120; /^[a-zA-Z][a-zA-Z0-9]*$/u, closed object OR closed object OR closed object>; semantic validation` | **Required.** Named operation or Query parameters and their associated values. |
| `recordProfiles[].queryBindings[].parameters{key}.[kind=entity-id].kind` | `"entity-id"` | **Required.** Selects the variant and the properties admitted in this branch. |
| `recordProfiles[].queryBindings[].parameters{key}.[kind=entity-id].definitionPath` | `string; min length 1; max length 600; /^workspace\/[a-z0-9-]+(?:\/surface\/[a-z0-9-]+)*$/u` | **Required.** Exact path of a definition in the Model; this is not a record instance ID. |
| `recordProfiles[].queryBindings[].parameters{key}.[kind=field].kind` | `"field"` | **Required.** Selects the variant and the properties admitted in this branch. |
| `recordProfiles[].queryBindings[].parameters{key}.[kind=field].field` | `closed object` | **Required.** Defines field for this object. Observe the type, variants and bounds in the Options column. |
| `recordProfiles[].queryBindings[].parameters{key}.[kind=field].field.definitionPath` | `string; min length 1; max length 600; /^workspace\/[a-z0-9-]+(?:\/surface\/[a-z0-9-]+)*$/u` | **Required.** Exact path of a definition in the Model; this is not a record instance ID. |
| `recordProfiles[].queryBindings[].parameters{key}.[kind=field].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. |
| `recordProfiles[].queryBindings[].parameters{key}.[kind=literal].kind` | `"literal"` | **Required.** Selects the variant and the properties admitted in this branch. |
| `recordProfiles[].queryBindings[].parameters{key}.[kind=literal].value` | `string; max length 4000 OR number OR true \| false OR null` | **Required.** Effective value interpreted according to the enclosing type and discriminant. |
| `recordProfiles[].metrics` | `Array<closed object>; max length 20` | **Required.** Declared metrics based on a Query and canonical aggregate. |
| `recordProfiles[].metrics[].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. |
| `recordProfiles[].metrics[].queryBindingKey` | `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. |
| `recordProfiles[].metrics[].value` | `"aggregate"` | **Required.** Effective value interpreted according to the enclosing type and discriminant. |
| `recordProfiles[].metrics[].singularLabel` | `string; min length 1; max length 4000` | **Required.** Label used for a single result unit. |
| `recordProfiles[].metrics[].pluralLabel` | `string; min length 1; max length 4000` | **Required.** Label used for multiple result units. |
| `recordProfiles[].metrics[].navigation` | `closed object; null` | **Required.** Declared destinations in presentation order. |
| `recordProfiles[].metrics[].navigation.kind` | `"record-related-group"` | **Required.** Selects the variant and the properties admitted in this branch. |
| `recordProfiles[].metrics[].navigation.relatedGroupKey` | `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. |
| `recordProfiles[].detail` | `closed object` | **Required.** Sections, Actions, settings and relations of an open record. |
| `recordProfiles[].detail.primaryActionKey` | `string; min length 1; max length 120; /^[a-z][a-z0-9-]*$/u; null` | **Required.** Stable key reference to the corresponding named declaration; the compiler checks existence and compatibility. |
| `recordProfiles[].detail.primaryActionLabel` | `string; min length 1; max length 4000; null` | **Required.** Defines primary Action Label for this object. Observe the type, variants and bounds in the Options column. |
| `recordProfiles[].detail.creationActionKeys` | `Array<string; min length 1; max length 120; /^[a-z][a-z0-9-]*$/u>; max length 100` | **Required.** Stable key reference to the corresponding named declaration; the compiler checks existence and compatibility. |
| `recordProfiles[].detail.actionKeys` | `Array<string; min length 1; max length 120; /^[a-z][a-z0-9-]*$/u>; max length 100` | **Required.** Stable key reference to the corresponding named declaration; the compiler checks existence and compatibility. |
| `recordProfiles[].detail.sections` | `Array<closed object OR closed object OR closed object>; min length 1; max length 40` | **Required.** Declared sections in reading or rendering order. |
| `recordProfiles[].detail.sections[].[kind=fields].kind` | `"fields"` | **Required.** Selects the variant and the properties admitted in this branch. |
| `recordProfiles[].detail.sections[].[kind=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. |
| `recordProfiles[].detail.sections[].[kind=fields].label` | `string; min length 1; max length 4000` | **Required.** Human-readable label displayed in the interface. |
| `recordProfiles[].detail.sections[].[kind=fields].fieldPaths` | `Array<string; min length 8; max length 127; /^fields\/[a-zA-Z][a-zA-Z0-9]*$/u>; min length 1; max length 100` | **Required.** Defines field Paths for this object. Observe the type, variants and bounds in the Options column. |
| `recordProfiles[].detail.sections[].[kind=content].kind` | `"content"` | **Required.** Selects the variant and the properties admitted in this branch. |
| `recordProfiles[].detail.sections[].[kind=content].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. |
| `recordProfiles[].detail.sections[].[kind=content].label` | `string; min length 1; max length 4000` | **Required.** Human-readable label displayed in the interface. |
| `recordProfiles[].detail.sections[].[kind=query-view].kind` | `"query-view"` | **Required.** Selects the variant and the properties admitted in this branch. |
| `recordProfiles[].detail.sections[].[kind=query-view].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. |
| `recordProfiles[].detail.sections[].[kind=query-view].label` | `string; min length 1; max length 4000` | **Required.** Human-readable label displayed in the interface. |
| `recordProfiles[].detail.sections[].[kind=query-view].queryBindingKey` | `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. |
| `recordProfiles[].detail.sections[].[kind=query-view].viewKey` | `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. |
| `recordProfiles[].detail.settings` | `closed object` | **Required.** Fields presented in the record settings form. |
| `recordProfiles[].detail.settings.fieldPaths` | `Array<string; min length 8; max length 127; /^fields\/[a-zA-Z][a-zA-Z0-9]*$/u>; max length 100` | **Required.** Defines field Paths for this object. Observe the type, variants and bounds in the Options column. |
| `recordProfiles[].detail.tags` | `closed object; null` | **Required.** Classification or display configuration for admitted tags. |
| `recordProfiles[].detail.tags.namespace` | `"user"` | **Required.** Namespace determining value vocabulary and scope. |
| `recordProfiles[].detail.tags.maximumVisible` | `integer; ≥ 0; ≤ 20` | **Required.** Maximum number of items in the bounded preview; the full collection remains accessible separately. |
| `recordProfiles[].detail.relatedGroups` | `Array<closed object>; max length 40` | **Required.** Relation groups with a Query and bounded preview plus access to the full collection. |
| `recordProfiles[].detail.relatedGroups[].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. |
| `recordProfiles[].detail.relatedGroups[].label` | `string; min length 1; max length 4000` | **Required.** Human-readable label displayed in the interface. |
| `recordProfiles[].detail.relatedGroups[].queryBindingKey` | `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. |
| `recordProfiles[].detail.relatedGroups[].maximumVisible` | `integer; ≥ 1; ≤ 100` | **Required.** Maximum number of items in the bounded preview; the full collection remains accessible separately. |
| `recordProfiles[].detail.relatedGroups[].openAllLabel` | `string; min length 1; max length 4000` | **Required.** Label opening the full collection, such as View all. |
| `recordProfiles[].detail.relatedGroups[].rowIcon` | `closed object; null` | **Required.** Defines row Icon for this object. Observe the type, variants and bounds in the Options column. |
| `recordProfiles[].detail.relatedGroups[].rowIcon.catalog` | `Managed by Surface; supplied by the Model tools.` | **Required.** Defines catalog for this object. Observe the type, variants and bounds in the Options column. |
| `recordProfiles[].detail.relatedGroups[].rowIcon.revision` | `"0.468.0"` | **Required.** Defines revision for this object. Observe the type, variants and bounds in the Options column. |
| `recordProfiles[].detail.relatedGroups[].rowIcon.name` | `string; min length 1; max length 120; semantic validation` | **Required.** Readable name of the element in its presentation context. |
| `collectionBindings` | `Array<closed object>; max length 100` | **Required.** Defines collection Bindings for this object. Observe the type, variants and bounds in the Options column. |
| `collectionBindings[].destinationKey` | `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. |
| `collectionBindings[].viewKey` | `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. |
| `collectionBindings[].recordProfileKey` | `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. |
| `collectionBindings[].returnLabel` | `string; min length 1; max length 4000` | **Required.** Defines return Label for this object. Observe the type, variants and bounds in the Options column. |
| `tableViews` | `Array<closed object>; max length 100` | **Required.** Defines table Views for this object. Observe the type, variants and bounds in the Options column. |
| `tableViews[].viewKey` | `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. |
| `tableViews[].columns` | `Array<closed object>; min length 1; max length 40` | **Required.** Ordered columns and their authorized value sources. |
| `tableViews[].columns[].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. |
| `tableViews[].columns[].label` | `string; min length 1; max length 4000` | **Required.** Human-readable label displayed in the interface. |
| `tableViews[].columns[].source` | `closed object OR closed object OR closed object OR closed object OR closed object` | **Required.** Defines source for this object. Observe the type, variants and bounds in the Options column. |
| `tableViews[].columns[].source.[variant 1].[kind=native].kind` | `"native"` | **Required.** Selects the variant and the properties admitted in this branch. |
| `tableViews[].columns[].source.[variant 1].[kind=native].property` | `"title" \| "description" \| "createdAt" \| "updatedAt"` | **Required.** Recognized native property name; this selector does not allow arbitrary access. |
| `tableViews[].columns[].source.[variant 1].[kind=field].kind` | `"field"` | **Required.** Selects the variant and the properties admitted in this branch. |
| `tableViews[].columns[].source.[variant 1].[kind=field].fieldPath` | `string; min length 8; max length 127; /^fields\/[a-zA-Z][a-zA-Z0-9]*$/u` | **Required.** Semantic Field selector, using the fields/ prefix. |
| `tableViews[].columns[].source.[variant 1].[kind=calculation].kind` | `"calculation"` | **Required.** Selects the variant and the properties admitted in this branch. |
| `tableViews[].columns[].source.[variant 1].[kind=calculation].calculationKey` | `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. |
| `tableViews[].columns[].source.[kind=metric].kind` | `"metric"` | **Required.** Selects the variant and the properties admitted in this branch. |
| `tableViews[].columns[].source.[kind=metric].metricKey` | `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. |
| `tableViews[].columns[].source.[kind=related-records].kind` | `"related-records"` | **Required.** Selects the variant and the properties admitted in this branch. |
| `tableViews[].columns[].source.[kind=related-records].queryBindingKey` | `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. |
| `tableViews[].columns[].source.[kind=related-records].maximumVisible` | `integer; ≥ 1; ≤ 20` | **Required.** Maximum number of items in the bounded preview; the full collection remains accessible separately. |
| `tableViews[].openLabel` | `string; min length 1; max length 4000` | **Required.** Label opening the object’s detail. |
| `tableViews[].layout` | `closed object; optional` | Optional. Arrangement algorithm or structure configured by variant properties. |
| `tableViews[].layout.contract` | `"WorkspaceTableLayout@1"` | **Required.** Exact discriminant of this contract variant. Match the literal value shown. |
| `tableViews[].layout.columns` | `Array<closed object>; min length 1; max length 40` | **Required.** Ordered columns and their authorized value sources. |
| `tableViews[].layout.columns[].columnKey` | `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. |
| `tableViews[].layout.columns[].visible` | `true \| false` | **Required.** Defines visible for this object. Observe the type, variants and bounds in the Options column. |
| `tableViews[].layout.columns[].width` | `integer; ≥ 80; ≤ 1000; null` | **Required.** Element width in the enclosing contract’s unit. |
| `tableViews[].layout.columns[].frozen` | `true \| false` | **Required.** Keeps the column visible during horizontal scrolling. |
| `tableViews[].layout.columns[].format` | `closed object OR closed object OR closed object OR closed object OR closed object` | **Required.** Presentation format compatible with the value type. |
| `tableViews[].layout.columns[].format.[kind=text].kind` | `"text"` | **Required.** Selects the variant and the properties admitted in this branch. |
| `tableViews[].layout.columns[].format.[kind=number].kind` | `"number"` | **Required.** Selects the variant and the properties admitted in this branch. |
| `tableViews[].layout.columns[].format.[kind=number].maximumFractionDigits` | `integer; ≥ 0; ≤ 8` | **Required.** Cardinality or budget bound for the named resource. Exceeding the bound is refused; null denotes no bound only where admitted by the schema. |
| `tableViews[].layout.columns[].format.[kind=boolean].kind` | `"boolean"` | **Required.** Selects the variant and the properties admitted in this branch. |
| `tableViews[].layout.columns[].format.[kind=boolean].trueLabel` | `string; min length 1; max length 4000` | **Required.** Defines true Label for this object. Observe the type, variants and bounds in the Options column. |
| `tableViews[].layout.columns[].format.[kind=boolean].falseLabel` | `string; min length 1; max length 4000` | **Required.** Defines false Label for this object. Observe the type, variants and bounds in the Options column. |
| `tableViews[].layout.columns[].format.[variant 4].kind` | `"date" \| "datetime"` | **Required.** Selects the variant and the properties admitted in this branch. |
| `tableViews[].layout.columns[].format.[kind=badge].kind` | `"badge"` | **Required.** Selects the variant and the properties admitted in this branch. |
| `tableViews[].layout.columns[].headerFilterParameterKey` | `string; min length 1; max length 120; /^[a-zA-Z][a-zA-Z0-9-]*$/u; null` | **Required.** Stable key reference to the corresponding named declaration; the compiler checks existence and compatibility. |
| `tableViews[].layout.columnGroups` | `Array<closed object>; max length 20` | **Required.** Visual groups of declared columns. |
| `tableViews[].layout.columnGroups[].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. |
| `tableViews[].layout.columnGroups[].label` | `string; min length 1; max length 4000` | **Required.** Human-readable label displayed in the interface. |
| `tableViews[].layout.columnGroups[].columnKeys` | `Array<string; min length 1; max length 120; /^[a-z][a-z0-9-]*$/u>; min length 1; max length 40` | **Required.** Stable key reference to the corresponding named declaration; the compiler checks existence and compatibility. |
| `tableViews[].layout.grouping` | `closed object; null` | **Required.** Defines grouping for this object. Observe the type, variants and bounds in the Options column. |
| `tableViews[].layout.grouping.contract` | `"WorkspaceTableGrouping@1"` | **Required.** Exact discriminant of this contract variant. Match the literal value shown. |
| `tableViews[].layout.grouping.options` | `Array<closed object>; min length 1; max length 20` | **Required.** Suggested and admitted values for a declared choice. |
| `tableViews[].layout.grouping.options[].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. |
| `tableViews[].layout.grouping.options[].label` | `string; min length 1; max length 4000` | **Required.** Human-readable label displayed in the interface. |
| `tableViews[].layout.grouping.options[].columnKey` | `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. |
| `tableViews[].layout.grouping.initialOptionKey` | `string; min length 1; max length 120; /^[a-z][a-z0-9-]*$/u; null` | **Required.** Stable key reference to the corresponding named declaration; the compiler checks existence and compatibility. |
| `tableViews[].layout.grouping.maximumGroups` | `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. |

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

Surface manages this structure’s implementation parameters. Use Model tools to produce them; they are not values to enter in a record.

## Related references

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

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

## Applied examples : Visible notes, accessible settings

Place follow-up on the Surface and email in settings, while retaining the same Fields.

### Configuration

Value for property `collectionBindings`. [Properties and accepted values](https://developers.dagio.ai/reference/workspace-record-presentation/).

```json
[
  {
    "destinationKey": "characters",
    "viewKey": "characters-view",
    "recordProfileKey": "character",
    "returnLabel": "Tous les personnages"
  },
  {
    "destinationKey": "places",
    "viewKey": "record-place-roots-view",
    "recordProfileKey": "location",
    "returnLabel": "Tous les lieux"
  },
  {
    "destinationKey": "books",
    "viewKey": "manuscript-view",
    "recordProfileKey": "book",
    "returnLabel": "Tous les livres"
  },
  {
    "destinationKey": "manuscript",
    "viewKey": "chapters-view",
    "recordProfileKey": "chapter",
    "returnLabel": "Tout le manuscrit"
  },
  {
    "destinationKey": "knowledge",
    "viewKey": "knowledge-categories-view",
    "recordProfileKey": "knowledge-category",
    "returnLabel": "Toute la documentation"
  },
  {
    "destinationKey": "knowledge-entries",
    "viewKey": "knowledge-view",
    "recordProfileKey": "knowledge-entry",
    "returnLabel": "Notes et sources"
  }
]
```

### Variation and connection

Fragment placed in `presentation.recordProfiles[].detail.settings`. [Properties and accepted values](https://developers.dagio.ai/reference/workspace-record-profile/).

```json
{
  "fieldPaths": [
    "fields/email"
  ]
}
```

### 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. Client identity
2. Notes and follow-up
3. Settings
4. Linked quotes

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