Read and write Less Annoying CRM contacts, notes, tasks, events, pipelines and groups.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Add a contact or company to a group (creates a group membership). Identify the group by group_id (preferred) or group_name — not both. LACRM: CreateGroupMembership.
The contact or company id (a long numeric Uid — always pass it as a string).
The group id (a long numeric Uid — always pass it as a string).
The group name, if you do not have its id.
The server marks this tool as destructive. Running it may delete or overwrite data on the server or in any account you connected with your headers.
Add a contact or company to a group (creates a group membership). Identify the group by group_id (preferred) or group_name — not both. LACRM: CreateGroupMembership.
| Argument | Type | Description |
|---|---|---|
| group_id | string | The group id (a long numeric Uid — always pass it as a string). |
| contact_id* | string | The contact or company id (a long numeric Uid — always pass it as a string). |
| group_name | string | The group name, if you do not have its id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"contact_id"
],
"properties": {
"group_id": {
"type": "string",
"minLength": 1,
"description": "The group id (a long numeric Uid — always pass it as a string)."
},
"contact_id": {
"type": "string",
"minLength": 1,
"description": "The contact or company id (a long numeric Uid — always pass it as a string)."
},
"group_name": {
"type": "string",
"description": "The group name, if you do not have its id."
}
}
}Create a new contact (person) or company record. For a person, company_name links them to that company (creating it if needed). Company names must be unique. If assigned_to is omitted, the record is assigned to the API key's own user (one extra GetUser call). Returns { ContactId }. LACRM: CreateContact.
| Argument | Type | Description |
|---|---|---|
| name* | string | Full name of the person, or the company's name. |
| array | Email address(es). | |
| phone | array | Phone number(s). |
| address | array | Address(es). |
| website | array | Website URL(s). |
| birthday | string | Birthday, yyyy-mm-dd (or 0000-M-D for no year). |
| job_title | string | Job title (people only). |
| is_company | boolean | true to create a COMPANY record. Default false (a person). |
| assigned_to | any | UserId to assign the record to. Default: the API key's user. |
Create a timed (or all-day) event on your calendar, optionally with contacts/users as attendees. The timezone of start_date becomes the event's timezone. Returns { EventId }. LACRM: CreateEvent.
| Argument | Type | Description |
|---|---|---|
| name* | string | Event name shown on the calendar. |
| end_date* | string | End, ISO 8601 date-time. |
| location | string | |
| attendees | array | Attendees: contacts and/or users. |
| is_all_day | boolean | All-day event (times ignored). Default false. |
| start_date* | string | Start, ISO 8601 date-time, e.g. 2026-10-06T14:00:00-05:00. |
| calendar_id | string | Calendar to put it on. Default: your primary (a long numeric Uid — always pass it as a string). |
| description | string |
Attach a plain-text note to a contact or company's history (newlines kept, HTML/markdown escaped). Returns { NoteId }. LACRM: CreateNote.
| Argument | Type | Description |
|---|---|---|
| note* | string | The note text. |
| contact_id* | string | The contact or company id (a long numeric Uid — always pass it as a string). |
| date_displayed | string | When the note should appear in history, ISO 8601 date-time. Default: now. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"contact_id",
"note"
],
"properties": {
"note": {
"type": "string",
"minLength": 1,
"description": "The note text."
},
"contact_id": {
"type": "string",
"minLength": 1,
"description": "The contact or company id (a long numeric Uid — always pass it as a string)."
},
"date_displayed": {
"type": "string",
"description": "When the note should appear in history, ISO 8601 date-time. Default: now."
}
}
}Create a pipeline item (deal, lead...) on a contact in a given pipeline and status, with an optional note. Returns { PipelineItemId }. LACRM: CreatePipelineItem.
| Argument | Type | Description |
|---|---|---|
| note | string | Optional note shown in the item's history. |
| status_id* | string | The starting status id (from the pipeline's Statuses) (a long numeric Uid — always pass it as a string). |
| contact_id* | string | The contact or company id (a long numeric Uid — always pass it as a string). |
| pipeline_id* | string | The pipeline id (from lacrm_list_pipelines) (a long numeric Uid — always pass it as a string). |
| run_status_automation | boolean | Run the status's automation. Default false. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"contact_id",
"pipeline_id",
"status_id"
],
"properties": {
"note": {
"type": "string",
"description": "Optional note shown in the item's history."
},
"status_id": {
"type": "string",
"minLength": 1,
"description": "The starting status id (from the pipeline's Statuses) (a long numeric Uid — always pass it as a string)."
},
"contact_id": {
"type": "string",
"minLength": 1,
"description": "The contact or company id (a long numeric Uid — always pass it as a string)."
},
"pipeline_id": {
"type": "string",
"minLength": 1,
"description": "The pipeline id (from lacrm_list_pipelines) (a long numeric Uid — always pass it as a string)."
},
"run_status_automation": {
"type": "boolean",
"description": "Run the status's automation. Default false."
}
}
}Create a to-do on a user's task list (date only, no time — use lacrm_create_event for timed things). Optionally attach it to a contact. Returns { TaskId }. LACRM: CreateTask.
| Argument | Type | Description |
|---|---|---|
| name* | string | Task name shown on the task list. |
| due_date | string | Due date, yyyy-mm-dd. |
| contact_id | string | Attach the task to this contact or company (a long numeric Uid — always pass it as a string). |
| assigned_to | any | UserId to assign to. Default: you. |
| calendar_id | string | Calendar to file it under. Default: your primary (a long numeric Uid — always pass it as a string). |
| description | string | Longer details. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"minLength": 1,
"description": "Task name shown on the task list."
},
"due_date": {
"type": "string",
"description": "Due date, yyyy-mm-dd."
},
"contact_id": {
"type": "string",
"minLength": 1,
"description": "Attach the task to this contact or company (a long numeric Uid — always pass it as a string)."
},
"assigned_to": {
"anyOf": [
{
"type": "string"
},
{
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
}
],
"description": "UserId to assign to. Default: you."
},
"calendar_id": {
"type": "string",
"minLength": 1,
"description": "Calendar to file it under. Default: your primary (a long numeric Uid — always pass it as a string)."
},
"description": {
"type": "string",
"description": "Longer details."
}
}
}Update fields on an existing contact or company. Only the fields you pass change; omitted fields are left alone. Multi-value fields (email, phone, address, website) are REPLACED by the list you pass. Set is_company=true when renaming a company. LACRM: EditContact.
| Argument | Type | Description |
|---|---|---|
| name | string | New full name (person) or company name. |
| array | Email address(es). | |
| phone | array | Phone number(s). |
| address | array | Address(es). |
| website | array | Website URL(s). |
| birthday | string | Birthday, yyyy-mm-dd (or 0000-M-D for no year). |
| job_title | string | Job title (people only). |
| contact_id* | string | The contact or company id (a long numeric Uid — always pass it as a string). |
| is_company | boolean | Set true if this record is a company, so `name` maps to its Company Name field. |
Update a task — including marking it complete (is_complete=true) or re-opening it (false). Only passed fields change. LACRM: EditTask.
| Argument | Type | Description |
|---|---|---|
| name | string | |
| task_id* | string | The task id (a long numeric Uid — always pass it as a string). |
| due_date | string | New due date, yyyy-mm-dd. |
| contact_id | string | Attach to this contact instead (a long numeric Uid — always pass it as a string). |
| assigned_to | any | Reassign to this UserId. |
| calendar_id | string | Move to this calendar (a long numeric Uid — always pass it as a string). |
| description | string | |
| is_complete | boolean | true = mark complete, false = mark incomplete. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"task_id"
],
"properties": {
"name": {
"type": "string"
},
"task_id": {
"type": "string",
"minLength": 1,
"description": "The task id (a long numeric Uid — always pass it as a string)."
},
"due_date": {
"type": "string",
"description": "New due date, yyyy-mm-dd."
},
"contact_id": {
"type": "string",
"minLength": 1,
"description": "Attach to this contact instead (a long numeric Uid — always pass it as a string)."
},
"assigned_to": {
"anyOf": [
{
"type": "string"
},
{
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
}
],
"description": "Reassign to this UserId."
},
"calendar_id": {
"type": "string",
"minLength": 1,
"description": "Move to this calendar (a long numeric Uid — always pass it as a string)."
},
"description": {
"type": "string"
},
"is_complete": {
"type": "boolean",
"description": "true = mark complete, false = mark incomplete."
}
}
}Fetch one contact or company record with all its fields (emails, phones, addresses, custom fields, owner). LACRM: GetContact.
| Argument | Type | Description |
|---|---|---|
| contact_id* | string | The contact or company id (a long numeric Uid — always pass it as a string). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"contact_id"
],
"properties": {
"contact_id": {
"type": "string",
"minLength": 1,
"description": "The contact or company id (a long numeric Uid — always pass it as a string)."
}
}
}List the groups one contact or company belongs to. LACRM: GetGroupsAttachedToContact.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number, 1-based. Default 1. |
| contact_id* | string | The contact or company id (a long numeric Uid — always pass it as a string). |
| max_results | integer | Results per page (MaxNumberOfResults), 1-10000. Default here: 50. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"contact_id"
],
"properties": {
"page": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Page number, 1-based. Default 1."
},
"contact_id": {
"type": "string",
"minLength": 1,
"description": "The contact or company id (a long numeric Uid — always pass it as a string)."
},
"max_results": {
"type": "integer",
"maximum": 10000,
"minimum": 1,
"description": "Results per page (MaxNumberOfResults), 1-10000. Default here: 50."
}
}
}All pipeline items attached to one contact or company, grouped by pipeline. LACRM: GetPipelineItemsAttachedToContact.
| Argument | Type | Description |
|---|---|---|
| contact_id* | string | The contact or company id (a long numeric Uid — always pass it as a string). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"contact_id"
],
"properties": {
"contact_id": {
"type": "string",
"minLength": 1,
"description": "The contact or company id (a long numeric Uid — always pass it as a string)."
}
}
}Return the user who owns this API key — UserId, name, email and timezone. A cheap way to confirm the key works, and the UserId to use for AssignedTo. LACRM: GetUser.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}List the contacts that are members of one group. Identify the group by group_id (preferred) or group_name — not both. LACRM: GetContactsInGroup.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number, 1-based. Default 1. |
| group_id | string | The group id (a long numeric Uid — always pass it as a string). |
| group_name | string | The group name, if you do not have its id. |
| max_results | integer | Results per page (MaxNumberOfResults), 1-10000. Default here: 50. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Page number, 1-based. Default 1."
},
"group_id": {
"type": "string",
"minLength": 1,
"description": "The group id (a long numeric Uid — always pass it as a string)."
},
"group_name": {
"type": "string",
"description": "The group name, if you do not have its id."
},
"max_results": {
"type": "integer",
"maximum": 10000,
"minimum": 1,
"description": "Results per page (MaxNumberOfResults), 1-10000. Default here: 50."
}
}
}List the account's field definitions (name, type, options) for contacts, companies or pipelines — use the Name values as keys in custom_fields when creating/editing contacts. LACRM: GetCustomFields.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number, 1-based. Default 1. |
| max_results | integer | Results per page (MaxNumberOfResults), 1-10000. Default here: 50. |
| pipeline_id | string | For pipeline fields, only this pipeline's (a long numeric Uid — always pass it as a string). |
| record_type | string | Only fields for this record type. |
| include_archived | boolean | Include deleted fields. Default false. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Page number, 1-based. Default 1."
},
"max_results": {
"type": "integer",
"maximum": 10000,
"minimum": 1,
"description": "Results per page (MaxNumberOfResults), 1-10000. Default here: 50."
},
"pipeline_id": {
"type": "string",
"minLength": 1,
"description": "For pipeline fields, only this pipeline's (a long numeric Uid — always pass it as a string)."
},
"record_type": {
"enum": [
"Contact",
"Company",
"Pipeline"
],
"type": "string",
"description": "Only fields for this record type."
},
"include_archived": {
"type": "boolean",
"description": "Include deleted fields. Default false."
}
}
}List calendar events in a date range, filterable by user or calendar. If contact_id is given, all events attached to that contact are returned and other filters are ignored. LACRM: GetEvents.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number, 1-based. Default 1. |
| end_date | string | End of the range (inclusive), ISO 8601 date or date-time. |
| user_ids | array | Only events for these UserIds. |
| contact_id | string | Only events attached to this contact (a long numeric Uid — always pass it as a string). |
| start_date | string | Start of the range (inclusive), ISO 8601 date or date-time. |
| max_results | integer | Results per page (MaxNumberOfResults), 1-10000. Default here: 50. |
| calendar_ids | array | Only events on these CalendarIds (your own calendars only). |
| sort_direction | string | Sort direction. |
List the contact groups you can see (GroupId, Name, Sharing, Color), optionally with member counts. LACRM: GetGroups.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number, 1-based. Default 1. |
| max_results | integer | Results per page (MaxNumberOfResults), 1-10000. Default here: 50. |
| include_contact_counts | boolean | Also return the number of contacts in each group (slower). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Page number, 1-based. Default 1."
},
"max_results": {
"type": "integer",
"maximum": 10000,
"minimum": 1,
"description": "Results per page (MaxNumberOfResults), 1-10000. Default here: 50."
},
"include_contact_counts": {
"type": "boolean",
"description": "Also return the number of contacts in each group (slower)."
}
}
}List notes, newest first by default — across the whole CRM, or for one contact. Filter by date range and author. LACRM: GetNotes.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number, 1-based. Default 1. |
| date_end | string | Only notes on/before this date-time (ISO 8601). |
| user_ids | array | Only notes entered by these UserIds. |
| contact_id | string | Only notes attached to this contact (a long numeric Uid — always pass it as a string). |
| date_start | string | Only notes on/after this date-time (ISO 8601). |
| max_results | integer | Results per page (MaxNumberOfResults), 1-10000. Default here: 50. |
| sort_direction | string | Sort direction. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Page number, 1-based. Default 1."
},
"date_end": {
"type": "string",
"description": "Only notes on/before this date-time (ISO 8601)."
},
"user_ids": {
"type": "array",
"items": {
"anyOf": [
{
"type": "string"
},
{
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
}
]
},
"description": "Only notes entered by these UserIds."
},
"contact_id": {
"type": "string",
"minLength": 1,
"description": "Only notes attached to this contact (a long numeric Uid — always pass it as a string)."
},
"date_start": {
"type": "string",
"description": "Only notes on/after this date-time (ISO 8601)."
},
"max_results": {
"type": "integer",
"maximum": 10000,
"minimum": 1,
"description": "Results per page (MaxNumberOfResults), 1-10000. Default here: 50."
},
"sort_direction": {
"enum": [
"Ascending",
"Descending"
],
"type": "string",
"description": "Sort direction."
}
}
}List the items in one pipeline (deals, leads...), optionally only in given statuses or for given users. An empty status filter returns items in all ACTIVE statuses. LACRM: GetPipelineItems.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number, 1-based. Default 1. |
| sort_by | string | Default Status. |
| user_ids | array | Only items whose contact is assigned to these UserIds. |
| status_ids | array | Only items in these StatusIds. |
| max_results | integer | Results per page (MaxNumberOfResults), 1-10000. Default here: 50. |
| pipeline_id* | string | The pipeline id (from lacrm_list_pipelines) (a long numeric Uid — always pass it as a string). |
| sort_direction | string | Sort direction. |
| advanced_filters | array | AdvancedFilters, ANDed together. See https://account.lessannoyingcrm.com/api_docs/v2/Advanced/Filter_Contacts for the names/operations your account supports. |
List the account's pipelines (e.g. Sales Leads) with their statuses (StatusId, Name, IsActive) and optionally their custom fields. This is the setup, not the items — use lacrm_list_pipeline_items for those. LACRM: GetPipelines.
| Argument | Type | Description |
|---|---|---|
| include_archived | boolean | Include deleted pipelines. Default false. |
| include_custom_fields | boolean | Include each pipeline's custom field definitions. Default here: false (they are verbose). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"include_archived": {
"type": "boolean",
"description": "Include deleted pipelines. Default false."
},
"include_custom_fields": {
"type": "boolean",
"description": "Include each pipeline's custom field definitions. Default here: false (they are verbose)."
}
}
}List tasks due in a date range, optionally only incomplete/complete, for given users. If contact_id is given, ALL of that contact's tasks are returned regardless of dates or status. LACRM: GetTasks.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number, 1-based. Default 1. |
| end_date* | string | Upper bound of due dates, yyyy-mm-dd. |
| user_ids | array | Only tasks assigned to these UserIds. |
| contact_id | string | Only tasks attached to this contact (a long numeric Uid — always pass it as a string). |
| start_date* | string | Lower bound of due dates, yyyy-mm-dd. |
| max_results | integer | Results per page (MaxNumberOfResults), 1-10000. Default here: 50. |
| sort_direction | string | Sort direction. |
| completion_status | string | Default Both. |
List the users on the account that you can see (admins see all), with their UserIds — needed to assign contacts, tasks or filter by owner. LACRM: GetUsers.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}Search (or list) contacts and companies. With no search_terms, returns everything visible, paged. Returns { HasMoreResults, Results }. LACRM: GetContacts.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number, 1-based. Default 1. |
| sort_by | string | Sort field. Default Relevance. |
| max_results | integer | Results per page (MaxNumberOfResults), 1-10000. Default here: 50. |
| record_type | string | Limit to people (Contacts) or Companies. |
| search_terms | string | Text to search for across record fields (name, email, phone, company...). |
| owner_user_ids | array | Only records assigned to these UserIds. |
| sort_direction | string | Sort direction. |
| advanced_filters | array | AdvancedFilters, ANDed together. See https://account.lessannoyingcrm.com/api_docs/v2/Advanced/Filter_Contacts for the names/operations your account supports. |
Move a pipeline item to another status (e.g. Prospect → Won) and/or add a note to its history. LACRM: EditPipelineItem.
| Argument | Type | Description |
|---|---|---|
| note | string | Note to add to the item's history. |
| status_id | string | The new status id (a long numeric Uid — always pass it as a string). |
| pipeline_item_id* | string | The pipeline item id (a long numeric Uid — always pass it as a string). |
| run_status_automation | boolean | If the status changes, run its automation. Default false. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"pipeline_item_id"
],
"properties": {
"note": {
"type": "string",
"description": "Note to add to the item's history."
},
"status_id": {
"type": "string",
"minLength": 1,
"description": "The new status id (a long numeric Uid — always pass it as a string)."
},
"pipeline_item_id": {
"type": "string",
"minLength": 1,
"description": "The pipeline item id (a long numeric Uid — always pass it as a string)."
},
"run_status_automation": {
"type": "boolean",
"description": "If the status changes, run its automation. Default false."
}
}
}| company_name | string | For a PERSON: the company they work at (created if it does not exist). Not used for company records. |
| custom_fields | object | Extra fields keyed by the account's field names exactly as LACRM shows them (e.g. {"Lead Source": "Referral"}). Use lacrm_list_custom_fields to find them. Merged verbatim into Parameters. |
| background_info | string | The Background Info text. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"minLength": 1,
"description": "Full name of the person, or the company's name."
},
"email": {
"type": "array",
"items": {
"type": "object",
"required": [
"text"
],
"properties": {
"text": {
"type": "string",
"description": "The value, e.g. an email address or phone number."
},
"type": {
"type": "string",
"description": "Type label, e.g. Work, Personal, Mobile. Must match a type in the CRM."
}
}
},
"description": "Email address(es)."
},
"phone": {
"type": "array",
"items": {
"type": "object",
"required": [
"text"
],
"properties": {
"text": {
"type": "string",
"description": "The value, e.g. an email address or phone number."
},
"type": {
"type": "string",
"description": "Type label, e.g. Work, Personal, Mobile. Must match a type in the CRM."
}
}
},
"description": "Phone number(s)."
},
"address": {
"type": "array",
"items": {
"type": "object",
"properties": {
"zip": {
"type": "string"
},
"city": {
"type": "string"
},
"type": {
"type": "string",
"description": "Type label, e.g. Work, Home."
},
"state": {
"type": "string"
},
"street": {
"type": "string"
},
"country": {
"type": "string"
}
}
},
"description": "Address(es)."
},
"website": {
"type": "array",
"items": {
"type": "string"
},
"description": "Website URL(s)."
},
"birthday": {
"type": "string",
"description": "Birthday, yyyy-mm-dd (or 0000-M-D for no year)."
},
"job_title": {
"type": "string",
"description": "Job title (people only)."
},
"is_company": {
"type": "boolean",
"description": "true to create a COMPANY record. Default false (a person)."
},
"assigned_to": {
"anyOf": [
{
"type": "string"
},
{
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
}
],
"description": "UserId to assign the record to. Default: the API key's user."
},
"company_name": {
"type": "string",
"description": "For a PERSON: the company they work at (created if it does not exist). Not used for company records."
},
"custom_fields": {
"type": "object",
"description": "Extra fields keyed by the account's field names exactly as LACRM shows them (e.g. {\"Lead Source\": \"Referral\"}). Use lacrm_list_custom_fields to find them. Merged verbatim into Parameters.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"background_info": {
"type": "string",
"description": "The Background Info text."
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"name",
"start_date",
"end_date"
],
"properties": {
"name": {
"type": "string",
"minLength": 1,
"description": "Event name shown on the calendar."
},
"end_date": {
"type": "string",
"description": "End, ISO 8601 date-time."
},
"location": {
"type": "string"
},
"attendees": {
"type": "array",
"items": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "ContactId (is_user=false) or UserId (is_user=true)."
},
"status": {
"enum": [
"IsAttending",
"Maybe",
"NotAttending"
],
"type": "string"
},
"is_user": {
"type": "boolean",
"description": "true if this attendee is a CRM user. Default false (a contact)."
}
}
},
"description": "Attendees: contacts and/or users."
},
"is_all_day": {
"type": "boolean",
"description": "All-day event (times ignored). Default false."
},
"start_date": {
"type": "string",
"description": "Start, ISO 8601 date-time, e.g. 2026-10-06T14:00:00-05:00."
},
"calendar_id": {
"type": "string",
"minLength": 1,
"description": "Calendar to put it on. Default: your primary (a long numeric Uid — always pass it as a string)."
},
"description": {
"type": "string"
}
}
}| assigned_to | any | Reassign to this UserId. |
| company_name | string | For a PERSON: the company they work at (created if it does not exist). Not used for company records. |
| custom_fields | object | Extra fields keyed by the account's field names exactly as LACRM shows them (e.g. {"Lead Source": "Referral"}). Use lacrm_list_custom_fields to find them. Merged verbatim into Parameters. |
| background_info | string | The Background Info text. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"contact_id"
],
"properties": {
"name": {
"type": "string",
"description": "New full name (person) or company name."
},
"email": {
"type": "array",
"items": {
"type": "object",
"required": [
"text"
],
"properties": {
"text": {
"type": "string",
"description": "The value, e.g. an email address or phone number."
},
"type": {
"type": "string",
"description": "Type label, e.g. Work, Personal, Mobile. Must match a type in the CRM."
}
}
},
"description": "Email address(es)."
},
"phone": {
"type": "array",
"items": {
"type": "object",
"required": [
"text"
],
"properties": {
"text": {
"type": "string",
"description": "The value, e.g. an email address or phone number."
},
"type": {
"type": "string",
"description": "Type label, e.g. Work, Personal, Mobile. Must match a type in the CRM."
}
}
},
"description": "Phone number(s)."
},
"address": {
"type": "array",
"items": {
"type": "object",
"properties": {
"zip": {
"type": "string"
},
"city": {
"type": "string"
},
"type": {
"type": "string",
"description": "Type label, e.g. Work, Home."
},
"state": {
"type": "string"
},
"street": {
"type": "string"
},
"country": {
"type": "string"
}
}
},
"description": "Address(es)."
},
"website": {
"type": "array",
"items": {
"type": "string"
},
"description": "Website URL(s)."
},
"birthday": {
"type": "string",
"description": "Birthday, yyyy-mm-dd (or 0000-M-D for no year)."
},
"job_title": {
"type": "string",
"description": "Job title (people only)."
},
"contact_id": {
"type": "string",
"minLength": 1,
"description": "The contact or company id (a long numeric Uid — always pass it as a string)."
},
"is_company": {
"type": "boolean",
"description": "Set true if this record is a company, so `name` maps to its Company Name field."
},
"assigned_to": {
"anyOf": [
{
"type": "string"
},
{
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
}
],
"description": "Reassign to this UserId."
},
"company_name": {
"type": "string",
"description": "For a PERSON: the company they work at (created if it does not exist). Not used for company records."
},
"custom_fields": {
"type": "object",
"description": "Extra fields keyed by the account's field names exactly as LACRM shows them (e.g. {\"Lead Source\": \"Referral\"}). Use lacrm_list_custom_fields to find them. Merged verbatim into Parameters.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"background_info": {
"type": "string",
"description": "The Background Info text."
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Page number, 1-based. Default 1."
},
"end_date": {
"type": "string",
"description": "End of the range (inclusive), ISO 8601 date or date-time."
},
"user_ids": {
"type": "array",
"items": {
"anyOf": [
{
"type": "string"
},
{
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
}
]
},
"description": "Only events for these UserIds."
},
"contact_id": {
"type": "string",
"minLength": 1,
"description": "Only events attached to this contact (a long numeric Uid — always pass it as a string)."
},
"start_date": {
"type": "string",
"description": "Start of the range (inclusive), ISO 8601 date or date-time."
},
"max_results": {
"type": "integer",
"maximum": 10000,
"minimum": 1,
"description": "Results per page (MaxNumberOfResults), 1-10000. Default here: 50."
},
"calendar_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Only events on these CalendarIds (your own calendars only)."
},
"sort_direction": {
"enum": [
"Ascending",
"Descending"
],
"type": "string",
"description": "Sort direction."
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"pipeline_id"
],
"properties": {
"page": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Page number, 1-based. Default 1."
},
"sort_by": {
"enum": [
"Status",
"DateCreated",
"LastUpdate"
],
"type": "string",
"description": "Default Status."
},
"user_ids": {
"type": "array",
"items": {
"anyOf": [
{
"type": "string"
},
{
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
}
]
},
"description": "Only items whose contact is assigned to these UserIds."
},
"status_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Only items in these StatusIds."
},
"max_results": {
"type": "integer",
"maximum": 10000,
"minimum": 1,
"description": "Results per page (MaxNumberOfResults), 1-10000. Default here: 50."
},
"pipeline_id": {
"type": "string",
"minLength": 1,
"description": "The pipeline id (from lacrm_list_pipelines) (a long numeric Uid — always pass it as a string)."
},
"sort_direction": {
"enum": [
"Ascending",
"Descending"
],
"type": "string",
"description": "Sort direction."
},
"advanced_filters": {
"type": "array",
"items": {
"type": "object",
"required": [
"Name",
"Operation"
],
"properties": {
"Name": {
"type": "string",
"description": "Filter name, e.g. FullName, FirstName, Group."
},
"Value": {
"description": "Value for the operation (omit for IsEmpty-style operations)."
},
"Operation": {
"type": "string",
"description": "Operation, e.g. Contains, IsExactly, IsInGroupList, IsEmpty."
}
}
},
"description": "AdvancedFilters, ANDed together. See https://account.lessannoyingcrm.com/api_docs/v2/Advanced/Filter_Contacts for the names/operations your account supports."
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"start_date",
"end_date"
],
"properties": {
"page": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Page number, 1-based. Default 1."
},
"end_date": {
"type": "string",
"description": "Upper bound of due dates, yyyy-mm-dd."
},
"user_ids": {
"type": "array",
"items": {
"anyOf": [
{
"type": "string"
},
{
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
}
]
},
"description": "Only tasks assigned to these UserIds."
},
"contact_id": {
"type": "string",
"minLength": 1,
"description": "Only tasks attached to this contact (a long numeric Uid — always pass it as a string)."
},
"start_date": {
"type": "string",
"description": "Lower bound of due dates, yyyy-mm-dd."
},
"max_results": {
"type": "integer",
"maximum": 10000,
"minimum": 1,
"description": "Results per page (MaxNumberOfResults), 1-10000. Default here: 50."
},
"sort_direction": {
"enum": [
"Ascending",
"Descending"
],
"type": "string",
"description": "Sort direction."
},
"completion_status": {
"enum": [
"Both",
"Incomplete",
"Complete"
],
"type": "string",
"description": "Default Both."
}
}
}| requires_write_access |
| boolean |
| Only records you can edit. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Page number, 1-based. Default 1."
},
"sort_by": {
"enum": [
"Relevance",
"FirstName",
"LastName",
"CompanyName",
"DateCreated",
"LastUpdate"
],
"type": "string",
"description": "Sort field. Default Relevance."
},
"max_results": {
"type": "integer",
"maximum": 10000,
"minimum": 1,
"description": "Results per page (MaxNumberOfResults), 1-10000. Default here: 50."
},
"record_type": {
"enum": [
"Contacts",
"Companies"
],
"type": "string",
"description": "Limit to people (Contacts) or Companies."
},
"search_terms": {
"type": "string",
"description": "Text to search for across record fields (name, email, phone, company...)."
},
"owner_user_ids": {
"type": "array",
"items": {
"anyOf": [
{
"type": "string"
},
{
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991
}
]
},
"description": "Only records assigned to these UserIds."
},
"sort_direction": {
"enum": [
"Ascending",
"Descending"
],
"type": "string",
"description": "Sort direction."
},
"advanced_filters": {
"type": "array",
"items": {
"type": "object",
"required": [
"Name",
"Operation"
],
"properties": {
"Name": {
"type": "string",
"description": "Filter name, e.g. FullName, FirstName, Group."
},
"Value": {
"description": "Value for the operation (omit for IsEmpty-style operations)."
},
"Operation": {
"type": "string",
"description": "Operation, e.g. Contains, IsExactly, IsInGroupList, IsEmpty."
}
}
},
"description": "AdvancedFilters, ANDed together. See https://account.lessannoyingcrm.com/api_docs/v2/Advanced/Filter_Contacts for the names/operations your account supports."
},
"requires_write_access": {
"type": "boolean",
"description": "Only records you can edit."
}
}
}