Skip to main content
The official Zavu SDK for Node.js provides a type-safe way to interact with the Zavu API.

Installation

npm install @zavu/node
# or
bun add @zavu/node
# or
yarn add @zavu/node

Requirements

  • Node.js 18 or higher
  • TypeScript 4.7+ (optional, for type definitions)

Quick Start

import { Zavu } from '@zavu/node';

const zavu = new Zavu(process.env.ZAVU_API_KEY);

// Send a message
const message = await zavu.messages.send({
  to: '+56912345678',
  text: 'Hello from Zavu!'
});

console.log('Message sent:', message.id);

Configuration

Initialize the Client

import { Zavu } from '@zavu/node';

// Basic initialization
const zavu = new Zavu('zv_live_xxx');

// With options
const zavu = new Zavu('zv_live_xxx', {
  baseUrl: 'https://api.zavu.dev', // Custom API URL
  timeout: 30000,                   // Request timeout in ms
});

Environment Variables

We recommend storing your API key in environment variables:
const zavu = new Zavu(process.env.ZAVU_API_KEY!);

Messages

Send a Message

const message = await zavu.messages.send({
  to: '+56912345678',
  text: 'Your verification code is 123456',
  channel: 'sms', // optional: sms, whatsapp, auto
  metadata: {     // optional: custom data
    userId: 'user_123'
  },
  idempotencyKey: 'unique-key' // optional: prevent duplicates
});

console.log(message.id);     // msg_xxx
console.log(message.status); // queued

Send with Template

const message = await zavu.messages.send({
  to: '+56912345678',
  templateId: 'tpl_abc123',
  data: {
    customerName: 'John',
    orderId: '12345'
  }
});

Get Message Status

const message = await zavu.messages.get('msg_abc123');

console.log(message.status); // queued, sending, delivered, failed

List Messages

// List all messages
const { items, nextCursor } = await zavu.messages.list();

// With filters
const { items } = await zavu.messages.list({
  status: 'delivered',
  channel: 'sms',
  limit: 100
});

// Pagination
let cursor: string | undefined;
do {
  const result = await zavu.messages.list({ cursor, limit: 50 });
  for (const message of result.items) {
    console.log(message.id);
  }
  cursor = result.nextCursor;
} while (cursor);

Templates

Create Template

const template = await zavu.templates.create({
  name: 'order_confirmation',
  category: 'transactional',
  body: 'Hi {{name}}, your order #{{orderId}} is confirmed!'
});

List Templates

const { items } = await zavu.templates.list();

Get Template

const template = await zavu.templates.get('tpl_abc123');

Update Template

const template = await zavu.templates.update('tpl_abc123', {
  body: 'Hi {{name}}, order #{{orderId}} confirmed! Delivery: {{date}}'
});

Delete Template

await zavu.templates.delete('tpl_abc123');

Senders

List Senders

const { items } = await zavu.senders.list();

Create Sender

const sender = await zavu.senders.create({
  name: 'Marketing',
  routingPolicy: 'prefer_whatsapp',
  channels: {
    sms: { phoneNumber: '+15551234567' },
    whatsapp: { phoneNumber: '+15551234567' }
  },
  setAsDefault: true
});

Contacts

Get Contact

const contact = await zavu.contacts.get('con_abc123');
// or by phone
const contact = await zavu.contacts.getByPhone('+56912345678');

Update Contact

const contact = await zavu.contacts.update('con_abc123', {
  defaultChannel: 'whatsapp',
  metadata: {
    name: 'John Doe',
    tier: 'premium'
  }
});

Error Handling

import { Zavu, ZavuError } from '@zavu/node';

try {
  await zavu.messages.send({
    to: 'invalid-number',
    text: 'Hello'
  });
} catch (error) {
  if (error instanceof ZavuError) {
    console.error('Code:', error.code);      // bad_request
    console.error('Message:', error.message); // Invalid phone number
    console.error('Status:', error.status);   // 400
  } else {
    throw error;
  }
}

Error Types

Error CodeDescription
bad_requestInvalid request parameters
unauthorizedInvalid or missing API key
forbiddenInsufficient permissions
not_foundResource not found
rate_limit_exceededToo many requests

TypeScript Support

The SDK includes full TypeScript definitions:
import { Zavu, Message, Template, SendMessageRequest } from '@zavu/node';

const request: SendMessageRequest = {
  to: '+56912345678',
  text: 'Hello!'
};

const message: Message = await zavu.messages.send(request);

CommonJS Support

const { Zavu } = require('@zavu/node');

const zavu = new Zavu(process.env.ZAVU_API_KEY);