Data model overview

How customers, companies, conversations, messages, notes, custom objects, users and teams relate in Kustomer, and which endpoints work with each.

Kustomer is organized around the customer. Instead of a ticket queue where each request stands alone, every conversation, message, order and event hangs off one customer record and appears on one timeline. That shape explains most of the API: many endpoints are nested under /v1/customers/{id}, and most objects carry a customer relationship.

The objects

ObjectWhat it representsBelongs toBase path
CustomerA person you supportOptionally a company/v1/customers
CompanyAn organization customers belong toOptionally a parent company/v1/companies
ConversationA thread with one customer, with status, assignment and SLAA customer/v1/conversations
MessageOne inbound or outbound communication on a channelA conversation and a customer/v1/messages
NoteAn internal comment visible only to your teamA conversation/v1/notes
DraftAn unsent outbound messageA conversation/v1/drafts
AttachmentA file on a message, note or draftIts parent/v1/attachments
KObjectA record of a custom type, such as an order or bookingA customer or company/v1/klasses/{name}
KlassThe schema for a type of KObjectYour org/v1/klasses
UserAn agent, admin or machine userYour org/v1/users
TeamA group of usersYour org/v1/teams

Every object has a 24-character id assigned by Kustomer, and most accept an externalId you choose. Use externalId to link records to your own systems.

The timeline

The customer timeline is the agent's view of this graph: conversations with their messages and notes, KObjects such as orders and subscriptions, and tracked events, merged and sorted by time.

A customer's timeline combines conversations, custom objects and events.

That's why you should attach data to the right customer: an order KObject created under the customer shows up next to the conversation where the customer asks about it, and workflows can use both.

Standard and custom attributes

Every object has standard attributes defined by Kustomer, such as name, emails and status. Objects also accept custom attributes under a custom key, typed by their name suffix:

JSON
{
  "name": "Jane Doe",
  "custom": {
    "loyaltyTierStr": "gold",
    "lifetimeValueNum": 1840.5,
    "lastOrderAt": "2026-10-02T15:04:05Z",
    "marketingOptInBool": true
  }
}

Custom attributes covers the suffixes and how to give each attribute a display name, type and options.

Relationships in responses

Responses describe links to other objects in a relationships block, using IDs:

JSON
{
  "data": {
    "type": "conversation",
    "id": "58228e05d4e96711004eccb7",
    "attributes": { "name": "Where is my order?", "status": "open" },
    "relationships": {
      "customer": {
        "data": { "type": "customer", "id": "5822a4a5aa5f92110005d69a" },
        "links": { "self": "/v1/customers/5822a4a5aa5f92110005d69a" }
      }
    }
  }
}

In requests, you set a relationship with a plain ID attribute, such as "customer": "5822a4a5aa5f92110005d69a" or "company": "...". See Request and response format.

Where to go next