Forms
Read your web forms and their responses, for example to copy answers into your own system.
- Public and anonymous forms have a shared link: get it with
/link. - Private forms are sent to one client:
/sendcreates the client's response and sends it, as the Assign a form automation does (needs the CRM Suite add-on). - Responses: by default only completed ones. Poll with
sinceto get new responses oldest first without skipping any.
WhatsApp Flow forms are under WhatsApp Flows.
api.whautomate.comList forms
/v1/formsLists web forms, newest update first. type is public, private or anonymous.
x-api-keystringrequiredlocationIdstringtypestringpublic, private, anonymous.searchTextstringpageintegerlimitintegeridstringnamestringdescriptionstringtypestring (enum)public, private, anonymous.locationobjectacceptingResponsesbooleanexpiryDatestringquestionCountnumberresponseCountnumberlinkstringcreatedAtstringupdatedAtstringcurl -X GET "https://api.whautomate.com/v1/forms?locationId=Le6dWjQF9K&limit=2" \
-H "x-api-key: YOUR_API_KEY"
[
{
"id": "2wBCba26KT",
"name": "New Client Intake Form",
"description": "",
"type": "public",
"location": {
"id": "Le6dWjQF9K",
"title": "Serene Wellness Studio"
},
"acceptingResponses": true,
"expiryDate": null,
"questionCount": 4,
"responseCount": 5,
"link": "https://app.whautomate.com/f/public/2wBCba26KT",
"createdAt": "2026-10-29T11:43:32.116Z",
"updatedAt": "2026-10-29T11:43:32.558Z"
},
{
"id": "gfgSNz5qut",
"name": "Massage Consent Form",
"description": "",
"type": "private",
"location": {
"id": "Le6dWjQF9K",
"title": "Serene Wellness Studio"
},
"acceptingResponses": true,
"expiryDate": null,
"questionCount": 2,
"responseCount": 0,
"link": null,
"createdAt": "2026-10-29T11:43:32.150Z",
"updatedAt": "2026-10-29T11:43:32.150Z"
}
]
Get a form
/v1/forms/{formId}Gets a web form with its questions.
x-api-keystringrequiredformIdstringrequiredidstringnamestringdescriptionstringtypestring (enum)public, private, anonymous.locationobjectacceptingResponsesbooleanexpiryDatestringquestionCountnumberresponseCountnumberlinkstringcreatedAtstringupdatedAtstringquestionsobject[]curl -X GET "https://api.whautomate.com/v1/forms/2wBCba26KT" \
-H "x-api-key: YOUR_API_KEY"
{
"id": "2wBCba26KT",
"name": "New Client Intake Form",
"description": "",
"type": "public",
"location": {
"id": "Le6dWjQF9K",
"title": "Serene Wellness Studio"
},
"acceptingResponses": true,
"expiryDate": null,
"questionCount": 4,
"responseCount": 5,
"link": "https://app.whautomate.com/f/public/2wBCba26KT",
"createdAt": "2026-10-29T11:43:32.116Z",
"updatedAt": "2026-10-29T11:43:32.558Z",
"questions": [
{
"key": "goals",
"title": "What would you like to achieve with us?",
"type": "textarea",
"required": true,
"options": [],
"section": "About you"
},
{
"key": "injuries",
"title": "Any injuries or medical conditions we should know about?",
"type": "textarea",
"required": false,
"options": [],
"section": "About you"
},
{
"key": "interest",
"title": "Which services interest you?",
"type": "checkbox",
"required": false,
"options": [
"Massage",
"Physiotherapy",
"Yoga"
],
"section": "About you"
}
]
}
Get a form link
/v1/forms/{formId}/linkGets the shared link of a public or anonymous form (400 for private forms: send them instead).
x-api-keystringrequiredformIdstringrequiredformIdstringtypestringlinkstringcurl -X GET "https://api.whautomate.com/v1/forms/2wBCba26KT/link" \
-H "x-api-key: YOUR_API_KEY"
{
"formId": "2wBCba26KT",
"type": "public",
"link": "https://app.whautomate.com/f/public/2wBCba26KT"
}
Send a form to a client
/v1/forms/{formId}/sendSends a private form to a client (creates the client's response, as the Assign a form automation does). Needs the CRM module.
x-api-keystringrequiredformIdstringrequiredclientIdstringrequiredchannelsobjectChannels to send on, using the location form request templates. None creates the response and returns the link to share yourself.
staffIdstringresponseIdstringlinkstringstatusstringchannelsstring[]curl -X POST "https://api.whautomate.com/v1/forms/gfgSNz5qut/send" \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"clientId": "FLT22gHGml",
"channels": {
"whatsapp": true
},
"staffId": "ZxkrjyVgDE"
}'
{
"responseId": "ModcfncEmx",
"link": "https://app.whautomate.com/f/ModcfncEmx",
"status": "SENT",
"channels": [
"whatsapp"
]
}
List form responses
/v1/forms/responsesLists web form responses (WhatsApp Flow responses are under /v1/whatsapp-flows/responses). status is DRAFT, SENT, COMPLETED (default) or ALL. With since (ISO date) the list is oldest first from that date, so paging never skips a new response.
x-api-keystringrequiredformIdstringclientIdstringlocationIdstringstatusstringDRAFT, SENT, COMPLETED (default), ALL.sincestringpageintegerlimitintegeridstringformobjectclientobjectnull when the response has no client
locationobjectstatusstring (enum)DRAFT, SENT, COMPLETED.sentAtstringcompletedAtstringpdfUrlstringanswersobject[]paymentobjectnull unless the form takes a payment
createdAtstringupdatedAtstringcurl -X GET "https://api.whautomate.com/v1/forms/responses?status=COMPLETED&limit=2" \
-H "x-api-key: YOUR_API_KEY"
[
{
"id": "V0QklKjnaD",
"form": {
"id": "2wBCba26KT",
"name": "New Client Intake Form"
},
"client": {
"id": "Rkb6qfbG8F",
"name": "Olivia Tan",
"phone": "+6591203457",
"email": "olivia.tan@mail.example"
},
"location": {
"id": "Le6dWjQF9K",
"title": "Serene Wellness Studio"
},
"status": "COMPLETED",
"sentAt": null,
"completedAt": "2026-10-29T11:43:32.196Z",
"pdfUrl": null,
"answers": [
{
"key": "goals",
"title": "What would you like to achieve with us?",
"type": "textarea",
"value": "Reduce back pain"
},
{
"key": "injuries",
"title": "Any injuries or medical conditions we should know about?",
"type": "textarea",
"value": "Old shoulder injury"
},
{
"key": "interest",
"title": "Which services interest you?",
"type": "checkbox",
"value": [
"Massage"
]
}
],
"payment": null,
"createdAt": "2026-10-29T11:43:32.212Z",
"updatedAt": "2026-10-29T11:43:42.151Z"
},
{
"id": "ebW3rqOB8n",
"form": {
"id": "2wBCba26KT",
"name": "New Client Intake Form"
},
"client": {
"id": "FkXBDmC6R2",
"name": "Chloe Wong",
"phone": "+6591219295",
"email": "chloe.wong@mail.example"
},
"location": {
"id": "Le6dWjQF9K",
"title": "Serene Wellness Studio"
},
"status": "COMPLETED",
"sentAt": null,
"completedAt": "2026-10-27T11:43:32.287Z",
"pdfUrl": null,
"answers": [
{
"key": "goals",
"title": "What would you like to achieve with us?",
"type": "textarea",
"value": "Improve flexibility"
},
{
"key": "injuries",
"title": "Any injuries or medical conditions we should know about?",
"type": "textarea",
"value": "None"
},
{
"key": "interest",
"title": "Which services interest you?",
"type": "checkbox",
"value": [
"Yoga",
"Pilates"
]
}
],
"payment": null,
"createdAt": "2026-10-29T11:43:32.291Z",
"updatedAt": "2026-10-29T11:43:32.291Z"
}
]
Get a form response
/v1/forms/responses/{responseId}Gets a web form response with its answers.
x-api-keystringrequiredresponseIdstringrequiredidstringformobjectclientobjectnull when the response has no client
locationobjectstatusstring (enum)DRAFT, SENT, COMPLETED.sentAtstringcompletedAtstringpdfUrlstringanswersobject[]paymentobjectnull unless the form takes a payment
createdAtstringupdatedAtstringcurl -X GET "https://api.whautomate.com/v1/forms/responses/V0QklKjnaD" \
-H "x-api-key: YOUR_API_KEY"
{
"id": "V0QklKjnaD",
"form": {
"id": "2wBCba26KT",
"name": "New Client Intake Form"
},
"client": {
"id": "Rkb6qfbG8F",
"name": "Olivia Tan",
"phone": "+6591203457",
"email": "olivia.tan@mail.example"
},
"location": {
"id": "Le6dWjQF9K",
"title": "Serene Wellness Studio"
},
"status": "COMPLETED",
"sentAt": null,
"completedAt": "2026-10-29T11:43:32.196Z",
"pdfUrl": null,
"answers": [
{
"key": "goals",
"title": "What would you like to achieve with us?",
"type": "textarea",
"value": "Reduce back pain"
},
{
"key": "injuries",
"title": "Any injuries or medical conditions we should know about?",
"type": "textarea",
"value": "Old shoulder injury"
},
{
"key": "interest",
"title": "Which services interest you?",
"type": "checkbox",
"value": [
"Massage"
]
}
],
"payment": null,
"createdAt": "2026-10-29T11:43:32.212Z",
"updatedAt": "2026-10-29T11:43:42.151Z"
}