{"name": "crm_save_contact", "area": "crm", "title": "Save a contact", "description": "Create a contact, or update the one with this email if it already exists. Only the fields you send change; tags are added, custom fields merged. Without an email a new contact is always created.", "price": {"model": "per_call", "usd": "$0.01", "micros": 10000}, "read_only": false, "destructive": false, "runs_in_background": false, "input_schema": {"type": "object", "properties": {"email": {"type": "string", "maxLength": 254, "format": "email"}, "name": {"type": "string", "maxLength": 255}, "title": {"type": "string", "maxLength": 255}, "company": {"type": "string", "maxLength": 255, "description": "Company name; also links or creates the company record."}, "phone": {"type": "string", "maxLength": 60}, "location": {"type": "string", "maxLength": 255}, "timezone": {"type": "string", "maxLength": 60}, "language": {"type": "string", "maxLength": 60}, "lifecycle_stage": {"type": "string", "enum": ["lead", "trial", "onboarding", "customer", "at_risk", "churned", "advocate"]}, "notes": {"type": "string", "maxLength": 20000}, "custom_fields": {"type": "object", "maxProperties": 60, "additionalProperties": {"type": ["string", "number", "boolean", "null"], "maxLength": 1000}, "description": "Custom fields as {\"key\": value}, merged into the existing ones; null clears one. Keys defined with crm_define_field are checked against their type."}, "tags": {"type": "array", "maxItems": 20, "items": {"type": "string", "maxLength": 60, "minLength": 1}, "description": "Tags to add, e.g. [\"vip\"]; a new tag is made on first use. crm_tag_records removes tags."}}, "required": [], "additionalProperties": false}, "examples": [{"email": "ana@acme.com", "name": "Ana Ruiz", "company": "Acme", "lifecycle_stage": "lead", "tags": ["webinar-2026-10"], "custom_fields": {"plan": "Pro"}}]}