Unofficial WhatsApp API to scale without limits
You get stuck on templates, Meta approval queues and fees that grow with every message you send. With D-API's unofficial WhatsApp API you connect real numbers in minutes and pay per instance, not per volume.
- Billing: Per instance
- Uptime: 99.9%
- Meta approval: Not required
You shouldn't be solving this.
Problems D-API takes off your plate.
Approvals and templates hold up your launch
The official API requires Meta review, pre-approved templates and conversation windows that box in any creative automation.
Per-message fees eat your margin
Every send becomes a variable, unpredictable cost. As volume grows, the bill explodes and the ROI of the operation disappears.
One blocked number takes down the whole operation
Without isolation and a dedicated IP, a ban on one number spills over to the rest, and you have no plan B to keep conversations running.
From zero to production in four steps.
Talk to sales
Tell us your use case and get dedicated onboarding in a WhatsApp group to launch your operation with direct support.
Connect your numbers
Create one instance per number and scan the QR code. Each connection comes up with a dedicated proxy and its own IP.
Integrate with the REST API
Use your API key to send messages and native CTAs and to receive webhooks from any language or from the Node.js SDK.
Read the docsScale and monitor
Track delivery, reads, response rate and number health, adding new instances as demand grows.
See pricing
import { DApi } from 'd-api-sdk'
const dapi = new DApi({ apiKey: process.env.DAPI_API_KEY })
await dapi.sessions.create({
sessionId: 'customer-42',
webhookUrl: 'https://your-app.com/webhooks/whatsapp',
})
const { qrCodeImage } = await dapi.sessions.getQRCode('customer-42')
// once the number scans the QR code
await dapi.messages.sendText({
sessionId: 'customer-42',
to: '14155550123',
text: 'Your order is confirmed!',
})curl -X POST https://api.d-api.cloud/api/v1/sessions \
-H "Authorization: $DAPI_API_KEY" \
-H "Content-Type: application/json" \
-d '{"sessionId": "customer-42", "webhookUrl": "https://your-app.com/webhooks/whatsapp"}'
curl https://api.d-api.cloud/api/v1/sessions/customer-42/qr \
-H "Authorization: $DAPI_API_KEY"
# once the number scans the QR code
curl -X POST https://api.d-api.cloud/api/v1/messages/send/text \
-H "Authorization: $DAPI_API_KEY" \
-H "Content-Type: application/json" \
-d '{"sessionId": "customer-42", "to": "14155550123", "text": "Your order is confirmed!"}'import os
import requests
API = "https://api.d-api.cloud/api/v1"
HEADERS = {"Authorization": os.environ["DAPI_API_KEY"]}
requests.post(f"{API}/sessions", headers=HEADERS, timeout=10, json={
"sessionId": "customer-42",
"webhookUrl": "https://your-app.com/webhooks/whatsapp",
})
qr = requests.get(f"{API}/sessions/customer-42/qr", headers=HEADERS, timeout=10).json()
# once the number scans the QR code
requests.post(f"{API}/messages/send/text", headers=HEADERS, timeout=10, json={
"sessionId": "customer-42",
"to": "14155550123",
"text": "Your order is confirmed!",
})<?php
use GuzzleHttp\Client;
$dapi = new Client([
'base_uri' => 'https://api.d-api.cloud/api/v1/',
'headers' => ['Authorization' => getenv('DAPI_API_KEY')],
'timeout' => 10,
]);
$dapi->post('sessions', ['json' => [
'sessionId' => 'customer-42',
'webhookUrl' => 'https://your-app.com/webhooks/whatsapp',
]]);
$qr = json_decode($dapi->get('sessions/customer-42/qr')->getBody(), true);
// once the number scans the QR code
$dapi->post('messages/send/text', ['json' => [
'sessionId' => 'customer-42',
'to' => '14155550123',
'text' => 'Your order is confirmed!',
]]);Works with the tools you already use
- Node.js SDK
- n8n
- HTTPS/AMQP webhooks
- Datacrazy CRM
- Amazon S3/MinIO
Connect straight to WhatsApp, with no Meta approval and no per-message fees.
Multiple numbers in parallel
Run several isolated WhatsApp numbers, one instance per number, all active at the same time without interfering with each other.
Dedicated proxy with its own IP
Each connection gets a dedicated proxy with an exclusive IP, reducing the risk of your numbers being banned.
Real per-instance isolation
A problem on one number does not affect the others: each instance is independent, so a single failure never turns into a domino effect.
High availability 24/7
Continuous self-healing and infrastructure with 99.9% uptime keep your connections up without manual babysitting.
Webhooks with automatic retries
Exponential backoff retries over HTTPS or AMQP/RabbitMQ keep events from getting lost. See the payloads in our Swagger.
No per-message fees
Billing per active instance, with no volume fees: send as much as you need with a predictable monthly cost.
REST API in any language
REST API authenticated by API key and documented in Swagger (OpenAPI 3), with an official Node.js SDK and an n8n community node.
Frequently asked questions.
What is an unofficial WhatsApp API?
Are there per-message fees?
Can I connect multiple WhatsApp numbers?
How do I reduce the risk of bans?
Which language do I integrate with?
Ready to go to production?
3-day free trial with full access. No credit card, no lock-in.
