Customer Contacts
Named people associated with a customer — capturing their title, email, phone, and notes — available as checkout recipients and activity targets across every customer-facing module.
A customer contact is a named individual who belongs to a customer record — the actual person you call, email, or hand equipment to, as opposed to the company or account itself. Contacts let you keep multiple people on file for the same customer — a purchasing manager, a site supervisor, a billing clerk — without duplicating the customer record. They show up as checkout recipients in asset checkout, loan agreements, and rental agreements, and they can be the target of activities, tasks, and notes.
A contact always belongs to exactly one customer and inherits the owner scope of that customer. Deleting a contact is a soft delete — its checkout history is retained.
Managing contacts in the UI #
Contacts are managed from the Contacts tab on any customer's view page (CRM → Customers → [customer name]). There is no standalone list for contacts — they live on their parent customer.
From the Contacts tab you can:
- Add a contact — click New to open the inline form.
- Edit a contact — click the edit icon on any row.
- Delete a contact — click the delete icon; the record is soft-deleted.
- View checkout history — click the Checkouts button on any contact row to open a modal showing every unit checked out to that contact, with the Product, linked sales order, checked-out date, and checked-in date (or an "Active" badge if still out).
Contact fields #
Each contact record holds:
- Name — required. The person's full name, shown in all checkout and activity pickers.
- Title — optional job title (e.g. Site Supervisor, Purchasing Manager).
- Email — optional email address, validated as a proper email format.
- Phone — optional phone number.
- Notes — a free-text field for anything else worth knowing about this contact.
None of the fields beyond Name are required, so you can add a contact with just a name and fill in the rest later.
Contacts as checkout recipients #
When you check out a returnable unit via Inventory → Check Out, the Checked Out To picker lets you choose a Staff User, a Customer, or a Customer Contact. Picking a contact ties the checkout to that specific person rather than the customer organization as a whole. The contact's checkout history — every unit ever checked out to them, open or returned — is visible from the Checkouts button on the Contacts tab and in the full checkout log on the unit itself.
In a rental agreement, a contact can be selected as the point of contact for the agreement. In a loan agreement, a contact can be the borrower of the entire loan.
How contacts relate to other modules #
- Opportunities — an opportunity can be linked to a contact as well as a customer, letting you track which person you are dealing with on a given deal.
- Activities, tasks, and notes — customer activities, tasks, and notes are logged against the customer record and can be linked directly to a specific contact, so notes and tasks appear scoped to that person as well as the customer.
- Quotes and orders — quotes and sales orders draw their billing and shipping information from the parent customer, but a contact can be referenced as the point of contact on the document.
The customer record #
Everything about the parent account — billing and shipping addresses, payment terms, price list, and custom fields — lives on the customer record itself, not on the contact. Contacts are purely people; the business relationship details stay on the customer.
Doing it from the API #
# List all contacts for a specific customer
curl "https://your-domain.com/api/v1/customer-contacts?customer_id=<customer-id>" \
-H "Authorization: Bearer $TOKEN"
# Create a contact
curl -X POST "https://your-domain.com/api/v1/customer-contacts" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"customer_id": "<customer-id>",
"name": "Jane Smith",
"title": "Purchasing Manager",
"email": "jane@example.com",
"phone": "555-0100"
}'
The list endpoint accepts a customer_id query parameter to scope results to a
single customer's contacts; omitting it returns all contacts across your account,
paginated at 50 per page.