Skip to content
whatsapi.sh

Turn your WhatsApp into an API

Use the WhatsApp number you already have. Send messages from your code with one HTTP request. No Meta review, no message templates, no second number to buy.

Free to start, no card. Pair it as one more linked device.

Send a message
curl -X POST https://api.whatsapi.sh/v1/messages \
  -H "Authorization: Bearer wa_your_key" \
  -H "Content-Type: application/json" \
  -d '{ "to": "+5511988887777", "text": "Hello from whatsapi!" }'

The whole request, from your own number. Messages you start wait in the send queue.

Three steps to your first send

  1. 1

    Pair your number

    Scan a QR code from the dashboard, the same way you link WhatsApp Web. Your phone keeps working as usual. We become one more linked device on your account, not a copy of it.

  2. 2

    Create a key

    One key, starting with `wa_`. It works for the REST API and for MCP.

  3. 3

    Send

    One POST request. You get the message id back, and delivery receipts land on your webhook.

When a message is queued

Example
  1. Accepted

    The API returns a message ID and its scheduled send time.

  2. Waiting

    The message waits in that number’s queue. You can cancel it before it leaves.

  3. Sent

    The queue sends the message. Your webhook receives message.sent.

Sent does not mean delivered or read. Those are separate WhatsApp receipts.

What you can build with it

Every one of these is a few lines of code, on a number you already own.

Login codes

Someone types their phone number. A 6-digit code arrives on WhatsApp. One call sends it and hands you the code to check.

Order and booking updates

Payment received. Order shipped. Appointment tomorrow at 3pm. The messages people are actually glad to get.

Answers to your customers

Every message someone sends you lands on your webhook. Your code answers from the same number they already write to.

Alerts for your team

A server went down. A payment failed. A new lead came in. Send the alert to your team on WhatsApp.

What it does

The endpoints you will actually use, plus a few shortcuts that normally take a week to build. All of it on a number you own.

Messages and media

Text, photos, video, documents, voice notes, location and contact cards. Give us a URL and we fetch the file, so you never have to upload it yourself.

Login codes

One call sends the code and returns it to you, so you can check it your own way. Hashing, a guess limit and a resend cooldown are already handled.

Number checks

Ask whether a phone is on WhatsApp before you spend a message on it. We check Brazilian numbers with and without the ninth digit, because both are out there.

Signed webhooks

Seven events, one endpoint. Verify each signature. Failed deliveries are retried; use the delivery ID to ignore duplicates. An endpoint that keeps failing is paused.

Batch sends

Up to 25 recipients in one call. Every message waits its turn, 15 to 25 minutes apart by default, including messages to known contacts. Each recipient has its own result.

Errors that tell you what to do

Every error has a stable code and a message that names the fix. Anything that clears by waiting comes with `Retry-After`. A 429 tells you which limit you hit and when it lifts.

Two ways to call it

Every feature exists twice: as a REST endpoint and as an MCP tool. We write it once, so the two can never disagree.

For your code

Short routes you can guess. `POST /v1/messages` takes `{to, text}`. If you have one number, that is the whole body.

Example

POST https://api.whatsapi.sh/v1/messages
{ "to": "+55…", "text": "hi" }

{ "data": { "id": "…", "status": "queued",
  "scheduledAt": "2026-09-20T12:19:00Z" } }

On TypeScript? npm i @whatsapi.sh/sdk gives you the same API, typed.

For your agents

Point any MCP client at the same URL, with the same `wa_` key. Your agent gets ready-made tools: send_message, send_otp, check_number. Same quota, same limits.

Example

{
  "mcpServers": {
    "whatsapi": {
      "type": "streamable-http",
      "url": "https://api.whatsapi.sh/mcp",
      "headers": { "Authorization": "Bearer wa_your_key" }
    }
  }
}

honest

Your number can get banned

This is an unofficial API. It talks to WhatsApp the same way WhatsApp Web does. That is why you need no template approval and no Meta review. It is also why WhatsApp can restrict or permanently ban any number that uses it. Nobody can appeal that decision, us included.

Writing to a lot of strangers? Use a spare SIM, or the official API. Answering people who already write to you? The line you have is fine. We tell you this before you pair a number, not in a footer.

How we keep your number alive

WhatsApp bans numbers for cold outreach at volume, not for answering people. So we build the safe pace into the product, instead of writing it in a guide and leaving it to you.

A daily budget for new conversations

Every number gets a limit on the conversations it starts: five a day in its first week, twenty once it is older. Replying to someone who wrote to you first never counts against it. No plan lifts this limit. A bigger plan buys more numbers, and each number brings its own budget. You can change a number's limit yourself, but going higher makes a ban more likely.

Messages you start wait their turn

Messages you start wait 15 to 25 minutes apart by default, even for people you have contacted before. Replies to someone who wrote in the last 24 hours go out now. Groups and login codes also skip the queue. If the number disconnects, queued messages wait and resume with the same spacing when it returns. You can change the gap or turn the queue off.

Pricing

You pay for messages sent. Your plan also sets how many numbers you can connect. Everything else is free on every plan: webhooks, MCP, number checks, delivery receipts. The daily budget for new conversations is a safety limit, and no plan lifts it.

Free

$0/month

  • 100 messages a month
  • 1 connected number
  • 20 a day, fair use
  • 4 sends a minute
  • One recipient per call
Start free

Starter

$9/month

  • 1000 messages a month
  • 2 connected numbers
  • 60 a day, fair use
  • 8 sends a minute
  • Batch sends
Choose Starter
Most popular

Pro

$24/month

  • 5000 messages a month
  • 5 connected numbers
  • 250 a day, fair use
  • 12 sends a minute
  • Batch sends
Choose Pro

Scale

$69/month

  • 20000 messages a month
  • 15 connected numbers
  • 700 a day, fair use
  • 20 sends a minute
  • Batch sends
Choose Scale

Or top up

Extra messages for a busy month. They never expire, and we only use them once your monthly quota runs out.

250 messages · $41000 messages · $115000 messages · $49

No setup fee, no fee per number, no yearly contract. Each currency has its own prices, and your first purchase sets the one you pay in.

Common questions

Yes. Every unofficial API carries that risk, and no provider can promise otherwise. If one does, that tells you what you need to know about them. What actually kills numbers is cold outreach at volume. That is why every number here has a daily budget for the conversations it starts, and why we enforce it instead of suggesting it. Answer people who asked to hear from you and you are doing the safest thing there is.

Send your first message

Free plan, no card, the whole API. From the number you already have.

Start free