Send buttons
Sends an interactive buttons message. Each button type is one of reply, copy, url, call, pix.
curl --request POST \
--url https://pilotstatus.com.br/api/layer/evolution-v2/message/sendButtons/{instance} \
--header 'Content-Type: application/json' \
--header 'apikey: <api-key>' \
--data '
{
"number": "5511999999999",
"buttons[].type": "<string>",
"buttons": [
{
"type": "reply",
"displayText": "Talk to sales",
"id": "sales"
},
{
"type": "url",
"displayText": "Visit site",
"url": "https://pilotstatus.com.br"
},
{
"type": "call",
"displayText": "Call us",
"phoneNumber": "5511967435133"
}
],
"buttons[].displayText": "<string>",
"buttons[].id": "<string>",
"buttons[].url": "<string>",
"buttons[].phoneNumber": "<string>",
"buttons[].currency": "<string>",
"buttons[].name": "<string>",
"buttons[].keyType": "<string>",
"buttons[].key": "<string>",
"title": "How can we help?",
"description": "Choose an option below",
"footer": "Pilot Status",
"thumbnailUrl": "<string>",
"delay": 123,
"quoted": {},
"everyOne": true,
"mentioned": [
"<string>"
]
}
'import requests
url = "https://pilotstatus.com.br/api/layer/evolution-v2/message/sendButtons/{instance}"
payload = {
"number": "5511999999999",
"buttons[].type": "<string>",
"buttons": [
{
"type": "reply",
"displayText": "Talk to sales",
"id": "sales"
},
{
"type": "url",
"displayText": "Visit site",
"url": "https://pilotstatus.com.br"
},
{
"type": "call",
"displayText": "Call us",
"phoneNumber": "5511967435133"
}
],
"buttons[].displayText": "<string>",
"buttons[].id": "<string>",
"buttons[].url": "<string>",
"buttons[].phoneNumber": "<string>",
"buttons[].currency": "<string>",
"buttons[].name": "<string>",
"buttons[].keyType": "<string>",
"buttons[].key": "<string>",
"title": "How can we help?",
"description": "Choose an option below",
"footer": "Pilot Status",
"thumbnailUrl": "<string>",
"delay": 123,
"quoted": {},
"everyOne": True,
"mentioned": ["<string>"]
}
headers = {
"apikey": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {apikey: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
number: '5511999999999',
'buttons[].type': '<string>',
buttons: [
{type: 'reply', displayText: 'Talk to sales', id: 'sales'},
{type: 'url', displayText: 'Visit site', url: 'https://pilotstatus.com.br'},
{type: 'call', displayText: 'Call us', phoneNumber: '5511967435133'}
],
'buttons[].displayText': '<string>',
'buttons[].id': '<string>',
'buttons[].url': '<string>',
'buttons[].phoneNumber': '<string>',
'buttons[].currency': '<string>',
'buttons[].name': '<string>',
'buttons[].keyType': '<string>',
'buttons[].key': '<string>',
title: 'How can we help?',
description: 'Choose an option below',
footer: 'Pilot Status',
thumbnailUrl: '<string>',
delay: 123,
quoted: {},
everyOne: true,
mentioned: ['<string>']
})
};
fetch('https://pilotstatus.com.br/api/layer/evolution-v2/message/sendButtons/{instance}', 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/api/layer/evolution-v2/message/sendButtons/{instance}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'number' => '5511999999999',
'buttons[].type' => '<string>',
'buttons' => [
[
'type' => 'reply',
'displayText' => 'Talk to sales',
'id' => 'sales'
],
[
'type' => 'url',
'displayText' => 'Visit site',
'url' => 'https://pilotstatus.com.br'
],
[
'type' => 'call',
'displayText' => 'Call us',
'phoneNumber' => '5511967435133'
]
],
'buttons[].displayText' => '<string>',
'buttons[].id' => '<string>',
'buttons[].url' => '<string>',
'buttons[].phoneNumber' => '<string>',
'buttons[].currency' => '<string>',
'buttons[].name' => '<string>',
'buttons[].keyType' => '<string>',
'buttons[].key' => '<string>',
'title' => 'How can we help?',
'description' => 'Choose an option below',
'footer' => 'Pilot Status',
'thumbnailUrl' => '<string>',
'delay' => 123,
'quoted' => [
],
'everyOne' => true,
'mentioned' => [
'<string>'
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"apikey: <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/api/layer/evolution-v2/message/sendButtons/{instance}"
payload := strings.NewReader("{\n \"number\": \"5511999999999\",\n \"buttons[].type\": \"<string>\",\n \"buttons\": [\n {\n \"type\": \"reply\",\n \"displayText\": \"Talk to sales\",\n \"id\": \"sales\"\n },\n {\n \"type\": \"url\",\n \"displayText\": \"Visit site\",\n \"url\": \"https://pilotstatus.com.br\"\n },\n {\n \"type\": \"call\",\n \"displayText\": \"Call us\",\n \"phoneNumber\": \"5511967435133\"\n }\n ],\n \"buttons[].displayText\": \"<string>\",\n \"buttons[].id\": \"<string>\",\n \"buttons[].url\": \"<string>\",\n \"buttons[].phoneNumber\": \"<string>\",\n \"buttons[].currency\": \"<string>\",\n \"buttons[].name\": \"<string>\",\n \"buttons[].keyType\": \"<string>\",\n \"buttons[].key\": \"<string>\",\n \"title\": \"How can we help?\",\n \"description\": \"Choose an option below\",\n \"footer\": \"Pilot Status\",\n \"thumbnailUrl\": \"<string>\",\n \"delay\": 123,\n \"quoted\": {},\n \"everyOne\": true,\n \"mentioned\": [\n \"<string>\"\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("apikey", "<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.post("https://pilotstatus.com.br/api/layer/evolution-v2/message/sendButtons/{instance}")
.header("apikey", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"number\": \"5511999999999\",\n \"buttons[].type\": \"<string>\",\n \"buttons\": [\n {\n \"type\": \"reply\",\n \"displayText\": \"Talk to sales\",\n \"id\": \"sales\"\n },\n {\n \"type\": \"url\",\n \"displayText\": \"Visit site\",\n \"url\": \"https://pilotstatus.com.br\"\n },\n {\n \"type\": \"call\",\n \"displayText\": \"Call us\",\n \"phoneNumber\": \"5511967435133\"\n }\n ],\n \"buttons[].displayText\": \"<string>\",\n \"buttons[].id\": \"<string>\",\n \"buttons[].url\": \"<string>\",\n \"buttons[].phoneNumber\": \"<string>\",\n \"buttons[].currency\": \"<string>\",\n \"buttons[].name\": \"<string>\",\n \"buttons[].keyType\": \"<string>\",\n \"buttons[].key\": \"<string>\",\n \"title\": \"How can we help?\",\n \"description\": \"Choose an option below\",\n \"footer\": \"Pilot Status\",\n \"thumbnailUrl\": \"<string>\",\n \"delay\": 123,\n \"quoted\": {},\n \"everyOne\": true,\n \"mentioned\": [\n \"<string>\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://pilotstatus.com.br/api/layer/evolution-v2/message/sendButtons/{instance}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["apikey"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"number\": \"5511999999999\",\n \"buttons[].type\": \"<string>\",\n \"buttons\": [\n {\n \"type\": \"reply\",\n \"displayText\": \"Talk to sales\",\n \"id\": \"sales\"\n },\n {\n \"type\": \"url\",\n \"displayText\": \"Visit site\",\n \"url\": \"https://pilotstatus.com.br\"\n },\n {\n \"type\": \"call\",\n \"displayText\": \"Call us\",\n \"phoneNumber\": \"5511967435133\"\n }\n ],\n \"buttons[].displayText\": \"<string>\",\n \"buttons[].id\": \"<string>\",\n \"buttons[].url\": \"<string>\",\n \"buttons[].phoneNumber\": \"<string>\",\n \"buttons[].currency\": \"<string>\",\n \"buttons[].name\": \"<string>\",\n \"buttons[].keyType\": \"<string>\",\n \"buttons[].key\": \"<string>\",\n \"title\": \"How can we help?\",\n \"description\": \"Choose an option below\",\n \"footer\": \"Pilot Status\",\n \"thumbnailUrl\": \"<string>\",\n \"delay\": 123,\n \"quoted\": {},\n \"everyOne\": true,\n \"mentioned\": [\n \"<string>\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"key": {
"remoteJid": "5511999999999@s.whatsapp.net",
"fromMe": true,
"id": "3EB0BTN8899AABBCCDDEE"
},
"pushName": "Você",
"status": "PENDING",
"message": {
"interactiveMessage": {
"body": {
"text": "*Confirme seu pedido*\n\nPedido #1234 no valor de R$ 49,90\n"
},
"footer": {
"text": "Pilot Status"
},
"nativeFlowMessage": {
"buttons": [
{
"name": "quick_reply",
"buttonParamsJson": "{\"display_text\":\"Confirmar\",\"id\":\"confirm_1234\"}"
},
{
"name": "quick_reply",
"buttonParamsJson": "{\"display_text\":\"Cancelar\",\"id\":\"cancel_1234\"}"
}
],
"messageParamsJson": "{\"from\":\"api\",\"templateId\":\"b3f2c1a0-9e8d-4c7b-a6f5-1d2e3f4a5b6c\"}"
}
}
},
"contextInfo": null,
"messageType": "interactiveMessage",
"messageTimestamp": 1720483860,
"instanceId": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
"source": "web"
}{
"status": 400,
"error": "Bad Request",
"message": "Invalid payload"
}Authorizations
Your Pilot Status API key (ps_...). Evolution GO also accepts Authorization: Bearer <key>.
Path Parameters
The number's display name in the Pilot Status dashboard.
Body
Recipient phone in E.164 without +, or a JID.
"5511999999999"
Button type: reply, copy, url, call, or pix.
Array of button objects (see fields below).
[
{
"type": "reply",
"displayText": "Talk to sales",
"id": "sales"
},
{
"type": "url",
"displayText": "Visit site",
"url": "https://pilotstatus.com.br"
},
{
"type": "call",
"displayText": "Call us",
"phoneNumber": "5511967435133"
}
]
Text shown on the button.
Button id (for reply).
URL to open (for url).
Phone number to call (for call).
Currency (for pix).
Merchant/key name (for pix).
Pix key type: phone, email, cpf, cnpj, random.
Pix key value (for pix).
Message title.
"How can we help?"
Message body text.
"Choose an option below"
Footer text.
"Pilot Status"
URL of a thumbnail image.
Delay before sending, in milliseconds.
Message to quote/reply to (key, message).
Mention everyone in the group.
Array of numeric strings to mention.
Response
Success — provider-native response body.
Sent an interactive buttons message. Returns the persisted Baileys messageRaw envelope containing an interactiveMessage with a nativeFlowMessage of buttons.
Was this page helpful?
curl --request POST \
--url https://pilotstatus.com.br/api/layer/evolution-v2/message/sendButtons/{instance} \
--header 'Content-Type: application/json' \
--header 'apikey: <api-key>' \
--data '
{
"number": "5511999999999",
"buttons[].type": "<string>",
"buttons": [
{
"type": "reply",
"displayText": "Talk to sales",
"id": "sales"
},
{
"type": "url",
"displayText": "Visit site",
"url": "https://pilotstatus.com.br"
},
{
"type": "call",
"displayText": "Call us",
"phoneNumber": "5511967435133"
}
],
"buttons[].displayText": "<string>",
"buttons[].id": "<string>",
"buttons[].url": "<string>",
"buttons[].phoneNumber": "<string>",
"buttons[].currency": "<string>",
"buttons[].name": "<string>",
"buttons[].keyType": "<string>",
"buttons[].key": "<string>",
"title": "How can we help?",
"description": "Choose an option below",
"footer": "Pilot Status",
"thumbnailUrl": "<string>",
"delay": 123,
"quoted": {},
"everyOne": true,
"mentioned": [
"<string>"
]
}
'import requests
url = "https://pilotstatus.com.br/api/layer/evolution-v2/message/sendButtons/{instance}"
payload = {
"number": "5511999999999",
"buttons[].type": "<string>",
"buttons": [
{
"type": "reply",
"displayText": "Talk to sales",
"id": "sales"
},
{
"type": "url",
"displayText": "Visit site",
"url": "https://pilotstatus.com.br"
},
{
"type": "call",
"displayText": "Call us",
"phoneNumber": "5511967435133"
}
],
"buttons[].displayText": "<string>",
"buttons[].id": "<string>",
"buttons[].url": "<string>",
"buttons[].phoneNumber": "<string>",
"buttons[].currency": "<string>",
"buttons[].name": "<string>",
"buttons[].keyType": "<string>",
"buttons[].key": "<string>",
"title": "How can we help?",
"description": "Choose an option below",
"footer": "Pilot Status",
"thumbnailUrl": "<string>",
"delay": 123,
"quoted": {},
"everyOne": True,
"mentioned": ["<string>"]
}
headers = {
"apikey": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {apikey: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
number: '5511999999999',
'buttons[].type': '<string>',
buttons: [
{type: 'reply', displayText: 'Talk to sales', id: 'sales'},
{type: 'url', displayText: 'Visit site', url: 'https://pilotstatus.com.br'},
{type: 'call', displayText: 'Call us', phoneNumber: '5511967435133'}
],
'buttons[].displayText': '<string>',
'buttons[].id': '<string>',
'buttons[].url': '<string>',
'buttons[].phoneNumber': '<string>',
'buttons[].currency': '<string>',
'buttons[].name': '<string>',
'buttons[].keyType': '<string>',
'buttons[].key': '<string>',
title: 'How can we help?',
description: 'Choose an option below',
footer: 'Pilot Status',
thumbnailUrl: '<string>',
delay: 123,
quoted: {},
everyOne: true,
mentioned: ['<string>']
})
};
fetch('https://pilotstatus.com.br/api/layer/evolution-v2/message/sendButtons/{instance}', 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/api/layer/evolution-v2/message/sendButtons/{instance}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'number' => '5511999999999',
'buttons[].type' => '<string>',
'buttons' => [
[
'type' => 'reply',
'displayText' => 'Talk to sales',
'id' => 'sales'
],
[
'type' => 'url',
'displayText' => 'Visit site',
'url' => 'https://pilotstatus.com.br'
],
[
'type' => 'call',
'displayText' => 'Call us',
'phoneNumber' => '5511967435133'
]
],
'buttons[].displayText' => '<string>',
'buttons[].id' => '<string>',
'buttons[].url' => '<string>',
'buttons[].phoneNumber' => '<string>',
'buttons[].currency' => '<string>',
'buttons[].name' => '<string>',
'buttons[].keyType' => '<string>',
'buttons[].key' => '<string>',
'title' => 'How can we help?',
'description' => 'Choose an option below',
'footer' => 'Pilot Status',
'thumbnailUrl' => '<string>',
'delay' => 123,
'quoted' => [
],
'everyOne' => true,
'mentioned' => [
'<string>'
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"apikey: <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/api/layer/evolution-v2/message/sendButtons/{instance}"
payload := strings.NewReader("{\n \"number\": \"5511999999999\",\n \"buttons[].type\": \"<string>\",\n \"buttons\": [\n {\n \"type\": \"reply\",\n \"displayText\": \"Talk to sales\",\n \"id\": \"sales\"\n },\n {\n \"type\": \"url\",\n \"displayText\": \"Visit site\",\n \"url\": \"https://pilotstatus.com.br\"\n },\n {\n \"type\": \"call\",\n \"displayText\": \"Call us\",\n \"phoneNumber\": \"5511967435133\"\n }\n ],\n \"buttons[].displayText\": \"<string>\",\n \"buttons[].id\": \"<string>\",\n \"buttons[].url\": \"<string>\",\n \"buttons[].phoneNumber\": \"<string>\",\n \"buttons[].currency\": \"<string>\",\n \"buttons[].name\": \"<string>\",\n \"buttons[].keyType\": \"<string>\",\n \"buttons[].key\": \"<string>\",\n \"title\": \"How can we help?\",\n \"description\": \"Choose an option below\",\n \"footer\": \"Pilot Status\",\n \"thumbnailUrl\": \"<string>\",\n \"delay\": 123,\n \"quoted\": {},\n \"everyOne\": true,\n \"mentioned\": [\n \"<string>\"\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("apikey", "<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.post("https://pilotstatus.com.br/api/layer/evolution-v2/message/sendButtons/{instance}")
.header("apikey", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"number\": \"5511999999999\",\n \"buttons[].type\": \"<string>\",\n \"buttons\": [\n {\n \"type\": \"reply\",\n \"displayText\": \"Talk to sales\",\n \"id\": \"sales\"\n },\n {\n \"type\": \"url\",\n \"displayText\": \"Visit site\",\n \"url\": \"https://pilotstatus.com.br\"\n },\n {\n \"type\": \"call\",\n \"displayText\": \"Call us\",\n \"phoneNumber\": \"5511967435133\"\n }\n ],\n \"buttons[].displayText\": \"<string>\",\n \"buttons[].id\": \"<string>\",\n \"buttons[].url\": \"<string>\",\n \"buttons[].phoneNumber\": \"<string>\",\n \"buttons[].currency\": \"<string>\",\n \"buttons[].name\": \"<string>\",\n \"buttons[].keyType\": \"<string>\",\n \"buttons[].key\": \"<string>\",\n \"title\": \"How can we help?\",\n \"description\": \"Choose an option below\",\n \"footer\": \"Pilot Status\",\n \"thumbnailUrl\": \"<string>\",\n \"delay\": 123,\n \"quoted\": {},\n \"everyOne\": true,\n \"mentioned\": [\n \"<string>\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://pilotstatus.com.br/api/layer/evolution-v2/message/sendButtons/{instance}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["apikey"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"number\": \"5511999999999\",\n \"buttons[].type\": \"<string>\",\n \"buttons\": [\n {\n \"type\": \"reply\",\n \"displayText\": \"Talk to sales\",\n \"id\": \"sales\"\n },\n {\n \"type\": \"url\",\n \"displayText\": \"Visit site\",\n \"url\": \"https://pilotstatus.com.br\"\n },\n {\n \"type\": \"call\",\n \"displayText\": \"Call us\",\n \"phoneNumber\": \"5511967435133\"\n }\n ],\n \"buttons[].displayText\": \"<string>\",\n \"buttons[].id\": \"<string>\",\n \"buttons[].url\": \"<string>\",\n \"buttons[].phoneNumber\": \"<string>\",\n \"buttons[].currency\": \"<string>\",\n \"buttons[].name\": \"<string>\",\n \"buttons[].keyType\": \"<string>\",\n \"buttons[].key\": \"<string>\",\n \"title\": \"How can we help?\",\n \"description\": \"Choose an option below\",\n \"footer\": \"Pilot Status\",\n \"thumbnailUrl\": \"<string>\",\n \"delay\": 123,\n \"quoted\": {},\n \"everyOne\": true,\n \"mentioned\": [\n \"<string>\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"key": {
"remoteJid": "5511999999999@s.whatsapp.net",
"fromMe": true,
"id": "3EB0BTN8899AABBCCDDEE"
},
"pushName": "Você",
"status": "PENDING",
"message": {
"interactiveMessage": {
"body": {
"text": "*Confirme seu pedido*\n\nPedido #1234 no valor de R$ 49,90\n"
},
"footer": {
"text": "Pilot Status"
},
"nativeFlowMessage": {
"buttons": [
{
"name": "quick_reply",
"buttonParamsJson": "{\"display_text\":\"Confirmar\",\"id\":\"confirm_1234\"}"
},
{
"name": "quick_reply",
"buttonParamsJson": "{\"display_text\":\"Cancelar\",\"id\":\"cancel_1234\"}"
}
],
"messageParamsJson": "{\"from\":\"api\",\"templateId\":\"b3f2c1a0-9e8d-4c7b-a6f5-1d2e3f4a5b6c\"}"
}
}
},
"contextInfo": null,
"messageType": "interactiveMessage",
"messageTimestamp": 1720483860,
"instanceId": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
"source": "web"
}{
"status": 400,
"error": "Bad Request",
"message": "Invalid payload"
}