Customers API
Manage customer records through the Customers API. All endpoints require authentication and are scoped to your organization.
List Customers
Retrieve a list of all customers in your organization.
curl https://api.lawnledgercrm.com/api/customers \
-b cookies.txtResponse:
{
"data": [
{
"id": "clx8n2k1p0001abcd",
"name": "John Smith",
"email": "john@example.com",
"phone": "555-0100",
"address": "123 Main St, Springfield, IL 62701",
"notes": "Preferred mowing day: Thursday",
"createdAt": "2025-03-15T10:00:00Z",
"updatedAt": "2025-06-01T14:30:00Z"
}
]
}Query Parameters
| Parameter | Type | Description |
|---|---|---|
search | string | Search by name, email, or phone |
tag | string | Filter by tag name |
page | number | Page number (default: 1) |
limit | number | Results per page (default: 50) |
Example with filters:
curl "https://api.lawnledgercrm.com/api/customers?search=smith&limit=10" \
-b cookies.txtGet Customer
Retrieve a single customer by ID.
curl https://api.lawnledgercrm.com/api/customers/clx8n2k1p0001abcd \
-b cookies.txtCreate Customer
Create a new customer record.
curl -X POST https://api.lawnledgercrm.com/api/customers \
-H "Content-Type: application/json" \
-b cookies.txt \
-d '{
"firstName": "Jane",
"lastName": "Doe",
"email": "jane@example.com",
"phone": "555-0200",
"billingAddress": "456 Oak Ave",
"billingCity": "Springfield",
"billingState": "IL",
"billingZip": "62702",
"notes": "Has two dogs in backyard"
}'Required fields
| Field | Type | Description |
|---|---|---|
firstName | string | The canonical name slot. For an individual it’s their first name; for a business, HOA or property manager, put the whole entity name here. |
Optional fields
| Field | Type | Description |
|---|---|---|
lastName | string | Surname, for individuals |
company | string | Company name |
customerType | string | INDIVIDUAL, BUSINESS, PROPERTY_MANAGER, HOA … |
email | string | Email address — optional, not required |
additionalEmails | string[] | Extra addresses that also receive documents |
phone | string | Phone number |
secondaryPhone | string | Second contact number |
billingAddress | string | Street. There is no single address field — city, state and ZIP are separate. |
billingCity | string | City |
billingState | string | State |
billingZip | string | ZIP |
notes | string | Internal notes |
Update Customer
Update an existing customer.
curl -X PATCH https://api.lawnledgercrm.com/api/customers/clx8n2k1p0001abcd \
-H "Content-Type: application/json" \
-b cookies.txt \
-d '{
"phone": "555-0300",
"notes": "Updated phone number"
}'Delete Customer
Delete a customer record.
curl -X DELETE https://api.lawnledgercrm.com/api/customers/clx8n2k1p0001abcd \
-b cookies.txtThis is a soft delete. The customer is tombstoned and disappears from lists, but the record and everything attached to it — properties, invoices, estimates, contracts — are preserved. Nothing is destroyed, which is what you want when the history is part of your accounting record.
Separate endpoints exist for POST /:id/deactivate, POST /:id/reactivate,
POST /:id/anonymize (for a GDPR-style erasure request), and a genuine
DELETE /:id/hard-delete.