Powerful features of our WhatsApp API
Whapi.Cloud provides an easy-to-use API compatible with any programming language, allowing seamless integration of your website, store, application, or sales systems (CRM, ERP) with WhatsApp.
Whapi.Cloud provides an easy-to-use API compatible with any programming language, allowing seamless integration of your website, store, application, or sales systems (CRM, ERP) with WhatsApp.
Pair a number
Connect your or any other number via QR code for testing
Test API methods
It’s take only 1 Minute to Get Started using the our easy-to-use Developer Tool
Setup your Webhook
Select and configure Webhook on any event in WhatsApp to send and receive messages
Do you manage multiple WhatsApp groups or Communities and aim to optimize their management efficiently? Or do you need to do group mailings or redirect participants to different groups? Full automation of group management:
Receiving and sending messages is the basic functionality we offer. But now you can add dynamics to your conversations! Empower your bots or integrations:
Channels are a new tool for broadcasting your messages to large audiences. Cloud API for channel management allow your app to create and control them. With our API, you can achieve everything you can do with channel management tools
For your convenience, we are constantly adding no-code and low-code integrations to our service free of charge.
We also provide you with convenient tools to simplify your daily tasks.
User-defined HTTP callbacks are triggered when events occur. Webhooks provide instant event notifications, eliminating the need for constant server polling. This boosts efficiency, reducing resources and response times.
Hooks for all incoming/outgoing messages, sending/reading messages and others events.
If your webhook server is down, we will resend so nothing gets lost!
We care about the stability and functionality of our API and offer a high quality service with a fair pricing.
Comparison of the capabilities of other providers (without naming names, but you'll know exactly who we're talking about) and Whapi.Cloud 😉
The methods work very slow with delays, sometimes hooks or messages are lost;
Support responds very slowly, stalls and cannot give a concrete answer;
Functional limitation;
Charge extra for messages or conversations;
If you connect API you will not be able to use the device (texting or calling);
You are limited by the number of messages or requests;
Fast response rate, hooks are guaranteed to arrive even if there are some problems with your server;
Fast Live Support. Our customers are pleasantly surprised by our support;
A large number of functions allow you to automate almost any functionality in WhatsApp;
You pay a fixed price for API and nothing else;
Up to 4-10 devices can work simultaneously when connecting our API. Continue to use WhatsApp as you are used to;
Limits of 150 messages per day only on the Free Sandbox plan;
We help programmers and small businesses automate any WhatsApp function and set it up to run on autopilot with chatbots, group management, bulk messages, polls, goods, orders and more!
curl --request POST \
--url 'https://gate.whapi.cloud/messages/text?token={your_token}' \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--data '
{
"to": "15056482143",
"body": "Hello, world!"
}
'
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://gate.whapi.cloud/messages/text?token={your_token}",
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([
'to' => '15056482143',
'body' => 'Hello, world!'
]),
CURLOPT_HTTPHEADER => [
"accept: application/json",
"content-type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
import requests
url = "https://gate.whapi.cloud/messages/text?token={your_token}"
payload = {
"to": "15056482143",
"body": "Hello, world!"
}
headers = {
"accept": "application/json",
"content-type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)
const request = require('request');
const options = {
method: 'POST',
url: 'https://gate.whapi.cloud/messages/text?token={your_token}',
headers: {accept: 'application/json', 'content-type': 'application/json'},
body: {to: '15056482143', body: 'Hello, world!'},
json: true
};
request(options, function (error, response, body) {
if (error) throw new Error(error);
console.log(body);
});
OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"to\":\"15056482143\",\"body\":\"Hello, world!\"}");
Request request = new Request.Builder()
.url("https://gate.whapi.cloud/messages/text?token={your_token}")
.post(body)
.addHeader("accept", "application/json")
.addHeader("content-type", "application/json")
.build();
Response response = client.newCall(request).execute();
using RestSharp;
var options = new RestClientOptions("https://gate.whapi.cloud/messages/text?token={your_token}");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("accept", "application/json");
request.AddJsonBody("{\"to\":\"15056482143\",\"body\":\"Hello, world!\"}", false);
var response = await client.PostAsync(request);
Console.WriteLine("{0}", response.Content);
curl --request POST \
--url 'https://gate.whapi.cloud/messages/text?token={your_token}' \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--data '
{
"typing_time": 0,
"to": "[email protected]",
"body": "Hello, group!"
}
'
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://gate.whapi.cloud/messages/text?token={your_token}",
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([
'typing_time' => 0,
'to' => '[email protected]',
'body' => 'Hello, group!'
]),
CURLOPT_HTTPHEADER => [
"accept: application/json",
"content-type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
import requests
url = "https://gate.whapi.cloud/messages/text?token={your_token}"
payload = {
"typing_time": 0,
"to": "[email protected]",
"body": "Hello, group!"
}
headers = {
"accept": "application/json",
"content-type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)
const request = require('request');
const options = {
method: 'POST',
url: 'https://gate.whapi.cloud/messages/text?token={your_token}',
headers: {accept: 'application/json', 'content-type': 'application/json'},
body: {typing_time: 0, to: '[email protected]', body: 'Hello, group!'},
json: true
};
request(options, function (error, response, body) {
if (error) throw new Error(error);
console.log(body);
});
OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"typing_time\":0,\"to\":\"[email protected]\",\"body\":\"Hello, group!\"}");
Request request = new Request.Builder()
.url("https://gate.whapi.cloud/messages/text?token={your_token}")
.post(body)
.addHeader("accept", "application/json")
.addHeader("content-type", "application/json")
.build();
Response response = client.newCall(request).execute();
using RestSharp;
var options = new RestClientOptions("https://gate.whapi.cloud/messages/text?token={your_token}");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("accept", "application/json");
request.AddJsonBody("{\"typing_time\":0,\"to\":\"[email protected]\",\"body\":\"Hello, group!\"}", false);
var response = await client.PostAsync(request);
Console.WriteLine("{0}", response.Content);
curl --request GET \
--url 'https://gate.whapi.cloud/messages/list?token={your_token}' \
--header 'accept: application/json'
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://gate.whapi.cloud/messages/list?token={your_token}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"accept: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
import requests
url = "https://gate.whapi.cloud/messages/list?token={your_token}"
headers = {"accept": "application/json"}
response = requests.get(url, headers=headers)
print(response.text)
const request = require('request');
const options = {
method: 'GET',
url: 'https://gate.whapi.cloud/messages/list?token={your_token}',
headers: {accept: 'application/json'}
};
request(options, function (error, response, body) {
if (error) throw new Error(error);
console.log(body);
});
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("https://gate.whapi.cloud/messages/list?token={your_token}")
.get()
.addHeader("accept", "application/json")
.build();
Response response = client.newCall(request).execute();
using RestSharp;
var options = new RestClientOptions("https://gate.whapi.cloud/messages/list?token={your_token}");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("accept", "application/json");
var response = await client.GetAsync(request);
Console.WriteLine("{0}", response.Content);
curl --request GET \
--url 'https://gate.whapi.cloud/groups?token={your_token}' \
--header 'accept: application/json'
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://gate.whapi.cloud/groups?token={your_token}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"accept: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
import requests
url = "https://gate.whapi.cloud/groups?token={your_token}"
headers = {"accept": "application/json"}
response = requests.get(url, headers=headers)
print(response.text)
const request = require('request');
const options = {
method: 'GET',
url: 'https://gate.whapi.cloud/groups?token={your_token}',
headers: {accept: 'application/json'}
};
request(options, function (error, response, body) {
if (error) throw new Error(error);
console.log(body);
});
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("https://gate.whapi.cloud/groups?token={your_token}")
.get()
.addHeader("accept", "application/json")
.build();
Response response = client.newCall(request).execute();
using RestSharp;
var options = new RestClientOptions("https://gate.whapi.cloud/groups?token={your_token}");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("accept", "application/json");
var response = await client.GetAsync(request);
Console.WriteLine("{0}", response.Content);
curl --request PATCH \
--url 'https://gate.whapi.cloud/settings?token={your_token}' \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--data '
{
"callback_backoff_delay_ms": 3000,
"max_callback_backoff_delay_ms": 900000,
"callback_persist": true,
"media": {
"auto_download": [
"image",
"document"
]
},
"pass_through": true,
"sent_status": true,
"webhooks": [
{
"events": [
{
"type": "messages",
"method": "post"
},
{
"type": "groups",
"method": "patch"
}
],
"mode": "body",
"url": "Webhook URL, http or https"
}
]
}
'
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://gate.whapi.cloud/settings?token={your_token}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'callback_backoff_delay_ms' => 3000,
'max_callback_backoff_delay_ms' => 900000,
'callback_persist' => true,
'media' => [
'auto_download' => [
'image',
'document'
]
],
'pass_through' => true,
'sent_status' => true,
'webhooks' => [
[
'events' => [
[
'type' => 'messages',
'method' => 'post'
],
[
'type' => 'groups',
'method' => 'patch'
]
],
'mode' => 'body',
'url' => 'Webhook URL, http or https'
]
]
]),
CURLOPT_HTTPHEADER => [
"accept: application/json",
"content-type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
import requests
url = "https://gate.whapi.cloud/settings?token={your_token}"
payload = {
"callback_backoff_delay_ms": 3000,
"max_callback_backoff_delay_ms": 900000,
"callback_persist": True,
"media": { "auto_download": ["image", "document"] },
"pass_through": True,
"sent_status": True,
"webhooks": [
{
"events": [
{
"type": "messages",
"method": "post"
},
{
"type": "groups",
"method": "patch"
}
],
"mode": "body",
"url": "Webhook URL, http or https"
}
]
}
headers = {
"accept": "application/json",
"content-type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)
const request = require('request');
const options = {
method: 'PATCH',
url: 'https://gate.whapi.cloud/settings?token={your_token}',
headers: {accept: 'application/json', 'content-type': 'application/json'},
body: {
callback_backoff_delay_ms: 3000,
max_callback_backoff_delay_ms: 900000,
callback_persist: true,
media: {auto_download: ['image', 'document']},
pass_through: true,
sent_status: true,
webhooks: [
{
events: [{type: 'messages', method: 'post'}, {type: 'groups', method: 'patch'}],
mode: 'body',
url: 'Webhook URL, http or https'
}
]
},
json: true
};
request(options, function (error, response, body) {
if (error) throw new Error(error);
console.log(body);
});
OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"callback_backoff_delay_ms\":3000,\"max_callback_backoff_delay_ms\":900000,\"callback_persist\":true,\"media\":{\"auto_download\":[\"image\",\"document\"]},\"pass_through\":true,\"sent_status\":true,\"webhooks\":[{\"events\":[{\"type\":\"messages\",\"method\":\"post\"},{\"type\":\"groups\",\"method\":\"patch\"}],\"mode\":\"body\",\"url\":\"Webhook URL, http or https\"}]}");
Request request = new Request.Builder()
.url("https://gate.whapi.cloud/settings?token={your_token}")
.patch(body)
.addHeader("accept", "application/json")
.addHeader("content-type", "application/json")
.build();
Response response = client.newCall(request).execute();
using RestSharp;
var options = new RestClientOptions("https://gate.whapi.cloud/settings?token={your_token}");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("accept", "application/json");
request.AddJsonBody("{\"callback_backoff_delay_ms\":3000,\"max_callback_backoff_delay_ms\":900000,\"callback_persist\":true,\"media\":{\"auto_download\":[\"image\",\"document\"]},\"pass_through\":true,\"sent_status\":true,\"webhooks\":[{\"events\":[{\"type\":\"messages\",\"method\":\"post\"},{\"type\":\"groups\",\"method\":\"patch\"}],\"mode\":\"body\",\"url\":\"Webhook URL, http or https\"}]}", false);
var response = await client.PatchAsync(request);
Console.WriteLine("{0}", response.Content);
Developers worldwide rely on Whapi.Cloud to build automations, bots, CRM integrations, bulk messaging tools and advanced WhatsApp workflows. Our infrastructure processes millions of API requests with high stability — and grows every month.
active API channels
API requests processed monthly
roberto k. / Web Developer
Martin p. / Developer
Oscar T. / CTO
Billed monthly
Billed annually
Full API functionality for testing and development, with usage limits applied
Up to 5 active conversations per month
Up to 150 messages per day
Up to 30 WhatsApp number checks per day
Up to 1,000 API requests per month
Periodic activity required
Standard support (non-priority)
A stable and reliable service for production workloads with priority support
Unlimited messaging & media
Full access to Groups, Channels & Webhooks
No per-message charges
Priority live support & faster incident handling
Automatic number warming module
Built-in tools and automation integrations
Suitable for long-term, stable production workflows
Price per WhatsApp number. Discounts for multiple numbers.