CRM

Update a contact

crm_update_contact · Changes data · Markdown

Changes fields on a contact by its id, its email included; only the fields you send change.

$0.01 a call

From your agent’s balance. A call that fails costs nothing.

An example

Sophie Lange just paid for her espresso machine. Mark her as a customer and save her new number, 040 66969 214.

Your agent callscrm_update_contact$0.01 a call

The example business is Hansen & Voss, a restaurant-equipment wholesaler in Hamburg with 60 staff. The reply is the one the tool really gives.

With these arguments
{
  "contact_id": 4812,
  "phone": "+49 40 66969 214",
  "lifecycle_stage": "customer"
}
What comes back
{
  "contact": {
    "id": 4812,
    "email": "sophie.lange@example.com",
    "name": "Sophie Lange",
    "title": "",
    "company": "",
    "company_id": null,
    "phone": "+49 40 66969 214",
    "location": "Hamburg",
    "lifecycle_stage": "customer",
    "outreach_status": null,
    "notes": "",
    "tags": [
      "cold"
    ],
    "custom_fields": {},
    "archived": false,
    "updated_at": "2026-10-14T08:00:00+00:00"
  }
}

Use it when

A known contact's details or stage change, especially their email address.

What it does

Change fields on an existing contact by id. Only the fields you send change; tags are added, custom fields merged.

What comes back

The contact as it now is. Every reply also carries cost_usd and balance_usd.

Inputs

NameTypeWhat it is
contact_idRequiredintegerAt least 1.
emailstring (email)Up to 254 characters.
namestringUp to 255 characters.
titlestringUp to 255 characters.
companystringCompany name; also links or creates the company record. Up to 255 characters.
phonestringUp to 60 characters.
locationstringUp to 255 characters.
timezonestringUp to 60 characters.
languagestringUp to 60 characters.
lifecycle_stagestringOne of: lead,trial,onboarding,customer,at_risk,churned,advocate.
notesstringUp to 20,000 characters.
custom_fieldsobjectCustom fields as {"key": value}, merged into the existing ones; null clears one. Keys defined with crm_define_field are checked against their type.
tagsarray of stringsTags to add, e.g. ["vip"]; a new tag is made on first use. crm_tag_records removes tags. Up to 20 items.

The call

Over MCP, call crm_update_contact on https://api.conecto.chat/mcp/crm. Over REST:

Terminal
curl -X POST https://api.conecto.chat/v1/tools/crm_update_contact \
  -H "Authorization: Bearer $CONECTO_KEY" \
  -H "Content-Type: application/json" \
  -d '{"contact_id":4812,"phone":"+49 40 66969 214","lifecycle_stage":"customer"}'

When it refuses

A refused call costs nothing and says what to do next.

CodeWhenWhat to do
not_found404No contact of the business matches that contact_id or email.Find the person with crm_search and use the id it returns.
invalid_input400A custom field value does not fit the field's type, or the record would hold too many custom fields.Send a value of the type crm_list_fields shows for that key, or null to clear it.
conflict409Another contact already has that email.Merge the two with crm_merge_contacts, or keep the email as it is.

Give this to your agent.

Set up Conecto from https://conecto.chat/SKILL.md