# Schemas — Stardraw Cloud API

187 schemas referenced by the operations. Index: https://stardraw.cloud/developer/api/index.md

Base URL: `https://stardraw.cloud/api/v1/`  
Authentication: `Authorization: Bearer <token>` on every request — see https://stardraw.cloud/developer/authentication  
Conventions (soft deletes, `version` on every PATCH, grid queries): https://stardraw.cloud/developer/conventions

---

## AccountMergeRequiredResponse

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `status` | string | no |  |
| `confirmationToken` | string | no |  |
| `existingEmail` | string | no |  |
| `incomingEmail` | string | no |  |
| `message` | string | no |  |

## AdminFile

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `url` | string | no |  |
| `name` | string | no |  |

## AiToolCallRequest

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `name` | string | yes |  |
| `input` | object | no |  |

## AiToolCallResponse

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `content` | string | yes |  |
| `isError` | boolean | no |  |

## AiToolsResponse

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `system` | string | yes |  |
| `tools` | `ChatTool`[] | yes |  |

## Anchor

0 = start, 1 = middle, 2 = end

## Application

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `customerId` | integer (int32) | no |  |
| `name` | string | yes |  |
| `description` | string | yes |  |
| `logo` | string | no |  |
| `icon` | string | no |  |
| `screenshots` | string[] | no |  |
| `helpUrl` | string | no |  |
| `unit` | string | yes |  |
| `precision` | integer (int32) | yes |  |
| `type` | `ApplicationType` | no |  |
| `expiry` | string (date-time) | no |  |
| `expired` | boolean | no |  |
| `assistantEnabled` | boolean | no |  |
| `assistantVoiceEnabled` | boolean | no |  |
| `projectSettings` | map of string → object | yes |  |
| `userSettings` | map of string → `Setting` | yes |  |
| `productCategories` | map of string → map of string → `ProductSetting` | yes |  |
| `cableCategories` | map of string → map of string → `ProductSetting` | no |  |
| `cableCategoryOrder` | string[] | no |  |
| `productCategoryOrder` | string[] | no |  |
| `productBrowserNodes` | string[] | yes |  |
| `productBrowserColumns` | string[] | no |  |
| `defaultProductSettings` | map of string → `ProductSetting` | yes |  |
| `settings` | map of string → `Setting` | yes |  |
| `viewSettings` | map of string → `Setting` | yes |  |
| `settingsVersion` | integer (int32) | no |  |
| `baseUrl` | string | no |  |
| `loginProviders` | `LoginProvider`[] | no |  |
| `uniqueNumber` | integer (int64) | no |  |
| `domains` | string[] | yes |  |
| `originalId` | string | no |  |
| `subscription` | `Subscription` | no |  |
| `theme` | `ApplicationTheme` | no |  |
| `shortcuts` | map of string → string | no |  |
| `applicationId` | string | yes | A 24-hex ObjectId |
| `id` | string | yes | A 24-hex ObjectId |
| `createdAt` | string (date-time) | no |  |
| `updatedAt` | string (date-time) | no |  |
| `deleted` | boolean | yes |  |
| `version` | integer (int64) | yes |  |

## ApplicationCable

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `name` | string | no |  |
| `categories` | map of string → map of string → `ProductSetting` | no |  |
| `startConnector` | `ConnectorSnapshot` | no |  |
| `endConnector` | `ConnectorSnapshot` | no |  |
| `length` | number | no |  |
| `signalId` | string | no | A 24-hex ObjectId |
| `category` | string | no |  |
| `stroke` | `Stroke` | no |  |
| `diameter` | number | no |  |
| `cores` | `CableCore`[] | no |  |
| `applicationId` | string | yes | A 24-hex ObjectId |
| `id` | string | yes | A 24-hex ObjectId |
| `createdAt` | string (date-time) | no |  |
| `updatedAt` | string (date-time) | no |  |
| `deleted` | boolean | yes |  |
| `version` | integer (int64) | yes |  |

## ApplicationCableGridResponse

One window of ApplicationCable rows plus the total match count.

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `rows` | `ApplicationCable`[] | yes | The requested window of rows (`_id` is returned as `id`, ObjectIds as their 24-hex strings, server-only fields omitted). When grouping (more rowGroupCols than groupKeys) rows are group summaries — `{ "0": <group value>, "childCount": <n>, …aggregates }` — not ApplicationCable documents. |
| `lastRow` | integer (int32) | yes | Total number of rows matching the filter — not just this window. |

## ApplicationCableSettings

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `labeling` | `CableLabeling` | no |  |
| `blockIncompatible` | boolean | no |  |
| `defaultConduitMaxFillPercent` | integer (int32) | no |  |
| `applicationId` | string | yes | A 24-hex ObjectId |
| `id` | string | yes | A 24-hex ObjectId |
| `createdAt` | string (date-time) | no |  |
| `updatedAt` | string (date-time) | no |  |
| `deleted` | boolean | yes |  |
| `version` | integer (int64) | yes |  |

## ApplicationConnector

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `name` | string | no |  |
| `gender` | boolean | no | true = female, false = male |
| `glyph` | string | no |  |
| `applicationId` | string | yes | A 24-hex ObjectId |
| `id` | string | yes | A 24-hex ObjectId |
| `createdAt` | string (date-time) | no |  |
| `updatedAt` | string (date-time) | no |  |
| `deleted` | boolean | yes |  |
| `version` | integer (int64) | yes |  |

## ApplicationConnectorGridResponse

One window of ApplicationConnector rows plus the total match count.

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `rows` | `ApplicationConnector`[] | yes | The requested window of rows (`_id` is returned as `id`, ObjectIds as their 24-hex strings, server-only fields omitted). When grouping (more rowGroupCols than groupKeys) rows are group summaries — `{ "0": <group value>, "childCount": <n>, …aggregates }` — not ApplicationConnector documents. |
| `lastRow` | integer (int32) | yes | Total number of rows matching the filter — not just this window. |

## ApplicationConnectorPairing

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `fromConnectorId` | string | no | A 24-hex ObjectId |
| `toConnectorId` | string | no | A 24-hex ObjectId |
| `applicationId` | string | yes | A 24-hex ObjectId |
| `id` | string | yes | A 24-hex ObjectId |
| `createdAt` | string (date-time) | no |  |
| `updatedAt` | string (date-time) | no |  |
| `deleted` | boolean | yes |  |
| `version` | integer (int64) | yes |  |

## ApplicationConnectorPairingGridResponse

One window of ApplicationConnectorPairing rows plus the total match count.

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `rows` | `ApplicationConnectorPairing`[] | yes | The requested window of rows (`_id` is returned as `id`, ObjectIds as their 24-hex strings, server-only fields omitted). When grouping (more rowGroupCols than groupKeys) rows are group summaries — `{ "0": <group value>, "childCount": <n>, …aggregates }` — not ApplicationConnectorPairing documents. |
| `lastRow` | integer (int32) | yes | Total number of rows matching the filter — not just this window. |

## ApplicationList

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `name` | string | no |  |
| `applicationId` | string | yes | A 24-hex ObjectId |
| `id` | string | yes | A 24-hex ObjectId |
| `createdAt` | string (date-time) | no |  |
| `updatedAt` | string (date-time) | no |  |
| `deleted` | boolean | yes |  |
| `version` | integer (int64) | yes |  |

## ApplicationListItem

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `applicationListId` | string | no | A 24-hex ObjectId |
| `name` | string | no |  |
| `applicationId` | string | yes | A 24-hex ObjectId |
| `id` | string | yes | A 24-hex ObjectId |
| `createdAt` | string (date-time) | no |  |
| `updatedAt` | string (date-time) | no |  |
| `deleted` | boolean | yes |  |
| `version` | integer (int64) | yes |  |

## ApplicationProduct

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `description` | string | yes |  |
| `symbols` | map of string → `ViewSymbol` | yes |  |
| `categories` | map of string → map of string → `ProductSetting` | yes |  |
| `ports` | map of string → `Port` | yes |  |
| `accessoryOnly` | boolean | no |  |
| `accessories` | `ProductAccessory`[] | no |  |
| `applicationId` | string | yes | A 24-hex ObjectId |
| `id` | string | yes | A 24-hex ObjectId |
| `createdAt` | string (date-time) | no |  |
| `updatedAt` | string (date-time) | no |  |
| `deleted` | boolean | yes |  |
| `version` | integer (int64) | yes |  |

## ApplicationProductGridResponse

One window of ApplicationProduct rows plus the total match count.

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `rows` | `ApplicationProduct`[] | yes | The requested window of rows (`_id` is returned as `id`, ObjectIds as their 24-hex strings, server-only fields omitted). When grouping (more rowGroupCols than groupKeys) rows are group summaries — `{ "0": <group value>, "childCount": <n>, …aggregates }` — not ApplicationProduct documents. |
| `lastRow` | integer (int32) | yes | Total number of rows matching the filter — not just this window. |

## ApplicationReport

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `name` | string | yes |  |
| `type` | string | yes |  |
| `published` | boolean | yes |  |
| `prefix` | string | yes |  |
| `order` | integer (int32) | no |  |
| `applicationId` | string | yes | A 24-hex ObjectId |
| `id` | string | yes | A 24-hex ObjectId |
| `createdAt` | string (date-time) | no |  |
| `updatedAt` | string (date-time) | no |  |
| `deleted` | boolean | yes |  |
| `version` | integer (int64) | yes |  |

## ApplicationReportGridResponse

One window of ApplicationReport rows plus the total match count.

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `rows` | `ApplicationReport`[] | yes | The requested window of rows (`_id` is returned as `id`, ObjectIds as their 24-hex strings, server-only fields omitted). When grouping (more rowGroupCols than groupKeys) rows are group summaries — `{ "0": <group value>, "childCount": <n>, …aggregates }` — not ApplicationReport documents. |
| `lastRow` | integer (int32) | yes | Total number of rows matching the filter — not just this window. |

## ApplicationReportWithDefinition

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `definition` | object | yes |  |
| `name` | string | yes |  |
| `type` | string | yes |  |
| `published` | boolean | yes |  |
| `prefix` | string | yes |  |
| `order` | integer (int32) | no |  |
| `applicationId` | string | yes | A 24-hex ObjectId |
| `id` | string | yes | A 24-hex ObjectId |
| `createdAt` | string (date-time) | no |  |
| `updatedAt` | string (date-time) | no |  |
| `deleted` | boolean | yes |  |
| `version` | integer (int64) | yes |  |

## ApplicationSignal

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `name` | string | no |  |
| `prefix` | string | no |  |
| `stroke` | `Stroke` | no |  |
| `applicationId` | string | yes | A 24-hex ObjectId |
| `id` | string | yes | A 24-hex ObjectId |
| `createdAt` | string (date-time) | no |  |
| `updatedAt` | string (date-time) | no |  |
| `deleted` | boolean | yes |  |
| `version` | integer (int64) | yes |  |

## ApplicationSignalGridResponse

One window of ApplicationSignal rows plus the total match count.

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `rows` | `ApplicationSignal`[] | yes | The requested window of rows (`_id` is returned as `id`, ObjectIds as their 24-hex strings, server-only fields omitted). When grouping (more rowGroupCols than groupKeys) rows are group summaries — `{ "0": <group value>, "childCount": <n>, …aggregates }` — not ApplicationSignal documents. |
| `lastRow` | integer (int32) | yes | Total number of rows matching the filter — not just this window. |

## ApplicationTheme

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `fontFamily` | string | no |  |
| `headingFontFamily` | string | no |  |
| `light` | `ThemeColors` | no |  |
| `dark` | `ThemeColors` | no |  |

## ApplicationType

0 = privateType, 1 = publicType, 2 = sampleType

## ApplicationUser

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `pending` | boolean | no |  |
| `isActive` | boolean | no |  |
| `roles` | map of string → `ApplicationUserRole` | yes |  |
| `emailAddress` | string | yes |  |
| `name` | string | yes |  |
| `settings` | map of string → `Setting` | yes |  |
| `provider` | string | no |  |
| `providerName` | string | no |  |
| `externalId` | string | no |  |
| `linkedSsoProviders` | `SsoLink`[] | no |  |
| `lastLoginAt` | string (date-time) | no |  |
| `applicationId` | string | yes | A 24-hex ObjectId |
| `id` | string | yes | A 24-hex ObjectId |
| `createdAt` | string (date-time) | no |  |
| `updatedAt` | string (date-time) | no |  |
| `deleted` | boolean | yes |  |
| `version` | integer (int64) | yes |  |

## ApplicationUserRole

## ApplicationView

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `viewKey` | string | yes |  |
| `name` | string | yes |  |
| `description` | string | yes |  |
| `boundingRectangle` | `Rect` | yes |  |
| `logo` | string | yes |  |
| `grid` | `Point` | yes |  |
| `gridSnaps` | `Point` | yes |  |
| `settings` | map of string → `Setting` | yes |  |
| `unit` | string | yes |  |
| `precision` | integer (int32) | yes |  |
| `one` | number | yes |  |
| `defaults` | map of string → object | yes |  |
| `layers` | `Layer`[] | yes |  |
| `currentLayer` | string | yes |  |
| `applicationId` | string | yes | A 24-hex ObjectId |
| `id` | string | yes | A 24-hex ObjectId |
| `createdAt` | string (date-time) | no |  |
| `updatedAt` | string (date-time) | no |  |
| `deleted` | boolean | yes |  |
| `version` | integer (int64) | yes |  |

## ApplicationViewGridResponse

One window of ApplicationView rows plus the total match count.

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `rows` | `ApplicationView`[] | yes | The requested window of rows (`_id` is returned as `id`, ObjectIds as their 24-hex strings, server-only fields omitted). When grouping (more rowGroupCols than groupKeys) rows are group summaries — `{ "0": <group value>, "childCount": <n>, …aggregates }` — not ApplicationView documents. |
| `lastRow` | integer (int32) | yes | Total number of rows matching the filter — not just this window. |

## AuthorizeCompleteRequest

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `client_id` | string | no |  |
| `redirect_uri` | string | no |  |
| `code_challenge` | string | no |  |
| `code_challenge_method` | string | no |  |
| `scope` | string | no |  |
| `state` | string | no |  |
| `resource` | string | no |  |

## AuthorizeCompleteResponse

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `redirectUrl` | string | no |  |

## BlockIcon

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `url` | string | yes |  |
| `boundingRectangle` | `Rect` | yes |  |

## BlockItemOptions

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `compact` | boolean | no |  |

## BlockPortOption

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `portId` | string | yes |  |
| `side` | string | no |  |
| `group` | string | no |  |
| `hidden` | boolean | no |  |

## BlockSymbolOptions

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `ports` | `BlockPortOption`[] | no |  |
| `icon` | `BlockIcon` | no |  |
| `minWidth` | number | no |  |

## BugDiagnostics

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `errorMessage` | string | no |  |
| `errorName` | string | no |  |
| `stack` | string | no |  |
| `viewport` | string | no |  |
| `screen` | string | no |  |
| `devicePixelRatio` | string | no |  |
| `locale` | string | no |  |
| `timezone` | string | no |  |
| `platform` | string | no |  |
| `language` | string | no |  |
| `connection` | string | no |  |
| `memory` | string | no |  |
| `referrer` | string | no |  |
| `clientIp` | string | no |  |
| `appVersion` | string | no |  |

## CableContainment

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `conduitId` | string | yes | A 24-hex ObjectId |
| `order` | integer (int32) | no |  |

## CableCore

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | string | yes |  |
| `name` | string | yes |  |
| `color` | string | no |  |
| `signalId` | string | no | A 24-hex ObjectId |
| `startConnector` | `ConnectorSnapshot` | no |  |
| `endConnector` | `ConnectorSnapshot` | no |  |

## CableIdState

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `cableId` | string | no |  |
| `sequence` | integer (int64) | no |  |
| `sequenceKey` | string | no |  |
| `locked` | boolean | no |  |

## CableLabeling

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `idFormat` | string | no |  |
| `sequenceScope` | string | no |  |
| `padding` | integer (int32) | no |  |
| `sequenceStart` | integer (int64) | no |  |
| `fromLabel` | string | no |  |
| `middleLabel` | string | no |  |
| `toLabel` | string | no |  |
| `coreLabel` | string | no |  |
| `referenceSetting` | string | no |  |

## CableRenumberAssignment

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | string | yes |  |
| `version` | integer (int64) | yes |  |
| `cableId` | string | no |  |
| `sequence` | integer (int64) | no |  |
| `sequenceKey` | string | no |  |
| `locked` | boolean | no |  |

## CableRenumberRequest

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `preview` | boolean | no |  |
| `cableIds` | string[] | no |  |
| `includeLocked` | boolean | no |  |
| `assignments` | `CableRenumberAssignment`[] | no |  |

## CableRenumberResponse

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `applied` | boolean | no |  |
| `rows` | `CableRenumberRow`[] | no |  |

## CableRenumberRow

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | string | yes |  |
| `version` | integer (int64) | yes |  |
| `previous` | `CableIdState` | yes |  |
| `next` | `CableIdState` | yes |  |

## CableScheduleEnd

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `projectProductId` | string | no |  |
| `reference` | string | no |  |
| `description` | string | no |  |
| `port` | string | no |  |
| `connector` | string | no |  |

## CableScheduleLabels

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `from` | string | no |  |
| `middle` | string | no |  |
| `to` | string | no |  |

## CableScheduleRow

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | string | yes |  |
| `version` | integer (int64) | yes |  |
| `cableId` | string | no |  |
| `locked` | boolean | no |  |
| `type` | string | no |  |
| `signal` | string | no |  |
| `signalPrefix` | string | no |  |
| `from` | `CableScheduleEnd` | no |  |
| `to` | `CableScheduleEnd` | no |  |
| `length` | number | no |  |
| `labels` | `CableScheduleLabels` | no |  |
| `drawings` | string[] | no |  |
| `notes` | string | no |  |
| `startConnector` | string | no |  |
| `endConnector` | string | no |  |
| `diameter` | number | no |  |
| `color` | string | no |  |
| `coreCount` | integer (int32) | no |  |
| `custom` | boolean | no |  |
| `categories` | map of string → map of string → `ProductSetting` | no |  |

## CableUsage

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `projectCableId` | string | yes | A 24-hex ObjectId |
| `viewIds` | string[] | yes |  |

## ChatContentBlock

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `type` | string | no |  |
| `text` | string | no |  |
| `id` | string | no |  |
| `name` | string | no |  |
| `input` | object | no |  |
| `tool_use_id` | string | no |  |
| `content` | string | no |  |
| `is_error` | boolean | no |  |
| `source` | `ChatContentSource` | no |  |
| `title` | string | no |  |

## ChatContentSource

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `type` | string | yes |  |
| `media_type` | string | no |  |
| `data` | string | no |  |
| `url` | string | no |  |

## ChatMessage

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `role` | string | no |  |
| `content` | `ChatContentBlock`[] | no |  |

## ChatRequest

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `messages` | `ChatMessage`[] | yes |  |
| `tools` | `ChatTool`[] | yes |  |
| `system` | string | yes |  |
| `max_tokens` | integer (int32) | no |  |
| `stream` | boolean | no |  |

## ChatResponse

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | string | yes |  |
| `content` | `ChatContentBlock`[] | yes |  |
| `model` | string | yes |  |
| `stop_reason` | string | yes |  |
| `usage` | `ChatUsage` | yes |  |

## ChatTool

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `name` | string | yes |  |
| `description` | string | yes |  |
| `schema` | object | yes |  |

## ChatUpload

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `url` | string | yes |  |
| `path` | string | yes |  |

## ChatUsage

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `input_tokens` | integer (int32) | no |  |
| `output_tokens` | integer (int32) | no |  |

## ClassicLayer

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `url` | string | yes |  |
| `boundingRectangle` | `Rect` | yes |  |

## Clearance

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `top` | number | yes |  |
| `left` | number | yes |  |
| `bottom` | number | yes |  |
| `right` | number | yes |  |

## ColumnVO

A grouping or aggregation column (ag-Grid ColumnVO).

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | string | no | Column id (mirrors `field` for grouping columns). |
| `displayName` | string | no | For a valueCols entry, the key the aggregate is returned under in each group row. |
| `field` | string | no | The MongoDB field path the column reads. |
| `aggFunc` | string (sum \| min \| max \| avg \| first \| last \| count \| push \| addToSet) | no | Aggregation applied per group (valueCols only); any other value is ignored. |

## ConduitFillResult

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `areaTotal` | number | no |  |
| `areaUsed` | number | no |  |
| `percent` | number | no |  |
| `limit` | integer (int32) | no |  |
| `overfilled` | boolean | no |  |
| `missingDiameters` | string[] | no |  |

## ConduitScheduleCable

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | string | yes |  |
| `cableId` | string | no |  |
| `name` | string | no |  |
| `diameter` | number | no |  |
| `order` | integer (int32) | no |  |

## ConduitScheduleRow

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `conduit` | `ProjectConduit` | yes |  |
| `cables` | `ConduitScheduleCable`[] | no |  |
| `fill` | `ConduitFillResult` | yes |  |

## ConfirmEmailChangeRequest

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `confirmationToken` | string | no |  |

## ConfirmMergeRequest

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `confirmationToken` | string | no |  |

## Connection

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `source` | `ConnectionPoint` | yes |  |
| `target` | `ConnectionPoint` | yes |  |

## ConnectionPoint

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `ownerId` | string | yes | A 24-hex ObjectId |
| `handleNumber` | integer (int32) | yes |  |
| `offset` | `Point` | yes |  |

## ConnectorSnapshot

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | string | no | A 24-hex ObjectId |
| `name` | string | no |  |
| `gender` | boolean | no | true = female, false = male |

## CopyApplicationProgress

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `stage` | integer (int32) | no |  |
| `name` | string | no |  |

## CopyApplicationRequest

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `fromApplicationId` | string | no |  |
| `name` | string | no |  |
| `description` | string | no |  |

## CopyApplicationStartResponse

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `instanceId` | string | no |  |

## CopyApplicationStatus

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `runtimeStatus` | string | no |  |
| `progress` | `CopyApplicationProgress` | no |  |
| `application` | `Application` | no |  |
| `error` | string | no |  |

## EmailChangePolicy

0 = RequireConfirmation, 1 = SilentUpdate, 2 = NeverUpdate

## EmailChangeRequiresConfirmationResponse

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `status` | string | no |  |
| `confirmationToken` | string | no |  |
| `oldEmail` | string | no |  |
| `newEmail` | string | no |  |

## ExchangeTokenRequest

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `code` | string | yes |  |
| `state` | string | yes |  |
| `redirect_uri` | string | yes |  |
| `code_verifier` | string | yes |  |

## Fill

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `color` | string | yes |  |
| `opacity` | number | yes |  |
| `rule` | string | yes |  |

## Gender

0 = male, 1 = female, 2 = bi

## GridRequest

A server-side grid query: one window of rows, filtered, sorted and optionally grouped in the database. The minimal request is `{ "startRow": 0, "endRow": 100 }`; add filterModel/sortModel to narrow and order, and rowGroupCols/groupKeys/valueCols for grouped results.

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `startRow` | integer (int32) | yes | First row of the requested window (0-based, inclusive). |
| `endRow` | integer (int32) | yes | End of the requested window (exclusive) — at most endRow − startRow rows are returned. |
| `filterModel` | map of string → `IItem` | no | Column filters, keyed by the MongoDB field path into the row document (`name`, `categories.Product.Manufacturer.value`, `startConnector.name`; a path with a `*` segment such as `ports.*.connectorId` matches against every value of that map field). Each endpoint's description lists its useful paths. All entries must match (AND) unless filterModelOr is true. |
| `filterModelOr` | boolean | no | true = a row matches when ANY filterModel entry matches (OR — e.g. one search text applied across several fields); false/omitted = every entry must match (AND). |
| `sortModel` | `ISortModel`[] | no | Sort order, outermost first; omit for the natural (insertion) order. |
| `rowGroupCols` | `ColumnVO`[] | no | Row grouping, outermost level first. With more rowGroupCols than groupKeys the response holds one GROUP row per distinct value of the next level — `{ "0": <value>, "childCount": <rows in the group>, …valueCols aggregates }` — instead of plain rows; expand a group by repeating the request with its value appended to groupKeys. |
| `groupKeys` | string[] | no | The values of the already-expanded group levels, in rowGroupCols order. When every level is expanded the response returns the matching leaf rows. |
| `valueCols` | `ColumnVO`[] | no | Aggregations computed per group row (each entry's aggFunc over its field, returned under its displayName). |
| `pivotCols` | `ColumnVO`[] | no | Accepted for ag-Grid compatibility; pivoting is not implemented — ignored. |
| `pivotMode` | boolean | no | Accepted for ag-Grid compatibility; pivoting is not implemented — ignored. |

## GridResponse

One window of grid rows plus the total match count.

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `rows` | map of string → object[] | yes | The requested window of rows: the stored documents as JSON (`_id` is returned as `id`, ObjectIds as their 24-hex strings, server-only fields omitted) — or group rows when grouping (see GridRequest.rowGroupCols). |
| `lastRow` | integer (int32) | yes | Total number of rows matching the filter — not just this window. |

## GroupRequest

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `connectionId` | string | no |  |

## IItem

One column filter. `filterType` picks the family, `type` the operation within it; a filter the server cannot apply (unknown operation, unparsable comparand) is silently DROPPED — the query runs without it, it never errors. - `text`: operations equals, notEqual, contains, notContains, startsWith, endsWith, blank, notBlank; the comparand in `filter`. contains/notContains/startsWith/endsWith match case-insensitively; equals/notEqual are exact. blank matches a null-or-missing field, notBlank the opposite. - `number`: operations equals, notEqual, greaterThan, greaterThanOrEqual, lessThan, lessThanOrEqual, inRange (bounds in `filter` and `filterTo`, both inclusive), blank, notBlank. The comparand is a number, `"true"`/`"false"` for a stored-boolean field, or `ObjectId("<24-hex id>")` — the way to filter a reference field that stores a MongoDB ObjectId. On a path ending `.value` (an admin-defined setting) the stored text is coerced to a number before comparing. - `date`: the same operations as number, with the comparands in `dateFrom`/`dateTo` (ISO 8601). Only for real date fields (`createdAt`, `updatedAt`); a date-typed SETTING stores its value as text — filter it as text. - `set`: matches rows whose field equals ANY entry of `values` (`type` is ignored). Values are matched as strings, except `ObjectId("<24-hex id>")` literals for reference fields, the string `null` for "field not set", and `true`/`false` for stored-boolean fields. A key with a `*` segment (`ports.*.connectorId`) applies the filter to EVERY value of that map-of-objects field and matches when any value passes (for notEqual/notContains: when none does). Supported for text, number and set filters.

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `filterType` | string (text \| number \| date \| set) | yes | The filter family — see the schema description for each family's operations and comparands. |
| `type` | string (equals \| notEqual \| contains \| notContains \| startsWith \| endsWith \| greaterThan \| greaterThanOrEqual \| lessThan \| lessThanOrEqual \| inRange \| blank \| notBlank) | no | The operation. Which are valid depends on filterType; a set filter ignores it. |
| `filter` | object | no | The comparand for text and number filters (for a number inRange, the lower bound). String or number. |
| `filterTo` | string | no | Upper bound of a number inRange. |
| `values` | string[] | no | Set filter values — the row matches when its field equals any of them. |
| `dateFrom` | string | no | Date comparand (ISO 8601); for inRange, the lower bound. |
| `dateTo` | string | no | Upper bound of a date inRange (ISO 8601). |

## ISortModel

One sort level. Multiple entries sort by the first, then the second within equal values, and so on.

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `colId` | string | no | The MongoDB field path to sort by — the same paths filterModel is keyed by (e.g. `name`, `categories.Product.Manufacturer.value`). |
| `sort` | string (asc \| desc) | no | Sort direction; omitted means `asc`. |

## InvitationDetails

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `projectId` | string | yes |  |
| `projectName` | string | yes |  |
| `inviterName` | string | yes |  |
| `inviterEmail` | string | yes |  |
| `invitedEmail` | string | yes |  |
| `role` | string | yes |  |
| `expiresAt` | string (date-time) | no |  |

## InvitationListItem

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `projectId` | string | yes |  |
| `projectName` | string | yes |  |
| `inviterName` | string | yes |  |
| `inviterEmail` | string | yes |  |
| `role` | string | yes |  |
| `invitedAt` | string (date-time) | no |  |
| `acceptToken` | string | yes |  |

## LabelOffset

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `labelId` | string | yes |  |
| `offset` | `Point` | yes |  |

## Layer

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `name` | string | yes |  |
| `visible` | boolean | yes |  |
| `locked` | boolean | yes |  |

## LoginProvider

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `name` | string | yes |  |
| `url` | string | yes |  |

## Module

0 = None, 1 = Projects, 2 = Layout, 4 = Dwg

## Mount

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `itemId` | string | yes | A 24-hex ObjectId |
| `point` | `Point` | yes |  |

## NewApplicationRequest

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `name` | string | no |  |
| `description` | string | no |  |

## OAuthTokenResponse

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `access_token` | string | no |  |
| `token_type` | string | no |  |
| `expires_in` | integer (int64) | no |  |
| `refresh_token` | string | no |  |
| `id_token` | string | no |  |

## OidcDiscoveryDoc

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `issuer` | string | no |  |
| `authorization_endpoint` | string | no |  |
| `token_endpoint` | string | no |  |
| `token_endpoint_auth_methods_supported` | string[] | no |  |
| `token_endpoint_auth_signing_alg_values_supported` | string[] | no |  |
| `userinfo_endpoint` | string | no |  |
| `check_session_iframe` | string | no |  |
| `end_session_endpoint` | string | no |  |
| `jwks_uri` | string | no |  |
| `registration_endpoint` | string | no |  |
| `scopes_supported` | string[] | no |  |
| `response_types_supported` | string[] | no |  |
| `acr_values_supported` | string[] | no |  |
| `response_modes_supported` | string[] | no |  |
| `grant_types_supported` | string[] | no |  |
| `subject_types_supported` | string[] | no |  |
| `userinfo_signing_alg_values_supported` | string[] | no |  |
| `userinfo_encryption_alg_values_supported` | string[] | no |  |
| `userinfo_encryption_enc_values_supported` | string[] | no |  |
| `id_token_signing_alg_values_supported` | string[] | no |  |
| `id_token_encryption_alg_values_supported` | string[] | no |  |
| `id_token_encryption_enc_values_supported` | string[] | no |  |
| `request_object_signing_alg_values_supported` | string[] | no |  |
| `display_values_supported` | string[] | no |  |
| `claim_types_supported` | string[] | no |  |
| `claims_supported` | string[] | no |  |
| `claims_parameter_supported` | boolean | no |  |
| `service_documentation` | string | no |  |
| `ui_locales_supported` | string[] | no |  |
| `revocation_endpoint` | string | no |  |

## OwnershipTransferRequest

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `toUserId` | string | yes |  |

## PartialProject

Partial Project — all fields optional except version (required for optimistic concurrency); unknown fields are rejected with 400, and an id field (the string properties with a 24-hex pattern) must be a valid 24-hex ObjectId or null — anything else is a 400 naming the path. A key may also be a DOTTED PATH into one of this object's MAP fields, which changes just that entry and leaves its siblings alone — `settings.<key>` replaces one entry, `settings.<key>.<field of the entry>` sets one leaf of it. Those key shapes are listed in `patternProperties` (so `additionalProperties: false` still rejects everything else), and each segment is validated the same way — a typo anywhere in the path is a 400. Use it wherever you would otherwise have to read a whole map and send it back to change one entry. Only a MISSING parent is created for you: a parent stored as null is an error, which is why a nullable object is not offered here.

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `cableLabeling` | `CableLabeling` | no |  |
| `name` | string | no |  |
| `description` | string | no |  |
| `settings` | map of string → object | no |  |
| `users` | map of string → `ProjectUser` | no |  |
| `uniqueNumber` | integer (int64) | no |  |
| `locked` | boolean | no |  |
| `pendingOwnershipTransfer` | `PendingOwnershipTransfer` | no |  |
| `applicationId` | string | no | A 24-hex ObjectId |
| `id` | string | no | A 24-hex ObjectId |
| `createdAt` | string (date-time) | no |  |
| `updatedAt` | string (date-time) | no |  |
| `deleted` | boolean | no |  |
| `version` | integer (int64) | yes |  |

## PartialProjectCable

Partial ProjectCable — all fields optional except version (required for optimistic concurrency); unknown fields are rejected with 400, and an id field (the string properties with a 24-hex pattern) must be a valid 24-hex ObjectId or null — anything else is a 400 naming the path. A key may also be a DOTTED PATH into one of this object's MAP fields, which changes just that entry and leaves its siblings alone — `categories.<key>` replaces one entry, `categories.<key>.<field of the entry>` sets one leaf of it. Those key shapes are listed in `patternProperties` (so `additionalProperties: false` still rejects everything else), and each segment is validated the same way — a typo anywhere in the path is a 400. Use it wherever you would otherwise have to read a whole map and send it back to change one entry. Only a MISSING parent is created for you: a parent stored as null is an error, which is why a nullable object is not offered here.

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `projectId` | string | no | A 24-hex ObjectId |
| `applicationCableId` | string | no | A 24-hex ObjectId |
| `from` | `ProjectCableEnd` | no |  |
| `to` | `ProjectCableEnd` | no |  |
| `labels` | `ProjectCableLabel`[] | no |  |
| `notes` | string | no |  |
| `cableId` | string | no |  |
| `sequence` | integer (int64) | no |  |
| `sequenceKey` | string | no |  |
| `cableIdLocked` | boolean | no |  |
| `custom` | boolean | no |  |
| `coreEnds` | `ProjectCableCoreEnd`[] | no |  |
| `containment` | `CableContainment`[] | no |  |
| `name` | string | no |  |
| `categories` | map of string → map of string → `ProductSetting` | no |  |
| `startConnector` | `ConnectorSnapshot` | no |  |
| `endConnector` | `ConnectorSnapshot` | no |  |
| `length` | number | no |  |
| `signalId` | string | no | A 24-hex ObjectId |
| `category` | string | no |  |
| `stroke` | `Stroke` | no |  |
| `diameter` | number | no |  |
| `cores` | `CableCore`[] | no |  |
| `applicationId` | string | no | A 24-hex ObjectId |
| `id` | string | no | A 24-hex ObjectId |
| `createdAt` | string (date-time) | no |  |
| `updatedAt` | string (date-time) | no |  |
| `deleted` | boolean | no |  |
| `version` | integer (int64) | yes |  |

## PartialProjectConduit

Partial ProjectConduit — all fields optional except version (required for optimistic concurrency); unknown fields are rejected with 400, and an id field (the string properties with a 24-hex pattern) must be a valid 24-hex ObjectId or null — anything else is a 400 naming the path.

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `projectId` | string | no | A 24-hex ObjectId |
| `reference` | string | no |  |
| `name` | string | no |  |
| `kind` | string | no |  |
| `diameter` | number | no |  |
| `width` | number | no |  |
| `height` | number | no |  |
| `length` | number | no |  |
| `fromLocation` | string | no |  |
| `toLocation` | string | no |  |
| `maxFillPercent` | integer (int32) | no |  |
| `notes` | string | no |  |
| `applicationId` | string | no | A 24-hex ObjectId |
| `id` | string | no | A 24-hex ObjectId |
| `createdAt` | string (date-time) | no |  |
| `updatedAt` | string (date-time) | no |  |
| `deleted` | boolean | no |  |
| `version` | integer (int64) | yes |  |

## PartialProjectFile

Partial ProjectFile — all fields optional except version (required for optimistic concurrency); unknown fields are rejected with 400, and an id field (the string properties with a 24-hex pattern) must be a valid 24-hex ObjectId or null — anything else is a 400 naming the path.

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `projectId` | string | no | A 24-hex ObjectId |
| `name` | string | no |  |
| `url` | string | no |  |
| `type` | string | no |  |
| `size` | integer (int64) | no |  |
| `lastModified` | string (date-time) | no |  |
| `applicationId` | string | no | A 24-hex ObjectId |
| `id` | string | no | A 24-hex ObjectId |
| `createdAt` | string (date-time) | no |  |
| `updatedAt` | string (date-time) | no |  |
| `deleted` | boolean | no |  |
| `version` | integer (int64) | yes |  |

## PartialProjectProduct

Partial ProjectProduct — all fields optional except version (required for optimistic concurrency); unknown fields are rejected with 400, and an id field (the string properties with a 24-hex pattern) must be a valid 24-hex ObjectId or null — anything else is a 400 naming the path. A key may also be a DOTTED PATH into one of this object's MAP fields, which changes just that entry and leaves its siblings alone — `symbols.<key>` replaces one entry, `symbols.<key>.<field of the entry>` sets one leaf of it. Those key shapes are listed in `patternProperties` (so `additionalProperties: false` still rejects everything else), and each segment is validated the same way — a typo anywhere in the path is a 400. Use it wherever you would otherwise have to read a whole map and send it back to change one entry. Only a MISSING parent is created for you: a parent stored as null is an error, which is why a nullable object is not offered here.

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `projectId` | string | no | A 24-hex ObjectId |
| `applicationProductId` | string | no | A 24-hex ObjectId |
| `parentProjectProductId` | string | no | A 24-hex ObjectId |
| `lineItem` | boolean | no |  |
| `description` | string | no |  |
| `symbols` | map of string → `ViewSymbol` | no |  |
| `categories` | map of string → map of string → `ProductSetting` | no |  |
| `ports` | map of string → `Port` | no |  |
| `accessoryOnly` | boolean | no |  |
| `accessories` | `ProductAccessory`[] | no |  |
| `applicationId` | string | no | A 24-hex ObjectId |
| `id` | string | no | A 24-hex ObjectId |
| `createdAt` | string (date-time) | no |  |
| `updatedAt` | string (date-time) | no |  |
| `deleted` | boolean | no |  |
| `version` | integer (int64) | yes |  |

## PartialProjectView

Partial ProjectView — all fields optional except version (required for optimistic concurrency); unknown fields are rejected with 400, and an id field (the string properties with a 24-hex pattern) must be a valid 24-hex ObjectId or null — anything else is a 400 naming the path. A key may also be a DOTTED PATH into one of this object's MAP fields, which changes just that entry and leaves its siblings alone — `settings.<key>` replaces one entry, `settings.<key>.<field of the entry>` sets one leaf of it. Those key shapes are listed in `patternProperties` (so `additionalProperties: false` still rejects everything else), and each segment is validated the same way — a typo anywhere in the path is a 400. Use it wherever you would otherwise have to read a whole map and send it back to change one entry. Only a MISSING parent is created for you: a parent stored as null is an error, which is why a nullable object is not offered here.

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `projectId` | string | no | A 24-hex ObjectId |
| `applicationViewId` | string | no | A 24-hex ObjectId |
| `applicationViewName` | string | no |  |
| `viewKey` | string | no |  |
| `name` | string | no |  |
| `description` | string | no |  |
| `boundingRectangle` | `Rect` | no |  |
| `logo` | string | no |  |
| `grid` | `Point` | no |  |
| `gridSnaps` | `Point` | no |  |
| `settings` | map of string → `Setting` | no |  |
| `unit` | string | no |  |
| `precision` | integer (int32) | no |  |
| `one` | number | no |  |
| `defaults` | map of string → object | no |  |
| `layers` | `Layer`[] | no |  |
| `currentLayer` | string | no |  |
| `applicationId` | string | no | A 24-hex ObjectId |
| `id` | string | no | A 24-hex ObjectId |
| `createdAt` | string (date-time) | no |  |
| `updatedAt` | string (date-time) | no |  |
| `deleted` | boolean | no |  |
| `version` | integer (int64) | yes |  |

## PartialProjectViewItem

Partial ProjectViewItem — all fields optional except version (required for optimistic concurrency); unknown fields are rejected with 400, and an id field (the string properties with a 24-hex pattern) must be a valid 24-hex ObjectId or null — anything else is a 400 naming the path.

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `projectId` | string | no | A 24-hex ObjectId |
| `projectViewId` | string | no | A 24-hex ObjectId |
| `parentId` | string | no | A 24-hex ObjectId |
| `order` | number | no |  |
| `matrix` | number[] | no |  |
| `connections` | `Connection`[] | no |  |
| `layer` | string | no |  |
| `mount` | `Mount` | no |  |
| `applicationId` | string | no | A 24-hex ObjectId |
| `id` | string | no | A 24-hex ObjectId |
| `createdAt` | string (date-time) | no |  |
| `updatedAt` | string (date-time) | no |  |
| `deleted` | boolean | no |  |
| `version` | integer (int64) | yes |  |
| `type` | string | no |  |

## PasskeyLoginRequest

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `challengeToken` | string | yes |  |
| `credential` | string | yes |  |

## PasskeyOptionsResponse

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `options` | string | no |  |
| `challengeToken` | string | no |  |

## PasskeyRegistrationRequest

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `challengeToken` | string | yes |  |
| `credential` | string | yes |  |
| `name` | string | no |  |

## PasskeySummary

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `credentialId` | string | no |  |
| `name` | string | no |  |
| `createdAt` | string (date-time) | no |  |
| `lastUsedAt` | string (date-time) | no |  |

## PathCommand

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `type` | string | yes |  |
| `x` | number | no |  |
| `y` | number | no |  |
| `x1` | number | no |  |
| `y1` | number | no |  |
| `x2` | number | no |  |
| `y2` | number | no |  |
| `rx` | number | no |  |
| `ry` | number | no |  |
| `xAxisRotation` | number | no |  |
| `largeArc` | boolean | no |  |
| `sweep` | boolean | no |  |

## PendingOwnershipTransfer

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `toUserId` | string | yes | A 24-hex ObjectId |
| `expiresAt` | string (date-time) | yes |  |
| `createdAt` | string (date-time) | yes |  |

## Point

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `x` | number | yes |  |
| `y` | number | yes |  |

## PolylinePoint

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `x` | number | yes |  |
| `y` | number | yes |  |
| `auto` | boolean | no |  |

## Port

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `name` | string | yes |  |
| `gender` | `Gender` | yes |  |
| `direction` | `PortDirection` | yes |  |
| `signalId` | string | no | A 24-hex ObjectId |
| `connectorId` | string | no | A 24-hex ObjectId |

## PortDirection

0 = input, 1 = output, 2 = up, 3 = down, 4 = bidirectional

## ProductAccessory

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `productId` | string | no | A 24-hex ObjectId |
| `lineItem` | boolean | no |  |
| `quantity` | integer (int32) | no |  |
| `optional` | boolean | no |  |

## ProductFacet

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `category` | string | yes |  |
| `name` | string | yes |  |
| `distinct` | integer (int32) | no |  |
| `values` | `ProductFacetValue`[] | yes |  |

## ProductFacetValue

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `value` | string | yes |  |
| `count` | integer (int32) | no |  |

## ProductSearchFacets

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `total` | integer (int32) | no |  |
| `approximate` | boolean | no |  |
| `facets` | `ProductFacet`[] | yes |  |

## ProductSearchRequest

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `query` | string | no |  |
| `filters` | `ProductSettingFilter`[] | no |  |

## ProductSearchResult

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `product` | `ApplicationProduct` | yes |  |
| `score` | number | yes |  |

## ProductSetting

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `index` | integer (int32) | yes |  |
| `type` | string | yes |  |
| `access` | integer (int32) | yes |  |
| `value` | string | no |  |

## ProductSettingFilter

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `category` | string | yes |  |
| `name` | string | yes |  |
| `value` | string | yes |  |

## ProductUsage

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `projectProductId` | string | yes | A 24-hex ObjectId |
| `viewIds` | string[] | yes |  |

## Project

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `cableLabeling` | `CableLabeling` | no |  |
| `name` | string | yes |  |
| `description` | string | yes |  |
| `settings` | map of string → object | yes |  |
| `users` | map of string → `ProjectUser` | yes |  |
| `uniqueNumber` | integer (int64) | no |  |
| `locked` | boolean | yes |  |
| `pendingOwnershipTransfer` | `PendingOwnershipTransfer` | no |  |
| `applicationId` | string | yes | A 24-hex ObjectId |
| `id` | string | yes | A 24-hex ObjectId |
| `createdAt` | string (date-time) | no |  |
| `updatedAt` | string (date-time) | no |  |
| `deleted` | boolean | yes |  |
| `version` | integer (int64) | yes |  |

## ProjectCable

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `projectId` | string | no | A 24-hex ObjectId |
| `applicationCableId` | string | no | A 24-hex ObjectId |
| `from` | `ProjectCableEnd` | no |  |
| `to` | `ProjectCableEnd` | no |  |
| `labels` | `ProjectCableLabel`[] | no |  |
| `notes` | string | no |  |
| `cableId` | string | no |  |
| `sequence` | integer (int64) | no |  |
| `sequenceKey` | string | no |  |
| `cableIdLocked` | boolean | no |  |
| `custom` | boolean | no |  |
| `coreEnds` | `ProjectCableCoreEnd`[] | no |  |
| `containment` | `CableContainment`[] | no |  |
| `name` | string | no |  |
| `categories` | map of string → map of string → `ProductSetting` | no |  |
| `startConnector` | `ConnectorSnapshot` | no |  |
| `endConnector` | `ConnectorSnapshot` | no |  |
| `length` | number | no |  |
| `signalId` | string | no | A 24-hex ObjectId |
| `category` | string | no |  |
| `stroke` | `Stroke` | no |  |
| `diameter` | number | no |  |
| `cores` | `CableCore`[] | no |  |
| `applicationId` | string | yes | A 24-hex ObjectId |
| `id` | string | yes | A 24-hex ObjectId |
| `createdAt` | string (date-time) | no |  |
| `updatedAt` | string (date-time) | no |  |
| `deleted` | boolean | yes |  |
| `version` | integer (int64) | yes |  |

## ProjectCableCoreEnd

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `coreId` | string | yes |  |
| `from` | `ProjectCableEnd` | no |  |
| `to` | `ProjectCableEnd` | no |  |

## ProjectCableEnd

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `projectProductId` | string | yes | A 24-hex ObjectId |
| `portId` | string | yes |  |
| `connectorOverrideId` | string | no | A 24-hex ObjectId |

## ProjectCableLabel

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | string | yes |  |
| `position` | string | yes |  |
| `template` | string | yes |  |
| `rendered` | string | no |  |

## ProjectConduit

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `projectId` | string | no | A 24-hex ObjectId |
| `reference` | string | no |  |
| `name` | string | no |  |
| `kind` | string | no |  |
| `diameter` | number | no |  |
| `width` | number | no |  |
| `height` | number | no |  |
| `length` | number | no |  |
| `fromLocation` | string | no |  |
| `toLocation` | string | no |  |
| `maxFillPercent` | integer (int32) | no |  |
| `notes` | string | no |  |
| `applicationId` | string | yes | A 24-hex ObjectId |
| `id` | string | yes | A 24-hex ObjectId |
| `createdAt` | string (date-time) | no |  |
| `updatedAt` | string (date-time) | no |  |
| `deleted` | boolean | yes |  |
| `version` | integer (int64) | yes |  |

## ProjectCreate

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `name` | string | yes |  |
| `description` | string | yes |  |
| `settings` | map of string → object | yes |  |

## ProjectFile

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `projectId` | string | yes | A 24-hex ObjectId |
| `name` | string | no |  |
| `url` | string | no |  |
| `type` | string | no |  |
| `size` | integer (int64) | no |  |
| `lastModified` | string (date-time) | no |  |
| `applicationId` | string | yes | A 24-hex ObjectId |
| `id` | string | yes | A 24-hex ObjectId |
| `createdAt` | string (date-time) | no |  |
| `updatedAt` | string (date-time) | no |  |
| `deleted` | boolean | yes |  |
| `version` | integer (int64) | yes |  |

## ProjectFileGridResponse

One window of ProjectFile rows plus the total match count.

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `rows` | `ProjectFile`[] | yes | The requested window of rows (`_id` is returned as `id`, ObjectIds as their 24-hex strings, server-only fields omitted). When grouping (more rowGroupCols than groupKeys) rows are group summaries — `{ "0": <group value>, "childCount": <n>, …aggregates }` — not ProjectFile documents. |
| `lastRow` | integer (int32) | yes | Total number of rows matching the filter — not just this window. |

## ProjectGridResponse

One window of Project rows plus the total match count.

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `rows` | `Project`[] | yes | The requested window of rows (`_id` is returned as `id`, ObjectIds as their 24-hex strings, server-only fields omitted). When grouping (more rowGroupCols than groupKeys) rows are group summaries — `{ "0": <group value>, "childCount": <n>, …aggregates }` — not Project documents. |
| `lastRow` | integer (int32) | yes | Total number of rows matching the filter — not just this window. |

## ProjectProduct

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `projectId` | string | yes | A 24-hex ObjectId |
| `applicationProductId` | string | yes | A 24-hex ObjectId |
| `parentProjectProductId` | string | no | A 24-hex ObjectId |
| `lineItem` | boolean | no |  |
| `description` | string | yes |  |
| `symbols` | map of string → `ViewSymbol` | yes |  |
| `categories` | map of string → map of string → `ProductSetting` | yes |  |
| `ports` | map of string → `Port` | yes |  |
| `accessoryOnly` | boolean | no |  |
| `accessories` | `ProductAccessory`[] | no |  |
| `applicationId` | string | yes | A 24-hex ObjectId |
| `id` | string | yes | A 24-hex ObjectId |
| `createdAt` | string (date-time) | no |  |
| `updatedAt` | string (date-time) | no |  |
| `deleted` | boolean | yes |  |
| `version` | integer (int64) | yes |  |

## ProjectProductPatchResponse

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `cascadedViewItemIds` | string[] | yes |  |
| `cascadedProductIds` | string[] | yes |  |
| `projectId` | string | yes | A 24-hex ObjectId |
| `applicationProductId` | string | yes | A 24-hex ObjectId |
| `parentProjectProductId` | string | no | A 24-hex ObjectId |
| `lineItem` | boolean | no |  |
| `description` | string | yes |  |
| `symbols` | map of string → `ViewSymbol` | yes |  |
| `categories` | map of string → map of string → `ProductSetting` | yes |  |
| `ports` | map of string → `Port` | yes |  |
| `accessoryOnly` | boolean | no |  |
| `accessories` | `ProductAccessory`[] | no |  |
| `applicationId` | string | yes | A 24-hex ObjectId |
| `id` | string | yes | A 24-hex ObjectId |
| `createdAt` | string (date-time) | no |  |
| `updatedAt` | string (date-time) | no |  |
| `deleted` | boolean | yes |  |
| `version` | integer (int64) | yes |  |

## ProjectProductRequest

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `applicationProductId` | string | yes |  |
| `description` | string | yes |  |
| `symbols` | map of string → `ViewSymbol` | yes |  |
| `categories` | map of string → map of string → `ProductSetting` | yes |  |
| `ports` | map of string → `Port` | yes |  |
| `accessoryOnly` | boolean | no |  |
| `accessories` | `ProductAccessory`[] | no |  |
| `parentProjectProductId` | string | no |  |
| `lineItem` | boolean | no |  |

## ProjectUser

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `name` | string | no |  |
| `emailAddress` | string | yes |  |
| `pending` | boolean | yes |  |
| `role` | string | yes |  |
| `lastInviteSentAt` | string (date-time) | no |  |

## ProjectUserNew

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `name` | string | no |  |
| `emailAddress` | string | no |  |
| `role` | string | yes |  |

## ProjectUserRoleUpdate

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `role` | string | yes |  |

## ProjectView

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `projectId` | string | yes | A 24-hex ObjectId |
| `applicationViewId` | string | yes | A 24-hex ObjectId |
| `applicationViewName` | string | yes |  |
| `viewKey` | string | yes |  |
| `name` | string | yes |  |
| `description` | string | yes |  |
| `boundingRectangle` | `Rect` | yes |  |
| `logo` | string | yes |  |
| `grid` | `Point` | yes |  |
| `gridSnaps` | `Point` | yes |  |
| `settings` | map of string → `Setting` | yes |  |
| `unit` | string | yes |  |
| `precision` | integer (int32) | yes |  |
| `one` | number | yes |  |
| `defaults` | map of string → object | yes |  |
| `layers` | `Layer`[] | yes |  |
| `currentLayer` | string | yes |  |
| `applicationId` | string | yes | A 24-hex ObjectId |
| `id` | string | yes | A 24-hex ObjectId |
| `createdAt` | string (date-time) | no |  |
| `updatedAt` | string (date-time) | no |  |
| `deleted` | boolean | yes |  |
| `version` | integer (int64) | yes |  |

## ProjectViewCableCreate

## ProjectViewConduitTagCreate

## ProjectViewConnectionCreate

## ProjectViewCreate

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `name` | string | yes |  |
| `description` | string | yes |  |
| `logo` | string | yes |  |
| `applicationViewId` | string | yes |  |
| `applicationViewName` | string | yes |  |
| `viewKey` | string | yes |  |
| `boundingRectangle` | `Rect` | yes |  |
| `grid` | `Point` | yes |  |
| `gridSnaps` | `Point` | yes |  |
| `settings` | map of string → `Setting` | yes |  |
| `unit` | string | yes |  |
| `precision` | integer (int32) | yes |  |
| `one` | number | no |  |
| `defaults` | map of string → object | yes |  |
| `layers` | `Layer`[] | yes |  |
| `currentLayer` | string | yes |  |

## ProjectViewEllipseCreate

## ProjectViewGroupCreate

## ProjectViewImageCreate

## ProjectViewItem

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `projectId` | string | yes | A 24-hex ObjectId |
| `projectViewId` | string | yes | A 24-hex ObjectId |
| `parentId` | string | no | A 24-hex ObjectId |
| `order` | number | yes |  |
| `matrix` | number[] | yes |  |
| `connections` | `Connection`[] | yes |  |
| `layer` | string | no |  |
| `mount` | `Mount` | no |  |
| `applicationId` | string | yes | A 24-hex ObjectId |
| `id` | string | yes | A 24-hex ObjectId |
| `createdAt` | string (date-time) | no |  |
| `updatedAt` | string (date-time) | no |  |
| `deleted` | boolean | yes |  |
| `version` | integer (int64) | yes |  |
| `type` | string | yes |  |

## ProjectViewItemCreate

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `parentId` | string | no |  |
| `order` | number | yes |  |
| `matrix` | number[] | yes |  |
| `connections` | `Connection`[] | yes |  |
| `layer` | string | no |  |
| `mount` | `Mount` | no |  |
| `type` | string | yes |  |

## ProjectViewItemCreateUnion

One of: `ProjectViewItemCreate`, `ProjectViewProductCreate`, `ProjectViewConnectionCreate`, `ProjectViewCableCreate`, `ProjectViewOffPageReferenceCreate`, `ProjectViewConduitTagCreate`, `ProjectViewGroupCreate`, `ProjectViewLineCreate`, `ProjectViewRectangleCreate`, `ProjectViewPathCreate`, `ProjectViewEllipseCreate`, `ProjectViewPolylineCreate`, `ProjectViewPolygonCreate`, `ProjectViewTextCreate`, `ProjectViewImageCreate`

Discriminated by `type`.

## ProjectViewItemGridResponse

One window of ProjectViewItem rows plus the total match count.

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `rows` | `ProjectViewItem`[] | yes | The requested window of rows (`_id` is returned as `id`, ObjectIds as their 24-hex strings, server-only fields omitted). When grouping (more rowGroupCols than groupKeys) rows are group summaries — `{ "0": <group value>, "childCount": <n>, …aggregates }` — not ProjectViewItem documents. |
| `lastRow` | integer (int32) | yes | Total number of rows matching the filter — not just this window. |

## ProjectViewLineCreate

## ProjectViewOffPageReferenceCreate

## ProjectViewPathCreate

## ProjectViewPolygonCreate

## ProjectViewPolylineCreate

## ProjectViewProductCreate

## ProjectViewRectangleCreate

## ProjectViewTextCreate

## Rect

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `top` | number | yes |  |
| `left` | number | yes |  |
| `right` | number | yes |  |
| `bottom` | number | yes |  |

## RegisterUser

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `emailAddress` | string | no |  |
| `password` | string | no |  |
| `name` | string | no |  |
| `settings` | map of string → `SettingValue` | no |  |
| `verifyUrl` | string | no |  |

## RequestResetPassword

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `returnURL` | string | no |  |
| `emailAddress` | string | no |  |

## ResetPassword

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `resetGuid` | string (uuid) | no |  |
| `emailAddress` | string | no |  |
| `password` | string | no |  |

## RestoreProjectProductsRequest

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `productIds` | string[] | yes |  |

## RestoreProjectProductsResponse

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `products` | `ProjectProduct`[] | yes |  |

## RestoreViewItemsRequest

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `itemIds` | string[] | yes |  |

## RestoreViewItemsResponse

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `items` | `ProjectViewItem`[] | yes |  |

## SessionRecording

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `userId` | string | no | A 24-hex ObjectId |
| `userName` | string | no |  |
| `userEmailAddress` | string | no |  |
| `blobPath` | string | no |  |
| `trigger` | string | no |  |
| `startedAt` | string (date-time) | no |  |
| `durationMs` | integer (int64) | no |  |
| `sizeBytes` | integer (int64) | no |  |
| `url` | string | no |  |
| `userAgent` | string | no |  |
| `note` | string | no |  |
| `diagnostics` | `BugDiagnostics` | no |  |
| `applicationId` | string | yes | A 24-hex ObjectId |
| `id` | string | yes | A 24-hex ObjectId |
| `createdAt` | string (date-time) | no |  |
| `updatedAt` | string (date-time) | no |  |
| `deleted` | boolean | yes |  |
| `version` | integer (int64) | yes |  |

## SessionRecordingMetadata

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `recordingId` | string | yes |  |
| `blobPath` | string | yes |  |
| `trigger` | string | yes |  |
| `startedAt` | string | yes |  |
| `durationMs` | integer (int64) | yes |  |
| `sizeBytes` | integer (int64) | yes |  |
| `url` | string | yes |  |
| `userAgent` | string | yes |  |
| `note` | string | no |  |
| `diagnostics` | `BugDiagnostics` | no |  |

## SessionRecordingSasResponse

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `uploadUrl` | string | yes |  |
| `blobPath` | string | yes |  |
| `recordingId` | string | yes |  |

## Setting

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `type` | string | yes |  |
| `access` | integer (int32) | yes |  |
| `value` | string | no |  |

## SettingValue

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `value` | string | no |  |

## SsoLink

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `providerId` | string | no | A 24-hex ObjectId |
| `providerUserId` | string | no |  |
| `providerEmail` | string | no |  |
| `linkedAt` | string (date-time) | no |  |
| `lastAuthenticated` | string (date-time) | no |  |

## Stroke

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `color` | string | yes |  |
| `width` | number | yes |  |
| `scallop` | number | no |  |
| `style` | string | no |  |
| `opacity` | number | no |  |

## Subscription

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `modules` | `Module` | no |  |
| `paidThrough` | string (date-time) | no |  |
| `rateLimit` | integer (int32) | no |  |

## SymbolAnchor

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | string | yes |  |
| `point` | `Point` | yes |  |
| `kind` | `SymbolAnchorKind` | yes |  |
| `portId` | string | no |  |
| `d` | string | no |  |

## SymbolAnchorKind

0 = port, 1 = free, 2 = mount

## SymbolLabel

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | string | yes |  |
| `setting` | string | yes |  |
| `offset` | `Point` | yes |  |
| `fontName` | string | yes |  |
| `size` | number | yes |  |
| `color` | string | yes |  |
| `rotation` | number | no |  |
| `anchor` | `Anchor` | no |  |
| `layer` | string | no |  |

## TextStyle

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `fontFamily` | string | yes |  |
| `fontSize` | number | yes |  |
| `fontWeight` | string | yes |  |
| `fontStyle` | string | yes |  |
| `textAnchor` | string | yes |  |
| `dominantBaseline` | string | yes |  |
| `textDecoration` | string | no |  |

## ThemeColors

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `primary` | string | no |  |
| `accent` | string | no |  |
| `background` | string | no |  |
| `surface` | string | no |  |
| `text` | string | no |  |

## TransferDetails

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `projectId` | string | yes |  |
| `projectName` | string | yes |  |
| `fromUserId` | string | yes |  |
| `fromUserName` | string | yes |  |
| `fromUserEmail` | string | yes |  |
| `toUserId` | string | yes |  |
| `toUserName` | string | yes |  |
| `toUserEmail` | string | yes |  |
| `expiresAt` | string (date-time) | yes |  |

## TransferListItem

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `projectId` | string | yes |  |
| `projectName` | string | yes |  |
| `fromUserName` | string | yes |  |
| `fromUserEmail` | string | yes |  |
| `requestedAt` | string (date-time) | yes |  |
| `token` | string | yes |  |

## Translation

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `key` | string | yes |  |
| `value` | string | yes |  |
| `applicationId` | string | yes | A 24-hex ObjectId |
| `id` | string | yes | A 24-hex ObjectId |
| `createdAt` | string (date-time) | no |  |
| `updatedAt` | string (date-time) | no |  |
| `deleted` | boolean | yes |  |
| `version` | integer (int64) | yes |  |

## TranslationGridResponse

One window of Translation rows plus the total match count.

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `rows` | `Translation`[] | yes | The requested window of rows (`_id` is returned as `id`, ObjectIds as their 24-hex strings, server-only fields omitted). When grouping (more rowGroupCols than groupKeys) rows are group summaries — `{ "0": <group value>, "childCount": <n>, …aggregates }` — not Translation documents. |
| `lastRow` | integer (int32) | yes | Total number of rows matching the filter — not just this window. |

## UpdateUser

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `emailAddress` | string | no |  |
| `password` | string | no |  |
| `newPassword` | string | no |  |
| `name` | string | no |  |
| `settings` | map of string → `SettingValue` | no |  |

## UploadFile

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `url` | string | yes |  |

## VerifiedResponse

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `userId` | string | no |  |
| `invitation` | string | no |  |

## VerifyUrl

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `verifyUrl` | string | no |  |

## ViewSymbol

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `used` | boolean | yes |  |
| `anchors` | `SymbolAnchor`[] | no |  |
| `labels` | `SymbolLabel`[] | no |  |
| `origin` | `Point` | no |  |
| `layers` | map of string → `ClassicLayer` | no |  |
| `clearance` | `Clearance` | no |  |
| `url` | string | no |  |
| `block` | `BlockSymbolOptions` | no |  |

## VoiceTokenRequest

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `type` | string | yes |  |

## VoiceTokenResponse

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `token` | string | yes |  |
| `voiceId` | string | yes |  |

## oAuth2Provider

| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `name` | string | no |  |
| `issuer` | string | no |  |
| `clientId` | string | no |  |
| `responseType` | string | no |  |
| `scope` | string | no |  |
| `secret` | string | no |  |
| `discoveryDoc` | `OidcDiscoveryDoc` | no |  |
| `keys` | map of string → string[] | no |  |
| `emailChangePolicy` | `EmailChangePolicy` | no |  |
| `claimMappings` | map of string → object | no |  |
| `providerOptions` | map of string → object | no |  |
| `isEnabled` | boolean | no |  |
| `type` | string | no |  |
| `applicationId` | string | yes | A 24-hex ObjectId |
| `id` | string | yes | A 24-hex ObjectId |
| `createdAt` | string (date-time) | no |  |
| `updatedAt` | string (date-time) | no |  |
| `deleted` | boolean | yes |  |
| `version` | integer (int64) | yes |  |
