Build on the carrier, not on a reseller.
Seven REST APIs - Voice, SMS, Verify, Video, Email, Number Lookup and Fax - on Dollu’s own network: 600+ carrier interconnects, numbers in 110+ countries, signed webhooks and SDKs in six languages. Free sandbox, no card.
7
APIs behind one key
6
Official SDKs plus CLI
99.99%
Core availability
Seven products, one key, one console.
Each API is a first-class product with its own reference, limits and pricing - and all of them share authentication, webhooks, sub-accounts and billing.
Voice API (Programmable Voice)
Programmable voice via REST and SDKs: outbound and inbound calls, IVR, recording, transcription, TTS/STT, conferencing and WebSocket media streams on Dollu's network.
SMS & Messaging API
Send and receive SMS, MMS, RCS and WhatsApp from one API with two-way messaging, number provisioning, DLR webhooks, templates and sub-accounts on 800+ operator routes.
Verify API (OTP & 2FA)
Phone and identity verification via one API: OTP over SMS, voice, WhatsApp, flash call and email, silent network authentication, auto failover and AIT fraud protection.
Video & WebRTC API
In-app voice and video calling with WebRTC SDKs for web, iOS and Android: 1:1 and group rooms, screen share, recording, PSTN dial-in/out and global TURN infrastructure.
Email API & SMTP Relay
Transactional and bulk email via REST API or SMTP relay: DKIM/SPF/DMARC set-up, dedicated IPs with warm-up, templates, webhooks, analytics and address validation.
Number Lookup & Phone Intelligence API
HLR/MNP lookup, live subscriber status, carrier and line-type detection, roaming and ported-number resolution and fraud scoring via REST API or batch, sub-second latency.
Fax API & Cloud Fax
Send and receive fax via REST API, T.38/G.711 SIP trunks or email-to-fax on fax-enabled numbers in 60+ countries, encrypted at rest with configurable retention policies.
Two requests to production-grade messaging and voice.
Send a message and place a call with curl or the Node.js SDK. Every other product follows the same shape: one POST, one id, events on your webhook.
POST /v2/messages
curl -X POST https://api.dollu.com/v2/messages \
-H "Authorization: Bearer $DOLLU_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: 7c9e6679-7425-40de-944b-e07fc1f90ae7" \
-d '{
"from": "Dollu",
"to": "+447700900123",
"text": "Your verification code is 482913",
"webhook_url": "https://example.com/hooks/dollu"
}'
# 202 Accepted
# { "id": "msg_01J8ZK3V9Q", "status": "queued", "segments": 1,
# "request_id": "req_5f2c..." }import { Dollu } from "@dollu/sdk"
const dollu = new Dollu(process.env.DOLLU_API_KEY)
const message = await dollu.messages.create({
from: "Dollu",
to: "+447700900123",
text: "Your verification code is 482913",
webhookUrl: "https://example.com/hooks/dollu",
})
console.log(message.id, message.status)
// msg_01J8ZK3V9Q queuedPOST /v2/calls
curl -X POST https://api.dollu.com/v2/calls \
-H "Authorization: Bearer $DOLLU_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"from": "+442045770000",
"to": "+919876543210",
"answer_url": "https://example.com/ivr/answer",
"record": true,
"machine_detection": "enabled"
}'
# 201 Created
# { "id": "call_01J8ZKQ2MB", "status": "initiated",
# "direction": "outbound", "request_id": "req_a91d..." }const call = await dollu.calls.create({
from: "+442045770000",
to: "+919876543210",
answerUrl: "https://example.com/ivr/answer",
record: true,
machineDetection: "enabled",
})
// answer_url returns JSON verbs when the call connects:
// [{ "say": { "text": "Hello from Dollu" } },
// { "gather": { "digits": 1, "action_url": "/ivr/menu" } }]
console.log(call.id, call.status)
// call_01J8ZKQ2MB initiatedSandbox keys (sk_test_) accept exactly the same requests. Verified numbers receive real traffic; every other destination returns simulated delivery receipts and call events so you can exercise webhooks end to end without touching the PSTN.
The conventions every endpoint follows.
Boring on purpose. Once you know one Dollu API you know all seven.
| Base URL | https://api.dollu.com/v2 - REST over HTTPS, JSON in and out; TLS 1.2+ |
|---|---|
| Authentication | Bearer API keys with scopes (sk_test_… for sandbox, sk_live_… for production) or OAuth 2.0 client credentials; optional IP allow-lists |
| Idempotency | Idempotency-Key header on every POST, honoured for 24 hours; every response carries a request_id to quote to support |
| Rate limits | Production defaults: 100 CPS and 1,000 concurrent calls; 300 messages/second; 1,000 lookups/minute - raised on request. Sandbox: 10 requests/second |
| Errors | Conventional HTTP status codes; JSON body with type, code, message, param and docs_url; retry-after on 429 |
| Versioning | Path version (v2) for breaking changes; additive changes announced 30 days ahead; sunset headers on deprecated endpoints |
| Regions | API served from Frankfurt, Ashburn, Mumbai and Singapore; media anchored at the nearest of 6 interconnect PoPs; recordings stored in the region you choose |
| Compliance | ISO 27001, SOC 2 controls, GDPR data processing agreement; DLT (India), 10DLC and STIR/SHAKEN (US) handled in the console |
Official SDKs in six languages, plus a CLI and OpenAPI spec.
Typed models, retries with backoff, idempotency keys and webhook signature verification are built into every SDK, so the integration code you write is about your product, not ours.
Node.js / TypeScript
npmnpm install @dollu/sdkPython
PyPIpip install dolluJava / Kotlin
Maven Centralcom.dollu:dollu-sdkGo
Go modulesgo get github.com/dollu/dollu-goPHP
Packagistcomposer require dollu/dollu-php.NET (C#)
NuGetdotnet add package Dollu.Sdk
OpenAPI 3.1 specification
One spec for every product. Generate clients in any language, import into Postman or Insomnia, or diff versions in CI.
Command-line interface
Send a test message, place a call, tail webhook deliveries and replay events from your terminal - the same API key, no console needed.
Console with request logs
Every request with headers, latency and the carrier-side outcome; SIP traces for calls; per-message delivery timelines and DLR reason codes.
Every state change, signed and delivered.
One webhook format across all products - verify the signature, switch on the event type, acknowledge with a 2xx. Retries and replay are handled for you.
| Delivery | JSON POST over HTTPS to the URL on your account, number or individual request (webhook_url); 5 s connect timeout, 15 s response timeout |
|---|---|
| Signature | X-Dollu-Signature: HMAC-SHA256 of timestamp + body with your webhook secret; X-Dollu-Timestamp for replay protection (reject skew > 5 minutes); SDK helpers verify in one call |
| Retries | Any non-2xx or timeout is retried with exponential backoff for up to 24 hours; failed deliveries can be replayed from the console or API |
| Messaging events | message.queued · message.sent · message.delivered · message.failed · message.received (inbound) · message.opted_out |
| Voice events | call.initiated · call.ringing · call.answered · call.completed · call.machine_detected · call.dtmf_received · recording.completed · transcription.completed |
| Verify events | verification.sent · verification.approved · verification.failed · verification.expired · verification.fraud_blocked |
| Video events | room.created · room.ended · participant.joined · participant.left · recording.completed |
| Email events | email.accepted · email.delivered · email.deferred · email.bounced · email.opened · email.clicked · email.complained |
| Fax and lookup | fax.sent · fax.failed · fax.received; number lookups are synchronous and return in the response, no webhook |
| Payload | id, type, created_at, data (the full resource), plus account_id and sub_account_id for platform customers; schema published in the OpenAPI spec |
What the free sandbox includes, and where it stops.
Enough to build and demonstrate a complete flow, with real deliveries to your own numbers and simulated events for everything else.
| Cost | Free. No card. Production needs KYC and either a prepaid top-up or approved credit terms |
|---|---|
| API surface | Every endpoint of every product with sk_test_ keys; identical request and response shapes to production |
| Numbers | Two test numbers per account (one voice, one SMS-enabled) plus shared CLI-check numbers; add up to five verified personal numbers as destinations |
| Messaging | 200 messages per day to verified numbers, delivered over the real network; other destinations return simulated delivery receipts |
| Voice | 50 calls per day, 2 concurrent, 5 minutes each, to verified numbers; other destinations produce simulated call events for IVR and webhook testing |
| Verify | 50 verifications per day across SMS, voice and WhatsApp channels to verified numbers |
| Video | Rooms of up to 4 participants for 30 minutes; recordings kept for 24 hours |
| Email and fax | 100 emails per day from a shared sandbox domain; 10 fax pages per day to verified fax numbers |
| Rate limit | 10 requests per second per key; 429 with Retry-After beyond that |
| Retention | Sandbox logs, recordings and media are deleted after 30 days |
| Going live | Complete KYC in the console and add a payment method or credit terms; swap sk_test_ for sk_live_ - nothing else in your code changes |
Get a sandbox key.
Tell us what you are building and which SDK you prefer. A solutions engineer sends your key, test numbers and console login - and stays on the thread for questions.
A key within one business day
We provision sandbox accounts by hand for now - it keeps the network clean and you get a real engineer's email address in the process.
Test numbers and console access
Two test numbers, shared CLI-check numbers, request logs, webhook replay and the OpenAPI spec are ready when your key arrives.
A human when you need one
Solutions engineers who know both the API and the PSTN answer integration questions; the 24×7 NOC covers production once you are live.
Already in production elsewhere and comparing routes or pricing? Request a rate deck instead - it comes with test credentials too.
Sandbox sign-up
Fields marked * are required. Work email addresses only, please - it speeds up approval.
Developers - common questions.
The questions customers and carriers ask us most often before they interconnect. If yours is not here, our team answers within one business day.
Still have a question?
Ask our solutions teamShip it on the network that carries it.
Start in the sandbox today, or talk to a solutions engineer about volumes, SIP interconnect alongside the API, or a platform agreement with sub-accounts and your own decks.

