CRMchat APIBeta

Contacts

Manage contacts and retrieve enriched custom property data

View in Markdown

Contacts are the core object in the CRM. Each contact belongs to a workspace and stores profile information alongside custom property values defined for that workspace.

Custom Properties

Custom property values are stored under the property's key (e.g. custom.lead_status). See Custom Properties for how to define and manage these fields.

Endpoints

Custom Properties Enrichment

Custom properties store raw values (option keys, user IDs) on the contact. Contact responses include a _meta field that resolves these to human-readable labels and names — saving you from having to cross-reference option lists or look up workspace members separately.

Contact response
{
  "id": "abc123",
  "fullName": "Jane Smith",
  "custom": {
    "status": "active",
    "assignee": "usr_xyz"
  },
  "_meta": {
    "properties": {
      "custom.status": {
        "type": "single-select",
        "name": "Status",
        "selected": { "label": "Active", "value": "active" }
      },
      "custom.assignee": {
        "type": "user-select",
        "name": "Assignee",
        "selected": {
          "label": "Alice Smith",
          "value": "usr_xyz",
          "avatarUrl": "https://..."
        }
      }
    }
  }
}

_meta.properties is a map keyed by the property's dot-path key (e.g. "custom.status"). Each entry includes the property name as configured in your workspace, the type, and type-specific resolved data.

single-select

{
  "type": "single-select",
  "name": "Status",
  "selected": { "label": "Active", "value": "active" }
}

selected is null if the stored value no longer matches any configured option — for example, when an option has been deleted from the workspace after the contact was saved.

multi-select

{
  "type": "multi-select",
  "name": "Tags",
  "selected": [
    { "label": "VIP", "value": "vip" },
    { "label": "Enterprise", "value": "enterprise" }
  ]
}

Only values that match a currently configured option appear in selected. Deleted options are silently dropped — if a contact had ["vip", "lead"] and the "lead" option was removed, selected will contain only [{ "label": "VIP", "value": "vip" }].

user-select

{
  "type": "user-select",
  "name": "Assignee",
  "selected": {
    "label": "Alice Smith",
    "value": "usr_xyz",
    "avatarUrl": "https://..."
  }
}

selected is null if the stored user ID is no longer a member of the workspace — for example, when a user has been removed after being assigned to a contact. avatarUrl is omitted when the user has no avatar.

Text-like types

For text, textarea, url, email, tel, and amount properties, the entry contains only the name and type — the raw value is already on the contact object itself.

{
  "type": "email",
  "name": "Email"
}

Omitted Properties

A property is omitted from _meta.properties entirely when its value is empty (null, undefined, "", or []). Only properties with a non-empty value appear.

On this page