Configurar Formulário Instantâneo
Cria ou substitui a configuração de um formulário: qual caixa de consentimento significa “pode me mandar mensagem no WhatsApp” e se todo lead novo do formulário recebe uma mensagem automática no WhatsApp — enviada pela Pilot Status sem um humano, então uma configuração aceita por este endpoint vai mandar mensagem aos leads.
Envie o objeto inteiro. Regras: o envio automático exige consentDisclaimerKey (400 CONSENT_REQUIRED). Num número oficial a mensagem é um template APROVADO do número (templateId; 400 TEMPLATE_REQUIRED, TEMPLATE_NOT_ELIGIBLE, FREE_TEXT_NOT_ALLOWED). Num número não oficial é freeText com variáveis {{nome}} (400 FREE_TEXT_REQUIRED, TEMPLATE_NOT_ALLOWED; uma variável com espaços é recusada como VALIDATION_FAILED com INVALID_PLACEHOLDER). Toda variável precisa estar mapeada em variableMap para uma resposta do formulário ({ "source": "field", "key": "<chave da pergunta>" }) ou um valor fixo ({ "source": "static", "value": "..." }) — senão, 400 VARIABLES_UNMAPPED com missingVariables. As regras da mensagem só valem com autoSendEnabled: true, então você pode salvar a caixa de consentimento e um rascunho antes.
Tokens OAuth/MCP precisam de integrations:manage (ADMIN ou OWNER do workspace) em todos os verbos, leituras incluídas. Escopo: uma chave com escopo de número, ou uma credencial da conta inteira com x-whatsapp-number-id, atua só nos vínculos daquele número; uma credencial da conta inteira sem o header vê o workspace todo.
curl --request PUT \
--url https://pilotstatus.com.br/v1/lead-pages/{pageLinkId}/forms/{formId} \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"consentDisclaimerKey": "whatsapp_optin",
"autoSendEnabled": true,
"templateId": null,
"freeText": "Olá {{nome}}, recebemos seu pedido de orçamento!",
"variableMap": {
"nome": {
"source": "field",
"key": "full_name"
}
},
"formName": "Orçamento — Outubro"
}
'import requests
url = "https://pilotstatus.com.br/v1/lead-pages/{pageLinkId}/forms/{formId}"
payload = {
"consentDisclaimerKey": "whatsapp_optin",
"autoSendEnabled": True,
"templateId": None,
"freeText": "Olá {{nome}}, recebemos seu pedido de orçamento!",
"variableMap": { "nome": {
"source": "field",
"key": "full_name"
} },
"formName": "Orçamento — Outubro"
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
consentDisclaimerKey: 'whatsapp_optin',
autoSendEnabled: true,
templateId: null,
freeText: 'Olá {{nome}}, recebemos seu pedido de orçamento!',
variableMap: {nome: {source: 'field', key: 'full_name'}},
formName: 'Orçamento — Outubro'
})
};
fetch('https://pilotstatus.com.br/v1/lead-pages/{pageLinkId}/forms/{formId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://pilotstatus.com.br/v1/lead-pages/{pageLinkId}/forms/{formId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'consentDisclaimerKey' => 'whatsapp_optin',
'autoSendEnabled' => true,
'templateId' => null,
'freeText' => 'Olá {{nome}}, recebemos seu pedido de orçamento!',
'variableMap' => [
'nome' => [
'source' => 'field',
'key' => 'full_name'
]
],
'formName' => 'Orçamento — Outubro'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://pilotstatus.com.br/v1/lead-pages/{pageLinkId}/forms/{formId}"
payload := strings.NewReader("{\n \"consentDisclaimerKey\": \"whatsapp_optin\",\n \"autoSendEnabled\": true,\n \"templateId\": null,\n \"freeText\": \"Olá {{nome}}, recebemos seu pedido de orçamento!\",\n \"variableMap\": {\n \"nome\": {\n \"source\": \"field\",\n \"key\": \"full_name\"\n }\n },\n \"formName\": \"Orçamento — Outubro\"\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("x-api-key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.put("https://pilotstatus.com.br/v1/lead-pages/{pageLinkId}/forms/{formId}")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"consentDisclaimerKey\": \"whatsapp_optin\",\n \"autoSendEnabled\": true,\n \"templateId\": null,\n \"freeText\": \"Olá {{nome}}, recebemos seu pedido de orçamento!\",\n \"variableMap\": {\n \"nome\": {\n \"source\": \"field\",\n \"key\": \"full_name\"\n }\n },\n \"formName\": \"Orçamento — Outubro\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://pilotstatus.com.br/v1/lead-pages/{pageLinkId}/forms/{formId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"consentDisclaimerKey\": \"whatsapp_optin\",\n \"autoSendEnabled\": true,\n \"templateId\": null,\n \"freeText\": \"Olá {{nome}}, recebemos seu pedido de orçamento!\",\n \"variableMap\": {\n \"nome\": {\n \"source\": \"field\",\n \"key\": \"full_name\"\n }\n },\n \"formName\": \"Orçamento — Outubro\"\n}"
response = http.request(request)
puts response.read_body{
"config": {
"formId": "987654321098765",
"formName": "Orçamento — Outubro",
"consentDisclaimerKey": "whatsapp_optin",
"autoSendEnabled": true,
"templateId": null,
"freeText": "Olá {{nome}}, recebemos seu pedido de orçamento!",
"variableMap": {
"nome": {
"source": "field",
"key": "full_name"
}
},
"updatedAt": "2026-10-21T09:30:00.000Z"
}
}{
"error": "Every variable in the text needs a value. | Todas as variáveis do texto precisam de um valor.",
"code": "VARIABLES_UNMAPPED",
"missingVariables": [
"cidade"
]
}{
"error": "Unauthorized"
}{
"error": "This credential is not granted access to that WhatsApp number | Esta credencial não tem acesso a esse número de WhatsApp",
"code": "NUMBER_NOT_IN_GRANT"
}{
"error": "Page link not found | Vínculo de página não encontrado",
"code": "NOT_FOUND"
}{
"error": "Internal server error | Erro interno do servidor",
"code": "INTERNAL_ERROR"
}Autorizações
Sua chave de API ps_
Cabeçalhos
Restringe uma credencial da conta inteira a um número (o id dele ou o id da instância, de GET /v1/numbers). Sem ele, uma credencial da conta inteira vê o workspace todo; uma chave com escopo de número vê sempre só o próprio número.
Parâmetros de caminho
O id do vínculo (linked[].pageLinkId de GET /v1/lead-pages), não o id da Página do Facebook.
Id numérico do Formulário Instantâneo (forms[].formId).
Corpo
key da caixa de consentimento (consentCheckboxes[].key). Obrigatória para o envio automático.
"whatsapp_optin"
Mandar mensagem automaticamente a todo lead novo do formulário.
true
Números oficiais: um template APROVADO do número (templates[].id). Deve ser null em números não oficiais.
null
Números não oficiais: a mensagem, com variáveis {{nome}}. Deve ser null em números oficiais.
4096"Olá {{nome}}, recebemos seu pedido de orçamento!"
Valor de cada variável do template ou do texto: { "source": "field", "key": "<chave da pergunta>" } ou { "source": "static", "value": "..." }. Padrão {}.
Show child attributes
Show child attributes
{ "nome": { "source": "field", "key": "full_name" } }
Rótulo opcional do formulário.
255"Orçamento — Outubro"
Resposta
Configuração salva
Esta página foi útil?
curl --request PUT \
--url https://pilotstatus.com.br/v1/lead-pages/{pageLinkId}/forms/{formId} \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"consentDisclaimerKey": "whatsapp_optin",
"autoSendEnabled": true,
"templateId": null,
"freeText": "Olá {{nome}}, recebemos seu pedido de orçamento!",
"variableMap": {
"nome": {
"source": "field",
"key": "full_name"
}
},
"formName": "Orçamento — Outubro"
}
'import requests
url = "https://pilotstatus.com.br/v1/lead-pages/{pageLinkId}/forms/{formId}"
payload = {
"consentDisclaimerKey": "whatsapp_optin",
"autoSendEnabled": True,
"templateId": None,
"freeText": "Olá {{nome}}, recebemos seu pedido de orçamento!",
"variableMap": { "nome": {
"source": "field",
"key": "full_name"
} },
"formName": "Orçamento — Outubro"
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
consentDisclaimerKey: 'whatsapp_optin',
autoSendEnabled: true,
templateId: null,
freeText: 'Olá {{nome}}, recebemos seu pedido de orçamento!',
variableMap: {nome: {source: 'field', key: 'full_name'}},
formName: 'Orçamento — Outubro'
})
};
fetch('https://pilotstatus.com.br/v1/lead-pages/{pageLinkId}/forms/{formId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://pilotstatus.com.br/v1/lead-pages/{pageLinkId}/forms/{formId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'consentDisclaimerKey' => 'whatsapp_optin',
'autoSendEnabled' => true,
'templateId' => null,
'freeText' => 'Olá {{nome}}, recebemos seu pedido de orçamento!',
'variableMap' => [
'nome' => [
'source' => 'field',
'key' => 'full_name'
]
],
'formName' => 'Orçamento — Outubro'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://pilotstatus.com.br/v1/lead-pages/{pageLinkId}/forms/{formId}"
payload := strings.NewReader("{\n \"consentDisclaimerKey\": \"whatsapp_optin\",\n \"autoSendEnabled\": true,\n \"templateId\": null,\n \"freeText\": \"Olá {{nome}}, recebemos seu pedido de orçamento!\",\n \"variableMap\": {\n \"nome\": {\n \"source\": \"field\",\n \"key\": \"full_name\"\n }\n },\n \"formName\": \"Orçamento — Outubro\"\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("x-api-key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.put("https://pilotstatus.com.br/v1/lead-pages/{pageLinkId}/forms/{formId}")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"consentDisclaimerKey\": \"whatsapp_optin\",\n \"autoSendEnabled\": true,\n \"templateId\": null,\n \"freeText\": \"Olá {{nome}}, recebemos seu pedido de orçamento!\",\n \"variableMap\": {\n \"nome\": {\n \"source\": \"field\",\n \"key\": \"full_name\"\n }\n },\n \"formName\": \"Orçamento — Outubro\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://pilotstatus.com.br/v1/lead-pages/{pageLinkId}/forms/{formId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"consentDisclaimerKey\": \"whatsapp_optin\",\n \"autoSendEnabled\": true,\n \"templateId\": null,\n \"freeText\": \"Olá {{nome}}, recebemos seu pedido de orçamento!\",\n \"variableMap\": {\n \"nome\": {\n \"source\": \"field\",\n \"key\": \"full_name\"\n }\n },\n \"formName\": \"Orçamento — Outubro\"\n}"
response = http.request(request)
puts response.read_body{
"config": {
"formId": "987654321098765",
"formName": "Orçamento — Outubro",
"consentDisclaimerKey": "whatsapp_optin",
"autoSendEnabled": true,
"templateId": null,
"freeText": "Olá {{nome}}, recebemos seu pedido de orçamento!",
"variableMap": {
"nome": {
"source": "field",
"key": "full_name"
}
},
"updatedAt": "2026-10-21T09:30:00.000Z"
}
}{
"error": "Every variable in the text needs a value. | Todas as variáveis do texto precisam de um valor.",
"code": "VARIABLES_UNMAPPED",
"missingVariables": [
"cidade"
]
}{
"error": "Unauthorized"
}{
"error": "This credential is not granted access to that WhatsApp number | Esta credencial não tem acesso a esse número de WhatsApp",
"code": "NUMBER_NOT_IN_GRANT"
}{
"error": "Page link not found | Vínculo de página não encontrado",
"code": "NOT_FOUND"
}{
"error": "Internal server error | Erro interno do servidor",
"code": "INTERNAL_ERROR"
}