Lawfficient API
Leads

Update a lead

PATCH /api/leads/{id} — partially update a lead.

PATCH /api/leads/{id}

Partially updates a lead. Only the fields you send change; omitted fields are left untouched. Requires leads:write. Returns the updated lead and fires the matching webhooks. A lead from another firm returns 404.

Path parameters

ParamTypeDescription
idstringThe lead's UUID.

Request body

JSON. Every field is optional — send only what you want to change.

FieldTypeNotes
first_namestringCan't be blanked.
last_namestringCan't be blanked.
emailstring
phonestring
sourcestringCan't be blanked.
assignee_idstring | nullA UUID to assign, or null to unassign.
statusstringThe firm-defined status key to move the lead to.
dataobjectFirm-defined fields; merged over the stored data (omitted keys are kept).

You can't remove a lead's last contact method — leaving both email and phone empty is a 422.

Events

The response is the updated lead, and the change maps to webhooks:

ChangedEvent
statuslead.status_changed
assigneelead.assigned
any other fieldlead.updated

A no-op PATCH (every value already current) returns the lead and emits nothing.

Example

curl -X PATCH https://app.lawfficient.com/api/leads/3f8c1e2a-1b2c-4d5e-8f90-abcdef012345 \
  -H "Authorization: Bearer $LAWFFICIENT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "status": "qualified", "assignee_id": "a1b2c3d4-0000-4000-8000-000000000000" }'
200 OK
{
  "id": "3f8c1e2a-1b2c-4d5e-8f90-abcdef012345",
  "first_name": "Ada",
  "last_name": "Lovelace",
  "email": "ada@example.com",
  "phone": "+15551234567",
  "source": "partner_referral",
  "status": { "key": "qualified", "name": "Qualified" },
  "assignee_id": "a1b2c3d4-0000-4000-8000-000000000000",
  "archived": false,
  "created_at": "2026-06-24T10:00:00.000Z",
  "last_activity_at": "2026-06-24T10:05:00.000Z",
  "data": { "caseType": "Family" }
}

On this page