Send option list
curl --request POST \
--url https://api.z-api.io/instances/{instanceId}/token/{token}/send-option-list \
--header 'Client-Token: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"phone": "<string>",
"message": "<string>",
"optionList": {
"title": "<string>",
"buttonLabel": "<string>",
"options": [
{
"title": "<string>",
"description": "<string>",
"id": "<string>"
}
]
}
}
'import requests
url = "https://api.z-api.io/instances/{instanceId}/token/{token}/send-option-list"
payload = {
"phone": "<string>",
"message": "<string>",
"optionList": {
"title": "<string>",
"buttonLabel": "<string>",
"options": [
{
"title": "<string>",
"description": "<string>",
"id": "<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>',
optionList: {
title: '<string>',
buttonLabel: '<string>',
options: [{title: '<string>', description: '<string>', id: '<string>'}]
}
})
};
fetch('https://api.z-api.io/instances/{instanceId}/token/{token}/send-option-list', 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-option-list",
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>',
'optionList' => [
'title' => '<string>',
'buttonLabel' => '<string>',
'options' => [
[
'title' => '<string>',
'description' => '<string>',
'id' => '<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-option-list"
payload := strings.NewReader("{\n \"phone\": \"<string>\",\n \"message\": \"<string>\",\n \"optionList\": {\n \"title\": \"<string>\",\n \"buttonLabel\": \"<string>\",\n \"options\": [\n {\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"id\": \"<string>\"\n }\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-option-list")
.header("Client-Token", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"phone\": \"<string>\",\n \"message\": \"<string>\",\n \"optionList\": {\n \"title\": \"<string>\",\n \"buttonLabel\": \"<string>\",\n \"options\": [\n {\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"id\": \"<string>\"\n }\n ]\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.z-api.io/instances/{instanceId}/token/{token}/send-option-list")
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 \"optionList\": {\n \"title\": \"<string>\",\n \"buttonLabel\": \"<string>\",\n \"options\": [\n {\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"id\": \"<string>\"\n }\n ]\n }\n}"
response = http.request(request)
puts response.read_bodyMessages
Send option list
Send a message with a selectable option list
POST
/
instances
/
{instanceId}
/
token
/
{token}
/
send-option-list
Send option list
curl --request POST \
--url https://api.z-api.io/instances/{instanceId}/token/{token}/send-option-list \
--header 'Client-Token: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"phone": "<string>",
"message": "<string>",
"optionList": {
"title": "<string>",
"buttonLabel": "<string>",
"options": [
{
"title": "<string>",
"description": "<string>",
"id": "<string>"
}
]
}
}
'import requests
url = "https://api.z-api.io/instances/{instanceId}/token/{token}/send-option-list"
payload = {
"phone": "<string>",
"message": "<string>",
"optionList": {
"title": "<string>",
"buttonLabel": "<string>",
"options": [
{
"title": "<string>",
"description": "<string>",
"id": "<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>',
optionList: {
title: '<string>',
buttonLabel: '<string>',
options: [{title: '<string>', description: '<string>', id: '<string>'}]
}
})
};
fetch('https://api.z-api.io/instances/{instanceId}/token/{token}/send-option-list', 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-option-list",
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>',
'optionList' => [
'title' => '<string>',
'buttonLabel' => '<string>',
'options' => [
[
'title' => '<string>',
'description' => '<string>',
'id' => '<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-option-list"
payload := strings.NewReader("{\n \"phone\": \"<string>\",\n \"message\": \"<string>\",\n \"optionList\": {\n \"title\": \"<string>\",\n \"buttonLabel\": \"<string>\",\n \"options\": [\n {\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"id\": \"<string>\"\n }\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-option-list")
.header("Client-Token", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"phone\": \"<string>\",\n \"message\": \"<string>\",\n \"optionList\": {\n \"title\": \"<string>\",\n \"buttonLabel\": \"<string>\",\n \"options\": [\n {\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"id\": \"<string>\"\n }\n ]\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.z-api.io/instances/{instanceId}/token/{token}/send-option-list")
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 \"optionList\": {\n \"title\": \"<string>\",\n \"buttonLabel\": \"<string>\",\n \"options\": [\n {\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"id\": \"<string>\"\n }\n ]\n }\n}"
response = http.request(request)
puts response.read_bodyOverview
With this method you can send text messages with an option list, where the user can select one of the sent options.The option list feature no longer works in groups.
Example on WhatsApp

Attributes
Header
string
required
Your instance ID. Available in the Z-API panel under Instances.
string
required
Your Z-API instance token.
Required
string
required
Recipient’s phone number (or group ID for group messages) in DDI DDD NUMBER format. E.g.: 551199999999
string
required
Text to be sent
object
required
Optional
number
Delay added to the message. You can choose between a range of 1 to 15 sec, meaning how many seconds it will wait before sending the next message. (E.g.: “delayMessage”: 5). The default delay if not provided is 1 to 3 sec
Request Body
{
"phone": "5511999999999",
"message": "Select the best option:",
"optionList": {
"title": "Available options",
"buttonLabel": "Open option list",
"options": [
{
"id": "1",
"description": "Z-API Wings for your imagination",
"title": "Z-API"
},
{
"id": "2",
"description": "Don't work",
"title": "Others"
}
]
}
}
Response
200
{
"zaapId": "3999984263738042930CD6ECDE9VDWSA",
"messageId": "D241XXXX732339502B68",
"id": "D241XXXX732339502B68"
}
405
Make sure you are correctly sending the method specification, that is, verify that you sent POST or GET as specified at the beginning of this topic.415
If you receive a 415 error, make sure to add the “Content-Type” header to your request, which in most cases is “application/json”.⌘I