Create a form
create_formCreate a form from a full config. It is live at once at a public link: the result carries the public_url to give the user. Not idempotent: after a failure or a timeout, list_forms shows whether the form was created before a retry. Rules: steps run in order; every step has a unique key, a type and a non-empty question (message, reveal and scheduler steps may skip it); a name, email or phone is asked with the name, email or phone type, not text; only fields from the config schema in get_form_guide are accepted. Step types: name, email, phone, multiple_choice, dropdown, slider, text, textarea, url, file, message, reveal, scheduler. A minimal config: {"version":1,"title":"Talk to us","steps":[{"key":"name","type":"name","question":"What is your name?","required":true},{"key":"email","type":"email","question":"What is your work email?","required":true},{"key":"interest","type":"multiple_choice","question":"What are you interested in?","required":true,"options":[{"label":"A demo","value":"demo"},{"label":"Pricing","value":"pricing"},{"label":"Something else","value":"other"}]}]} A refused config answers VALIDATION_FAILED with every problem and its path, so you can fix them all in one retry. Unknown fields, repeated step keys or option values and references to steps that do not exist are refused, never silently changed. Without branding, dForms fills it in (the workspace brand kit, or the default look); get_form returns it, and update_form expects it back as read.
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": {
"name": "<name>",
"config": "<config>"
},
"name": "create_form"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The form name shown in the dashboard. | |
| slug | No | The last segment of the public link. Optional: derived from the name when left out. | |
| config | Yes | The whole form config, version 1: { "version": 1, "steps": [...], ... }. Its JSON Schema, the step types and worked examples are in get_form_guide. | |
| folder_id | No | File the new form in this folder of the workspace. | |
| workspace_id | No | The workspace this call acts in: an id from list_my_workspaces. Required for a person signed in with several workspaces and for staff of this deployment; optional with an API key or with only one workspace. |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| form | Yes | ||
| warnings | No | What did not go exactly as sent, or what the user needs to know. | |
| workspace | Yes | The workspace this call acted in, to compare with the one the user means. | |
| last_published_at | Yes | When publish_form last made a draft live. Null when publish_form never ran: the form serves what it was created with, which is an empty form when is_live is false. | |
| previous_published_at | Yes | When the version revert_form would bring back went live. Null when there is nothing to revert to. |