Features

WhatsApp transactional messaging API (Coming soon)

Connect with more customers via the fast, global reach of the world’s leading messaging app using the MailerSend WhatsApp API. Access from your MailerSend account soon.

MailerSend

Official WhatsApp Business API partner

Skip the lengthy Meta integration process and start sending today with the high deliverability of WhatsApp powered by MailerSend.
MailerSend
Ready-made infrastructure

No need to build your own complex system. Integrate fast with our hosted API endpoints, webhooks, monitoring, and security.

Faster onboarding and approval

Get up and running quickly with guided setup, account notifications, and built-in tools to manage your WhatsApp account and phone numbers.

WhatsApp compliance by design

From GDPR compliance to WhatsApp template guidelines and messaging rules, compliance is built in so you can send with confidence.

MailerSend

The cherry on top of your messaging stack

Optimize your transactional strategy with secure, instant, personalized messaging that increases loyalty, builds trust, and drives business growth. 

Launch faster with our API

Build scalable WhatsApp flows into your apps fast with our developer-friendly API, official SDKs, clear documentation, and practical code examples.
curl -X POST 'https://api.mailersend.com/v1/whatsapp/send' \
  -H 'Authorization: Bearer YOUR_API_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{
    "from": "YOUR_PHONE_NUMBER",
    "to": ["RECIPIENT_PHONE_NUMBER"],
    "template_id": "TEMPLATE_ID",
    "personalization": [
          {
            "to": "RECIPIENT_PHONE_NUMBER",
            "data": {
              "body": [
                "body_var_1",
                "body_var_2"
              ]
            }
          }
        ]
  }'
<?php
use MailerSend\MailerSend;
use MailerSend\Helpers\Builder\WhatsappParams;
use MailerSend\Helpers\Builder\WhatsappPersonalization;

$mailersend = new MailerSend(['api_key' => 'YOUR_API_TOKEN']);

$whatsappParams = (new WhatsappParams())
    ->setFrom('YOUR_PHONE_NUMBER')
    ->setTo(['RECIPIENT_PHONE_NUMBER'])
    ->setTemplateId('TEMPLATE_ID')
    ->setPersonalization([
        (new WhatsappPersonalization('RECIPIENT_PHONE_NUMBER'))
            ->setBody(['body_var_1', 'body_var_2']),
    ]);

$mailersend->whatsapp->send($whatsappParams);
import { MailerSend, WhatsAppParams, WhatsAppPersonalization } from 'mailersend'

const mailersend = new MailerSend({
  apiKey: 'YOUR_API_TOKEN',
})

const whatsappParams = new WhatsAppParams()
  .setFrom('YOUR_PHONE_NUMBER')
  .setTo(['RECIPIENT_PHONE_NUMBER'])
  .setTemplateId('TEMPLATE_ID')
  .setPersonalization([
    new WhatsAppPersonalization('RECIPIENT_PHONE_NUMBER')
    .setBody(['body_var_1', 'body_var_2']),
  ])

await mailersend.whatsapp.send(whatsappParams)
from mailersend import MailerSendClient, WhatsAppBuilder
from mailersend.models.whatsapp import WhatsAppPersonalization, WhatsAppPersonalizationData

ms = MailerSendClient(api_key='YOUR_API_TOKEN')

personalization = WhatsAppPersonalization(
    to='RECIPIENT_PHONE_NUMBER',
    data=WhatsAppPersonalizationData(
        body=['body_var_1', 'body_var_2'],
    )
)

request = (
    WhatsAppBuilder()
    .from_number('YOUR_PHONE_NUMBER')
    .add_recipient('RECIPIENT_PHONE_NUMBER')
    .template_id('TEMPLATE_ID')
    .add_personalization(personalization)
    .build()
)

response = ms.whatsapp.send(request)
print(response)
import com.mailersend.sdk.MailerSend;
import com.mailersend.sdk.exceptions.MailerSendException;
import com.mailersend.sdk.whatsapp.WhatsAppPersonalization;

MailerSend ms = new MailerSend();
ms.setToken('YOUR_API_TOKEN');

try {

    WhatsAppPersonalization personalization = new WhatsAppPersonalization('RECIPIENT_PHONE_NUMBER')
        .setBody(new String[]{'body_var_1', 'body_var_2'});

    String messageId = ms.whatsapp().builder()
        .from('YOUR_PHONE_NUMBER')
        .addRecipient('RECIPIENT_PHONE_NUMBER')
        .templateId('TEMPLATE_ID')
        .addPersonalization(personalization)
        .send();

    System.out.println(messageId);

} catch (MailerSendException e) {

    e.printStackTrace();
}
package main

import (
	"context"
	"fmt"
	"log"
	"time"

	"github.com/mailersend/mailersend-go"
)

func main() {
	ms := mailersend.NewMailersend("YOUR_API_TOKEN")

	ctx := context.Background()
	ctx, cancel := context.WithTimeout(ctx, 5*time.Second)
	defer cancel()

	message := ms.WhatsApp.NewMessage()
	message.SetFrom("YOUR_PHONE_NUMBER")
	message.SetTo([]string{"RECIPIENT_PHONE_NUMBER"})
	message.SetTemplateId("TEMPLATE_ID")

	personalization := []mailersend.WhatsAppPersonalization{
		{
			To: "RECIPIENT_PHONE_NUMBER",
			Data: mailersend.WhatsAppPersonalizationData{
			Body:    []string{"body_var_1", "body_var_2"},
			},
		},
	}

	message.SetPersonalization(personalization)

	res, err := ms.WhatsApp.Send(ctx, message)
	if err != nil {
		log.Fatal(err)
	}

	fmt.Println(res.Header.Get("X-Message-Id"))
}
require "mailersend-ruby"

ms_client = Mailersend::Client.new('YOUR_API_TOKEN')

# Initialize the WhatsApp class
ms_whatsapp = Mailersend::WhatsApp.new(ms_client)

ms_whatsapp.add_from('YOUR_PHONE_NUMBER')
ms_whatsapp.add_to('RECIPIENT_PHONE_NUMBER')
ms_whatsapp.add_template_id('TEMPLATE_ID')

personalization = {
  to: 'RECIPIENT_PHONE_NUMBER',
  data: {
    body: ['body_var_1', 'body_var_2'],
  }
}
ms_whatsapp.add_personalization(personalization)

ms_whatsapp.send
MailerSend

Your reliable backup for delivery

Ensure time-sensitive messages always get delivered. Use email, SMS and WhatsApp to build a failsafe system that automatically uses multiple channels.

Built-in template management and approval

MailerSend
Pre-approved template library

Get a head start with our library of 147 Meta-approved, multilingual templates for order confirmations, OTPs, payment reminders, and more.

Meta templates synced for you

Templates created in Meta are automatically synced to your MailerSend account, giving you the freedom to use your existing templates.

In-app approval and quality tracking

Submit templates, view approval status, and monitor quality score from the templates page without needing to check in Meta.

MailerSend

Follow every message in motion

See the status of every message from queued to delivered, with full message details and activity timeline. Filter activity by sender number, recipient, template, and status. 

MailerSend

Automate with real-time events

Get real-time notifications with webhooks for sent, delivered and failed messages. Build failover workflows, log activity in internal systems, and monitor delivery performance.

MailerSend

Full visibility into every API request

Debug faster with API logs that give you a detailed breakdown of each API call, including the full request and response.

MailerSend

Omnichannel transactional messaging

Combine WhatsApp with email and SMS* to build powerful cross-channel messaging workflows that reach more customers.

Fast, responsive technical support

Our friendly, award-winning support team is on hand to help you every step of the way, from connecting your account to sending your first message and beyond.

93% satisfaction rate
100% response rate
24/7 support hours

FAQs

Why do I need a transactional WhatsApp messaging system?

WhatsApp is the world’s most popular instant messaging app and as a result is one of the fastest-growing customer communication channels for businesses. It offers high deliverability and high open rates of 98%, making it the ideal platform for delivering transactional messages. 


For businesses to message customers through WhatsApp, they must have a Meta and WhatsApp Business account, and to send directly through Meta, they must go through a long verification process and build a complex infrastructure to manage the sending. MailerSend has taken care of this part already, so our users can connect their account and send transactional WhatsApp messages without the lengthy setup process. What’s more, you can also manage your transactional email and SMS sending from the same platform using the same simple API endpoints you already know.

Do I need to verify my business with Meta before I can start sending?

Yes, to increase your message limits and avoid restrictions you’ll need to verify your business. This involves submitting your business details (legal name, address, phone number, website, legal document) and completing a phone verification. 

How do the monthly message allowances and overusage costs work for each plan?

The price of the add-on, message allowance and overusage depends on your plan. The higher the plan tier, the higher the message allowance and the lower the per message cost. View our plans and pricing to learn more.

Can I use a phone number that is already active on a personal WhatsApp account?

The phone number you use should not already connected to a WhatsApp account. There is the option to get a new Meta provided phone number when you connect your account, or use a verified toll-free phone number if you’re based in North America

What are the pre-requisites for adding WhatsApp to my MailerSend account?

You can test WhatsApp for free at any time. To start sending WhatsApp messages to customers, you’ll need a Hobby plan or above, and the WhatsApp add-on. 


To connect WhatsApp, you’ll need a business phone number that is not yet associated with a WhatsApp account, a Facebook account with Meta Business Manager access, and your business details on hand.

Can I use the WhatsApp Sandbox if I am on the Free plan?

Yes, you can test the WhatsApp API with the sandbox on the Free plan. 

Is there a way to appeal rejected message templates?

Yes, if a template is rejected by Meta, it may be because it does not comply with Meta’s guidelines for this template category. You will find the option to appeal the decision from within MailerSend, or you can create a new one that fits the guidelines. 

How do I increase my daily messaging limit from 250 to "Unlimited"?

Messaging limits are set by Meta. You can increase your limit by following Meta’s scaling path, and then through automatic scaling which is based on the quality of your messages and sending volume.