Customers
Customers are the main CRM records. A customer can have contact fields, folder/status data, tags, custom fields, sub-fields, child records, messages, missions, documents, recordings, tickets, and working-time rows.
Fields
- Common fields are built-in values such as name, email, phone, mobile, company, company_id, source, address, city, note, website, folder_id, status_id, and followup.
- Custom fields come from User.Basic field_settings.customer.extra_fields. Build forms from those settings and send values as extra_fields JSON or cf-field_name fields.
- Date/time fields should be sent as UTC Y-m-d H:i:s. Date-only UI values should still be normalized before posting when the route expects datetime.
Sub Fields
- Folder sub fields describe the stage inside a folder/status, for example sub_list_data, sub_list_data_name, and internal_sub_status_list.
- Use User.Basic to know which folders, statuses, tags, and field options are allowed for the logged-in user.
- Unknown custom-field keys should not be sent. The UI should only submit keys that exist in field_settings.
Father / Child Customers
- A customer can be linked under another customer using parent_customer_id.
- Use parent/child customers for family accounts, company contacts, rooms/reservations, or grouped contacts.
- When showing a customer page, keep the customer_id in state so related routes can load missions, chat, documents, recordings, tickets, and child customers.
Reminders
- Customer.Reminder.List / Count load rows from contactus_reminder for one customer (dashboard profile/get_reminder_data_list).
- Customer.Reminder.Add / Edit / Update save reminders like dashboard setting/highlight_time_and_color_update.
- Send date_time in the logged-in user timezone (Y-m-d H:i:s). The API stores UTC in date_time and returns date_time_user in responses.
- reminder_by supports email, popup, sms, whatsapp, and sip. This is different from Customer.FollowUp which only updates contactus.followup.
- Customer.Reminder.Get opens one row for edit. Customer.Reminder.Delete / Remove deletes one row.
Duplicates
- Customer.Add checks whether the customer already exists by fields such as email, phone, mobile, company_id, and configured duplicate rules.
- If an existing customer is found, the response gives existing_customer_id, duplicate_by, duplicate_value, and duplicate_reason.
- Send force=1 only when the UI intentionally needs to create a new customer even when a match exists.
Common Flow
- Login and store the bearer token.
- Call User.Basic and store folders, statuses, tags, team members, permissions, and customer field settings.
- Use Customer.List and Customer.Count for list screens.
- Use Customer.Get for details screens.
- Use Customer.Add, Customer.Edit/Update, Customer.FollowUp, Customer.Reminder.*, and Customer.Delete/Remove for actions.
Routes In This Category
Customer.AddCustomer.CountCustomer.DeleteCustomer.EditCustomer.FollowUpCustomer.GetCustomer.ListCustomer.ListOptionsCustomer.Reminder.AddCustomer.Reminder.CountCustomer.Reminder.DeleteCustomer.Reminder.EditCustomer.Reminder.GetCustomer.Reminder.ListCustomer.Reminder.RemoveCustomer.Reminder.UpdateCustomer.ReminderCustomer.RemoveCustomer.RemoveFolderCustomer.RemoveTagCustomer.Update