> ## Documentation Index
> Fetch the complete documentation index at: https://ekso.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Ekso data models

> Reference for every shape that crosses the API, SDK, and CLI boundaries — copy-pasteable JSON examples, field tables, and constants in one place.

Every shape that crosses the Ekso API / SDK / CLI boundary lives here with a copy-pasteable JSON example, a field table, and a list of where it's used. One source of truth — referenced from API endpoints, SDK methods, CLI commands, and migration guides.

## How to find what you need

| You're looking at...                                     | Start here                                             |
| -------------------------------------------------------- | ------------------------------------------------------ |
| `POST /api/container` request body                       | [`DataContainer`](/data-model/data-container)          |
| `POST /api/item` request body                            | [`DataItem`](/data-model/data-item)                    |
| Comments / activity on an item                           | [`DataAnnotation`](/data-model/data-annotation)        |
| File uploads                                             | [`DataFile`](/data-model/data-file)                    |
| Sprint / iteration / release                             | [`DataCycle`](/data-model/data-cycle)                  |
| Workflow definition                                      | [`ConfigProcess`](/data-model/config-process)          |
| Custom field definitions                                 | [Fields group](#core-models) — one page per field type |
| Automation rules                                         | [`ConfigRule`](/data-model/config-rule)                |
| `"owner": 30` — what does that mean?                     | [Constants](/data-model/constants#content-owner)       |
| Migrating from Jira / Linear / DevOps / Zendesk / Gemini | [Migrate guides](/cli/migrate/overview)                |

If you're new to Ekso's domain, start with the [Guides → Core concepts](/guide/concepts/overview) — it explains what a container, item, board, and cycle are *before* you have to read their JSON shape.

## Anatomy of a page

Every model page has the same four sections:

1. **Sample JSON** — a complete, realistic request body you can copy and edit. Server-set fields (see below) are omitted from the example so the JSON shows what *you* send, not what comes back.
2. **What Ekso fills in** — for models with significant server-managed state ([`DataItem`](/data-model/data-item) is the obvious one), a callout listing fields you'll receive in the response that you didn't pass on the request.
3. **Fields** — every property with type, required-or-not, and notes. Cross-references link to other model pages.
4. **Used by** — request and response endpoints that take or return this shape, plus the matching CLI branch.

## Conventions

Things that hold across every page in this section.

### System fields are server-set

Every model carries the same eight system fields — they're set by the server, not by you, and don't appear in request examples:

| Field                   | Set when                                                               |
| ----------------------- | ---------------------------------------------------------------------- |
| `id`                    | Created on POST                                                        |
| `tenantId`              | Inherited from the request's auth context                              |
| `entity`                | Constant per model — identifies the type in mixed-shape responses      |
| `created` / `createdBy` | Stamped on POST                                                        |
| `updated` / `updatedBy` | Stamped on POST and on every PUT/PATCH                                 |
| `deleted`               | Soft-delete flag — toggled by DELETE; non-deleted records have `false` |

Some models layer additional server-managed fields on top — `DataItem.sequence`, `DataItem.clockStart`, `DataContainer.lastSequence` and so on. Each model page calls these out in its **What Ekso fills in** section.

### Required vs Optional comes from validators

The OpenAPI spec marks every property optional (a quirk of how `System.Text.Json` defaults serialise `.NET` records). The authoritative source for required-ness is the server-side validator that runs before any write. The field table on each page reflects validator rules — `**Required**` means the API will reject your request with a `422` if you omit it.

### Enums on the wire are integers

Enums travel as integers over HTTP and in JSON. The SDK exposes them as typed enums (compiled-in safety). The CLI accepts either the integer or the variant name depending on the command — check `--help`.

The single source of truth for every enum's variant names and values is the [Constants](/data-model/constants) page. Schema field tables link directly into the right anchor — for example, `[ContentOwner](/data-model/constants#content-owner)` jumps you straight to the value list.

### Meta is the lossless free-form bag

Several models carry a `meta` array for free-form key/value metadata that doesn't fit a typed field. Renders in field tables as `array<{ key: string, value: string }>`. Used heavily by the migration tool to preserve source-platform data that has no first-class Ekso shape (e.g. `meta.jira_affects_versions[]`).

### `DataItem.Field[]` is the value bag for typed fields

Unlike most models, `DataItem` keeps almost no human attributes as top-level properties. Name, Description, Status, Priority, Severity, Resolution — all live in `field[]` as `DataItemFieldValue { id, data }` entries. The `id` references a process-defined field (system or custom); the `data` is the value. See [`DataItem`](/data-model/data-item) and [`DataItemFieldValue`](/data-model/data-item-field-value) for the full shape.

## Where to next

* **[Constants](/data-model/constants)** — every enum referenced by the data models, in one place.
* **Core models** — [`DataContainer`](/data-model/data-container) · [`DataItem`](/data-model/data-item) · [`DataAnnotation`](/data-model/data-annotation) · [`DataFile`](/data-model/data-file) · [`DataLink`](/data-model/data-link) · [`DataBoard`](/data-model/data-board) · [`DataCycle`](/data-model/data-cycle) · [`DataArea`](/data-model/data-area)
* **[API Reference](/api-reference/introduction)** — the underlying HTTP routes that take and return these shapes.
* **[CLI](/cli/overview)** — `ekso` commands that operate on these models.
* **[SDK](/sdk/overview)** — typed C# client wrapping the same surface.
* **[Migrate](/cli/migrate/overview)** — pull data from Jira / Linear / Azure DevOps / Zendesk / Gemini into these shapes.
