Notes and tasks
Read the notes written against a lead and the tasks raised on it, as staff see them in the CRM.
Notes and tasks are read-only through the API. Staff write them in the CRM, and the CRM adds its
own: an email logged against the lead becomes an auto-generated note, and a stage move can
raise a task or leave a note when the workflow is set up that way. Contracts have the same two
endpoints under /v1/contracts/{id}; see contracts.
GET List notes
/v1/leads/{id}/notesEvery note on the lead, newest first, with cursor paging. body is HTML as the CRM's editor
stores it. stage is where the lead was when the note was written.
idstring · uuidRequiredThe lead's id.
limitinteger · 1 to 100Out of range is a 422, never silently clamped.
50cursorstringFrom a previous nextCursor. Opaque; never construct one.
orderstringcreatedAt:desc, createdAt:asccreatedAt:desccreatedSincestring · date or date-timeRead in your timezone unless it carries an offset.
createdBeforestring · date or date-timeExclusive.
autostringNotes the CRM generated itself, chiefly logged emails. exclude leaves what people wrote.
include, exclude, onlyincludeinternalstringStaff-only notes the CRM keeps off customer-facing views. Honour the flag if you show notes to the customer.
include, exclude, onlyincludepinnedbooleantrue for the pinned note only, false for the rest.
curl "https://api.evacrm.co.uk/v1/leads/1e4e3f90-4384-42ce-90c3-540db5343964/notes?auto=exclude" \
-H "Authorization: Bearer sk_..."{
"object": "list",
"lead": { "id": "1e4e3f90-4384-42ce-90c3-540db5343964", "code": "L013898" },
"data": [
{
"id": "6a2f9c1d-…",
"body": "<p>Called, no answer. Left a voicemail about the revised quote.</p>",
"action": "Call Mobile",
"internal": false,
"pinned": false,
"autoGenerated": false,
"stage": { "id": "c0d7…", "name": "Quote Sent" },
"createdBy": { "id": "cd9356b7-…", "name": "Sam Rep", "email": "sam@example.com" },
"externalRef": null,
"source": null,
"createdAt": "2026-09-02T14:05:11.208+01:00",
"updatedAt": "2026-09-02T14:05:11.208+01:00"
},
{
"id": "0b41…",
"body": "Email received</br>From: jane@example.com</br>To: sam@example.com</br>Subject: Re: Your quotation</br>",
"action": null,
"internal": false,
"pinned": false,
"autoGenerated": true,
"stage": { "id": "c0d7…", "name": "Quote Sent" },
"createdBy": { "id": "cd9356b7-…", "name": "Sam Rep", "email": "sam@example.com" },
"externalRef": null,
"source": null,
"createdAt": "2026-09-01T16:40:02.913+01:00",
"updatedAt": "2026-09-01T16:40:02.913+01:00"
}
],
"hasMore": false,
"nextCursor": null
}actionis the note type staff picked, such asCall Mobile,EmailorText Message, ornullfor a plain note.createdByis the staff member whose account wrote the note. For an auto-generated note that is whoever's mailbox or action produced it.- Paging follows the same guarantees as leads: keyset cursors, and a 422 if the filters change mid-crawl.
GET List tasks
/v1/leads/{id}/tasksEvery task raised on the lead, soonest due first. A task is for one person or one team, and
overdue is set once an open task's due date is behind today in your timezone; a task due
today is not overdue yet.
idstring · uuidRequiredThe lead's id.
limitinteger · 1 to 10050cursorstringFrom a previous nextCursor.
orderstringdueDate:asc, dueDate:desc, createdAt:descdueDate:ascstatusstring · listOne or both. Both by default.
open, completeddueSincestring · date or date-timeDue on or after. A due date set from the CRM's date picker is midnight in your timezone, so a bare date works; tasks can also carry a time.
dueBeforestring · date or date-timeExclusive. status=open&dueBefore=<today> is the overdue list.
curl "https://api.evacrm.co.uk/v1/leads/1e4e3f90-4384-42ce-90c3-540db5343964/tasks?status=open" \
-H "Authorization: Bearer sk_..."{
"object": "list",
"lead": { "id": "1e4e3f90-4384-42ce-90c3-540db5343964", "code": "L013898" },
"data": [
{
"id": "8d3e…",
"body": "Chase the customer about the revised quote",
"dueAt": "2026-09-03T00:00:00.000+01:00",
"completed": false,
"overdue": true,
"completedAt": null,
"completedBy": null,
"assignee": { "id": "cd9356b7-…", "name": "Sam Rep", "email": "sam@example.com" },
"assignedTeam": null,
"autoCreated": false,
"stage": { "id": "c0d7…", "name": "Quote Sent" },
"createdBy": { "id": "7f1a…", "name": "Sales Manager", "email": "manager@example.com" },
"externalRef": null,
"source": null,
"createdAt": "2026-09-01T09:12:44.001+01:00",
"updatedAt": "2026-09-01T09:12:44.001+01:00"
},
{
"id": "5c9b…",
"body": "Book the survey",
"dueAt": "2026-09-10T00:00:00.000+01:00",
"completed": true,
"overdue": false,
"completedAt": "2026-09-02T10:30:15.442+01:00",
"completedBy": { "id": "cd9356b7-…", "name": "Sam Rep", "email": "sam@example.com" },
"assignee": null,
"assignedTeam": { "id": "3b2c…", "name": "Surveyors" },
"autoCreated": true,
"stage": { "id": "…", "name": "Appointed" },
"createdBy": { "id": "cd9356b7-…", "name": "Sam Rep", "email": "sam@example.com" },
"externalRef": null,
"source": null,
"createdAt": "2026-08-30T15:00:00.000+01:00",
"updatedAt": "2026-09-02T10:30:15.442+01:00"
}
],
"hasMore": false,
"nextCursor": null
}autoCreatedmarks tasks a stage action raised rather than a person.stageis where the lead was when the task was raised, when the CRM recorded it.- Task forms the CRM attaches to some tasks are not returned.