Send Automated WhatsApp messages using PHP (cURL). The Ultimate Guide ✅
Today, we’ll show you the ultimate guide to sending different types of WhatsApp messages using PHP (cURL)
Effective communication is vital for project coordination, community engagement, and responsive customer support. Wassenger enhances this process by providing seamless management and interaction tools within WhatsApp messages. With its intuitive API and automation features, sending messages, videos, images, documents, and voice memos becomes simple and efficient.
In this article you will find:
- Send Image Message 🖼️
- Send Video Messages 📹
- Send Document Messages 📄
- Send Audio Voice Record 🎙️
- Send a Media Message with an Uploaded File 📤
- Send a GIF Message 🎞️
- Send a Poll Message 📊
- Send a Scheduled Date and Time Message 📅
- Send Dynamic Native Button Messages 🔘
- Send a List of Items to Select From 📝
- Send a Message with Text Formatting ✍️
- Send a Location Message with Coordinates 📍
- Send a Location Message with the Address 🗺️
- Send a Message with Variables 🔄
- Send Messages with Links 🔗
- Send Contact Card Messages 📇
- Reply to a Message 💬
- Forward a Message 🔁
- Send a Catalogue Message 📒
- Send a Message in Real-Time with No Enqueueing ⏱️
- Send a Message with Maximum Retries 🔄
- Send a Message with the Expiration Time ⏳
- Send a Message Within a Time and Day Range 🕰️
- Send a Message Reaction 😊
- Remove a Message Reaction 🚫
- Send a Message on Behalf of an Agent and Assign a Chat 👤
- Send a Message and Resolve the Chat ✅
- Send a Message and Add a Chat Label 🏷️
🤩 🤖 Wassenger is a complete communication platform and API solution for WhatsApp. Explore more than 100+ API use cases and automate anything on WhatsApp by signing up for a free trial and getting started in minutes!
Requirements
- To have a WhatsApp number already linked to the platform and online.
- Message recipient phone number with international prefix in E164 format. Example:
+12345678900
. Validate the phone number format here.
API endpoint
We will use the following API endpoint to send messages to a group:
Prepare the request
Target API URL using the POST method
https://api.wassenger.com/v1/messages
Required HTTPS headers > Obtain your API key here
Content-Type: application/json
Token: $API_TOKEN
Use body in JSON format
{
"phone": "+1234567890",
"message": "Hello world, this is a sample message"
}
🖥️ Looking for a code example? Go to the API live tester and get ready-to-use code examples in 15+ programming languages, including JavaScript, PHP, C#, Java, Ruby, Go, Powershell, cURL and more.
Send text messages with PHP cURL
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.wassenger.com/v1/messages",
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' => '+1234567890',
'message' => 'Hello world, this is a sample message'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"Token: ENTER API KEY HERE"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
🤩 🤖 Wassenger is a complete API solution for WhatsApp. Sign up for a 7-day free trial and get started in minutes!
More examples of sending messages with PHP cURL
For full samples, visit our API Live Tester
Send image message with PHP cURL
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.wassenger.com/v1/messages",
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' => '+1234567890',
'message' => 'This is a caption for an image message',
'media' => [
'url' => 'https://picsum.photos/seed/picsum/600/400',
'expiration' => '7d',
'viewOnce' => null
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"Token: ENTER API KEY HERE"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
Send video messages with PHP cURL
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.wassenger.com/v1/messages",
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' => '+1234567890',
'message' => 'This is a caption for a video message',
'media' => [
'url' => 'https://download.samplelib.com/mp4/sample-5s.mp4',
'expiration' => '7d'
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"Token: ENTER API KEY HERE"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
Send document messages with PHP cURL
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.wassenger.com/v1/messages",
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' => '+1234567890',
'media' => [
'url' => 'https://www.africau.edu/images/default/sample.pdf',
'expiration' => '30d'
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"Token: ENTER API KEY HERE"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
Send audio voice record with PHP cURL
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.wassenger.com/v1/messages",
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' => '+1234567890',
'media' => [
'url' => 'https://download.samplelib.com/mp3/sample-9s.mp3',
'format' => 'ptt'
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"Token: ENTER API KEY HERE"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
Send a media message with an uploaded file using PHP cURL
{{UPLOADED FILE ID}}
: Replace this expression with the specific value
- You can upload the file here
- The file ID will look something like this: 57443b8773c036f2bae0cd96
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.wassenger.com/v1/messages",
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' => '+1234567890',
'message' => 'This is a caption for an image message',
'media' => [
'file' => '{{UPLOADED FILE ID}}'
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"Token: ENTER API KEY HERE"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
Send a GIF message with PHP cURL
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.wassenger.com/v1/messages",
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' => '+1234567890',
'message' => 'This is a sample caption for a GIF message',
'media' => [
'url' => 'https://i.giphy.com/vKHKDIdvxvN7vTAEOM.mp4',
'format' => 'gif'
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"Token: ENTER API KEY HERE"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
Send a poll message with PHP cURL
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.wassenger.com/v1/messages",
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' => '+1234567890',
'poll' => [
'name' => 'Vote for your favorite color',
'options' => [
'Red',
'Green',
'Blue',
'Yellow',
'Grey',
'Black',
'Orange',
'Purple',
'White'
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"Token: ENTER API KEY HERE"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
Send a scheduled date and time message with PHP cURL
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.wassenger.com/v1/messages",
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' => '+1234567890',
'message' => 'This is a scheduled message to be sent to a phone number in 10 minutes',
'deliverAt' => '2024-12-02T13:52:32.396Z'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"Token: ENTER API KEY HERE"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
Send dynamic native button messages with PHP cURL
WhatsApp no longer accepts native button messages. Buttons messages will be automatically converted into raw text equivalent messages. Learn more here
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.wassenger.com/v1/messages",
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' => '+1234567890',
'message' => 'This is a message with dynamic reply buttons',
'header' => 'Optional message header',
'footer' => 'Optional message footer',
'buttons' => [
[
'id' => 'id1',
'text' => 'Say hello'
],
[
'id' => 'id2',
'text' => 'Say goodbye'
],
[
'id' => 'id3',
'text' => 'Get help'
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"Token: ENTER API KEY HERE"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
Send a list of items to select from with PHP cURL
WhatsApp no longer accepts list messages. List messages will be automatically converted into raw text equivalent messages. Learn more here
<?php
// Initialize cURL
$curl = curl_init();
// Define API endpoint and payload
$apiUrl = "https://api.wassenger.com/v1/messages";
$payload = json_encode([
'phone' => '+1234567890',
'list' => [
'button' => 'Select one option',
'description' => 'Select which type of vehicle you are interested in',
'title' => 'Motor Business',
'footer' => 'Since 1990',
'sections' => [
[
'title' => 'Select a car type',
'rows' => [
['title' => 'Coupe', 'id' => 'a1', 'description' => 'This is a description for coupe cars'],
['title' => 'Sports', 'id' => 'a2', 'description' => 'This is a description for sports cars'],
['title' => 'SUV', 'id' => 'a3', 'description' => 'This is a description for SUV cars'],
['title' => 'Minivan', 'id' => 'a4', 'description' => 'This is a description for minivan cars'],
['title' => 'Crossover', 'id' => 'a5', 'description' => 'This is a description for crossover cars'],
['title' => 'Wagon', 'id' => 'a6', 'description' => 'This is a description for wagon cars'],
]
],
[
'title' => 'Select a motorbike type',
'rows' => [
['title' => 'Touring', 'id' => 'b1', 'description' => 'Designed to excel at covering long distances'],
['title' => 'Cruiser', 'id' => 'b3', 'description' => 'Harley-Davidsons largely define the cruiser category'],
['title' => 'Standard', 'id' => 'b3', 'description' => 'Motorcycle intended for use on streets and commuting'],
]
]
]
]
]);
// Configure cURL options
curl_setopt_array($curl, [
CURLOPT_URL => $apiUrl,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"Token: ENTER API KEY HERE" // Replace with your API token
],
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $payload,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1
]);
// Execute cURL request and handle response
$response = curl_exec($curl);
$error = curl_error($curl);
// Close cURL session
curl_close($curl);
// Output the result or error
if ($error) {
echo "cURL Error: " . $error;
} else {
echo $response;
}
Send a message with text formatting using PHP cURL
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.wassenger.com/v1/messages",
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' => '+1234567890',
'message' => 'This message is formatted using _italic format_, *bold format*, ~strikethrough format~ and ```monospace format```'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"Token: ENTER API KEY HERE"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
Send a message with location coordinates using PHP cURL
Learn more about how to send location messages with coordinates in this tutorial
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.wassenger.com/v1/messages",
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' => '+1234567890',
'location' => [
'coordinates' => [
40.7583748,
-73.9891184
]
],
'message' => 'This is a location message using coordinates'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"Token: ENTER API KEY HERE"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
Send location message with address using PHP cURL
Learn more about how to send location messages with addresses in this tutorial
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.wassenger.com/v1/messages",
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' => '+1234567890',
'location' => [
'address' => 'Santa Claus Main Post Office, Tähtikuja 1, 96930 Arctic Circle, Finland'
],
'message' => 'This is a location message using an address'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"Token: ENTER API KEY HERE"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
Send a message with variables using PHP cURL
Learn more about how to send messages with template variables in this tutorial.
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.wassenger.com/v1/messages",
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' => '+1234567890',
'message' => 'Dear {{ contact.name | customer }},
Thanks for contacting us!
We will answer your query shortly.
Your message was received on {{ date.humanize.full }}'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"Token: ENTER API KEY HERE"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
Send a message with a URL using PHP cURL
Learn more about how to send messages with URL links in this tutorial
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.wassenger.com/v1/messages",
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' => '+1234567890',
'message' => 'Check out this cool link: https://www.youtube.com'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"Token: ENTER API KEY HERE"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
Send contact card messages with PHP cURL
Learn more about how to send contact card messages in this tutorial
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.wassenger.com/v1/messages",
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' => '+1234567890',
'contacts' => [
[
'phone' => '+1234567890',
'name' => 'John Doe'
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"Token: ENTER API KEY HERE"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
Reply to a message with PHP cURL
{{MESSAGE ID}}
: Replace with the actual WhatsApp message ID to forward (18, 20, 22 or 32 hexadecimal value)
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.wassenger.com/v1/messages",
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' => '+1234567890',
'quote' => '{{MESSAGE ID}}',
'message' => 'This message is a reply to another message within the same chat'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"Token: ENTER API KEY HERE"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}<?php
Forward a message with PHP cURL
{{MESSAGE ID}}
: Replace with the actual WhatsApp message ID to reply to (18, 20, 22 or 32 hexadecimal value)
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.wassenger.com/v1/messages",
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' => '+1234567890',
'forward' => [
'message' => '{{MESSAGE ID}}',
'chat' => '+1234567890'
],
'message' => 'The given message by ID will be forwarded to another chat'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"Token: ENTER API KEY HERE"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
Send a catalogue message with PHP cURL
{{PRODUCT CATALOG ID TO SEND}}
: Replace this expression with the specific value
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.wassenger.com/v1/messages",
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' => '+1234567890',
'product' => '{{PRODUCT CATALOG ID TO SEND}}'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"Token: ENTER API KEY HERE"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
Send a message in real-time with no enqueueing using PHP cURL
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.wassenger.com/v1/messages",
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([
'live' => null,
'phone' => '+1234567890',
'message' => 'This message will be delivered in real-time if the session is online, otherwise the API will return an error'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"Token: ENTER API KEY HERE"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}<?php
Send a message with maximum retries using PHP cURL
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.wassenger.com/v1/messages",
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([
'retries' => 2,
'phone' => '+1234567890',
'message' => 'This message will be retried only twice. If the delivery fails twice, it will be flagged as deleted message, removed from the queue and not delivered'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"Token: ENTER API KEY HERE"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
Send a message with the expiration time using PHP cURL
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.wassenger.com/v1/messages",
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([
'expiration' => [
'seconds' => 90
],
'phone' => '+1234567890',
'message' => 'This message will be deleted if it cannot be delivered within 90 seconds after being queued. This is useful to guarantee time-sensitive messages are not delivered later than required.'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"Token: ENTER API KEY HERE"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
🤩 🤖 Wassenger is a complete API solution for WhatsApp. Sign up for a 7-day free trial and get started in minutes!
Send a message within a time and day range using PHP cURL
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.wassenger.com/v1/messages",
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' => '+1234567890',
'message' => 'Restricted message example that will be only delivered between 9 am to 5 pm from Monday to Friday. If the message cannot be delivered within those time ranges, it will wait in the queue',
'restrict' => [
'start' => 9,
'end' => 17,
'timezone' => 'CEST',
'weekdays' => [
1,
2,
3,
4,
5
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"Token: ENTER API KEY HERE"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
Send a message reaction using PHP cURL
{{WHATSAPP MESSAGE ID}}
: Replace this expression with the specific value
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.wassenger.com/v1/messages",
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' => '+1234567890',
'reaction' => '👍',
'reactionMessage' => '{{WHATSAPP MESSAGE ID}}'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"Token: ENTER API KEY HERE"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
Remove message reaction:
{{WHATSAPP MESSAGE ID}}
: Replace this expression with the specific value
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.wassenger.com/v1/messages",
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' => '+1234567890',
'reaction' => '-',
'reactionMessage' => '{{MESSAGE WHATSAPP ID}}'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"Token: ENTER API KEY HERE"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
Send a message on behalf of an agent and assign a chat using PHP cURL
{{USER ID}}
: Replace with the actual user ID (24 hexadecimal value)
{{ASSIGNED USER ID}}
: Replace with the actual user ID to assign the chat (24 hexadecimal value)
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.wassenger.com/v1/messages",
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' => '+1234567890',
'agent' => '{{USER ID}}',
'message' => 'This message is sent via API on behalf of an agent. The chat will also be assigned to the agent after message delivery.',
'actions' => [
[
'action' => 'chat:assign',
'params' => [
'agent' => '{{ASSIGNED USER ID}}'
]
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"Token: ENTER API KEY HERE"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
Send a message and resolve the chat with PHP cURL
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.wassenger.com/v1/messages",
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' => '+1234567890',
'message' => 'Once this message is delivered, the chat will be reported as resolved in the web chat interface.',
'actions' => [
[
'action' => 'chat:resolve'
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"Token: ENTER API KEY HERE"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
Send a message and add a chat label with PHP cURL
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.wassenger.com/v1/messages",
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' => '+1234567890',
'message' => 'Once this message is delivered, the given labels will be added to the chat automatically.',
'actions' => [
[
'action' => 'labels:add',
'params' => [
'labels' => [
'new',
'sales'
]
]
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"Token: ENTER API KEY HERE"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
🤩 🤖 Wassenger is a complete API solution for WhatsApp. Sign up for a 7-day free trial and get started in minutes!
Live API testing
You can live-test and play with the API directly from your browser in minutes.
Once you are done testing, get the auto-generated code example in your preferred programming language and you will be ready to go.
FAQ
How to send messages to multiple phone numbers
You have to send multiple API requests, one per target phone number.
For instance, to send a message to 10 phone numbers, you should send 10 independent HTTPS requests to the API.
There is no option to send multiple messages in a single API request.
How to validate if a phone number can receive WhatsApp messages
You can validate if a given phone number is linked to a WhatsApp account and can receive messages.
The API provides an endpoint that can validate whether a given phone number exists in WhatsApp or not.
The only requirement is to have at least one WhatsApp number connected to the platform in your current account.
For more details, please check out the API endpoint documentation here.
Before you check if a phone number exists on WhatsApp, you can also validate and normalize the format of a list of phone numbers by using the numbers validator API endpoint. This endpoint only validates the correct E164 format, but it does not check whether the phone number effectively exists on WhatsApp.
Note: The number of WhatsApp check validations is limited per month based on your subscription plan. Please check out the pricing table for more details about the limits.
Looking for more answers? Check out the extended FAQs.
Further useful resources
API Documentation
For more details about the endpoint API, please check the documentation where you will find all the details about the accepted request params, possible success or error responses and ready-to-use code examples in multiple programming languages:
https://app.wassenger.com/docs/#tag/Messages/operation/createMessage