manage_whatsapp_web_forms
Build and manage web forms: forms customers fill in the browser from a short link sent in a WhatsApp chat, with the answers coming back as structured submissions. For WhatsApp Forms (Meta WhatsApp Flows, native in-chat forms on WhatsApp Business API numbers) use send_whatsapp_flow and list_whatsapp_flows instead.
Actions: list, get, create (blank, from a template, or from a definition), update (name, settings, numbers, or the whole draft), edit (operations on the draft, as { type: "addBlock", step, blockType, label, ... }), publish, archive, restore, duplicate, delete, versions, version (one published version with its answers JSON Schema), templates (the gallery), metrics, set_og_image (your own link preview image: an https URL or a base64 PNG/JPEG up to 1 MB, cropped to 1200×630), remove_og_image (back to the automatic one), set_public (a standing public link anyone can open, waform.app/m/..., bound to one number: for ads, bio links and QR codes), unset_public (turn it off).
Edits change the draft only: a published form keeps serving its live version until the next publish. publish, archive, delete and an edit with confirm=true answer a preview and a confirmToken first: show the preview to the user and call again with the token once they approve. To send a form, use send_whatsapp_web_form.
Tool call template
Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {
"action": "<action>"
},
"name": "manage_whatsapp_web_forms"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | metrics: last day, YYYY-MM-DD (UTC) | |
| ops | No | edit: draft operations, applied all or none, e.g. [{ "type": "addBlock", "step": "details", "blockType": "email", "label": "Your email", "required": true }] | |
| url | No | set_og_image: https URL of a PNG or JPEG | |
| from | No | metrics: first day, YYYY-MM-DD (UTC) | |
| lang | No | templates: language of the gallery (es, en, pt, fr, it, de) | |
| name | No | create, update, duplicate: form name | |
| page | No | Page, from 0 | |
| size | No | Rows per page (default 25, max 100) | |
| slug | No | set_public: the end of the public link, e.g. acme-booking | |
| sort | No | list: order (newest first by default) | |
| image | No | set_og_image: the image as base64 or a data URI | |
| action | Yes | What to do | |
| device | No | list: forms these numbers may send. metrics: only these numbers | |
| fields | No | Return only these dot-paths, e.g. ["id", "name", "status"]. Overrides verbosity | |
| formId | No | Web form ID (id from the list action) | |
| search | No | list: text in the form name | |
| status | No | list: only forms in these states | |
| captcha | No | set_public: ask visitors for an invisible check when the platform has one configured (default true) | |
| confirm | No | edit: true to rename or remove a key a published version holds (the API refuses those edits otherwise). It answers a preview and a confirmToken first | |
| devices | No | create, update: numbers allowed to send the form (all when empty) | |
| groupBy | No | metrics: daily rows, or totals only | |
| version | No | version: the published version number | |
| language | No | create, update: form language, e.g. en, es | |
| settings | No | create, update: settings such as { link: { ttlHours, afterSubmit }, submit: { successTitle, successText }, crm: { mappings, contactLabels, timelineCard } } | |
| template | No | create: template id from the templates action | |
| verbosity | No | summary (default): the fields needed most; standard: more context; full: everything the API returns | |
| definition | No | create, update: a whole form definition (format 1). Prefer template on create and edit afterwards | |
| description | No | create, update: internal description | |
| confirmToken | No | Token from the preview, sent back once the user approved the change | |
| publicDevice | No | set_public: the number the public link is bound to; its appearance brands the page and it receives the leads | |
| idempotencyKey | No | create: your unique key for this form, 6 to 36 characters. Reuse it when retrying: the API answers the form already created | |
| deleteSubmissions | No | delete: also delete the form's submissions, links and counters |