Guide
Contacts
Sonny builds your contact list as customers chat, email, or receive an outbound message. Your website and integrations can create contacts too.
How contacts are created
There is no separate "Add Contact" button on the Contacts page. Use the workflow that matches where the customer comes from.
- Live chat
- When a visitor provides their name and email through the chat widget, a contact is automatically created. If a contact with that email already exists, their name is updated.
- Inbound email
- When an email arrives at your forwarding address, Sonny automatically creates a contact using the sender's email and name. If the sender already exists as a contact, the existing record is used.
- New conversation
- In the inbox, select "New conversation", choose a channel under "From", then open "To". Type a full email address and choose "Use new email". When you send the message, Sonny creates the contact and the email conversation together.
- Visitor identification
- If your website identifies a logged-in visitor with the widget API, Sonny creates or updates their contact and links conversations from that visitor session to it.
- Public API
- REST and MCP can create contacts, set typed custom fields, filter by exact field values, and manage customer memories per channel. See the Public API guide for scopes and examples.
Contact fields
Each contact record has the following fields. Editable fields can be changed from the contact detail page.
- EmailRead-only
- The contact's email address. Set automatically when the contact is created. Unique per workspace — two contacts in the same workspace cannot share an email.
- NameEditable
- The contact's display name. Set automatically from chat or email, and can be edited manually from the contact detail page.
- ChannelRead-only
- The channel where the contact was first created. The Contacts list and contact page show its customer-facing channel label. Set automatically and cannot be changed.
- NotesEditable
- Free-text internal notes about the contact. Only visible to your team, never shown to the contact. Use this for context like account details or special instructions.
- TagsEditable
- Color-coded labels shared across your workspace. Tags can also be applied to conversations. Use them to categorize contacts by type, priority, or any grouping that works for your team.
- Custom fieldsEditable
- Extra fields you define yourself in Settings > Custom Fields — text, number, URL, date, or a pick-list. Values can be edited on the contact page, set through REST or MCP, or filled in by your website through the chat widget. Automatically updated values show a small "SDK" marker with the time of the last update.
What you can do with contacts
- Search and sort
- Search contacts by name or email from the contacts list. Sort by name, email, channel, or creation date in ascending or descending order.
- Tags
- Apply color-coded tags to contacts for organization. Tags are workspace-wide and shared with conversations. Add or remove tags from the contact detail page.
- Merge Contacts
- Merge duplicate contacts into one. Select a primary contact and one or more secondary contacts to merge. All conversations from the secondary contacts are moved to the primary contact. Secondary contacts are archived.
- Flexible creation
- Contacts can come from chat, inbound email, a new outbound conversation, visitor identification, or the Public API. There is no separate Add Contact button in the Contacts page.
Update or merge a contact
Open Contacts and select a contact. Edit their name or notes, then select Save.
Tags save when you add or remove them. Custom fields save when you choose a value, press Enter, or leave the field. Integrations can also set them by property ID or name, with validation for the field type.
API-authored field values carry API provenance and can inform Co-Pilot and the auto-responder under their verified-customer rules. Ordinary manual internal values stay excluded. Customer memories can be read, saved, or removed per contact and channel through REST or MCP.
To combine duplicates, select Merge. In the Merge Contacts dialog, search for the contacts to merge, select them, and confirm. Their conversations move to the contact you kept, and the duplicate contacts are archived.
Archiving vs permanently deleting (GDPR)
Archiving hides a contact but keeps their conversation history. Merged duplicates are archived, and integrations can archive a contact through the Public API.
Permanently deleting erases the person. Use it when a customer asks you to delete their data, for example under the GDPR right to erasure. Open the contact and select Delete permanently. The dialog shows how many conversations will go, and you type the contact's email to confirm. This cannot be undone.
Sonny removes:
- The contact, with their tags, custom fields and customer memories
- Every conversation with them, including ones in Trash, with all messages, internal notes, attachments and stored files
- Their CSAT ratings, their browsing history from Live visitors, and notifications about their conversations
- Copies held for integrations, such as stored webhook payloads with message text, and AI memories learned from their messages
Sonny keeps:
- Their email on your bounce, complaint and blocked-sender lists, so they are never contacted against their wishes
- One audit entry recording that a contact was deleted, who did it, and how many conversations, messages and attachments went, with no name or email
- Totals in reports and AI usage, plus knowledge your team wrote (help articles and channel memories you added yourself)
Only owners and admins can permanently delete a contact. Integrations can do the same with the erase_contact MCP tool or POST /api/v1/contacts/{contactId}/erase, which sends a contact.erased webhook so connected systems can delete their copies too.
Contacts and conversations
Every conversation is linked to a contact (once an email is provided). From a contact's detail page, you can see all their conversations — including status, channel, assignee, and the last message. Click any conversation to jump directly to it in the inbox.
Contacts also show an effort score — Sonny's estimate of how much work this customer has had to put in recently (low, moderate, high, or critical). It's based on signals like how often they've been in touch, how quickly they got replies, and whether conversations were reopened or passed around. A high score is a hint to give them extra care.
Related docs
- Inbox
Understand statuses, priorities, assignment, snoozing, bulk actions, and keyboard shortcuts.
- Visitor identification
Identify logged-in users and send custom attributes from your website.
- Saved replies
Create reusable message templates with categories, shortcuts, and dynamic fields.
- Reporting
Track conversation volume, response times, customer satisfaction, and team performance.