Zavu API Context
Zavu is a unified multi-channel messaging API. One API to send messages via SMS, WhatsApp, Telegram, Email, Instagram, and Voice with ML-powered intelligent routing.
SDK Ecosystem
| Language | Package | Install |
|---|---|---|
| TypeScript | @zavudev/sdk | npm add @zavudev/sdk |
| Python | zavudev | pip install zavudev |
| Go | github.com/zavudev/sdk-go | go get github.com/zavudev/sdk-go |
| PHP | zavudev/sdk-php | Composer |
| Ruby | zavudev/sdk-ruby | RubyGems |
TypeScript Init
import Zavudev from '@zavudev/sdk';
const zavu = new Zavudev({
apiKey: process.env['ZAVUDEV_API_KEY'],
});
Python Init
import os
from zavudev import Zavudev
zavu = Zavudev(api_key=os.environ.get("ZAVUDEV_API_KEY"))
Python Async
from zavudev import AsyncZavudev
zavu = AsyncZavudev(api_key=os.environ.get("ZAVUDEV_API_KEY"))
Go Init
import "github.com/zavudev/sdk-go"
client := zavudev.NewClient(os.Getenv("ZAVUDEV_API_KEY"))
Authentication
- Environment variable:
ZAVUDEV_API_KEY - Key prefixes:
zv_live_(production),zv_test_(sandbox) - Header:
Authorization: Bearer <api_key> - Sender override header:
Zavu-Sender: <sender_id>
Core Conventions
- Phone numbers: Always E.164 format (
+14155551234) - Channels:
auto,sms,sms_oneway,whatsapp,telegram,email,instagram,voice - Message types:
text,image,video,audio,document,sticker,location,contact,buttons,list,reaction,template - Pagination: Cursor-based. All list endpoints return
{ items: [...], nextCursor: string | null } - Idempotency: Use
idempotencyKeyon send to prevent duplicate messages
Error Handling
TypeScript
import Zavudev, { APIError } from '@zavudev/sdk';
try {
await zavu.messages.send({ to: "+14155551234", text: "Hello" });
} catch (error) {
if (error instanceof APIError) {
console.error(error.status, error.message);
}
}
Python
from zavudev import Zavudev, APIError
try:
zavu.messages.send(to="+14155551234", text="Hello")
except APIError as e:
print(e.status_code, e.message)
Key Business Rules
- WhatsApp 24h window: Free-form messages require an open conversation window (user messaged you in last 24h). Use template messages to initiate conversations outside the window.
- Email requires KYC: Complete identity verification in the dashboard before sending emails.
- URL verification: SMS/email messages containing URLs require those URLs to be pre-verified via
/v1/urls. - URL shorteners blocked: bit.ly, t.co, etc. are always blocked. Use full destination URLs.
- Smart routing: Channel
autouses ML to pick the best channel based on cost, deliverability, and contact preferences. - Fallback: If WhatsApp fails, messages can automatically fall back to SMS (enabled by default).
MCP Server
For direct API execution from AI assistants:
claude mcp add --transport stdio zavudev_sdk_api \
--env ZAVUDEV_API_KEY="your_key" -- npx -y @zavudev/sdk-mcp
Tools available: search_docs (search API docs), execute (run TypeScript against authenticated client).
CLI
The zavudev/cli package provides terminal access to all API operations.
Rate Limits
Check X-RateLimit-Remaining header. Use .withResponse() (TS) or .with_raw_response() (Python) to access response headers.
Message Statuses
queued -> sending -> sent -> delivered (success path)
queued -> sending -> failed (failure path)