Skip to main content

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: /send creates 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 since to get new responses oldest first without skipping any.

WhatsApp Flow forms are under WhatsApp Flows.

API regionapi.whautomate.com

List forms​

GET /v1/forms

Lists web forms, newest update first. type is public, private or anonymous.

Headers
x-api-keystringrequired
Your Whautomate API key.
Query parameters
locationIdstring
Location (workspace) id. Get ids from GET /v1/locations.
typestring
One of public, private, anonymous.
searchTextstring
Text to search for.
pageinteger
Page number, from 1 (default 1).
limitinteger
Results per page (default 10, max 100).
Response 200
idstring
namestring
descriptionstring
typestring (enum)
One of: public, private, anonymous.
locationobject
acceptingResponsesboolean
expiryDatestring
questionCountnumber
responseCountnumber
linkstring
Shared link of a public or anonymous form, null for private forms
createdAtstring
updatedAtstring
Request
curl -X GET "https://api.whautomate.com/v1/forms?locationId=Le6dWjQF9K&limit=2" \
-H "x-api-key: YOUR_API_KEY"
Response 200
[
{
"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​

GET /v1/forms/{formId}

Gets a web form with its questions.

Headers
x-api-keystringrequired
Your Whautomate API key.
Path parameters
formIdstringrequired
Response 200
idstring
namestring
descriptionstring
typestring (enum)
One of: public, private, anonymous.
locationobject
acceptingResponsesboolean
expiryDatestring
questionCountnumber
responseCountnumber
linkstring
Shared link of a public or anonymous form, null for private forms
createdAtstring
updatedAtstring
questionsobject[]
Request
curl -X GET "https://api.whautomate.com/v1/forms/2wBCba26KT" \
-H "x-api-key: YOUR_API_KEY"
Response 200
{
"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 /v1/forms/{formId}/link

Gets the shared link of a public or anonymous form (400 for private forms: send them instead).

Headers
x-api-keystringrequired
Your Whautomate API key.
Path parameters
formIdstringrequired
Response 200
formIdstring
typestring
linkstring
Request
curl -X GET "https://api.whautomate.com/v1/forms/2wBCba26KT/link" \
-H "x-api-key: YOUR_API_KEY"
Response 200
{
"formId": "2wBCba26KT",
"type": "public",
"link": "https://app.whautomate.com/f/public/2wBCba26KT"
}

Send a form to a client​

POST /v1/forms/{formId}/send

Sends a private form to a client (creates the client's response, as the Assign a form automation does). Needs the CRM module.

Headers
x-api-keystringrequired
Your Whautomate API key.
Path parameters
formIdstringrequired
Body
clientIdstringrequired
channelsobject

Channels to send on, using the location form request templates. None creates the response and returns the link to share yourself.

staffIdstring
Staff member on the response
Response 200
responseIdstring
linkstring
The client personal link
statusstring
DRAFT, or SENT once sent
channelsstring[]
Channels sent on
Request
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"
}'
Response 200
{
"responseId": "ModcfncEmx",
"link": "https://app.whautomate.com/f/ModcfncEmx",
"status": "SENT",
"channels": [
"whatsapp"
]
}

List form responses​

GET /v1/forms/responses

Lists 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.

Headers
x-api-keystringrequired
Your Whautomate API key.
Query parameters
formIdstring
Only responses to this form.
clientIdstring
Client id.
locationIdstring
Location (workspace) id. Get ids from GET /v1/locations.
statusstring
One of DRAFT, SENT, COMPLETED (default), ALL.
sincestring
ISO date. Returns records from that date, oldest first, so paging never skips a new one.
pageinteger
Page number, from 1 (default 1).
limitinteger
Results per page (default 10, max 100).
Response 200
idstring
formobject
clientobject

null when the response has no client

locationobject
statusstring (enum)
One of: DRAFT, SENT, COMPLETED.
sentAtstring
completedAtstring
pdfUrlstring
answersobject[]
paymentobject

null unless the form takes a payment

createdAtstring
updatedAtstring
Request
curl -X GET "https://api.whautomate.com/v1/forms/responses?status=COMPLETED&limit=2" \
-H "x-api-key: YOUR_API_KEY"
Response 200
[
{
"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​

GET /v1/forms/responses/{responseId}

Gets a web form response with its answers.

Headers
x-api-keystringrequired
Your Whautomate API key.
Path parameters
responseIdstringrequired
Response 200
idstring
formobject
clientobject

null when the response has no client

locationobject
statusstring (enum)
One of: DRAFT, SENT, COMPLETED.
sentAtstring
completedAtstring
pdfUrlstring
answersobject[]
paymentobject

null unless the form takes a payment

createdAtstring
updatedAtstring
Request
curl -X GET "https://api.whautomate.com/v1/forms/responses/V0QklKjnaD" \
-H "x-api-key: YOUR_API_KEY"
Response 200
{
"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"
}