eva crm Public API

Changelog

Every change you could notice, dated. Nothing is removed or renamed.

Changes are additive. An endpoint or field, once published, is never removed or renamed; at most it is marked deprecated with a replacement named, and keeps working.

2026-09-02 — initial release

  • GET /v1/whoami
  • POST /v1/leads, replacing the webhooks.evacrm.co.uk intake. Its nine fields (id, name, email, phone, postcode, message, smsMarketing, emailMarketing) are accepted unchanged and marked deprecated in favour of explicit ones.
  • PATCH /v1/leads/{id} to change any subset of a lead's fields, with If-Unmodified-Since.
  • GET /v1/leads/{id}, and GET /v1/leads with cursor pagination and status, date, reference, source, code, test and assignedTo filters, plus stage, workflow and daysInStage to find leads stuck in a stage — a stage name matches every workflow that has it. Each lead carries daysInStage.
  • GET /v1/leads/workflows and GET /v1/contracts/workflows: every workflow with its stages, the names and ids those filters take.
  • GET /v1/leads/fields and GET /v1/leads/fields/{field}.
  • POST, GET and DELETE on /v1/leads/{id}/attachments, with documentType to file a batch, and GET /v1/leads/attachments/categories to list what's available.
  • GET /v1/leads/{id}/stages and PUT /v1/leads/{id}/stage.
  • GET /v1/leads/{id}/notes and GET /v1/leads/{id}/tasks, and the same under /v1/contracts/{id}: what staff wrote and what the CRM raised, paged, with auto, internal and pinned filters on notes and status and due-date filters on tasks.
  • GET /v1/users and assignedTo on lead creation, with each user's roles and a role filter, and GET /v1/users/roles.
  • Supplier invoices: GET /v1/suppliers, GET /v1/supplier-invoices, GET /v1/supplier-invoices/{id}, GET /v1/supplier-invoices/types, bulk POST /v1/supplier-invoices, PATCH /v1/supplier-invoices/{id}, DELETE /v1/supplier-invoices/{id}, and POST /v1/supplier-invoices/{id}/export and POST /v1/supplier-invoices/{id}/unexport — an exported invoice is read-only until unmarked.
  • Appointments: GET /v1/appointments with window, type, status, user, role, team and record filters, GET /v1/appointments/{id}, GET /v1/appointments/types and POST /v1/appointments with the CRM's duplicate and clash checks.
  • GET /v1/appointments/availability: free slots by person, role or appointment type.
  • Contracts: GET /v1/contracts with the same filters as leads, stage, workflow and daysInStage included, GET /v1/contracts/{id}, stages and attachments as for leads.
  • Invoices: GET /v1/invoices/types, GET /v1/contracts/{id}/invoices, GET /v1/invoices/{id}, POST /v1/invoices/{id}/raise, POST /v1/invoices/{id}/unraise, DELETE /v1/invoices/{id} and GET /v1/invoices/{id}/pdf for a download link. POST /v1/contracts/{id}/invoices is reserved for creating invoices and answers 501 until then.
  • Payments: GET /v1/contracts/{id}/payments, POST /v1/contracts/{id}/payments, GET /v1/payments/{id}, POST /v1/payments/{id}/allocations.
  • Dates are read and shown in your organisation's timezone, with X-Timezone to override per request. See dates and timezones.

Known limitations

  • Keys have no scopes; every key can use every endpoint.
  • No rate limit is enforced yet. Design for 60 requests per minute per key.
  • Deleting files uploaded by staff is not available.

On this page