Forms
Space MCP tools in the Forms scope (forms). Reach these with a wks_live_ key over space-mcp or space-api.
Tools in the forms scope, callable over space-mcp (tools/call) or space-api (REST) with a wks_live_* key that grants forms.
create_form
Scope: forms:write
Create a real Space form so submissions are captured (they flow into the space and fire automations). Returns { form_id, slug, fields }. Embed it with <form data-wakato-form-id="<form_id>"> where each input name matches a field key. The form is active immediately.
| Parameter | Type | Required | Description |
|---|---|---|---|
name | string | yes | |
description | string | ||
success_message | string | ||
redirect_url | string | Where to send the visitor after submit (optional). | |
template | string | Built-in template id: contact | lead_capture | event_rsvp | nps | booking_intake | quiz | job_application. Ignored if fields given. | |
fields | object[] | Explicit fields. Each: { key, label, type, required?, placeholder?, options? }. type ∈ text|email|tel|textarea|date|select|checkboxes|radio|number|url|checkbox. |
delete_form
Scope: forms:write
PERMANENTLY delete a Space form (its submissions are deleted with it). Refused while a booking page has the form attached — detach first via update_booking_page with form_id: null. Prefer update_form status:"archived" when the submission history should be kept.
| Parameter | Type | Required | Description |
|---|---|---|---|
form_id | string | yes |
get_form
Scope: forms:read
Get a Space form including its fields (use each field's key as the HTML input name).
| Parameter | Type | Required | Description |
|---|---|---|---|
form_id | string | yes |
list_form_submissions
Scope: forms:read
Read a form's submissions, newest first. Each submission's answers are in data, keyed by field key. Returns total_count so you can report volume without paging.
| Parameter | Type | Required | Description |
|---|---|---|---|
form_id | string | yes | |
status | pending_confirmation | confirmed | expired | ||
since | string | ISO datetime — only submissions created at/after this instant. | |
limit | number | Max rows (default 50, max 200). |
list_forms
Scope: forms:read
List Space forms (id, name, slug, status). Reuse an existing form before creating a new one.
submit_form
Scope: forms:write
Submit a form through the SAME pipeline as the public /f/<slug> page — required-field validation, contact capture, and automations ALL fire. This creates a REAL submission: use it to test a form end-to-end (then find it via list_form_submissions) or to file answers collected on someone's behalf. The form must be active.
| Parameter | Type | Required | Description |
|---|---|---|---|
form_id | string | yes | |
data | object | yes | Answer values keyed by each field's key (from get_form). Every required field must be present. |
update_form
Scope: forms:write
Edit an existing Space form: name, description, status (draft|active|paused|archived), success_message, redirect_url, and/or fields. fields is a FULL replacement — call get_form first, modify the array (add/edit/remove/reorder fields, change required flags, options, labels), and pass the whole thing back.
| Parameter | Type | Required | Description |
|---|---|---|---|
form_id | string | yes | |
name | string | ||
description | string | ||
status | draft | active | paused | archived | Only active forms accept submissions. | |
success_message | string | ||
redirect_url | string | ||
fields | object[] | FULL field list replacement. Each: { key, label, type, required?, placeholder?, options? }. type ∈ text|email|tel|textarea|date|select|checkboxes|radio|number|url|checkbox. |