Reply to option list
curl --request POST \
--url https://api.z-api.io/instances/{instanceId}/token/{token}/reply-option-list \
--header 'Client-Token: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"phone": "<string>",
"messageId": "<string>",
"responseOptionId": "<string>"
}
'import requests
url = "https://api.z-api.io/instances/{instanceId}/token/{token}/reply-option-list"
payload = {
"phone": "<string>",
"messageId": "<string>",
"responseOptionId": "<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>', messageId: '<string>', responseOptionId: '<string>'})
};
fetch('https://api.z-api.io/instances/{instanceId}/token/{token}/reply-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}/reply-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>',
'messageId' => '<string>',
'responseOptionId' => '<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}/reply-option-list"
payload := strings.NewReader("{\n \"phone\": \"<string>\",\n \"messageId\": \"<string>\",\n \"responseOptionId\": \"<string>\"\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}/reply-option-list")
.header("Client-Token", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"phone\": \"<string>\",\n \"messageId\": \"<string>\",\n \"responseOptionId\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.z-api.io/instances/{instanceId}/token/{token}/reply-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 \"messageId\": \"<string>\",\n \"responseOptionId\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"zaapId": "<string>",
"messageId": "<string>",
"id": "<string>"
}Messages
Reply to option list
Replies to an option list item as if the user had tapped it
POST
/
instances
/
{instanceId}
/
token
/
{token}
/
reply-option-list
Reply to option list
curl --request POST \
--url https://api.z-api.io/instances/{instanceId}/token/{token}/reply-option-list \
--header 'Client-Token: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"phone": "<string>",
"messageId": "<string>",
"responseOptionId": "<string>"
}
'import requests
url = "https://api.z-api.io/instances/{instanceId}/token/{token}/reply-option-list"
payload = {
"phone": "<string>",
"messageId": "<string>",
"responseOptionId": "<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>', messageId: '<string>', responseOptionId: '<string>'})
};
fetch('https://api.z-api.io/instances/{instanceId}/token/{token}/reply-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}/reply-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>',
'messageId' => '<string>',
'responseOptionId' => '<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}/reply-option-list"
payload := strings.NewReader("{\n \"phone\": \"<string>\",\n \"messageId\": \"<string>\",\n \"responseOptionId\": \"<string>\"\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}/reply-option-list")
.header("Client-Token", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"phone\": \"<string>\",\n \"messageId\": \"<string>\",\n \"responseOptionId\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.z-api.io/instances/{instanceId}/token/{token}/reply-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 \"messageId\": \"<string>\",\n \"responseOptionId\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"zaapId": "<string>",
"messageId": "<string>",
"id": "<string>"
}Concept
This endpoint allows you to reply to an option list, simulating a user tap on one of the options previously sent via send-option-list.The list must have been previously sent or received. The option ID must match the
id defined for that option when the list was sent or in the received webhook.Example on WhatsApp

Attributes
string
required
Your instance ID. Available in the Z-API panel under Instances.
string
required
Your Z-API instance token.
Required
string
required
Phone number (or group ID) in the format COUNTRY CODE + AREA CODE + NUMBER. Example: 551199999999
string
required
ID of the option list message being replied to.
string
required
ID of the selected option. It must be the same
id defined in the list when it was sent.Request Body
{
"phone": "5511999999999",
"messageId": "3EB0C767D82B0A6E9F5F",
"responseOptionId": "1"
}
Response
200
string
Message ID in Z-API
string
Message ID in WhatsApp
string
Added for Zapier compatibility, it has the same value as messageId
{
"zaapId": "3999984263738042930CD6ECDE9VDWSA",
"messageId": "D241XXXX732339502B68",
"id": "D241XXXX732339502B68"
}
400
Make sure the request body is present and the required fields (phone, messageId and responseOptionId) are filled in.