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

# Data Model

> How Supersonic's dynamic data model works — data types, records, fields, pipelines, and relations.

Supersonic has no hardcoded tables. The entire schema is dynamic — each workspace defines its own data types, fields, and pipelines at runtime.

## Core Concepts

### Data Types (ObjectType)

A data type defines an entity in the CRM. Default types include Company, Contact, and Deal, but workspaces can create any custom type.

Each data type has:

* A **slug** (e.g. `company`, `deal`, `contact`) — used in all tool calls
* A **name** and **icon** for display
* A set of **field definitions**

Call `objects.list` to discover all data types in a workspace.

### Fields (FieldDefinition)

Fields define the shape of records. Each field has a slug, label, type, and validation rules.

Supported field types:

| Type           | Description                       |
| -------------- | --------------------------------- |
| `text`         | Free text                         |
| `number`       | Integer value                     |
| `decimal`      | Decimal number                    |
| `currency`     | Monetary value with currency code |
| `date`         | Date value                        |
| `datetime`     | Date and time value               |
| `boolean`      | True/false                        |
| `email`        | Email address                     |
| `url`          | Web URL                           |
| `phone`        | Phone number                      |
| `select`       | Single choice from options        |
| `multi_select` | Multiple choices from options     |
| `relation`     | Link to another data type         |

Select and multi\_select fields have an options array: `[{"label": "SaaS", "value": "saas"}, ...]`

### Records

A record is an instance of a data type. It stores data as a JSON object where keys are field slugs:

```json theme={null}
{
  "id": "rec-uuid",
  "object_type": "company",
  "data": {
    "name": "Acme Corp",
    "domain": "acme.com",
    "industry": "SaaS",
    "employee_count": 150
  }
}
```

Records are validated against their data type's field definitions on create and update.

### Relations

Relations are typed links between two records. For example, a Contact can be linked to a Company. Use `records.link` and `records.unlink` to manage them.

When you call `records.get`, the response includes all related records.

### Pipelines (List)

A pipeline (internally called a List) is a Kanban board scoped to a data type. For example, a "Sales Pipeline" scoped to the Deal data type.

Each pipeline has **stages** (e.g. "Qualification", "Proposal", "Negotiation", "Closed Won").

### Pipeline Entries (ListEntry)

When a record is added to a pipeline, it becomes an entry with:

* A **stage** — which column it's in
* A **position** — its order within that column
* Optional **entry-level data** — custom fields specific to the pipeline

Use `lists.add_entry` to add records, `lists.update_entry` to move between stages.

## Important

Always call `objects.list` before creating or querying records. Each workspace has a different schema, and field slugs vary. Never hardcode field names.
