LeadChime REST API
The LeadChime REST API lets you add, update and manage your contacts and the notes, tasks and tags attached to them from any external application — Zapier, Make, a CRM sync, or your own code. Every request is scoped to the workspace that owns the API key.
Base URL: https://leadchime.com/api/v1
Authentication
Every request carries an API key as two headers:
curl https://leadchime.com/api/v1/contacts \
-H "LeadChime-Public-Key: lc_pk_…" \
-H "LeadChime-Token: lc_sk_…"
- Create keys under Settings → API keys in your LeadChime workspace. You get a public key and a secret token; the token is shown once.
- Send both headers on every request. Keys are either read & write, or read only (GET requests only).
- Basic-auth "API credentials" and front-end nonces described in some client libraries are not supported — use API keys.
Responses & errors
All responses are JSON. Successful calls carry "status": "success"; failures carry "status": "error" plus a machine-readable code.
Single item
{
"status": "success",
"item": { "ID": 1234, "data": { ... }, "meta": { ... } }
}
List
{
"status": "success",
"total_items": 99,
"items": [ { "ID": 1234, ... }, ... ]
}
Error
{
"status": "error",
"code": "validation_failed",
"message": "The request failed validation.",
"errors": { "data.email": ["The data.email field must be a valid email address."] }
}
Conventions
- Dates are ISO-8601 in UTC (e.g. 2026-09-03T14:05:25+00:00). Inputs accept ISO-8601, "YYYY-MM-DD HH:MM:SS", or UNIX timestamps.
- total_items on lists is the full match count, independent of limit/offset.
- POST and PATCH bodies may be a single object or a JSON array of objects to act on many at once.
- Sending null (or an empty string) for a meta key removes it.
- Phone numbers are normalized to E.164 (+1…) when they parse as a valid number.
Error codes
| HTTP | code | Meaning |
|---|---|---|
| 401 | missing_credentials | One or both auth headers are missing. |
| 401 | invalid_credentials | Unknown public key, wrong token, or the key was revoked / expired. |
| 403 | read_only_key | A read-only key attempted a write. |
| 403 | tenant_inactive | The workspace is deactivated. |
| 404 | not_found | No such object in this workspace. |
| 409 | contact_in_use | Deleting a contact that has invoices, quotes or jobs. Pass force=true. |
| 422 | validation_failed | Body failed validation; see errors. |
| 422 | invalid_filter | A filter clause was not understood. |
| 422 | invalid_meta | A meta key is reserved or its value is invalid. |
| 422 | invalid_parameter | limit/offset/order/orderby out of range. |
| 422 | too_many_items | A synchronous bulk operation matched too many contacts; use bg=true. |
| 422 | refusing_unfiltered_delete | Bulk delete without any filter; pass confirm_all=true to confirm. |
| 429 | rate_limited | Too many requests for this key. |
| 500 | server_error | Something went wrong on our side. |
Pagination & ordering
List endpoints accept limit (default 20, max 500), offset, order (ASC or DESC) and orderby. The response's total_items is the full count so you can page through everything.
curl "https://leadchime.com/api/v1/contacts?limit=50&offset=100&orderby=date_created&order=ASC" \
-H "LeadChime-Public-Key: lc_pk_…" -H "LeadChime-Token: lc_sk_…"
Filters
Filters are the most flexible way to select contacts. A filter is an array of groups; groups are OR-ed together and the clauses inside a group are AND-ed. Each clause is {"type", "compare", "value"}. With GET requests, JSON-encode the array and then base64-encode it into ?filters=…; with a JSON body you can pass the array directly.
[
[
{ "type": "email", "compare": "ends_with", "value": "@example.com" },
{ "type": "tags", "compare": "has_any", "value": ["customer"] }
],
[
{ "type": "optin_status", "compare": "in", "value": [2] }
]
]
Then, for a GET request: ?filters=<base64(json)>.
| type | compare | value |
|---|---|---|
first_name, last_name, full_name, email, phone, address, service, source, message | equals, not_equals, contains, not_contains, starts_with, ends_with, empty, not_empty | string |
meta (with "key") | same as text | string |
optin_status | equals, not_equals, in, not_in | int or int[] |
status (pipeline: new, contacted, quoted, won, lost) | equals, not_equals, in, not_in | string or string[] |
owner | equals, in, not_in, empty, not_empty | user id(s) |
tags | has_any, has_all, has_none | tag ids and/or names |
date_created, date_updated, date_optin_status_changed | before, after, between, is | date, or [from, to] for between |
is_marketable | — | "marketable": true|false |
id | in, not_in | int[] |
Contact meta
meta holds any key→value pairs you like. Keys are lower-cased. A few keys are "virtual" and map straight onto contact fields:
| meta key | Maps to |
|---|---|
primary_phone | The contact's phone number. |
address | Street address. |
service | Service they asked about. |
message | Their original request message. |
source | Lead source label (website, google, referral, api, …). |
pipeline_status | Pipeline stage: new, contacted, quoted, won, lost. |
deal_value | Estimated deal value (number). |
referral | Who referred them. |
- locale defaults to en_US. mobile_phone, country, region, city and birthday are always present in output (empty string when unset).
- Data fields (email, first_name, last_name, optin_status, owner_id, …) belong in "data" and are rejected inside meta.
Opt-in statuses
optin_status is an integer. Marketable contacts can receive campaigns and follow-ups; is_marketable also requires that "do not contact" is off.
| Value | Status | Marketable |
|---|---|---|
1 | Unconfirmed | Yes |
2 | Confirmed | Yes |
3 | Unsubscribed | No |
4 | Weekly | Yes |
5 | Monthly | Yes |
6 | Hard bounce | No |
7 | Spam | No |
8 | Complained | No |
9 | Blocked | No |
Rate limits
120 requests per minute per API key.
- Limits apply per API key. Exceeding them returns HTTP 429 with a Retry-After header.
- Repeated failed authentication from one IP is throttled independently.
Contacts
Add, update, and manage your contacts remotely. Adding a contact whose email (or, failing that, phone) already exists updates that record instead of creating a duplicate.
- GET/contacts
- POST/contacts
- PATCH/contacts
- DELETE/contacts
- GET/contacts/:id
- PATCH/contacts/:id
- DELETE/contacts/:id
- POST/contacts/:id/merge
The Contact object
{
"ID": 1234,
"data": {
"email": "[email protected]",
"first_name": "John",
"last_name": "Doe",
"full_name": "John Doe",
"phone": "+17195551234",
"user_id": 0,
"owner_id": 1,
"optin_status": 2,
"date_created": "2026-09-03T14:05:25+00:00",
"date_updated": "2026-09-03T14:05:25+00:00",
"date_optin_status_changed": "2026-09-03T14:05:25+00:00"
},
"meta": {
"locale": "en_US",
"primary_phone": "+17195551234",
"mobile_phone": "",
"country": "US",
"region": "CO",
"city": "Colorado Springs",
"birthday": "",
"address": "123 Main St",
"service": "Drain cleaning",
"message": "",
"source": "api",
"pipeline_status": "new",
"deal_value": 450,
"referral": "",
"custom_field": "abc"
},
"tags": [
{ "ID": 11, "data": { "tag_id": 11, "tag_slug": "customer", "tag_name": "Customer" } }
],
"user": false,
"is_marketable": true,
"is_deliverable": true
}
GET/contacts
List contacts.
Parameters
filtersarray | See Filters. JSON + base64 encoded when sent in the query string. |
searchstring | Matches first_name, last_name, full name, email and phone. |
includeint[] | Only these contact IDs. |
excludeint[] | Never these contact IDs. |
limitint | Number of items to return. Default 20, max 500. |
offsetint | Number of items to skip. Default 0. |
orderstring | ASC or DESC. Default DESC. |
orderbystring | Column to order by. Default ID. |
orderby accepts: ID, date_created, date_updated, email, first_name, last_name, full_name, optin_status
Example request
curl "https://leadchime.com/api/v1/contacts?search=John&limit=20" \
-H "LeadChime-Public-Key: lc_pk_…" -H "LeadChime-Token: lc_sk_…"
Example response
{
"status": "success",
"total_items": 99,
"items": [ { … see Contacts object } ]
}
POST/contacts
Add a contact (or many). Send one object to add a single contact, or an array of objects to add many at once. If the email (or phone) already exists in your workspace, that contact is updated instead. Responds 201 for a new contact and 200 for an updated one.
Parameters
dataobject | first_name, last_name (or full_name), email, phone, optin_status, owner_id, date_created. At least one identifying field is required. |
metaobject | Any key→value pairs; see Meta. |
tagsint[]|string[] | Tag IDs and/or names. Names that don't exist are created. |
Example request
curl -X POST https://leadchime.com/api/v1/contacts \
-H "LeadChime-Public-Key: lc_pk_…" -H "LeadChime-Token: lc_sk_…" \
-H 'Content-Type: application/json' \
-d '{
"data": { "first_name": "John", "last_name": "Doe", "email": "[email protected]", "optin_status": 2 },
"meta": { "custom_field": "abc", "primary_phone": "+1 719 555-1234" },
"tags": ["Customer"]
}'
Example response
{ "status": "success", "created": true, "item": { … see Contacts object } }
PATCH/contacts
Update many contacts. Two forms. (1) An array of items, each carrying an ID or a data.email to identify the contact — unknown contacts are not created. (2) A single object with a "query" to apply the same change to every matching contact.
Parameters
IDint | (array form) Contact ID. Optional when data.email is given. |
queryobject | (bulk form) {filters, search, include, exclude} selecting contacts. An empty query matches everyone. |
dataobject | Fields to change. |
metaobject | Meta keys to set; null removes. |
add_tagsint[]|string[] | Tags to add (names are created). |
remove_tagsint[]|string[] | Tags to remove. |
bgbool | (bulk form) Run as a background job; responds 202 with total_items. Required above 1000 matches. |
Example request
curl -X PATCH https://leadchime.com/api/v1/contacts \
-H "LeadChime-Public-Key: lc_pk_…" -H "LeadChime-Token: lc_sk_…" \
-H 'Content-Type: application/json' \
-d '{
"query": { "filters": [[{ "type": "source", "compare": "equals", "value": "website" }]] },
"data": { "optin_status": 2 },
"add_tags": ["website-lead"]
}'
Example response
{ "status": "success", "total_items": 12, "items": [ { … see Contacts object } ] }
DELETE/contacts
Delete many contacts. Deletes every contact matching the filters/search (respecting limit/offset). Refuses to run without any filter unless confirm_all=true. Contacts with invoices, quotes or jobs are skipped unless force=true.
Parameters
filtersarray | See Filters. |
searchstring | Search phrase. |
limit / offsetint | Page of matches to delete. |
bgbool | Run as a background job (202). |
forcebool | Also delete contacts that have billing history. |
confirm_allbool | Required when no filter is given. |
Example request
curl -X DELETE https://leadchime.com/api/v1/contacts \
-H "LeadChime-Public-Key: lc_pk_…" -H "LeadChime-Token: lc_sk_…" \
-H 'Content-Type: application/json' \
-d '{ "search": "@spam-domain.com" }'
Example response
{ "status": "success", "total_items": 3, "items": [ { "ID": 1234, "data": {}, "meta": {} } ], "skipped": [] }
GET/contacts/:id
Retrieve a contact.
Example request
curl https://leadchime.com/api/v1/contacts/1234 \
-H "LeadChime-Public-Key: lc_pk_…" -H "LeadChime-Token: lc_sk_…"
Example response
{ "status": "success", "item": { … see Contacts object } }
PATCH/contacts/:id
Update a contact.
Parameters
dataobject | Fields to change. |
metaobject | Meta keys to set; null removes. |
add_tagsint[]|string[] | Tags to add. |
remove_tagsint[]|string[] | Tags to remove. |
Example request
curl -X PATCH https://leadchime.com/api/v1/contacts/1234 \
-H "LeadChime-Public-Key: lc_pk_…" -H "LeadChime-Token: lc_sk_…" \
-H 'Content-Type: application/json' \
-d '{ "data": { "first_name": "Johnny" }, "meta": { "custom_field": "foo" }, "remove_tags": ["cold"] }'
Example response
{ "status": "success", "item": { … see Contacts object } }
DELETE/contacts/:id
Delete a contact.
Parameters
forcebool | Delete even if the contact has invoices, quotes or jobs (otherwise 409 contact_in_use). |
Example request
curl -X DELETE https://leadchime.com/api/v1/contacts/1234 \
-H "LeadChime-Public-Key: lc_pk_…" -H "LeadChime-Token: lc_sk_…"
Example response
{ "status": "success" }
POST/contacts/:id/merge
Merge contacts. Merges the other contacts into :id. Quotes, invoices, jobs, appointments, messages, notes, tasks and tags all move to the surviving contact; the most recently updated non-empty value wins for each field; the others are removed.
Parameters
othersint[] | IDs of the contacts to fold into this one. |
Example request
curl -X POST https://leadchime.com/api/v1/contacts/1234/merge \
-H "LeadChime-Public-Key: lc_pk_…" -H "LeadChime-Token: lc_sk_…" \
-H 'Content-Type: application/json' \
-d '{ "others": [11, 12] }'
Example response
{ "status": "success", "item": { … see Contacts object } }
Tags
Label contacts for segmenting, campaigns and reporting. Tag names are unique per workspace (matched case-insensitively by name or slug).
The Tag object
{
"ID": 22,
"data": {
"tag_id": 22,
"tag_slug": "customer",
"tag_name": "Customer",
"tag_description": "Paying customers",
"show_as_preference": "0",
"date_created": "2026-09-03T14:05:25+00:00"
}
}
GET/tags
List tags.
Parameters
searchstring | Matches tag_name, tag_description and tag_slug. |
limitint | Number of items to return. Default 20, max 500. |
offsetint | Number of items to skip. Default 0. |
orderstring | ASC or DESC. Default DESC. |
orderbystring | Column to order by. Default ID. |
orderby accepts: ID, tag_name, tag_slug, date_created
Example request
curl "https://leadchime.com/api/v1/tags?search=Customer" \
-H "LeadChime-Public-Key: lc_pk_…" -H "LeadChime-Token: lc_sk_…"
Example response
{ "status": "success", "total_items": 1, "items": [ { … see Tags object } ] }
POST/tags
Create a tag (or many). Send one {data} object or an array of them. An existing tag with the same name/slug is returned rather than duplicated.
Parameters
dataobject | tag_name (required), tag_slug, tag_description, show_as_preference. |
Example request
curl -X POST https://leadchime.com/api/v1/tags \
-H "LeadChime-Public-Key: lc_pk_…" -H "LeadChime-Token: lc_sk_…" \
-H 'Content-Type: application/json' \
-d '{ "data": { "tag_name": "Customer", "tag_description": "Paying customers" } }'
Example response
{ "status": "success", "item": { … see Tags object } }
GET/tags/:id
Retrieve a tag.
Example request
curl https://leadchime.com/api/v1/tags/22 -H "LeadChime-Public-Key: lc_pk_…" -H "LeadChime-Token: lc_sk_…"
Example response
{ "status": "success", "item": { … see Tags object } }
PATCH/tags/:id
Update a tag.
Parameters
dataobject | tag_name, tag_slug, tag_description, show_as_preference. |
Example request
curl -X PATCH https://leadchime.com/api/v1/tags/22 \
-H "LeadChime-Public-Key: lc_pk_…" -H "LeadChime-Token: lc_sk_…" \
-H 'Content-Type: application/json' \
-d '{ "data": { "tag_name": "VIP customer" } }'
Example response
{ "status": "success", "item": { … see Tags object } }
DELETE/tags/:id
Delete a tag. Removes the tag from every contact.
Example request
curl -X DELETE https://leadchime.com/api/v1/tags/22 -H "LeadChime-Public-Key: lc_pk_…" -H "LeadChime-Token: lc_sk_…"
Example response
{ "status": "success" }
Notes
Timestamped notes on a contact. Notes created through the API are marked context "api" and record which key wrote them.
The Note object
{
"ID": 501,
"data": {
"object_id": 1234,
"object_type": "contact",
"user_id": 0,
"context": "api",
"type": "call",
"content": "Called and left a voicemail.",
"timestamp": 1756908325,
"date_created": "2026-09-03T14:05:25+00:00",
"date_updated": "2026-09-03T14:05:25+00:00"
}
}
GET/notes
List notes.
Parameters
object_typestring | Object the notes belong to. Only "contact" is supported today (default). |
object_idint | Only items attached to this object. |
user_idint | Only items created by / assigned to this team member. |
typestring | Filter by type. |
includeint[] | IDs to include (array or comma-separated). |
excludeint[] | IDs to exclude. |
searchstring | Search phrase. |
limitint | Number of items to return. Default 20, max 500. |
offsetint | Number of items to skip. Default 0. |
orderstring | ASC or DESC. Default DESC. |
orderbystring | Column to order by. Default ID. |
orderby accepts: ID, date_created, date_updated
Example request
curl "https://leadchime.com/api/v1/notes?object_id=1234" -H "LeadChime-Public-Key: lc_pk_…" -H "LeadChime-Token: lc_sk_…"
Example response
{ "status": "success", "total_items": 4, "items": [ { … see Notes object } ] }
POST/notes
Create a note (or many).
Parameters
dataobject | object_id (required), object_type (contact), content (required), type (note, call, email, meeting, sms), user_id, timestamp. |
Example request
curl -X POST https://leadchime.com/api/v1/notes \
-H "LeadChime-Public-Key: lc_pk_…" -H "LeadChime-Token: lc_sk_…" \
-H 'Content-Type: application/json' \
-d '{ "data": { "object_id": 1234, "type": "call", "content": "Called and left a voicemail." } }'
Example response
{ "status": "success", "item": { … see Notes object } }
PATCH/notes
Update many notes.
Parameters
[ { ID, data } ]array | Each item needs the note ID and the fields to change. |
Example request
curl -X PATCH https://leadchime.com/api/v1/notes \
-H "LeadChime-Public-Key: lc_pk_…" -H "LeadChime-Token: lc_sk_…" \
-H 'Content-Type: application/json' \
-d '[ { "ID": 501, "data": { "content": "Updated text" } } ]'
Example response
{ "status": "success", "total_items": 1, "items": [ { … see Notes object } ] }
DELETE/notes
Delete many notes. Deletes every note matching the list parameters. Refuses to run without a filter unless confirm_all=true.
Parameters
object_typestring | Object the notes belong to. Only "contact" is supported today (default). |
object_idint | Only items attached to this object. |
user_idint | Only items created by / assigned to this team member. |
typestring | Filter by type. |
includeint[] | IDs to include (array or comma-separated). |
excludeint[] | IDs to exclude. |
searchstring | Search phrase. |
Example request
curl -X DELETE "https://leadchime.com/api/v1/notes?object_id=1234&type=sms" -H "LeadChime-Public-Key: lc_pk_…" -H "LeadChime-Token: lc_sk_…"
Example response
{ "status": "success", "total_items": 2, "deleted": [501, 502] }
GET/notes/:id
Retrieve a note.
Example request
curl https://leadchime.com/api/v1/notes/501 -H "LeadChime-Public-Key: lc_pk_…" -H "LeadChime-Token: lc_sk_…"
Example response
{ "status": "success", "item": { … see Notes object } }
PATCH/notes/:id
Update a note.
Parameters
dataobject | content, type, context, user_id, timestamp, object_id. |
Example request
curl -X PATCH https://leadchime.com/api/v1/notes/501 \
-H "LeadChime-Public-Key: lc_pk_…" -H "LeadChime-Token: lc_sk_…" \
-H 'Content-Type: application/json' \
-d '{ "data": { "content": "Updated text" } }'
Example response
{ "status": "success", "item": { … see Notes object } }
DELETE/notes/:id
Delete a note.
Example request
curl -X DELETE https://leadchime.com/api/v1/notes/501 -H "LeadChime-Public-Key: lc_pk_…" -H "LeadChime-Token: lc_sk_…"
Example response
{ "status": "success" }
Tasks
To-dos attached to a contact, optionally assigned to a team member. A task is complete when date_completed is set.
The Task object
{
"ID": 77,
"data": {
"object_id": 1234,
"object_type": "contact",
"user_id": 3,
"context": "api",
"type": "task",
"summary": "Call this contact",
"content": "Ask whether they still want the estimate.",
"timestamp": 1756908325,
"date_created": "2026-09-03T14:05:25+00:00",
"date_completed": null,
"due_date": "2026-09-10T00:00:00+00:00"
},
"i18n": { "time_diff": "8 seconds ago", "due_in": "6 days from now", "due_date": "September 10, 2026 12:00 am", "completed_date": "" },
"is_overdue": false,
"is_complete": false,
"due_timestamp": 1757462400,
"associated": { "link": "https://leadchime.com/app/clients/1234", "name": "John Doe", "type": "contact" }
}
GET/tasks
List tasks.
Parameters
object_typestring | Object the notes belong to. Only "contact" is supported today (default). |
object_idint | Only items attached to this object. |
user_idint | Only items created by / assigned to this team member. |
typestring | Filter by type. |
includeint[] | IDs to include (array or comma-separated). |
excludeint[] | IDs to exclude. |
searchstring | Search phrase. |
incompletebool | Only open tasks. |
completebool | Only completed tasks. |
minebool | Tasks assigned to the team member who created the API key. |
limitint | Number of items to return. Default 20, max 500. |
offsetint | Number of items to skip. Default 0. |
orderstring | ASC or DESC. Default DESC. |
orderbystring | Column to order by. Default ID. |
orderby accepts: ID, date_created, due_date, date_completed
Example request
curl "https://leadchime.com/api/v1/tasks?incomplete=1" -H "LeadChime-Public-Key: lc_pk_…" -H "LeadChime-Token: lc_sk_…"
Example response
{ "status": "success", "total_items": 2, "items": [ { … see Tasks object } ] }
POST/tasks
Create a task (or many).
Parameters
dataobject | object_id (required), summary (required), content, type (task, call, email, meeting), user_id (assignee), due_date, date_completed. |
Example request
curl -X POST https://leadchime.com/api/v1/tasks \
-H "LeadChime-Public-Key: lc_pk_…" -H "LeadChime-Token: lc_sk_…" \
-H 'Content-Type: application/json' \
-d '{ "data": { "object_id": 1234, "summary": "Call this contact", "due_date": "2026-09-10" } }'
Example response
{ "status": "success", "item": { … see Tasks object } }
PATCH/tasks
Update many tasks.
Parameters
[ { ID, data } ]array | Each item needs the task ID and the fields to change. Set date_completed to complete; null to reopen. |
Example request
curl -X PATCH https://leadchime.com/api/v1/tasks \
-H "LeadChime-Public-Key: lc_pk_…" -H "LeadChime-Token: lc_sk_…" \
-H 'Content-Type: application/json' \
-d '[ { "ID": 77, "data": { "date_completed": "2026-09-04 09:00:00" } } ]'
Example response
{ "status": "success", "total_items": 1, "items": [ { … see Tasks object } ] }
DELETE/tasks
Delete many tasks. Deletes every task matching the list parameters. Refuses to run without a filter unless confirm_all=true.
Parameters
object_typestring | Object the notes belong to. Only "contact" is supported today (default). |
object_idint | Only items attached to this object. |
user_idint | Only items created by / assigned to this team member. |
typestring | Filter by type. |
includeint[] | IDs to include (array or comma-separated). |
excludeint[] | IDs to exclude. |
searchstring | Search phrase. |
Example request
curl -X DELETE "https://leadchime.com/api/v1/tasks?object_id=1234&complete=1" -H "LeadChime-Public-Key: lc_pk_…" -H "LeadChime-Token: lc_sk_…"
Example response
{ "status": "success", "total_items": 1, "deleted": [77] }
GET/tasks/:id
Retrieve a task.
Example request
curl https://leadchime.com/api/v1/tasks/77 -H "LeadChime-Public-Key: lc_pk_…" -H "LeadChime-Token: lc_sk_…"
Example response
{ "status": "success", "item": { … see Tasks object } }
PATCH/tasks/:id
Update a task.
Parameters
dataobject | summary, content, type, user_id, due_date, date_completed, object_id. |
Example request
curl -X PATCH https://leadchime.com/api/v1/tasks/77 \
-H "LeadChime-Public-Key: lc_pk_…" -H "LeadChime-Token: lc_sk_…" \
-H 'Content-Type: application/json' \
-d '{ "data": { "date_completed": "2026-09-04 09:00:00" } }'
Example response
{ "status": "success", "item": { … see Tasks object } }
DELETE/tasks/:id
Delete a task.
Example request
curl -X DELETE https://leadchime.com/api/v1/tasks/77 -H "LeadChime-Public-Key: lc_pk_…" -H "LeadChime-Token: lc_sk_…"
Example response
{ "status": "success" }
Deals
Track opportunities through a pipeline. Every workspace gets a default "Sales" pipeline whose stages mirror the contact pipeline (new → contacted → quoted → won / lost); moving a deal to a won or lost stage updates its primary contact. A deal may link to a quote — accepting that quote wins the deal.
The Deal object
{
"ID": 99,
"data": {
"title": "Example Deal",
"deal_value": 999,
"close_probability": 51,
"contact_id": 1234,
"owner_id": 1,
"stage_id": 7,
"pipeline_id": 2,
"quote_id": null,
"priority": "normal",
"status": "in_progress",
"last_activity": 1756908325,
"date_created": "2026-09-03T14:05:25+00:00",
"date_closed": null,
"projected_close_date": "2026-09-30"
},
"meta": { "product_interest": [["Option A", 15, 1]] },
"locale": { "last_activity": "3 days ago" },
"stage": { "ID": 7, "name": "Quoted", "slug": "quoted", "type": "open", "probability": 50 },
"pipeline": { "ID": 2, "name": "Sales" },
"related": { "contacts": [ { "ID": 1234, "full_name": "John Doe", "email": "[email protected]", "phone": "+17195551234" } ], "notes": [] }
}
GET/deals
List deals.
Parameters
statusstring | in_progress (default), won, lost, or any. |
contact_idint | Deals whose primary contact is this contact, or that are linked to it via relationships. |
owner_idint | Filter by owner. |
pipeline_id / stage_idint | Filter by pipeline or stage. |
prioritystring | low, normal or high. |
include / excludeint[] | Deal IDs to include or exclude. |
searchstring | Matches title. |
with_relatedbool | Include related contacts and notes on each item. |
limitint | Number of items to return. Default 20, max 500. |
offsetint | Number of items to skip. Default 0. |
orderstring | ASC or DESC. Default DESC. |
orderbystring | Column to order by. Default ID. |
orderby accepts: ID, title, deal_value, date_created, last_activity, projected_close_date, date_closed
Example request
curl "https://leadchime.com/api/v1/deals?status=in_progress&limit=20" -H "LeadChime-Public-Key: lc_pk_…" -H "LeadChime-Token: lc_sk_…"
Example response
{ "status": "success", "total_items": 3, "items": [ { … see Deals object } ] }
POST/deals
Create a deal.
Parameters
dataobject | title (required), deal_value, close_probability, contact_id, owner_id, pipeline_id (default pipeline if omitted), stage_id (first open stage if omitted), status, priority (low|normal|high or 0|1|2), projected_close_date, quote_id. |
metaobject | Any key→value pairs. |
Example request
curl -X POST https://leadchime.com/api/v1/deals -H "LeadChime-Public-Key: lc_pk_…" -H "LeadChime-Token: lc_sk_…" \
-H 'Content-Type: application/json' \
-d '{ "data": { "title": "Example Deal", "deal_value": 999, "contact_id": 1234, "priority": "high" } }'
Example response
{ "status": "success", "item": { … see Deals object } }
GET/deals/:id
Retrieve a deal.
Example request
curl https://leadchime.com/api/v1/deals/99 -H "LeadChime-Public-Key: lc_pk_…" -H "LeadChime-Token: lc_sk_…"
Example response
{ "status": "success", "item": { … see Deals object } }
PATCH/deals/:id
Update a deal. Set stage_id to move the deal; or set status to won/lost/in_progress to jump to the first stage of that type.
Parameters
dataobject | Any create field. |
metaobject | Merged into existing meta; null removes a key. |
Example request
curl -X PATCH https://leadchime.com/api/v1/deals/99 -H "LeadChime-Public-Key: lc_pk_…" -H "LeadChime-Token: lc_sk_…" \
-H 'Content-Type: application/json' \
-d '{ "data": { "status": "won" } }'
Example response
{ "status": "success", "item": { … see Deals object } }
DELETE/deals/:id
Delete a deal.
Example request
curl -X DELETE https://leadchime.com/api/v1/deals/99 -H "LeadChime-Public-Key: lc_pk_…" -H "LeadChime-Token: lc_sk_…"
Example response
{ "status": "success" }
Pipelines
Pipelines and their stages back the deals resource. Use these to discover stage IDs, or to create a second pipeline.
The Pipeline object
{
"ID": 2,
"data": { "name": "Sales", "is_default": true, "date_created": "2026-09-03T14:05:25+00:00" },
"stages": [
{ "ID": 5, "name": "New", "slug": "new", "type": "open", "probability": 10, "sort_order": 0 },
{ "ID": 6, "name": "Contacted", "slug": "contacted", "type": "open", "probability": 25, "sort_order": 1 },
{ "ID": 7, "name": "Quoted", "slug": "quoted", "type": "open", "probability": 50, "sort_order": 2 },
{ "ID": 8, "name": "Won", "slug": "won", "type": "won", "probability": 100, "sort_order": 3 },
{ "ID": 9, "name": "Lost", "slug": "lost", "type": "lost", "probability": 0, "sort_order": 4 }
]
}
GET/pipelines
List pipelines.
Example request
curl https://leadchime.com/api/v1/pipelines -H "LeadChime-Public-Key: lc_pk_…" -H "LeadChime-Token: lc_sk_…"
Example response
{ "status": "success", "total_items": 1, "items": [ { … see Pipelines object } ] }
POST/pipelines
Create a pipeline.
Parameters
dataobject | name (required), is_default. |
stagesarray | Optional list of {name, slug, probability, type: open|won|lost}. Defaults to the standard five stages. |
Example request
curl -X POST https://leadchime.com/api/v1/pipelines -H "LeadChime-Public-Key: lc_pk_…" -H "LeadChime-Token: lc_sk_…" \
-H 'Content-Type: application/json' \
-d '{ "data": { "name": "Commercial" }, "stages": [ { "name": "Lead", "probability": 5 }, { "name": "Closed", "type": "won", "probability": 100 } ] }'
Example response
{ "status": "success", "item": { … see Pipelines object } }
GET/pipelines/:id
Retrieve a pipeline.
Example request
curl https://leadchime.com/api/v1/pipelines/2 -H "LeadChime-Public-Key: lc_pk_…" -H "LeadChime-Token: lc_sk_…"
Example response
{ "status": "success", "item": { … see Pipelines object } }
POST/pipelines/:id/stages
Add a stage.
Parameters
dataobject | name (required), slug, probability, type (open|won|lost), sort_order. |
Example request
curl -X POST https://leadchime.com/api/v1/pipelines/2/stages -H "LeadChime-Public-Key: lc_pk_…" -H "LeadChime-Token: lc_sk_…" \
-H 'Content-Type: application/json' \
-d '{ "data": { "name": "Negotiation", "probability": 60 } }'
Example response
{ "status": "success", "stage_id": 12, "item": { … see Pipelines object } }
Activity
A timeline of what happened to each contact. LeadChime logs contact_created, missed_call, sms_sent, sms_received, quote_sent, quote_accepted, invoice_paid, appointment_completed and deal events automatically; you can log any custom activity_type of your own.
- GET/activity
- POST/activity
- PATCH/activity
- DELETE/activity
- GET/activity/:id
- PATCH/activity/:id
- DELETE/activity/:id
The Activity object
{
"ID": 1234,
"data": {
"timestamp": 1756908325,
"date": "2026-09-03T14:05:25+00:00",
"activity_type": "purchased_product",
"contact_id": 123,
"funnel_id": null,
"step_id": null,
"email_id": null,
"event_id": null,
"value": 99.99,
"referer": "https://example.com/foo/bar",
"referer_hash": "abcdefg12345",
"date_created": "2026-09-03T14:05:25+00:00"
},
"meta": { "product_name": "Shirt", "quantity": 4 }
}
GET/activity
List activities.
Parameters
activity_typestring | Only this type. |
contact_idint | Only this contact. |
funnel_id / step_id / email_id / event_idint | Flow, step, email template or event filters. |
after / beforestring | Date range on the activity timestamp. UNIX or datetime. |
include / excludeint[] | Activity IDs. |
limitint | Number of items to return. Default 20, max 500. |
offsetint | Number of items to skip. Default 0. |
orderstring | ASC or DESC. Default DESC. |
orderbystring | Column to order by. Default ID. |
orderby accepts: ID, timestamp, date_created (default: timestamp DESC)
Example request
curl "https://leadchime.com/api/v1/activity?contact_id=123&after=2026-09-01" -H "LeadChime-Public-Key: lc_pk_…" -H "LeadChime-Token: lc_sk_…"
Example response
{ "status": "success", "total_items": 8, "items": [ { … see Activity object } ] }
POST/activity
Create an activity (or many).
Parameters
dataobject | activity_type (required, ≤40 chars), contact_id, timestamp, funnel_id, step_id, email_id, event_id, value, referer. |
metaobject | Any key→value pairs. |
Example request
curl -X POST https://leadchime.com/api/v1/activity -H "LeadChime-Public-Key: lc_pk_…" -H "LeadChime-Token: lc_sk_…" \
-H 'Content-Type: application/json' \
-d '{ "data": { "activity_type": "purchased_product", "contact_id": 123, "value": 99.99 }, "meta": { "product_name": "Shirt", "quantity": 4 } }'
Example response
{ "status": "success", "item": { … see Activity object } }
PATCH/activity
Update many activities.
Parameters
[ { ID, data, meta } ]array | Each item needs the activity ID. |
Example request
curl -X PATCH https://leadchime.com/api/v1/activity -H "LeadChime-Public-Key: lc_pk_…" -H "LeadChime-Token: lc_sk_…" \
-H 'Content-Type: application/json' \
-d '[ { "ID": 1234, "data": { "value": 109.99 } } ]'
Example response
{ "status": "success", "total_items": 1, "items": [ { … see Activity object } ] }
DELETE/activity
Delete many activities. Same filters as the list. Refuses to run without a filter unless confirm_all=true.
Example request
curl -X DELETE "https://leadchime.com/api/v1/activity?activity_type=purchased_product" -H "LeadChime-Public-Key: lc_pk_…" -H "LeadChime-Token: lc_sk_…"
Example response
{ "status": "success", "total_items": 2, "deleted": [1234, 1235] }
GET/activity/:id
Retrieve an activity.
Example request
curl https://leadchime.com/api/v1/activity/1234 -H "LeadChime-Public-Key: lc_pk_…" -H "LeadChime-Token: lc_sk_…"
Example response
{ "status": "success", "item": { … see Activity object } }
PATCH/activity/:id
Update an activity.
Example request
curl -X PATCH https://leadchime.com/api/v1/activity/1234 -H "LeadChime-Public-Key: lc_pk_…" -H "LeadChime-Token: lc_sk_…" \
-H 'Content-Type: application/json' \
-d '{ "data": { "value": 109.99 }, "meta": { "product_name": "Shirt XL" } }'
Example response
{ "status": "success", "item": { … see Activity object } }
DELETE/activity/:id
Delete an activity.
Example request
curl -X DELETE https://leadchime.com/api/v1/activity/1234 -H "LeadChime-Public-Key: lc_pk_…" -H "LeadChime-Token: lc_sk_…"
Example response
{ "status": "success" }
Relationships
Associate objects with each other — for example, extra contacts on a deal. :type is any object route (contacts, deals, notes, tasks, tags). Pass either child_type/child_id or parent_type/parent_id. "company" is reserved and not available.
The Relationship object
{ "status": "success" }
GET/:type/:id/relationships
Fetch related objects.
Parameters
child_typestring | Return children of this type. |
parent_typestring | Return parents of this type. |
Example request
curl "https://leadchime.com/api/v1/deals/99/relationships?child_type=contact" -H "LeadChime-Public-Key: lc_pk_…" -H "LeadChime-Token: lc_sk_…"
Example response
{ "status": "success", "total_items": 1, "items": [ { … see Contacts object } ] }
POST/:type/:id/relationships
Create a relationship.
Parameters
child_type + child_idstring + int | Add a child. |
parent_type + parent_idstring + int | Add a parent. |
Example request
curl -X POST https://leadchime.com/api/v1/deals/99/relationships -H "LeadChime-Public-Key: lc_pk_…" -H "LeadChime-Token: lc_sk_…" \
-H 'Content-Type: application/json' \
-d '{ "child_type": "contact", "child_id": 1234 }'
Example response
{ "status": "success" }
DELETE/:type/:id/relationships
Delete a relationship.
Example request
curl -X DELETE https://leadchime.com/api/v1/deals/99/relationships -H "LeadChime-Public-Key: lc_pk_…" -H "LeadChime-Token: lc_sk_…" \
-H 'Content-Type: application/json' \
-d '{ "child_type": "contact", "child_id": 1234 }'
Example response
{ "status": "success" }
Emails
Reusable emails you can send to a contact, use in a broadcast, or drop into a flow. Content supports merge tags: {{first_name}}, {{last_name}}, {{name}}, {{email}}, {{phone}}, {{address}}, {{service}}, {{business}}, {{business_phone}}, {{owner_name}}, {{owner_email}}, {{today}} and {{meta.any_key}}. Marketing emails only go to marketable contacts; transactional emails need just an address. Emails are sent from the LeadChime platform address — a from_email you supply becomes the Reply-To (unless custom senders are enabled for your account).
- POST/emails/send
- POST/emails/:id/send
- GET/emails
- POST/emails
- PATCH/emails
- DELETE/emails
- GET/emails/:id
- PATCH/emails/:id
- DELETE/emails/:id
The Email object
{
"ID": 30,
"data": {
"title": "Welcome",
"subject": "Hi {{first_name}}",
"pre_header": "",
"content": "<p>Thanks for reaching out to {{business}}.</p>",
"plain_text": "",
"from_user": 0,
"from_type": "default",
"from_select": "default",
"from_email": null,
"from_name": null,
"author": 1,
"is_template": "0",
"status": "ready",
"message_type": "marketing",
"last_updated": "2026-09-03T14:05:25+00:00",
"date_created": "2026-09-03T14:05:25+00:00"
},
"meta": { "css": "", "blocks": "", "type": "html" },
"campaigns": [22]
}
POST/emails/send
Send a composed email.
Parameters
toarray | Contact IDs and/or email addresses (max 100). |
cc / bccstring[] | Up to 20 addresses each. |
from_email / from_namestring | Reply-To address and display name. |
typestring | marketing (default) or transactional. |
subjectstring | Required. |
contentstring | HTML body. Required. |
plain_textstring | Optional text alternative. |
Example request
curl -X POST https://leadchime.com/api/v1/emails/send -H "LeadChime-Public-Key: lc_pk_…" -H "LeadChime-Token: lc_sk_…" \
-H 'Content-Type: application/json' \
-d '{ "to": ["[email protected]"], "subject": "Hey there!", "content": "<p>I am sending you an email from the API!</p>" }'
Example response
{ "status": "success", "queued": 1, "skipped": [] }
POST/emails/:id/send
Send an email to a contact.
Parameters
toint|string | Contact ID or email address. |
Example request
curl -X POST https://leadchime.com/api/v1/emails/30/send -H "LeadChime-Public-Key: lc_pk_…" -H "LeadChime-Token: lc_sk_…" \
-H 'Content-Type: application/json' \
-d '{ "to": 1234 }'
Example response
{ "status": "success", "queued": true, "to": "[email protected]", "contact_id": 1234 }
GET/emails
List emails.
Parameters
searchstring | Matches title, subject and content. |
status / message_type / is_templatestring | Filters. |
campaignint | Only emails filed under this campaign. |
include / excludeint[] | Email IDs. |
limitint | Number of items to return. Default 20, max 500. |
offsetint | Number of items to skip. Default 0. |
orderstring | ASC or DESC. Default DESC. |
orderbystring | Column to order by. Default ID. |
orderby accepts: ID, title, date_created, last_updated
Example request
curl "https://leadchime.com/api/v1/emails?search=welcome" -H "LeadChime-Public-Key: lc_pk_…" -H "LeadChime-Token: lc_sk_…"
Example response
{ "status": "success", "total_items": 1, "items": [ { … see Emails object } ] }
POST/emails
Create an email (or many).
Parameters
dataobject | title, subject, content (required); plain_text, pre_header, from_type (default|owner|user|custom), from_user, from_email, from_name, message_type (marketing|transactional), status (draft|ready), is_template. |
campaignsint[] | Campaign (category) IDs to file it under. |
metaobject | css, blocks, type, or anything else. |
Example request
curl -X POST https://leadchime.com/api/v1/emails -H "LeadChime-Public-Key: lc_pk_…" -H "LeadChime-Token: lc_sk_…" \
-H 'Content-Type: application/json' \
-d '{ "data": { "title": "Welcome", "subject": "Hi {{first_name}}", "content": "<p>Thanks for reaching out to {{business}}.</p>", "status": "ready" } }'
Example response
{ "status": "success", "item": { … see Emails object } }
PATCH/emails
Update many emails.
Parameters
[ { ID, data, meta, campaigns } ]array | Each item needs the email ID. |
Example request
curl -X PATCH https://leadchime.com/api/v1/emails -H "LeadChime-Public-Key: lc_pk_…" -H "LeadChime-Token: lc_sk_…" \
-H 'Content-Type: application/json' \
-d '[ { "ID": 30, "data": { "status": "ready" } } ]'
Example response
{ "status": "success", "total_items": 1, "items": [ { … see Emails object } ] }
DELETE/emails
Delete many emails. Same filters as the list. Refuses to run without a filter unless confirm_all=true.
Example request
curl -X DELETE "https://leadchime.com/api/v1/emails?status=draft" -H "LeadChime-Public-Key: lc_pk_…" -H "LeadChime-Token: lc_sk_…"
Example response
{ "status": "success", "total_items": 2, "deleted": [31, 32] }
GET/emails/:id
Retrieve an email.
Example request
curl https://leadchime.com/api/v1/emails/30 -H "LeadChime-Public-Key: lc_pk_…" -H "LeadChime-Token: lc_sk_…"
Example response
{ "status": "success", "item": { … see Emails object } }
PATCH/emails/:id
Update an email.
Example request
curl -X PATCH https://leadchime.com/api/v1/emails/30 -H "LeadChime-Public-Key: lc_pk_…" -H "LeadChime-Token: lc_sk_…" \
-H 'Content-Type: application/json' \
-d '{ "data": { "subject": "Welcome aboard" }, "campaigns": [22] }'
Example response
{ "status": "success", "item": { … see Emails object } }
DELETE/emails/:id
Delete an email.
Example request
curl -X DELETE https://leadchime.com/api/v1/emails/30 -H "LeadChime-Public-Key: lc_pk_…" -H "LeadChime-Token: lc_sk_…"
Example response
{ "status": "success" }
Broadcasts
One-off email or SMS sends to a filtered audience — the same thing as the Clients → Campaigns page in your workspace. Email broadcasts reference an Email by object_id; SMS broadcasts carry the message in body. Statuses: scheduled, sending, sent, cancelled, failed. Open/click tracking is not available in v1.
- GET/broadcasts
- POST/broadcasts
- GET/broadcasts/archive
- GET/broadcasts/:id
- GET/broadcasts/:id/report
- POST/broadcasts/:id
The Broadcast object
{
"ID": 33,
"data": {
"object_type": "email",
"object_id": 30,
"name": "Welcome",
"subject": "Hi {{first_name}}",
"scheduled_by": 1,
"send_time": 1757516400,
"status": "sent",
"date_scheduled": "2026-09-10T15:00:00+00:00",
"date_created": "2026-09-03T14:05:25+00:00",
"started_at": "2026-09-10T15:00:03+00:00",
"completed_at": "2026-09-10T15:00:41+00:00",
"cancelled_at": null,
"send_in_local_time": false,
"batching": false,
"batch_amount": null,
"batch_interval": null,
"batch_interval_length": null,
"segment_type": "fixed"
},
"meta": {
"query": { "filters": [[{ "type": "is_marketable", "marketable": true }]] },
"audience_filter": {},
"total_contacts": 120,
"num_scheduled": 120,
"sent": 118,
"failed": 0,
"skipped": 2
},
"object": { "ID": 30, "title": "Welcome", "subject": "Hi {{first_name}}", "message_type": "marketing" },
"campaigns": [22],
"date_sent_pretty": "September 10, 2026 3:00 pm"
}
GET/broadcasts
List broadcasts.
Parameters
object_typestring | email or sms. |
object_idint | Broadcasts of this email. |
scheduled_byint | User who scheduled it. |
statusstring | sent (default), scheduled, sending, cancelled, failed, or any. |
after / beforestring | Range on the send time. |
limitint | Number of items to return. Default 20, max 500. |
offsetint | Number of items to skip. Default 0. |
orderstring | ASC or DESC. Default DESC. |
orderbystring | Column to order by. Default ID. |
orderby accepts: ID, send_time, date_created, name
Example request
curl "https://leadchime.com/api/v1/broadcasts?object_type=email&status=sent&limit=10" -H "LeadChime-Public-Key: lc_pk_…" -H "LeadChime-Token: lc_sk_…"
Example response
{ "status": "success", "total_items": 10, "items": [ { … see Broadcasts object } ] }
POST/broadcasts
Schedule a broadcast.
Parameters
object_typestring | email (default) or sms. |
object_idint | The Email to send (email broadcasts). |
bodystring | Message text (SMS broadcasts). Merge tags allowed. |
queryobject | {filters, search} selecting the audience (see Filters). Empty = every marketable contact with the channel. |
date + timestring | YYYY-MM-DD and HH:MM in your workspace timezone. Not needed with send_now. |
send_nowbool | Start sending immediately. |
send_in_local_timebool | Hold each contact until the scheduled wall-clock time in their meta.timezone (best effort). |
batching / batch_amount / batch_interval / batch_interval_lengthmixed | Send in batches of batch_amount every batch_interval minutes|hours|days. |
campaignsint[] | Campaign (category) IDs to file it under. |
name / segment_typestring | Optional label; fixed or dynamic (informational). |
Example request
curl -X POST https://leadchime.com/api/v1/broadcasts -H "LeadChime-Public-Key: lc_pk_…" -H "LeadChime-Token: lc_sk_…" \
-H 'Content-Type: application/json' \
-d '{ "object_type": "email", "object_id": 30, "query": { "filters": [[{ "type": "is_marketable", "marketable": true }]] }, "date": "2026-09-10", "time": "15:00" }'
Example response
{ "status": "success", "estimated_recipients": 120, "item": { … see Broadcasts object } }
GET/broadcasts/archive
List broadcast archive. Sent email broadcasts filed under a public campaign, with their content.
Parameters
campaignint|string | Campaign ID or slug. |
per_page / pageint | Defaults 10 / 1. |
searchstring | Matches name, subject and body. |
Example request
curl "https://leadchime.com/api/v1/broadcasts/archive?campaign=nurture" -H "LeadChime-Public-Key: lc_pk_…" -H "LeadChime-Token: lc_sk_…"
Example response
{ "status": "success", "total_items": 4, "total_pages": 1, "page": 1, "per_page": 10, "items": [ { … see Broadcasts object } ] }
GET/broadcasts/:id
Retrieve a broadcast.
Example request
curl https://leadchime.com/api/v1/broadcasts/33 -H "LeadChime-Public-Key: lc_pk_…" -H "LeadChime-Token: lc_sk_…"
Example response
{ "status": "success", "item": { … see Broadcasts object } }
GET/broadcasts/:id/report
Retrieve broadcast report.
Example request
curl https://leadchime.com/api/v1/broadcasts/33/report -H "LeadChime-Public-Key: lc_pk_…" -H "LeadChime-Token: lc_sk_…"
Example response
{ "status": "success", "report": { "id": 33, "status": "sent", "total": 120, "sent": 118, "failed": 0, "skipped": 2, "waiting": 0, "sent_percent": 98.3, "opened": 0, "clicked": 0, "unsubscribed": 0 } }
POST/broadcasts/:id
Cancel a broadcast. Stops a scheduled or in-progress broadcast; pending recipients are skipped. 409 once it has finished.
Example request
curl -X POST https://leadchime.com/api/v1/broadcasts/33 -H "LeadChime-Public-Key: lc_pk_…" -H "LeadChime-Token: lc_sk_…"
Example response
{ "status": "success", "item": { … see Broadcasts object } }
Campaigns
Named categories that file emails and broadcasts together (for example "Nurture" or "Monthly newsletter"). Public campaigns power the broadcast archive. Note: the Campaigns page inside your workspace corresponds to Broadcasts in this API.
- GET/campaigns
- POST/campaigns
- GET/campaigns/archive
- GET/campaigns/:id
- PATCH/campaigns/:id
- DELETE/campaigns/:id
The Campaign object
{
"ID": 22,
"data": {
"ID": 22,
"slug": "nurture",
"name": "Nurture",
"description": "Emails sent to nurture leads.",
"visibility": "public",
"date_created": "2026-09-03T14:05:25+00:00",
"last_updated": "2026-09-03T14:05:25+00:00"
},
"counts": { "emails": 3, "broadcasts": 1 }
}
GET/campaigns
List campaigns.
Parameters
searchstring | Matches name, description and slug. |
limitint | Number of items to return. Default 20, max 500. |
offsetint | Number of items to skip. Default 0. |
orderstring | ASC or DESC. Default DESC. |
orderbystring | Column to order by. Default ID. |
orderby accepts: ID, name, slug, date_created
Example request
curl "https://leadchime.com/api/v1/campaigns?search=Nurture" -H "LeadChime-Public-Key: lc_pk_…" -H "LeadChime-Token: lc_sk_…"
Example response
{ "status": "success", "total_items": 1, "items": [ { … see Campaigns object } ] }
POST/campaigns
Create a campaign (or many).
Parameters
dataobject | name (required), slug, description, visibility (public|private). |
Example request
curl -X POST https://leadchime.com/api/v1/campaigns -H "LeadChime-Public-Key: lc_pk_…" -H "LeadChime-Token: lc_sk_…" \
-H 'Content-Type: application/json' \
-d '{ "data": { "name": "Nurture", "description": "Emails sent to nurture leads.", "visibility": "public" } }'
Example response
{ "status": "success", "item": { … see Campaigns object } }
GET/campaigns/archive
List campaigns archive.
Parameters
per_page / pageint | Defaults 10 / 1. |
searchstring | Matches name and description. |
Example request
curl https://leadchime.com/api/v1/campaigns/archive -H "LeadChime-Public-Key: lc_pk_…" -H "LeadChime-Token: lc_sk_…"
Example response
{ "status": "success", "total_items": 3, "total_pages": 1, "page": 1, "per_page": 10, "items": [ { … see Campaigns object } ] }
GET/campaigns/:id
Retrieve a campaign.
Example request
curl https://leadchime.com/api/v1/campaigns/22 -H "LeadChime-Public-Key: lc_pk_…" -H "LeadChime-Token: lc_sk_…"
Example response
{ "status": "success", "item": { … see Campaigns object } }
PATCH/campaigns/:id
Update a campaign.
Example request
curl -X PATCH https://leadchime.com/api/v1/campaigns/22 -H "LeadChime-Public-Key: lc_pk_…" -H "LeadChime-Token: lc_sk_…" \
-H 'Content-Type: application/json' \
-d '{ "data": { "name": "Nurture-1", "slug": "nurture-1" } }'
Example response
{ "status": "success", "item": { … see Campaigns object } }
DELETE/campaigns/:id
Delete a campaign.
Example request
curl -X DELETE https://leadchime.com/api/v1/campaigns/22 -H "LeadChime-Public-Key: lc_pk_…" -H "LeadChime-Token: lc_sk_…"
Example response
{ "status": "success" }
Flows
Automations that walk a contact through steps: delay, send_email, send_sms, apply_tag, remove_tag, create_task, update_contact, webhook. Flows are created and managed through this API (there is no workspace UI yet). A contact can only be live in a flow once at a time; steps run every minute.
- POST/funnels/:id/start
- GET/funnels
- POST/funnels
- GET/funnels/:id
- PATCH/funnels/:id
- DELETE/funnels/:id
- GET/funnels/:id/enrollments
- POST/funnels/:id/enrollments/:eid/cancel
The Flow object
{
"ID": 5,
"data": { "name": "Nurture", "description": "", "status": "active", "date_created": "2026-09-03T14:05:25+00:00", "last_updated": "2026-09-03T14:05:25+00:00" },
"meta": {},
"steps": [
{ "ID": 10, "type": "apply_tag", "name": null, "order": 0, "config": { "tags": ["nurturing"] } },
{ "ID": 11, "type": "delay", "name": null, "order": 1, "config": { "amount": 1, "unit": "days" } },
{ "ID": 12, "type": "send_email", "name": null, "order": 2, "config": { "email_template_id": 30 } }
],
"counts": { "active_enrollments": 12, "completed": 340 }
}
POST/funnels/:id/start
Add a contact (or many) to a flow. Single: {contact_id, step_id?} enrolls now and returns the enrollment. Bulk: {query, step_id?, now|date+time} enrolls every matching contact in the background.
Parameters
contact_idint | Single-contact form. |
queryobject | Bulk form: {filters, search} (see Filters). |
step_idint | Start at this step (default: first step). |
now / date + timemixed | Bulk form: enroll immediately (default) or at a date/time in your timezone. |
Example request
curl -X POST https://leadchime.com/api/v1/funnels/5/start -H "LeadChime-Public-Key: lc_pk_…" -H "LeadChime-Token: lc_sk_…" \
-H 'Content-Type: application/json' \
-d '{ "contact_id": 1234 }'
Example response
{ "status": "success", "already_enrolled": false, "item": { "ID": 900, "data": { "funnel_id": 5, "contact_id": 1234, "step_id": null, "status": "queued", "run_at": "2026-09-03T14:05:25+00:00" } } }
GET/funnels
List flows.
Parameters
statusstring | active or inactive. |
searchstring | Matches name. |
limitint | Number of items to return. Default 20, max 500. |
offsetint | Number of items to skip. Default 0. |
orderstring | ASC or DESC. Default DESC. |
orderbystring | Column to order by. Default ID. |
Example request
curl https://leadchime.com/api/v1/funnels -H "LeadChime-Public-Key: lc_pk_…" -H "LeadChime-Token: lc_sk_…"
Example response
{ "status": "success", "total_items": 1, "items": [ { … see Flows object } ] }
POST/funnels
Create a flow.
Parameters
dataobject | name (required), description, status (active|inactive; default inactive). |
stepsarray | Ordered list of {type, name?, config}. Configs: delay {amount, unit: minutes|hours|days, at_time?: "HH:MM"}; send_email {email_template_id}; send_sms {body}; apply_tag/remove_tag {tags: names[] | tag_ids: ints[]}; create_task {summary, content?, due_in_days?, owner_id?, type?}; update_contact {status?, optin_status?, meta?}; webhook {url (https), method?: POST|GET, headers?}. |
Example request
curl -X POST https://leadchime.com/api/v1/funnels -H "LeadChime-Public-Key: lc_pk_…" -H "LeadChime-Token: lc_sk_…" \
-H 'Content-Type: application/json' \
-d '{ "data": { "name": "Nurture", "status": "active" }, "steps": [ { "type": "apply_tag", "config": { "tags": ["nurturing"] } }, { "type": "delay", "config": { "amount": 1, "unit": "days" } }, { "type": "send_email", "config": { "email_template_id": 30 } } ] }'
Example response
{ "status": "success", "item": { … see Flows object } }
GET/funnels/:id
Retrieve a flow.
Example request
curl https://leadchime.com/api/v1/funnels/5 -H "LeadChime-Public-Key: lc_pk_…" -H "LeadChime-Token: lc_sk_…"
Example response
{ "status": "success", "item": { … see Flows object } }
PATCH/funnels/:id
Update a flow. Passing steps replaces the whole step list; contacts waiting on a removed step restart at the first step.
Example request
curl -X PATCH https://leadchime.com/api/v1/funnels/5 -H "LeadChime-Public-Key: lc_pk_…" -H "LeadChime-Token: lc_sk_…" \
-H 'Content-Type: application/json' \
-d '{ "data": { "status": "inactive" } }'
Example response
{ "status": "success", "item": { … see Flows object } }
DELETE/funnels/:id
Delete a flow. Cancels live enrollments.
Example request
curl -X DELETE https://leadchime.com/api/v1/funnels/5 -H "LeadChime-Public-Key: lc_pk_…" -H "LeadChime-Token: lc_sk_…"
Example response
{ "status": "success" }
GET/funnels/:id/enrollments
List enrollments.
Parameters
statusstring | queued, active, waiting, complete, cancelled, failed. |
contact_idint | Only this contact. |
limitint | Number of items to return. Default 20, max 500. |
offsetint | Number of items to skip. Default 0. |
orderstring | ASC or DESC. Default DESC. |
orderbystring | Column to order by. Default ID. |
Example request
curl "https://leadchime.com/api/v1/funnels/5/enrollments?status=waiting" -H "LeadChime-Public-Key: lc_pk_…" -H "LeadChime-Token: lc_sk_…"
Example response
{ "status": "success", "total_items": 12, "items": [ { "ID": 900, "data": { "funnel_id": 5, "contact_id": 1234, "step_id": 11, "status": "waiting", "run_at": "2026-09-04T14:05:25+00:00" } } ] }
POST/funnels/:id/enrollments/:eid/cancel
Cancel an enrollment.
Example request
curl -X POST https://leadchime.com/api/v1/funnels/5/enrollments/900/cancel -H "LeadChime-Public-Key: lc_pk_…" -H "LeadChime-Token: lc_sk_…"
Example response
{ "status": "success", "item": { "ID": 900, "data": { "status": "cancelled" } } }
Reports
Aggregate numbers over a date range (default: the last 30 days). Available reports: new_contacts, contacts_by_status, contacts_by_source, contacts_by_optin_status, won_revenue, conversion_rate, daily_new_contacts, broadcast_stats (params[broadcast_id]), deals_won, deals_lost, deals_pipeline_value, tasks_overdue, sms_sent, sms_received, email_sent, tag_counts, flow_enrollments. Each result carries value, breakdown and/or series depending on the report. Custom reports are reserved for a future release.
The Report object
{
"name": "new_contacts",
"after": "2026-08-04T00:00:00+00:00",
"before": "2026-09-03T14:05:25+00:00",
"value": 42,
"breakdown": { "website": 30, "manual": 12 },
"series": [ { "date": "2026-08-04", "count": 2 } ]
}
GET/reports
Fetch multiple reports.
Parameters
reportsstring | Comma-separated report names. Required. |
after / beforestring | Date range (UNIX or datetime). |
paramsobject | Report-specific inputs, e.g. params[broadcast_id]=33. |
Example request
curl "https://leadchime.com/api/v1/reports?reports=new_contacts,won_revenue&after=2026-08-01&before=2026-09-01" -H "LeadChime-Public-Key: lc_pk_…" -H "LeadChime-Token: lc_sk_…"
Example response
{ "status": "success", "reports": { "new_contacts": { … see Reports object }, "won_revenue": { ... } } }
GET/reports/:report
Fetch single report.
Example request
curl "https://leadchime.com/api/v1/reports/broadcast_stats?params[broadcast_id]=33" -H "LeadChime-Public-Key: lc_pk_…" -H "LeadChime-Token: lc_sk_…"
Example response
{ "status": "success", "report": { … see Reports object } }
GET/custom-reports
Fetch all custom reports. Reserved. Always returns an empty list.
Example request
curl https://leadchime.com/api/v1/custom-reports -H "LeadChime-Public-Key: lc_pk_…" -H "LeadChime-Token: lc_sk_…"
Example response
{ "status": "success", "total_items": 0, "items": [] }
GET/custom-reports/:report
Fetch single custom report. Reserved. Always 404.
Example request
curl https://leadchime.com/api/v1/custom-reports/my-report -H "LeadChime-Public-Key: lc_pk_…" -H "LeadChime-Token: lc_sk_…"
Example response
{ "status": "error", "code": "not_found", "message": "Custom report \"my-report\" was not found." }
