Enviar botões de ação
curl --request POST \
--url https://api.z-api.io/instances/{instanceId}/token/{token}/send-button-actions \
--header 'Client-Token: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"phone": "<string>",
"message": "<string>",
"buttonActions": [
{
"id": "<string>",
"type": "<string>",
"label": "<string>",
"phone": "<string>",
"url": "<string>"
}
]
}
'import requests
url = "https://api.z-api.io/instances/{instanceId}/token/{token}/send-button-actions"
payload = {
"phone": "<string>",
"message": "<string>",
"buttonActions": [
{
"id": "<string>",
"type": "<string>",
"label": "<string>",
"phone": "<string>",
"url": "<string>"
}
]
}
headers = {
"Client-Token": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Client-Token': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
phone: '<string>',
message: '<string>',
buttonActions: [
{
id: '<string>',
type: '<string>',
label: '<string>',
phone: '<string>',
url: '<string>'
}
]
})
};
fetch('https://api.z-api.io/instances/{instanceId}/token/{token}/send-button-actions', 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://api.z-api.io/instances/{instanceId}/token/{token}/send-button-actions",
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([
'phone' => '<string>',
'message' => '<string>',
'buttonActions' => [
[
'id' => '<string>',
'type' => '<string>',
'label' => '<string>',
'phone' => '<string>',
'url' => '<string>'
]
]
]),
CURLOPT_HTTPHEADER => [
"Client-Token: <api-key>",
"Content-Type: application/json"
],
]);
$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://api.z-api.io/instances/{instanceId}/token/{token}/send-button-actions"
payload := strings.NewReader("{\n \"phone\": \"<string>\",\n \"message\": \"<string>\",\n \"buttonActions\": [\n {\n \"id\": \"<string>\",\n \"type\": \"<string>\",\n \"label\": \"<string>\",\n \"phone\": \"<string>\",\n \"url\": \"<string>\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Client-Token", "<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://api.z-api.io/instances/{instanceId}/token/{token}/send-button-actions")
.header("Client-Token", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"phone\": \"<string>\",\n \"message\": \"<string>\",\n \"buttonActions\": [\n {\n \"id\": \"<string>\",\n \"type\": \"<string>\",\n \"label\": \"<string>\",\n \"phone\": \"<string>\",\n \"url\": \"<string>\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.z-api.io/instances/{instanceId}/token/{token}/send-button-actions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Client-Token"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"phone\": \"<string>\",\n \"message\": \"<string>\",\n \"buttonActions\": [\n {\n \"id\": \"<string>\",\n \"type\": \"<string>\",\n \"label\": \"<string>\",\n \"phone\": \"<string>\",\n \"url\": \"<string>\"\n }\n ]\n}"
response = http.request(request)
puts response.read_bodyMessages
Enviar botões de ação
Envia uma mensagem com botões de ação (link, ligação ou resposta)
POST
/
instances
/
{instanceId}
/
token
/
{token}
/
send-button-actions
Enviar botões de ação
curl --request POST \
--url https://api.z-api.io/instances/{instanceId}/token/{token}/send-button-actions \
--header 'Client-Token: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"phone": "<string>",
"message": "<string>",
"buttonActions": [
{
"id": "<string>",
"type": "<string>",
"label": "<string>",
"phone": "<string>",
"url": "<string>"
}
]
}
'import requests
url = "https://api.z-api.io/instances/{instanceId}/token/{token}/send-button-actions"
payload = {
"phone": "<string>",
"message": "<string>",
"buttonActions": [
{
"id": "<string>",
"type": "<string>",
"label": "<string>",
"phone": "<string>",
"url": "<string>"
}
]
}
headers = {
"Client-Token": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Client-Token': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
phone: '<string>',
message: '<string>',
buttonActions: [
{
id: '<string>',
type: '<string>',
label: '<string>',
phone: '<string>',
url: '<string>'
}
]
})
};
fetch('https://api.z-api.io/instances/{instanceId}/token/{token}/send-button-actions', 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://api.z-api.io/instances/{instanceId}/token/{token}/send-button-actions",
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([
'phone' => '<string>',
'message' => '<string>',
'buttonActions' => [
[
'id' => '<string>',
'type' => '<string>',
'label' => '<string>',
'phone' => '<string>',
'url' => '<string>'
]
]
]),
CURLOPT_HTTPHEADER => [
"Client-Token: <api-key>",
"Content-Type: application/json"
],
]);
$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://api.z-api.io/instances/{instanceId}/token/{token}/send-button-actions"
payload := strings.NewReader("{\n \"phone\": \"<string>\",\n \"message\": \"<string>\",\n \"buttonActions\": [\n {\n \"id\": \"<string>\",\n \"type\": \"<string>\",\n \"label\": \"<string>\",\n \"phone\": \"<string>\",\n \"url\": \"<string>\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Client-Token", "<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://api.z-api.io/instances/{instanceId}/token/{token}/send-button-actions")
.header("Client-Token", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"phone\": \"<string>\",\n \"message\": \"<string>\",\n \"buttonActions\": [\n {\n \"id\": \"<string>\",\n \"type\": \"<string>\",\n \"label\": \"<string>\",\n \"phone\": \"<string>\",\n \"url\": \"<string>\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.z-api.io/instances/{instanceId}/token/{token}/send-button-actions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Client-Token"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"phone\": \"<string>\",\n \"message\": \"<string>\",\n \"buttonActions\": [\n {\n \"id\": \"<string>\",\n \"type\": \"<string>\",\n \"label\": \"<string>\",\n \"phone\": \"<string>\",\n \"url\": \"<string>\"\n }\n ]\n}"
response = http.request(request)
puts response.read_bodyConceituação
Neste método você poderá enviar mensagens de texto com botões de ação que redirecionam para links, iniciam chamadas ou fornecem respostas padrão.Envios de botões atualmente se encontram disponíveis, porém possui alguns fatores decisivos para o funcionamento. Consulte o tópico status dos botões para mais informações.
ATENÇÃOAo enviar os três tipos de botões simultaneamente, o WhatsApp Web gera um erro. Combine botões CALL e URL juntos, e envie botões REPLY separadamente.
Exemplo no WhatsApp

Atributos
Header
string
obrigatório
ID da sua instância. Disponível no painel Z-API em Instâncias.
string
obrigatório
Token da sua instância Z-API.
Obrigatórios
string
obrigatório
Telefone (ou ID do grupo para casos de envio para grupos) do destinatário no formato DDI DDD NÚMERO. Ex: 551199999999
string
obrigatório
Texto da mensagem
array
obrigatório
Array de botões de ação
Mostrar Propriedades
Mostrar Propriedades
string
Identificador do botão
string
obrigatório
Tipo do botão:
CALL, URL ou REPLYstring
obrigatório
Texto exibido no botão
string
Número de telefone (obrigatório para tipo CALL)
string
URL do link (obrigatório para tipo URL, deve começar com http:// ou https://).Dica: O WhatsApp possui um link específico para copiar textos. Passando esse link no atributo
url, o seu botão passa a ser um botão de copiar: https://www.whatsapp.com/otp/code/?otp_type=COPY_CODE&code=otpseucodigoOpcionais
string
Título da mensagem
string
Rodapé da mensagem
string
Link da imagem ou seu Base64
Request Body
Botões CALL e URL (juntos):{
"phone": "551199999999",
"message": "uma mensagem",
"title": "se quiser vincular um titulo",
"footer": "se quiser vincular um rodape top",
"image": "https://app.z-api.io/logos/zapi-dark.png",
"buttonActions": [
{
"id": "1",
"type": "CALL",
"phone": "554498398733",
"label": "Fale conosco"
},
{
"id": "2",
"type": "URL",
"url": "https://z-api.io",
"label": "Visite nosso site"
}
]
}
{
"phone": "551199999999",
"message": "uma mensagem",
"title": "se quiser vincular um titulo",
"footer": "se quiser vincular um rodape top",
"image": "https://app.z-api.io/logos/zapi-dark.png",
"buttonActions": [
{
"id": "3",
"type": "REPLY",
"label": "Falar com atendente"
}
]
}
Response
200
{
"zaapId": "3999984263738042930CD6ECDE9VDWSA",
"messageId": "D241XXXX732339502B68",
"id": "D241XXXX732339502B68"
}
405
Neste caso certifique que esteja enviando corretamente a especificação do método, ou seja verifique se você enviou o POST ou GET conforme especificado no início deste tópico.415
Caso você receba um erro 415, certifique de adicionar na headers da requisição o “Content-Type” do objeto que você está enviando, em sua grande maioria “application/json”.⌘I