curl --request POST \
--url https://app.thinnest.ai/api/v1/forms/{id}/publish \
--header 'Authorization: Bearer <token>'const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.thinnest.ai/api/v1/forms/{id}/publish', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://app.thinnest.ai/api/v1/forms/{id}/publish"
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, headers=headers)
print(response.text){
"id": "form_9e2c4a7b-1d5f-4c38-8b6e-0a3f7d2c9e15",
"name": "Delivery address",
"agent": "ag_2c7e9a14-5b3d-4f8e-a1c6-7d9b0e3f5a21",
"category": "CONTACT_US",
"form": {
"title": "Where should we deliver?",
"submitLabel": "Send",
"fields": [
{
"name": "address",
"label": "Full address",
"kind": "paragraph",
"required": true
},
{
"name": "pincode",
"label": "PIN code",
"kind": "number",
"required": true
}
]
},
"published": true,
"publishedAt": "2026-10-06T10:24:02.660Z",
"createdAt": "2026-10-06T10:20:51.093Z",
"updatedAt": "2026-10-06T10:24:02.660Z"
}{
"error": "Keep it to 8 questions. Anything longer is abandoned rather than answered."
}{
"error": "Send a valid API key as `Authorization: Bearer <key>`."
}{
"error": "This API key is read-only: it can read everything but change nothing."
}{
"error": "That form was not found."
}{
"error": "Connect a WhatsApp number first — this is submitted to your own WhatsApp Business Account, and until one is connected there is no account to submit it to."
}{
"error": "WhatsApp would not publish it."
}{
"error": "Over 240 requests a minute. Slow down and retry."
}{
"error": "Could not publish that form."
}Publish Form
Publishes the form to your workspace’s own WhatsApp Business Account, which makes it sendable. Needs a connected WhatsApp number whose connection was finished. If WhatsApp refuses (most often because the business is not verified yet), the form stays saved and you can publish again later; a failed republish leaves the live version on the air. Needs a full key.
curl --request POST \
--url https://app.thinnest.ai/api/v1/forms/{id}/publish \
--header 'Authorization: Bearer <token>'const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.thinnest.ai/api/v1/forms/{id}/publish', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://app.thinnest.ai/api/v1/forms/{id}/publish"
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, headers=headers)
print(response.text){
"id": "form_9e2c4a7b-1d5f-4c38-8b6e-0a3f7d2c9e15",
"name": "Delivery address",
"agent": "ag_2c7e9a14-5b3d-4f8e-a1c6-7d9b0e3f5a21",
"category": "CONTACT_US",
"form": {
"title": "Where should we deliver?",
"submitLabel": "Send",
"fields": [
{
"name": "address",
"label": "Full address",
"kind": "paragraph",
"required": true
},
{
"name": "pincode",
"label": "PIN code",
"kind": "number",
"required": true
}
]
},
"published": true,
"publishedAt": "2026-10-06T10:24:02.660Z",
"createdAt": "2026-10-06T10:20:51.093Z",
"updatedAt": "2026-10-06T10:24:02.660Z"
}{
"error": "Keep it to 8 questions. Anything longer is abandoned rather than answered."
}{
"error": "Send a valid API key as `Authorization: Bearer <key>`."
}{
"error": "This API key is read-only: it can read everything but change nothing."
}{
"error": "That form was not found."
}{
"error": "Connect a WhatsApp number first — this is submitted to your own WhatsApp Business Account, and until one is connected there is no account to submit it to."
}{
"error": "WhatsApp would not publish it."
}{
"error": "Over 240 requests a minute. Slow down and retry."
}{
"error": "Could not publish that form."
}Authorizations
Your API key (ta_live_…) from Settings → API keys, sent as Authorization: Bearer <key>. Keep it on a server: it can message every customer you have. A key is full, build or read-only; a request its level does not allow is refused with 403.
Headers
Developers only: the customer workspace this request acts in — its org_… id from POST /customers. Leave it out to act in your own workspace.
"org_3fKq9TzQ1mN8vB2xR7cLpA"
Path Parameters
The form's id (form_…).
Response
Published: published is true.
The form's id (form_…).
What you call it. Customers never see it.
The agent it belongs to (ag_…).
WhatsApp's category for it. Affects reporting only.
SIGN_UP, APPOINTMENT_BOOKING, LEAD_GENERATION, CONTACT_US, CUSTOMER_SUPPORT, SURVEY, OTHER Show child attributes
Show child attributes
Whether it can be sent. False until published, and again after any edit until it is republished.
When it was last published.
When it was created.
When it was last changed.