The WhatsApp API
that doesn't drop.
Send OTPs, notifications and automations over HTTP. Anti-ban multi-number rotation, signed webhooks, SDKs in several languages and a playground. Get started in minutes, pay only for what you use.
No credit card · free forever plan · 2 numbers on the Starter
# send a message in 1 request
curl https://api.bzapper.com.br/messages/text \
-H "Authorization: Bearer bz_live_…" \
-d '{
"to": "+5551999998888",
"text": "Your code is 318204"
}'
# response
{
"message_id": "9d41…bbbd",
"status": "queued",
"number": "+5551999198087"
} From QR to webhook in three steps
No approval queue, no BSP, no red tape. Connect and start sending.
Connect a number
Scan the QR in the dashboard. Rotation and warm-up turn on by themselves.
Call the API
One POST and the message joins the queue with human presence and jitter.
Receive webhooks
Delivered, read, replied, number dropped — all signed and in real time.
Everything a serious product needs
From anti-ban rotation to secure OTP, from webhooks to SDKs — built for production.
Multi-number rotation
Pools with rotation, warm-up and per-number proxy. One drops, traffic keeps flowing — real anti-ban.
Secure OTP
Code in a separate message, never persisted or displayed. Text generated with anti-ban variation.
Signed webhooks
Real-time events with HMAC-SHA256, retry and dedup. Local relay, `stripe listen` style.
Multi-language SDKs
Node, Python, PHP, Java and Go — generated from OpenAPI. Copy, paste and run.
Unified inbox
Conversations unified per contact even with number rotation. Own echo and group context.
Private media
Files in a private bucket, fetched via pre-signed URL — the client downloads directly, never through your API.
Projects & multi-user
Isolate environments per project, invite the team, control by key and scope.
API playground
Test any endpoint and inspect webhooks live, straight from the dashboard.
Copy, paste, run.
Official SDKs generated from OpenAPI in Node, Python, PHP, Java and Go. Signed webhooks with HMAC, retry and dedup. Local relay, stripe listen style, to test on your localhost.
$ npm install @bzapper/client $ pip install bzapper $ composer require bzapper/bzapper $ go get github.com/bernisoftware/bzapper-go $ br.com.bernisoftware:bzapper (Maven) Webhook events
# send an OTP
curl https://api.bzapper.com.br/messages/otp \
-H "Authorization: Bearer bz_live_…" \
-d '{"to":"+5551999998888","code":"318204"}' // npm install @bzapper/client
import { Bzapper } from '@bzapper/client';
const bz = new Bzapper({ baseUrl: 'https://api.bzapper.com.br', apiKey: 'bz_live_…' });
await bz.sendOTP({ to: '+5551999998888', code: '318204' }); # pip install bzapper
from bzapper import Client
bz = Client("https://api.bzapper.com.br", "bz_live_…")
bz.send_otp("+5551999998888", code="318204") // composer require bzapper/bzapper
$bz = new Bzapper\Client('https://api.bzapper.com.br', 'bz_live_…');
$bz->sendOtp('+5551999998888', '318204'); // go get github.com/bernisoftware/bzapper-go
import bzapper "github.com/bernisoftware/bzapper-go"
bz := bzapper.New("https://api.bzapper.com.br", "bz_live_…")
bz.SendOTP("+5551999998888", "318204") // br.com.bernisoftware:bzapper
var bz = new Bzapper("https://api.bzapper.com.br", "bz_live_…");
bz.sendOtp("+5551999998888", "318204"); Put number management right inside your product
A standalone widget you embed in your own system. Your customers connect, disconnect and track the project numbers — with zero UI to build on your side. One line of code.
Project numbers
Automatically loads the connected numbers of the project tied to the key. Each one with live status.
Connect via QR
The customer scans the QR and connects a new number right there — add a number (if the plan allows) or disconnect, all inside the widget.
Mini dashboard
Project usage at a glance: messages, numbers and storage for the period. Billing stays in the panel.
Origin-locked
The wgt_ key is public, but locked to an origin allowlist (CORS). It never exposes your real API key.
Floating (plug-and-play)
A bubble in the corner of the screen. Just paste the <script> with your key — it opens with one click.
Embedded (inline)
Render <bzapper-widget> anywhere on your page, like a native block of your own dashboard.
Floating mode — one line in your HTML:
<!-- paste before </body> -->
<script src="https://assets.bzapper.com.br/widget/v1/widget.js"
data-key="wgt_sua_chave" async></script> The wgt_ key is public (it ships in the HTML) and locked to an origin allowlist you configure in the panel. Your real API key never shows up. Billing (top-ups, plans) stays in the panel — the widget only operates within what is available.
WhatsApp over an API, with no fear of bans
The risk of going unofficial is the ban. We treat it as real engineering: every number gets gradual warm-up, human presence (typing + jittered pauses), a dedicated proxy and a health score. Rotation spreads the load across the pool and pulls at-risk numbers out of circulation — automatically.
- Pools with round-robin, least-used and health-weighted rotation
- Automatic warm-up with a growing daily cap
- Conversations unified per contact, even when switching numbers
- Real-time alerts when a number drops or gets banned
Prepaid, pay-as-you-go. No monthly fee.
Top up a wallet and pay only for what goes beyond the free tier. No fixed plan, no hidden charges.
Messages
Connected number
Media storage
Projects
- Message history retention: 30 days free; longer windows (90 days, 1 or 2 years) for a flat monthly fee — for compliance and audit.
- A baseline plan that is FREE FOREVER: 200 messages, 2 numbers, 100 MB and 1 project.
- It ships with 2 numbers in the free tier — so you feel multi-number rotation (anti-ban) in practice.
- Messages = sends + receives. A receive is only billed if you monitor it via webhook.
- Prepaid: top up and spend — no monthly fee. Card auto-recharge (recommended).
- Welcome bonus to start testing without paying. Users, API keys and webhooks are free.
Prices shown in BRL (Brazil). Americas in USD · other regions in EUR — set by your region at signup.
See exactly what it costs
The first 200 messages each month are free. Beyond that you pay per message: each send, and each receive you monitor via webhook (with no webhook listening, the receive is free). The simulation below shows the cost of the overage — play with the webhook toggle.
Example price (BRL). Americas in USD, other regions in EUR — set by region at signup.
What people use bZapper for
OTP / 2FA
Verification codes with varied text and tracked delivery.
Transactional notifications
Orders, invoices, reminders — straight from your backend.
Centralized support
Many numbers, one inbox, N agents.
Group bots
Watch mentions and attachments, reply in the right context.
Automation & no-code
Integrate with n8n, Make, Zapier via webhooks and HTTP.
Targeted broadcasts
Rotation spreads the load and protects your numbers’ reputation.
Everything you want to know
Is this the official WhatsApp API?
No. bZapper is an unofficial gateway that automates WhatsApp Web over the multi-device protocol. That is why we invest heavily in number rotation and warm-up to reduce the risk of bans.
How does anti-ban work?
Each number gets gradual warm-up, human presence (typing + jitter), a dedicated proxy and a health score. Rotation spreads sending across the pool and pulls at-risk numbers out of circulation.
How much does it cost?
There is a FREE FOREVER plan: 200 messages/month, 2 numbers, 100 MB and 1 project. Beyond that it is prepaid and pay-as-you-go, with no monthly fee: you top up a wallet and pay only the overage — R$0.01 per message (each send, and each receive you monitor via webhook), R$9.90 per connected number/month, R$9.90 per GB of media/month and R$9.90 per project/month (the 1st project is free) — in BRL; Americas in USD, other regions in EUR. There is a welcome bonus, card auto-recharge and a simulator on the home page so you can see the bill upfront. The free plan runs with no balance; above it, sending only happens with a positive balance.
How long does it take to integrate?
Minutes. Create the account, generate an API key and use one of the SDKs (Node, Python, PHP, Java, Go) or a raw POST. There is a playground and full documentation.
Do you have SDKs and webhooks?
Yes — SDKs generated from OpenAPI in 5 languages, webhooks signed with HMAC, retry/dedup and a local relay, `stripe listen` style, to test on localhost.
What about data privacy?
Conversation media goes to a private bucket with a pre-signed URL; the OTP code is never persisted; secrets are encrypted. Retention is configurable per account.
Start sending over WhatsApp in minutes
Create your free account, generate an API key and make your first send today. No card, no red tape.