save_contact
Creates a contact from a phone number or an email; the opt-in status starts as none and only the contact can confirm it. Returns the contact or contact_already_exists with existing_id.
| Tool name | save_contact |
| Permission | contacts:write |
readOnlyHint | false |
destructiveHint | false |
idempotentHint | true |
openWorldHint | false |
| REST call | POST /v1/contacts, PATCH /v1/contacts/{contact_id} |
#What it does
- Changes data in your account. It does not send messages to contacts.
- May start automations of the account, and an automation may send messages. The call itself sends nothing.
- Safe to repeat with the same idempotency_key.
#Input
The tool takes one flat object. Path, query and body fields of the REST call are merged into it.
Create contact (POST /v1/contacts)
| Name | Type | Required | Description |
|---|---|---|---|
name | string | no | Name of the contact. up to 120 characters |
phone | string | no | Phone number in E.164 format, for example +4915112345678. up to 16 characters; format e164 |
email | string | no | Email address. up to 254 characters; format email |
purpose | string | no | Why the contact is created: marketing (default), automation or service. one of: marketing, automation, service; default "marketing" |
Update contact (PATCH /v1/contacts/{contact_id})
| Name | Type | Required | Description |
|---|---|---|---|
contact_id | string | yes | Contact ID. |
name | string or null | no | New name. Null removes the name. up to 120 characters |
phone | string or null | no | New phone number in E.164 format. Null removes it. up to 16 characters; format e164 |
email | string or null | no | New email address. Null removes it. up to 254 characters; format email |
Arguments added by the MCP server (see Special arguments)
| Name | Type | Required | Description |
|---|---|---|---|
idempotency_key | string | no | Optional. Unique key, for example a UUID. Same key and arguments within 24 hours: first result. Without a key only an identical call within 1 minute counts as a repeat. up to 255 characters |
#Result
The result has the same content as the REST answer. Lists have at most 50 items per page (default 20); use cursor for the next page.
Errors come back as a tool result with isError: true. The error codes are the ones in Errors.