eva crm Public API
Leads

Update a lead

PATCH /v1/leads/{id} — change only the fields you send.

PATCH Update a lead

PATCH/v1/leads/{id}

Sends only what changes. No field is required, but the body must hold at least one. Fields you leave out are untouched; null (or an empty string) clears one. The response is the updated lead in the same shape as GET /v1/leads.

Path parameters
idstring · uuidRequired

The lead's id.

Headers
If-Unmodified-Sincestring · date-time

The updatedAt you last read. If staff have edited the lead since, the patch is refused with a 409 and the current updatedAt, so you can re-read and decide. Without it the patch always applies.

Request body · personapplication/json — at least one field from any group
firstNamestring · max 100, or null

The customer must keep a name: one of firstName, lastName or companyName.

lastNamestring · max 100, or null
companyNamestring · max 250, or null
titleoption · id or name, or null
customerTypeoption · id or name, or null
Request body · contact
emailstring · email · max 255, or null

The customer must keep a way to be contacted: one of email, phoneNumber or mobile.

phoneNumberstring · max 50, or null

Normalised as on create.

mobilestring · max 50, or null

Normalised as on create.

addressstring · max 250, or null
address2string · max 250, or null
address3string · max 250, or null
townstring · max 100, or null
countystring · max 100, or null
postcodestring · max 20, or null

Upper-cased.

countryoption · id or name, or null
what3Wordsstring · max 100, or null
Request body · consent
marketingEmailboolean
marketingSmsboolean
marketingPostboolean
Request body · attribution
marketingoption · id or name, or null

Clearing it clears subSourceCampaign with it.

subSourceCampaignoption · id or name, or null

Sent alone, moves the lead to that campaign's source. By name it is looked up within the current or sent marketing.

leadTypeoption · id or name, or null
mainInterestoption · id or name, or null
salesAreaoption · id or name, or null
leadProductTypesoption[] · max 50, or null

Replaces the whole list.

Request body · property
propertyTypeoption · id or name, or null
propertyCategoryoption · id or name, or null
planningRequiredoption · id or name, or null
planningTypeoption · id or name, or null
propertyOtherstring · max 250, or null
yearBuiltinteger · 1000 to 2200, or null
Request body · assignment and free text
assignedTostring · user id or email, or null

Reassigns and notifies the new user; null unassigns.

messagestring · max 5000, or null
advancedDataobject, or null
expectedCloseDatestring · date or date-time, or null

Read in your timezone.

testboolean

Types, limits and valid values are exactly those of create: option fields take an id or name, dates are read in your timezone, phone numbers and postcodes are normalised. The identity fields cannot change: reference, source, and the old webhook's aliases (id, name, phone, emailMarketing, smsMarketing) are refused.

Any patch bumps the lead's updatedAt, even when only customer or contact fields changed, so a sync using updatedSince sees it. Changing the stage is a separate call: move to a stage.

Responses
200
Applied. `changed` lists what moved; an empty list means the values already matched.
404
No such lead in your organisation.
409
`If-Unmodified-Since` is older than the lead's `updatedAt`.
422
Unknown field, invalid value, unresolvable option, or a rule above broken. `fields` says which.
502
The CRM did not answer. Nothing changed; repeat the request.
Example request
curl -X PATCH https://api.evacrm.co.uk/v1/leads/1e4e3f90-4384-42ce-90c3-540db5343964 \
  -H "Authorization: Bearer sk_..." \
  -H "If-Unmodified-Since: 2026-09-02T11:14:03.512+01:00" \
  -H "Content-Type: application/json" \
  -d '{
    "mobile": "07700 900456",
    "leadType": "Doors",
    "expectedCloseDate": "2026-10-01",
    "assignedTo": "sam@example.com",
    "companyName": null
  }'
Example response · 200
{
  "changed": ["mobile", "leadType", "expectedCloseDate", "assignedTo", "companyName"],
  "lead": { "id": "1e4e3f90-…", "code": "L013898", "…": "…" }
}

On this page