save_template
Creates a WhatsApp message template as a draft. Nothing goes to WhatsApp until you submit it with create_template_submissions. Returns the template.
| Tool name | save_template |
| Permission | templates:write |
readOnlyHint | false |
destructiveHint | false |
idempotentHint | true |
openWorldHint | false |
| REST call | POST /v1/templates, PATCH /v1/templates/{template_id} |
#What it does
- Changes data in your account. It does not send messages to contacts.
- 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 template (POST /v1/templates)
| Name | Type | Required | Description |
|---|---|---|---|
name | string | yes | Name of the template, at most 120 characters. length 1 to 120 |
purpose | string | no | marketing for offers and news. utility for neutral service messages. one of: marketing, utility; default "marketing" |
text | string | yes | Message text, at most 1024 characters. Placeholders: {{first_name}}, {{last_name}}, {{full_name}}, {{phone}}, {{email}}, {{date}}, {{time}}, {{amount}}, {{service}}, {{location}}. It must not start or end with a placeholder. length 1 to 1024 |
language | string | no | Language of the text, for example en or de. Default: the account language. length 2 to 10 |
footer | string or null | no | Footer line, at most 60 characters, no placeholder. Null removes it. up to 60 characters |
buttons | array of object | no | Up to 2 buttons. up to 2 items |
buttons[].type | string | yes | quick_reply sends the label back as a reply. url opens a web address. one of: quick_reply, url |
buttons[].text | string | yes | Label on the button, no placeholder. At most 25 characters for quick_reply and 40 for url. length 1 to 40 |
buttons[].url | string | no | Web address starting with https:// (only for type url). up to 2000 characters |
Update template (PATCH /v1/templates/{template_id})
| Name | Type | Required | Description |
|---|---|---|---|
template_id | string | yes | ID of the template, from list_templates. |
name | string | no | New name of the template. length 1 to 120 |
text | string | no | Message text, at most 1024 characters. Placeholders: {{first_name}}, {{last_name}}, {{full_name}}, {{phone}}, {{email}}, {{date}}, {{time}}, {{amount}}, {{service}}, {{location}}. It must not start or end with a placeholder. length 1 to 1024 |
language | string | no | Language of the text, for example en or de. Default: the account language. length 2 to 10 |
footer | string or null | no | Footer line, at most 60 characters, no placeholder. Null removes it. up to 60 characters |
buttons | array of object | no | Up to 2 buttons. up to 2 items |
buttons[].type | string | yes | quick_reply sends the label back as a reply. url opens a web address. one of: quick_reply, url |
buttons[].text | string | yes | Label on the button, no placeholder. At most 25 characters for quick_reply and 40 for url. length 1 to 40 |
buttons[].url | string | no | Web address starting with https:// (only for type url). up to 2000 characters |
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.