Skip to main content

Data Model

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:
TypeDescription
textFree text
numberNumeric value
emailEmail address
phonePhone number
dateDate value
selectSingle choice from options
multi_selectMultiple choices from options
urlWeb URL
booleanTrue/false
currencyMonetary value with currency code
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:
{
  "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.