POST sendButton Send a message with buttons
Sends a message with up to three tappable reply buttons. Support for buttons depends on the recipient's WhatsApp version, so always send text worth reading on its own.
https://api.replier.net/sendButton
Parameters
| Name | Type | Description |
|---|---|---|
| instanceid required | string |
The instance sending the request. You will find it beside the instance in your dashboard.
Example:
YOUR_INSTANCE_ID
|
| token required | string |
The API token of that instance. Treat it as a secret: it authorises every call below.
Example:
YOUR_INSTANCE_TOKEN
|
| phone required | string |
Destination in international format with no plus sign or leading zeros, for example 447700900123. A chat id is also accepted: 447700900123@c.us for a person, 447700900123-1600000000@g.us for a group.
Example:
447700900123
|
| body required | string |
The message text shown above the buttons.
Example:
Would you like to confirm your order?
|
| button required | string |
Button captions, comma separated. WhatsApp shows at most three.
Example:
Yes,No,Call me
|
Request test
sends a real request
Request samples
curl --request POST \
--url 'https://api.replier.net/sendButton' \
--data-urlencode 'instanceid=YOUR_INSTANCE_ID' \
--data-urlencode 'token=YOUR_INSTANCE_TOKEN' \
--data-urlencode 'phone=447700900123' \
--data-urlencode 'body=Would you like to confirm your order?' \
--data-urlencode 'button=Yes,No,Call me'
<?php
$payload = [
'instanceid' => 'YOUR_INSTANCE_ID',
'token' => 'YOUR_INSTANCE_TOKEN',
'phone' => '447700900123',
'body' => 'Would you like to confirm your order?',
'button' => 'Yes,No,Call me',
];
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => 'https://api.replier.net/sendButton',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 30,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => http_build_query($payload),
]);
$response = curl_exec($ch);
$error = curl_error($ch);
curl_close($ch);
if ($error !== '') {
throw new RuntimeException($error);
}
$result = json_decode($response, true);
// Every endpoint answers with {"success": bool, "msg": [...]} on failure.
if (isset($result['success']) && $result['success'] === false) {
throw new RuntimeException('API error ' . implode(', ', $result['msg']));
}
print_r($result);
import requests
url = 'https://api.replier.net/sendButton'
payload = {
'instanceid': 'YOUR_INSTANCE_ID',
'token': 'YOUR_INSTANCE_TOKEN',
'phone': '447700900123',
'body': 'Would you like to confirm your order?',
'button': 'Yes,No,Call me',
}
response = requests.post(url, data=payload, timeout=30)
response.raise_for_status()
result = response.json()
if result.get('success') is False:
raise RuntimeError('API error: %s' % result.get('msg'))
print(result)
const url = 'https://api.replier.net/sendButton';
const payload = new URLSearchParams({
instanceid: 'YOUR_INSTANCE_ID',
token: 'YOUR_INSTANCE_TOKEN',
phone: '447700900123',
body: 'Would you like to confirm your order?',
button: 'Yes,No,Call me',
});
const response = await fetch(url, {
method: 'POST',
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
body: payload,
});
const result = await response.json();
if (result.success === false) {
throw new Error(`API error: ${result.msg.join(', ')}`);
}
console.log(result);
const axios = require('axios');
const payload = new URLSearchParams({
instanceid: 'YOUR_INSTANCE_ID',
token: 'YOUR_INSTANCE_TOKEN',
phone: '447700900123',
body: 'Would you like to confirm your order?',
button: 'Yes,No,Call me',
});
(async () => {
try {
const { data } = await axios.post('https://api.replier.net/sendButton', payload, { timeout: 30000 });
if (data.success === false) {
throw new Error(`API error: ${data.msg.join(', ')}`);
}
console.log(data);
} catch (err) {
console.error(err.message);
}
})();
$.ajax({
url: 'https://api.replier.net/sendButton',
method: 'POST',
data: {
instanceid: 'YOUR_INSTANCE_ID',
token: 'YOUR_INSTANCE_TOKEN',
phone: '447700900123',
body: 'Would you like to confirm your order?',
button: 'Yes,No,Call me',
},
dataType: 'json',
})
.done(function (result) {
if (result.success === false) {
console.error('API error: ' + result.msg.join(', '));
return;
}
console.log(result);
})
.fail(function (xhr) {
console.error(xhr.status, xhr.responseText);
});
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Threading.Tasks;
class Program
{
static readonly HttpClient client = new HttpClient();
static async Task Main()
{
var payload = new Dictionary<string, string>
{
{ "instanceid", "YOUR_INSTANCE_ID" },
{ "token", "YOUR_INSTANCE_TOKEN" },
{ "phone", "447700900123" },
{ "body", "Would you like to confirm your order?" },
{ "button", "Yes,No,Call me" },
};
var response = await client.PostAsync("https://api.replier.net/sendButton", new FormUrlEncodedContent(payload));
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
}
}
import java.io.IOException;
import okhttp3.*;
public class Example {
public static void main(String[] args) throws IOException {
OkHttpClient client = new OkHttpClient();
FormBody.Builder form = new FormBody.Builder();
form.add("instanceid", "YOUR_INSTANCE_ID");
form.add("token", "YOUR_INSTANCE_TOKEN");
form.add("phone", "447700900123");
form.add("body", "Would you like to confirm your order?");
form.add("button", "Yes,No,Call me");
Request request = new Request.Builder()
.url("https://api.replier.net/sendButton")
.post(form.build())
.build();
try (Response response = client.newCall(request).execute()) {
System.out.println(response.body().string());
}
}
}
require 'net/http'
require 'json'
require 'uri'
uri = URI('https://api.replier.net/sendButton')
response = Net::HTTP.post_form(uri, {
'instanceid' => 'YOUR_INSTANCE_ID',
'token' => 'YOUR_INSTANCE_TOKEN',
'phone' => '447700900123',
'body' => 'Would you like to confirm your order?',
'button' => 'Yes,No,Call me',
})
result = JSON.parse(response.body)
raise "API error: #{result['msg'].join(', ')}" if result['success'] == false
puts result
package main
import (
"fmt"
"io"
"net/http"
"net/url"
"strings"
)
func main() {
form := url.Values{}
form.Set("instanceid", "YOUR_INSTANCE_ID")
form.Set("token", "YOUR_INSTANCE_TOKEN")
form.Set("phone", "447700900123")
form.Set("body", "Would you like to confirm your order?")
form.Set("button", "Yes,No,Call me")
resp, err := http.Post(
"https://api.replier.net/sendButton",
"application/x-www-form-urlencoded",
strings.NewReader(form.Encode()),
)
if err != nil {
panic(err)
}
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil {
panic(err)
}
fmt.Println(string(body))
}
Samples use POST with a form-encoded body so credentials stay out of the URL. The API reads JSON bodies, form bodies and query strings alike. A GET with the same parameters in the query string works too.
Response
On success:
{
"sent": true,
"id": "true_447700900123@c.us_3EB0A1C2D3E4F5",
"from": "447700900123@c.us",
"to": "447700900123@c.us",
"timestamp": 1712345678,
"type": "chat"
}
On failure, every endpoint answers with HTTP 200 and this envelope, where the string is a code from the error reference:
{
"success": false,
"msg": ["0008"]
}