Standard fields
A fixed set of columns exist on every contact whether you touch them or not:name, email, phone_number, identifier, country_code, blocked, plus the automatic created_at and last_activity_at timestamps. These names are reserved — you cannot define a custom attribute that reuses one of them; Tied rejects it at save time.
Custom attributes
Beyond the standard set, you define your own fields: a key, a display name, and a type. The type is a real, enforced choice — one of eight:
Custom attributes are scoped to either contacts or conversations — this page is about the contact-scoped ones, but the same mechanism (key, display name, type, validation) defines conversation-level custom fields too.
Two buckets, not one
Contacts also carry a second, separate JSON field that isn’t user-defined at all: things Tied itself tracks in the background.city and referer live here, not as columns — Tied fills them in from a contact’s location and the page they arrived from, alongside other reserved keys like which avatar it assigned. That bucket isn’t what this page is about, and you don’t manage it directly — custom attributes are the ones you define, name, and see in a form.
Where they surface
A custom attribute definition isn’t just storage — defining one makes it available in more than one place:- Filters and segments — see Segments and saved filters.
- The web widget’s pre-chat form — a contact-scoped custom field can double as a question you ask before a chat even starts. Change or delete the definition, and the pre-chat form updates to match automatically.
Next
Contacts overview
How a contact is identified in the first place.
Segments and saved filters
Filtering on the attributes you just defined.
Importing contacts
Getting values into a custom attribute in bulk.