# Zavu Docs > Zavu is one API for SMS, WhatsApp, Email, Telegram, Messenger, Instagram and Voice, and a runtime for AI agents that answer on those channels. Official SDK: TypeScript (`@zavudev/sdk`); every other language calls the REST API. Every page below has a markdown twin at the same URL with `.md` appended, and answers `Accept: text/markdown`. Full text: https://www.zavu.dev/docs/llms-full.txt. OpenAPI: https://www.zavu.dev/docs/openapi.json (v1), https://www.zavu.dev/docs/openapi-v2.json (v2). ## Documentation: Getting Started - [Introduction to Zavu](https://www.zavu.dev/docs/introduction.md): Build and deploy AI agents that answer on WhatsApp, SMS, voice, email, Telegram and Messenger. One API, one webhook contract, one bill. - [Quickstart — Deploy Your First Agent](https://www.zavu.dev/docs/quickstart.md): Pull a ready-made AI agent into your codebase, deploy it with one command, and have it answering a real channel in about ten minutes. - [Messaging Quickstart — Send Your First Message](https://www.zavu.dev/docs/quickstart-messaging.md): Send your first SMS, WhatsApp or Email message with Zavu in under 5 minutes. Step-by-step guide with code samples in TypeScript and cURL. - [Authentication](https://www.zavu.dev/docs/authentication.md): Secure your Zavu API requests with Bearer tokens. Test and live keys, project scoping, key rotation and best practices for keeping production ## Documentation: Build agents - [How agents work](https://www.zavu.dev/docs/concepts/agent-architecture.md): From TypeScript on your machine to an agent answering a phone call - [Factory agents](https://www.zavu.dev/docs/guides/functions/factory-agents.md): Pull a ready-made voice agent into your codebase and ship it in minutes. - [Quickstart](https://www.zavu.dev/docs/guides/functions/quickstart.md): Build a working WhatsApp agent in 10 minutes. - [AI Agents](https://www.zavu.dev/docs/concepts/ai-agents.md): Automate conversations with AI-powered agents that respond to incoming WhatsApp, SMS and Email messages. - [AI Agents Overview](https://www.zavu.dev/docs/guides/ai-agents/overview.md): Automate customer conversations with intelligent AI-powered agents - [Setup Guide](https://www.zavu.dev/docs/guides/ai-agents/setup.md): Configure your first AI Agent via Dashboard or API - [Webhook Tools](https://www.zavu.dev/docs/guides/ai-agents/tools.md): Let your AI agent execute actions by calling your webhooks - [Tool library](https://www.zavu.dev/docs/guides/ai-agents/tool-library.md): Skills Zavu hosts and runs, with no webhook to build - [Knowledge Base](https://www.zavu.dev/docs/guides/ai-agents/knowledge-base.md): Upload documents and FAQs so your AI agent can answer questions accurately - [Memory](https://www.zavu.dev/docs/guides/memory/overview.md): Give agents memory that outlives the conversation: facts recalled by meaning, JSON documents recalled by key, scoped to the project, a contact or a thread. - [Conversational Flows](https://www.zavu.dev/docs/guides/ai-agents/flows.md): Build structured conversation paths for lead capture, booking, and multi-step processes - [Voice Agents Overview](https://www.zavu.dev/docs/guides/voice-agents/overview.md): Two-way phone calls answered by your AI agent - [Quickstart](https://www.zavu.dev/docs/guides/voice-agents/quickstart.md): Enable voice on your agent and place your first call - [Configuration](https://www.zavu.dev/docs/guides/voice-agents/configuration.md): Every voice setting: greeting, language, voicemail, transfer, and limits - [Webhooks](https://www.zavu.dev/docs/guides/voice-agents/webhooks.md): Receive call lifecycle events as they happen - [Functions](https://www.zavu.dev/docs/concepts/functions.md): Serverless TypeScript that runs on Zavu Cloud and powers your agents — write code, run npx zavudev deploy, your AI agent has new tools. - [Zavu Functions](https://www.zavu.dev/docs/guides/functions/overview.md): Deploy serverless code that powers your agents — no infra to manage, just `npx zavudev deploy`. - [defineAgent](https://www.zavu.dev/docs/guides/functions/defining-agents.md): Configure the LLM brain that drives your conversation. - [defineTool](https://www.zavu.dev/docs/guides/functions/defining-tools.md): Give your agent real actions — database lookups, bookings, API calls. - [Triggers](https://www.zavu.dev/docs/guides/functions/triggers.md): Bind your function to Zavu events — message.inbound, broadcast.status_changed, and more. - [Function Secrets & Environment Variables](https://www.zavu.dev/docs/guides/functions/secrets.md): Inject env vars into your Zavu function — API keys, DB URLs, anything sensitive. Encrypted at rest, scoped per function, rotatable from the dashboard. - [Runtime versions](https://www.zavu.dev/docs/guides/functions/runtime.md): How runtime pinning works and when to upgrade. - [Debugging](https://www.zavu.dev/docs/guides/functions/debugging.md): Diagnose why your agent isn't responding, tool calls are failing, or deploys are stuck — in order from most-likely cause to least. - [Advanced patterns](https://www.zavu.dev/docs/guides/functions/advanced-patterns.md): Production-grade techniques: composition, state, observability, testing. - [Deploy from GitHub](https://www.zavu.dev/docs/guides/functions/deploy-from-github.md): Link a repository to a function and deploy on every push — Zavu native and eve projects. - [CLI reference](https://www.zavu.dev/docs/guides/functions/cli.md): Every `zavu` command — what it does, its flags, and a copy-pasteable example. - [Frameworks](https://www.zavu.dev/docs/guides/frameworks/overview.md): Deploy an agent written in the framework you already use. Zavu adapts it, without changes to your project. - [Zavu](https://www.zavu.dev/docs/guides/frameworks/zavu.md): The native layout: one index.ts that declares your agent and its tools. - [eve](https://www.zavu.dev/docs/guides/frameworks/eve.md): Run an agent written with eve, Vercel's agent framework, without changing a file. - [Deploy an eve project](https://www.zavu.dev/docs/guides/functions/deploy-eve-project.md): Run an agent built with the eve framework on Zavu — no code changes, one command. - [Restaurant booking agent](https://www.zavu.dev/docs/guides/functions/examples/restaurant.md): Complete walkthrough — menu, availability, reservations over WhatsApp. - [Customer support agent](https://www.zavu.dev/docs/guides/functions/examples/customer-support.md): KB lookup + ticket creation + escalation, all in one function. - [Ecommerce assistant](https://www.zavu.dev/docs/guides/functions/examples/ecommerce.md): Order tracking, smart recommendations, cart recovery — over WhatsApp. ## Documentation: Send & receive - [Easy Way](https://www.zavu.dev/docs/guides/sending-messages/easy-way.md): The simplest way to send messages with Zavu - [Smart Routing](https://www.zavu.dev/docs/guides/sending-messages/smart-routing.md): Automatic channel selection that reduces costs up to 80% - [Overview](https://www.zavu.dev/docs/guides/receiving-messages/overview.md): Receive inbound messages from your customers via webhooks - [Webhooks](https://www.zavu.dev/docs/guides/receiving-messages/webhooks.md): Configure webhooks to receive inbound messages and delivery updates - [Event Types](https://www.zavu.dev/docs/guides/receiving-messages/events.md): Complete reference for all webhook event types and their payloads - [Security](https://www.zavu.dev/docs/guides/receiving-messages/security.md): Verify webhook signatures to ensure requests are from Zavu - [Migrating to v2 signatures](https://www.zavu.dev/docs/guides/receiving-messages/signature-migration.md): Move a webhook to the current signature scheme without downtime - [WhatsApp Overview](https://www.zavu.dev/docs/guides/whatsapp/overview.md): WhatsApp messaging overview: rich media, templates, buttons, lists and the 24-hour conversation window. - [Connect WhatsApp](https://www.zavu.dev/docs/guides/whatsapp/connect-whatsapp.md): Connect a phone number to WhatsApp and switch it on - [Troubleshooting WhatsApp Signup](https://www.zavu.dev/docs/guides/whatsapp/troubleshooting-signup.md): What each failure in the Meta signup dialog means, and what fixes it - [WhatsApp Business App Connection](https://www.zavu.dev/docs/guides/whatsapp/business-app.md): Use your existing WhatsApp Business App phone number with Cloud API - [WhatsApp Business Profile](https://www.zavu.dev/docs/guides/whatsapp/profile.md): Manage your WhatsApp Business profile information visible to customers - [Usernames & BSUIDs](https://www.zavu.dev/docs/guides/whatsapp/usernames.md): Handle WhatsApp contacts who adopted a username and hid their phone number. Receive, reply and send using business-scoped user IDs (BSUIDs). - [Text Messages](https://www.zavu.dev/docs/guides/whatsapp/messages/text.md): Send WhatsApp text messages: plain text up to 4,096 characters with optional URL previews. The simplest way to start conversations. - [Image Messages](https://www.zavu.dev/docs/guides/whatsapp/messages/image.md): Send WhatsApp image messages: photos and graphics with optional captions. JPEG/PNG up to 5MB, automatic CDN delivery and template support. - [Video Messages](https://www.zavu.dev/docs/guides/whatsapp/messages/video.md): Send WhatsApp video messages: MP4 clips with captions up to 16MB. Auto-thumbnails, fast CDN delivery and template support included. - [Audio Messages](https://www.zavu.dev/docs/guides/whatsapp/messages/audio.md): Send WhatsApp audio messages: MP3, OGG or M4A up to 16MB. Voice notes, podcasts and transcribed messages delivered in conversations. - [Document Messages](https://www.zavu.dev/docs/guides/whatsapp/messages/document.md): Send WhatsApp document messages: PDF, DOCX, XLSX up to 100MB. Include filenames and captions, with automatic CDN hosting. - [Sticker Messages](https://www.zavu.dev/docs/guides/whatsapp/messages/sticker.md): Send WhatsApp sticker messages: animated and static WEBP stickers under 100KB. Engaging visual replies in customer conversations. - [Location Messages](https://www.zavu.dev/docs/guides/whatsapp/messages/location.md): Send WhatsApp location messages with latitude, longitude, name and address. Useful for delivery confirmations, store locators and meetups. - [Location Request Messages](https://www.zavu.dev/docs/guides/whatsapp/messages/location-request.md): Ask a WhatsApp contact to share their location with a single tap. Useful for delivery addresses, field service dispatch and on-site check-ins. - [Contact Info Request Messages](https://www.zavu.dev/docs/guides/whatsapp/messages/request-contact-info.md): Ask a WhatsApp contact to share their phone number with a single tap. Essential for contacts who adopted a username and hid their number. - [Contact Messages](https://www.zavu.dev/docs/guides/whatsapp/messages/contact.md): Send WhatsApp contact card messages: share contact info with name, phone numbers, emails and addresses. Useful for referrals and intros. - [Button Messages](https://www.zavu.dev/docs/guides/whatsapp/messages/buttons.md): Send WhatsApp interactive button messages with up to 3 quick-reply options. Drive higher response rates than free-form messages. - [List Messages](https://www.zavu.dev/docs/guides/whatsapp/messages/list.md): Send WhatsApp interactive list messages with up to 10 sections. Let users pick from menus, products or services in a single tap. - [CTA URL Button Messages](https://www.zavu.dev/docs/guides/whatsapp/messages/cta-url.md): Send a single call-to-action URL button via WhatsApp - [Reaction Messages](https://www.zavu.dev/docs/guides/whatsapp/messages/reaction.md): Send WhatsApp reaction emojis on existing messages. Acknowledge, agree or react to user messages without sending a full reply. - [Quoted Replies](https://www.zavu.dev/docs/guides/whatsapp/messages/quoted-reply.md): Reply to a specific WhatsApp message so it appears quoted above your answer. Set content.replyToMessageId to the ID of the message you are answering. - [Typing Indicators](https://www.zavu.dev/docs/guides/whatsapp/messages/typing-indicator.md): Mark an inbound WhatsApp message as read and show a typing indicator while you prepare a response. Improves UX when replies take more than a couple of seconds. - [Templates](https://www.zavu.dev/docs/concepts/templates.md): Understanding message templates for multi-channel messaging. Reusable structures for WhatsApp, SMS, Telegram and Email with variables, categories and - [Creating WhatsApp Templates](https://www.zavu.dev/docs/guides/whatsapp/templates/overview.md): Learn how to create and manage WhatsApp message templates for your business - [Template Approval Process](https://www.zavu.dev/docs/guides/whatsapp/templates/approval.md): Understand how WhatsApp templates are reviewed and approved by Meta - [Templates](https://www.zavu.dev/docs/guides/whatsapp/templates/sending.md): Pre-approved messages for WhatsApp Business outside the 24-hour window - [OTP Authentication](https://www.zavu.dev/docs/guides/whatsapp/templates/otp.md): Send verification codes via WhatsApp Authentication templates - [WhatsApp Error Codes](https://www.zavu.dev/docs/guides/whatsapp/error-codes.md): Diagnose and resolve every WhatsApp delivery, template, and account error you can hit through Zavu - [Send SMS Messages with Zavu](https://www.zavu.dev/docs/guides/sending-messages/sms.md): Send SMS messages programmatically to any phone number worldwide. REST API, a TypeScript SDK, smart routing across carriers. - [Email Setup Guide](https://www.zavu.dev/docs/guides/email/setup.md): Add email as a channel on your sender profile with a domain you own - [Sending Emails](https://www.zavu.dev/docs/guides/sending-messages/email.md): Send transactional emails to any email address - [Email Health & Deliverability](https://www.zavu.dev/docs/guides/email-health/overview.md): Understand how Zavu monitors your email bounce rate and protects your sender reputation - [Telegram Overview](https://www.zavu.dev/docs/guides/telegram/overview.md): Bot messaging with powerful automation capabilities - [Telegram Setup](https://www.zavu.dev/docs/guides/telegram/setup.md): Create and configure your Telegram bot for messaging - [Messenger Overview](https://www.zavu.dev/docs/guides/messenger/overview.md): Facebook Messenger and Marketplace chat messaging through your Facebook Page - [Messenger Setup](https://www.zavu.dev/docs/guides/messenger/setup.md): Connect your Facebook Page to receive Messenger and Marketplace chats - [Broadcasts](https://www.zavu.dev/docs/guides/broadcasts/overview.md): Send messages to thousands of recipients with a single API call - [Creating Broadcasts](https://www.zavu.dev/docs/guides/broadcasts/creating-broadcasts.md): Configure your broadcast message and channel settings - [Adding Contacts](https://www.zavu.dev/docs/guides/broadcasts/adding-contacts.md): Add recipients to your broadcast in batches - [Sending & Scheduling](https://www.zavu.dev/docs/guides/broadcasts/sending.md): Send broadcasts immediately or schedule for later delivery - [Tracking Progress](https://www.zavu.dev/docs/guides/broadcasts/tracking-progress.md): Monitor broadcast delivery in real-time - [Contacts](https://www.zavu.dev/docs/guides/contacts/overview.md): Manage contacts and recipient information ## Documentation: Operate - [Senders — Smart Routing & Fallback](https://www.zavu.dev/docs/concepts/senders.md): Senders combine phone numbers, WhatsApp Business accounts and webhooks into routing identities. Smart routing and automatic SMS/WhatsApp fallback included. - [Adding Channels to a Sender](https://www.zavu.dev/docs/guides/senders/adding-channels.md): Step-by-step guide to configure SMS, WhatsApp, Email, Telegram, Instagram, Messenger, and Voice channels on your sender - [Phone Numbers](https://www.zavu.dev/docs/concepts/phone-numbers.md): Understanding phone number formats, validation and introspection in Zavu. E.164 normalization, carrier lookup, capability detection for SMS, WhatsApp - [Purchasing Phone Numbers](https://www.zavu.dev/docs/guides/phone-numbers/purchasing.md): Search for and purchase phone numbers to send messages - [Regulatory Requirements](https://www.zavu.dev/docs/guides/phone-numbers/regulatory-requirements.md): Fulfill regulatory requirements for phone number purchases in certain countries - [Number Lookup](https://www.zavu.dev/docs/tools/number-lookup.md): Validate phone numbers and get carrier information before sending messages - [10DLC Overview](https://www.zavu.dev/docs/guides/10dlc/overview.md): Learn about 10DLC registration requirements for sending SMS in the United States - [Brand Registration](https://www.zavu.dev/docs/guides/10dlc/brand-registration.md): Register your business brand for 10DLC SMS compliance - [Campaign Registration](https://www.zavu.dev/docs/guides/10dlc/campaigns.md): Register your messaging campaign for 10DLC SMS compliance - [Phone Number Assignment](https://www.zavu.dev/docs/guides/10dlc/phone-assignment.md): Assign phone numbers to your 10DLC campaigns - [10DLC for Sub-Accounts](https://www.zavu.dev/docs/guides/10dlc/sub-accounts.md): Register independent 10DLC brands and campaigns for each of your sub-accounts - [Sub-Accounts](https://www.zavu.dev/docs/concepts/sub-accounts.md): Isolate messaging for your customers with sub-accounts: independent API keys, spend limits, routing and reporting per tenant. - [Sub-Accounts Overview](https://www.zavu.dev/docs/guides/sub-accounts/overview.md): Create isolated messaging accounts for your customers with independent API keys - [Creating Sub-Accounts](https://www.zavu.dev/docs/guides/sub-accounts/creating.md): Provision sub-accounts for your customers with API keys and spending controls - [Managing Sub-Accounts](https://www.zavu.dev/docs/guides/sub-accounts/managing.md): Update credit limits, manage API keys, and monitor sub-account spending - [Deletion & Deactivation](https://www.zavu.dev/docs/guides/sub-accounts/deletion.md): Deactivate sub-accounts and understand the 14-day deletion grace period - [Partner Invitations](https://www.zavu.dev/docs/concepts/invitations.md): Onboard clients to connect their WhatsApp Business account or Facebook Page to your Zavu project via partner invitations. - [Onboarding Clients via Dashboard](https://www.zavu.dev/docs/guides/partner-invitations/dashboard.md): Send a client a link to connect their WhatsApp Business account or Facebook Page into your project - [Onboarding Clients via API](https://www.zavu.dev/docs/guides/partner-invitations/api.md): Programmatically create partner invitations to let clients connect their WhatsApp Business account or Facebook Page - [Sending Limits](https://www.zavu.dev/docs/concepts/sending-limits.md): How much an account can send per day, how the limits rise with verification, and what happens when a message is held or refused - [URL Verification](https://www.zavu.dev/docs/guides/url-verification/overview.md): Pre-verify URLs before sending SMS or email messages containing links - [Rate Limiting](https://www.zavu.dev/docs/concepts/rate-limiting.md): Per-project request limits on the Zavu API: the 600 requests per minute default, how it rises with verification, 429 responses, Retry-After, and how it differs from sending limits - [Data Retention](https://www.zavu.dev/docs/concepts/data-retention.md): Understanding Zavu data retention policies. Default retention windows and GDPR-compliant deletion. ## Documentation: Developer tools - [CLI overview](https://www.zavu.dev/docs/guides/cli/overview.md): Install, authenticate, and the loop you will actually live in - [npx zavudev agents](https://www.zavu.dev/docs/guides/cli/agents.md): Create, test, connect and inspect agents from the terminal - [npx zavudev functions](https://www.zavu.dev/docs/guides/cli/functions.md): Scaffold, deploy, invoke, inspect and roll back your code - [Coding Agent Skills](https://www.zavu.dev/docs/tools/coding-agent-skills.md): Give your AI coding agent intelligent context about the Zavu API with pre-built skills — works with 40+ agents - [MCP Server](https://www.zavu.dev/docs/tools/mcp-server.md): The state of the Zavu MCP server, what works in it today, and what to use instead to give a coding agent the Zavu API. - [Zavu SDKs Overview](https://www.zavu.dev/docs/sdks/overview.md): The official Zavu SDK for TypeScript and the REST API it wraps. Send SMS, WhatsApp, Email and Voice messages with one typed client, or call the API directly from any language. ## Documentation: Integrations - [Integrations](https://www.zavu.dev/docs/guides/integrations/overview.md): Use Zavu from the tools you already run, with no code to write - [n8n](https://www.zavu.dev/docs/guides/integrations/n8n.md): Send and receive messages on every Zavu channel from an n8n workflow - [Vercel Integration](https://www.zavu.dev/docs/guides/integrations/vercel.md): Connect Zavu to your Vercel projects for seamless messaging - [eve](https://www.zavu.dev/docs/guides/integrations/eve.md): Use Zavu from an agent built with eve — as an API connection today, or deploy the whole project onto Zavu. ## API v1 reference: 10DLC - [List 10DLC brands](https://www.zavu.dev/docs/api-reference/10dlc/list-10dlc-brands.md): List 10DLC brand registrations for this project. - [Create 10DLC brand](https://www.zavu.dev/docs/api-reference/10dlc/create-10dlc-brand.md): Create a 10DLC brand registration. The brand starts in draft status. Submit it for review using the submit endpoint. - [List 10DLC use cases](https://www.zavu.dev/docs/api-reference/10dlc/list-10dlc-use-cases.md): List available use cases for 10DLC campaign registration. - [Get 10DLC brand](https://www.zavu.dev/docs/api-reference/10dlc/get-10dlc-brand.md): GET /v1/10dlc/brands/{brandId} - [Update 10DLC brand](https://www.zavu.dev/docs/api-reference/10dlc/update-10dlc-brand.md): Update a 10DLC brand in draft status. Cannot update after submission. - [Delete 10DLC brand](https://www.zavu.dev/docs/api-reference/10dlc/delete-10dlc-brand.md): DELETE /v1/10dlc/brands/{brandId} - [Submit 10DLC brand for review](https://www.zavu.dev/docs/api-reference/10dlc/submit-10dlc-brand-for-review.md): Submit a draft brand to The Campaign Registry (TCR) for vetting. The brand must be in draft status, and the team must have an approved Business Verification (KYB) — carriers register a brand against a vetted legal entity, so submitting without one returns 403 with code kyb_required. - [Sync 10DLC brand status](https://www.zavu.dev/docs/api-reference/10dlc/sync-10dlc-brand-status.md): Sync the brand status with the registration provider. Use this to check for approval updates after submission. - [List 10DLC campaigns](https://www.zavu.dev/docs/api-reference/10dlc/list-10dlc-campaigns.md): List 10DLC campaign registrations for this project. - [Create 10DLC campaign](https://www.zavu.dev/docs/api-reference/10dlc/create-10dlc-campaign.md): Create a 10DLC campaign under an existing brand. The campaign starts in draft status. Submit it for carrier review using the submit endpoint. - [Get 10DLC campaign](https://www.zavu.dev/docs/api-reference/10dlc/get-10dlc-campaign.md): GET /v1/10dlc/campaigns/{campaignId} - [Update 10DLC campaign](https://www.zavu.dev/docs/api-reference/10dlc/update-10dlc-campaign.md): Update a 10DLC campaign in draft status. Cannot update after submission. - [Delete 10DLC campaign](https://www.zavu.dev/docs/api-reference/10dlc/delete-10dlc-campaign.md): DELETE /v1/10dlc/campaigns/{campaignId} - [Submit 10DLC campaign for review](https://www.zavu.dev/docs/api-reference/10dlc/submit-10dlc-campaign-for-review.md): The team must have an approved Business Verification (KYB): submitting without one returns 403 with code kyb_required. Submit a draft campaign for carrier review. The campaign must be in draft status and its brand must be verified. TCR's one-time registration fee is charged from your balance at submission ($15 for standard use cases, $2 for LOW_VOLUME), passed through at cost and refunded if the carrier rejects it. Once approved, the campaign's monthly TCR fee ($10 standard, $2 LOW_VOLUME) is charged from your balance while the campaign is active — see registrationCostCents and monthlyFeeCents on the campaign object. - [Sync 10DLC campaign status](https://www.zavu.dev/docs/api-reference/10dlc/sync-10dlc-campaign-status.md): Sync the campaign status with the registration provider. Use this to check for approval updates after submission. - [List campaign phone number assignments](https://www.zavu.dev/docs/api-reference/10dlc/list-campaign-phone-number-assignments.md): List phone numbers assigned to a 10DLC campaign. A number that was unassigned is no longer listed. - [Assign phone number to campaign](https://www.zavu.dev/docs/api-reference/10dlc/assign-phone-number-to-campaign.md): Assign a US phone number to an approved 10DLC campaign. The campaign must be in approved status. - [Unassign phone number from campaign](https://www.zavu.dev/docs/api-reference/10dlc/unassign-phone-number-from-campaign.md): Remove a phone number assignment from a 10DLC campaign. ## API v1 reference: Account - [Get current API key context](https://www.zavu.dev/docs/api-reference/account/get-current-api-key-context.md): Returns the project, team, and API key metadata bound to the current Bearer token. Used by CLIs and SDKs to confirm which project they will operate on. ## API v1 reference: Agent Flows - [List flows](https://www.zavu.dev/docs/api-reference/agent-flows/list-flows.md): List flows for an agent. - [Create flow](https://www.zavu.dev/docs/api-reference/agent-flows/create-flow.md): Create a new flow for an agent. - [Get flow](https://www.zavu.dev/docs/api-reference/agent-flows/get-flow.md): Get a specific flow. - [Update flow](https://www.zavu.dev/docs/api-reference/agent-flows/update-flow.md): Update a flow. - [Delete flow](https://www.zavu.dev/docs/api-reference/agent-flows/delete-flow.md): Delete a flow. Cannot delete flows with active sessions. - [Duplicate flow](https://www.zavu.dev/docs/api-reference/agent-flows/duplicate-flow.md): Create a copy of an existing flow with a new name. ## API v1 reference: Agent Knowledge Bases - [List knowledge bases](https://www.zavu.dev/docs/api-reference/agent-knowledge-bases/list-knowledge-bases.md): List knowledge bases for an agent. - [Create knowledge base](https://www.zavu.dev/docs/api-reference/agent-knowledge-bases/create-knowledge-base.md): Create a new knowledge base for an agent. - [Get knowledge base](https://www.zavu.dev/docs/api-reference/agent-knowledge-bases/get-knowledge-base.md): Get a specific knowledge base. - [Update knowledge base](https://www.zavu.dev/docs/api-reference/agent-knowledge-bases/update-knowledge-base.md): Update a knowledge base. - [Delete knowledge base](https://www.zavu.dev/docs/api-reference/agent-knowledge-bases/delete-knowledge-base.md): Delete a knowledge base and all its documents. - [List documents](https://www.zavu.dev/docs/api-reference/agent-knowledge-bases/list-documents.md): List documents in a knowledge base. - [Create document](https://www.zavu.dev/docs/api-reference/agent-knowledge-bases/create-document.md): Add a document to a knowledge base. The document will be automatically processed for RAG. - [Get document](https://www.zavu.dev/docs/api-reference/agent-knowledge-bases/get-document.md): Get a single document from a knowledge base. - [Update document](https://www.zavu.dev/docs/api-reference/agent-knowledge-bases/update-document.md): Update a document's title or content. Updating content reprocesses the document for RAG. - [Delete document](https://www.zavu.dev/docs/api-reference/agent-knowledge-bases/delete-document.md): Delete a document from a knowledge base. ## API v1 reference: Agent Tools - [List tools](https://www.zavu.dev/docs/api-reference/agent-tools/list-tools.md): List tools for an agent. - [Create tool](https://www.zavu.dev/docs/api-reference/agent-tools/create-tool.md): Create a new tool for an agent. Tools allow the agent to call external webhooks. - [Get tool](https://www.zavu.dev/docs/api-reference/agent-tools/get-tool.md): Get a specific tool. - [Update tool](https://www.zavu.dev/docs/api-reference/agent-tools/update-tool.md): Update a tool. - [Delete tool](https://www.zavu.dev/docs/api-reference/agent-tools/delete-tool.md): Delete a tool. - [Test tool](https://www.zavu.dev/docs/api-reference/agent-tools/test-tool.md): Run a tool with the parameters you supply and return what it answered. - [List tool test runs](https://www.zavu.dev/docs/api-reference/agent-tools/list-tool-test-runs.md): Recent runs of this tool triggered from the test endpoint, newest first. Covers manual tests only: a tool called by an agent during a real conversation is not recorded here. - [Rotate a tool's webhook secret](https://www.zavu.dev/docs/api-reference/agent-tools/rotate-a-tools-webhook-secret.md): Generate a new signing secret for this tool. The previous one stops working on the next call, with no overlap, so update your endpoint first. The tool keeps its id, so flows that reference it by name are unaffected. ## API v1 reference: Agents - [Get agent](https://www.zavu.dev/docs/api-reference/agents/get-agent.md): Get the AI agent configuration for a sender. - [Create agent](https://www.zavu.dev/docs/api-reference/agents/create-agent.md): Create an AI agent for a sender. Each sender can have at most one agent. - [Update agent](https://www.zavu.dev/docs/api-reference/agents/update-agent.md): Update an AI agent's configuration. - [Delete agent](https://www.zavu.dev/docs/api-reference/agents/delete-agent.md): Delete the agent created on this sender. A sender that is only connected to an agent through POST /v1/agents/{agentId}/senders is refused with 409: deleting there would remove the agent from every sender it answers on. Disconnect it with DELETE /v1/agents/{agentId}/senders/{senderId}, or delete the agent with DELETE /v1/agents/{agentId}. - [Get agent statistics](https://www.zavu.dev/docs/api-reference/agents/get-agent-statistics.md): Get statistics for an AI agent including invocations, tokens, and costs. - [List agent executions](https://www.zavu.dev/docs/api-reference/agents/list-agent-executions.md): List recent agent executions with pagination. - [Get a single agent execution](https://www.zavu.dev/docs/api-reference/agents/get-a-single-agent-execution.md): Fetch full details for one execution — including errorMessage, errorCode, and responseText. Use this to debug failures surfaced by the list endpoint. - [List factory agents](https://www.zavu.dev/docs/api-reference/agents/list-factory-agents.md): List the factory agents available to scaffold with npx zavudev agents pull. Each entry is a ready-made voice or text agent (system prompt, skills, and — for voice agents — a co-located voice config). - [Get a factory agent](https://www.zavu.dev/docs/api-reference/agents/get-a-factory-agent.md): Fetch a single factory agent fully rendered: the function files to scaffold (an index.ts that declares the agent with defineAgent and its skills with defineTool) plus the secrets it needs. This is what npx zavudev agents pull writes to disk before npx zavudev deploy. - [List agents](https://www.zavu.dev/docs/api-reference/agents/list-agents.md): Every agent in the project, newest first — including agents that are not connected to any sender yet, which the sender-scoped routes cannot reach. Each item carries senderIds, the senders the agent answers on. - [Create a standalone agent](https://www.zavu.dev/docs/api-reference/agents/create-a-standalone-agent.md): Create an agent without a sender. It is created disabled; connect a sender and enable it when you are ready for it to answer. - [Get an agent](https://www.zavu.dev/docs/api-reference/agents/get-an-agent.md): GET /v1/agents/{agentId} - [Update an agent](https://www.zavu.dev/docs/api-reference/agents/update-an-agent.md): PATCH /v1/agents/{agentId} - [Delete an agent](https://www.zavu.dev/docs/api-reference/agents/delete-an-agent.md): DELETE /v1/agents/{agentId} - [Test an agent](https://www.zavu.dev/docs/api-reference/agents/test-an-agent.md): Run the agent's prompt, model and knowledge base against a message and return the reply instead of delivering it. Nothing is delivered and no execution is recorded. - [Connect a sender to an agent](https://www.zavu.dev/docs/api-reference/agents/connect-a-sender-to-an-agent.md): Make the agent answer on this sender. An agent can serve several senders; a sender answers with at most one agent, so connecting one that is already in use returns 400 naming the agent that holds it. - [Disconnect a sender from an agent](https://www.zavu.dev/docs/api-reference/agents/disconnect-a-sender-from-an-agent.md): Stop the agent answering on this sender. The agent's primary sender is part of the agent itself and cannot be disconnected here. - [List agent voices](https://www.zavu.dev/docs/api-reference/agents/list-agent-voices.md): The voices an agent can speak with, for voice.ttsVoiceId. Filter by language to get the ones that speak it; a voice can still be used with language: auto, where the agent follows the caller and keeps the chosen voice. ## API v1 reference: Balance - [Get balance](https://www.zavu.dev/docs/api-reference/balance/get-balance.md): Get balance for the API key's team. If the API key belongs to a sub-account, also includes the sub-account's total spending and credit limit. Also reports the team's app-message allowance, whether it is paused and why, pay as you go and the spend cap, and how many incoming messages are held: the way to learn that customers are writing without sending anything. ## API v1 reference: Broadcasts - [List broadcasts](https://www.zavu.dev/docs/api-reference/list-broadcasts.md): List broadcasts for this project. - [Create broadcast](https://www.zavu.dev/docs/api-reference/create-broadcast.md): Create a new broadcast campaign. Add contacts after creation, then send. - [Get broadcast](https://www.zavu.dev/docs/api-reference/get-broadcast.md): GET /v1/broadcasts/{broadcastId} - [Update broadcast](https://www.zavu.dev/docs/api-reference/update-broadcast.md): Update a broadcast in draft status. - [Delete broadcast](https://www.zavu.dev/docs/api-reference/delete-broadcast.md): Delete a broadcast in draft status. - [List broadcast contacts](https://www.zavu.dev/docs/api-reference/list-broadcast-contacts.md): List contacts in a broadcast with optional status filter. - [Add contacts to broadcast](https://www.zavu.dev/docs/api-reference/add-contacts-to-broadcast.md): Add contacts to a broadcast in batch. Maximum 1000 contacts per request. - [Remove contact from broadcast](https://www.zavu.dev/docs/api-reference/remove-contact-from-broadcast.md): Remove a contact from a broadcast in draft status. - [Send broadcast](https://www.zavu.dev/docs/api-reference/send-broadcast.md): Start sending the broadcast immediately or schedule for later. - [Reschedule broadcast](https://www.zavu.dev/docs/api-reference/reschedule-broadcast.md): Update the scheduled time for a broadcast. The broadcast must be in scheduled status. - [Cancel broadcast](https://www.zavu.dev/docs/api-reference/cancel-broadcast.md): Cancel a broadcast. Pending contacts will be skipped, but already queued messages may still be delivered. - [Retry broadcast review](https://www.zavu.dev/docs/api-reference/retry-broadcast-review.md): Resubmit a rejected broadcast for AI review after editing content. Maximum 3 review attempts allowed per broadcast. - [Escalate to manual review](https://www.zavu.dev/docs/api-reference/escalate-to-manual-review.md): Request manual review by the Zavu team for a rejected broadcast. Use this after automated review rejection if you believe the content is legitimate. - [Get broadcast progress](https://www.zavu.dev/docs/api-reference/get-broadcast-progress.md): Get real-time progress of a broadcast including delivery counts and estimated completion time. ## API v1 reference: Contacts - [List contacts](https://www.zavu.dev/docs/api-reference/list-contacts.md): List contacts with their communication channels. - [Create contact](https://www.zavu.dev/docs/api-reference/create-contact.md): Create a new contact with one or more communication channels. - [Get contact](https://www.zavu.dev/docs/api-reference/get-contact.md): GET /v1/contacts/{contactId} - [Update contact](https://www.zavu.dev/docs/api-reference/update-contact.md): PATCH /v1/contacts/{contactId} - [Delete contact](https://www.zavu.dev/docs/api-reference/delete-contact.md): Permanently delete a contact and its communication channels. Implements right-to-erasure obligations under GDPR Art. 17, Ley 19.628 (Chile) Art. 12, CCPA § 1798.105, and LGPD Art. 18.VI. The contact, its channels and any associated agent flow sessions are removed. Conversation threads, message history and broadcast delivery logs are kept and no longer reference the deleted contact. - [Get contact by phone number](https://www.zavu.dev/docs/api-reference/get-contact-by-phone-number.md): GET /v1/contacts/phone/{phoneNumber} - [Add channel to contact](https://www.zavu.dev/docs/api-reference/add-channel-to-contact.md): Add a new communication channel to an existing contact. - [Update channel](https://www.zavu.dev/docs/api-reference/update-channel.md): Update a contact's channel properties. - [Remove channel from contact](https://www.zavu.dev/docs/api-reference/remove-channel-from-contact.md): Remove a communication channel from a contact. Cannot remove the last channel. - [Set channel as primary](https://www.zavu.dev/docs/api-reference/set-channel-as-primary.md): Set a channel as the primary channel for its type. - [Merge contacts](https://www.zavu.dev/docs/api-reference/merge-contacts.md): Merge a source contact into this contact. All channels from the source contact will be moved to the target contact, and the source contact will be marked as merged. ## API v1 reference: Conversations - [List conversations](https://www.zavu.dev/docs/api-reference/conversations/list-conversations.md): List inbox threads, most recently active first. A conversation groups every message with one contact across channels, which is what you need to build an inbox: GET /v1/messages returns a flat log with no thread to hang it on. - [Get conversation](https://www.zavu.dev/docs/api-reference/conversations/get-conversation.md): GET /v1/conversations/{conversationId} - [List conversation messages](https://www.zavu.dev/docs/api-reference/conversations/list-conversation-messages.md): Messages in this thread, newest first, across every channel it has carried. Reply with POST /v1/messages, passing the conversation's senderId as the Zavu-Sender header so the answer leaves from the number the contact already knows. - [Mark conversation as read](https://www.zavu.dev/docs/api-reference/conversations/mark-conversation-as-read.md): Reset the thread's unreadCount to zero. Marks the thread read in your own inbox only: it does not send a read receipt to the contact. ## API v1 reference: Email Domains - [List email domains](https://www.zavu.dev/docs/api-reference/email-domains/list-email-domains.md): GET /v1/email-domains - [Add an email domain](https://www.zavu.dev/docs/api-reference/email-domains/add-an-email-domain.md): Add a domain to send email from. Returns the DNS records to publish (DKIM CNAMEs are required; SPF, DMARC, and MAIL FROM are recommended). Publish them at your DNS provider, then verify. - [Get an email domain](https://www.zavu.dev/docs/api-reference/email-domains/get-an-email-domain.md): Fetch a domain with its DNS records and current status. - [Remove an email domain](https://www.zavu.dev/docs/api-reference/email-domains/remove-an-email-domain.md): DELETE /v1/email-domains/{domainId} - [Verify an email domain](https://www.zavu.dev/docs/api-reference/email-domains/verify-an-email-domain.md): Re-check the domain's published DNS records and refresh its status. ## API v1 reference: Functions - [List function event types](https://www.zavu.dev/docs/api-reference/functions/list-function-event-types.md): List the event types a function trigger can subscribe to. Includes the special type cron, which fires on a schedule (see POST /v1/functions/{functionId}/triggers) rather than on a messaging event. - [List function triggers](https://www.zavu.dev/docs/api-reference/functions/list-function-triggers.md): GET /v1/functions/{functionId}/triggers - [Create function triggers](https://www.zavu.dev/docs/api-reference/functions/create-function-triggers.md): Subscribe a function to one or more event types, optionally scoped to specific senders. Provide eventTypes and senderIds (use null in senderIds for all senders); a trigger is created for each event type and sender combination. - [Enable or disable a trigger](https://www.zavu.dev/docs/api-reference/functions/enable-or-disable-a-trigger.md): PATCH /v1/functions/triggers/{triggerId} - [Delete a trigger](https://www.zavu.dev/docs/api-reference/functions/delete-a-trigger.md): DELETE /v1/functions/triggers/{triggerId} - [List function deployments](https://www.zavu.dev/docs/api-reference/functions/list-function-deployments.md): List a function's deployment history, newest first. Source code is omitted; fetch a single deployment via GET /v1/functions/deployments/{deploymentId} for full details. - [Roll back to a previous deployment](https://www.zavu.dev/docs/api-reference/functions/roll-back-to-a-previous-deployment.md): Re-deploy a previous version by copying its source, dependencies, and runtime pin onto the function's draft, then deploying. Returns immediately with a deployment ID — poll GET /v1/functions/deployments/{deploymentId} until status is active or failed. Secrets are not rolled back. - [Create function](https://www.zavu.dev/docs/api-reference/functions/create-function.md): Create a new Zavu Function. The function starts in draft status. A dedicated API key is auto-provisioned and injected as the ZAVU_API_KEY secret so the function can call back into the Zavu API without manual setup. - [Get function](https://www.zavu.dev/docs/api-reference/functions/get-function.md): GET /v1/functions/{functionId} - [Update function draft](https://www.zavu.dev/docs/api-reference/functions/update-function-draft.md): Update an existing function. sourceCode / dependencies edit the draft without triggering a build — they go live on the next POST /v1/functions/{functionId}/deploy. httpEnabled is applied to the deployed function immediately, so turning the public endpoint on or off does not require a redeploy. - [Delete function](https://www.zavu.dev/docs/api-reference/functions/delete-function.md): Permanently delete a function and cascade: triggers, secrets, deployment history, managed agents+tools, and revoke the auto-provisioned API key. The deployed runtime and its logs are torn down asynchronously. - [Deploy function](https://www.zavu.dev/docs/api-reference/functions/deploy-function.md): Publish the function. If sourceCode or dependencies are provided in the body, they replace the current draft before deployment. Returns immediately with a deployment ID — poll GET /v1/functions/deployments/{deploymentId} until status is active or failed. - [Get deployment](https://www.zavu.dev/docs/api-reference/functions/get-deployment.md): Fetch a deployment to poll its status during a deploy. - [List function secrets](https://www.zavu.dev/docs/api-reference/functions/list-function-secrets.md): Lists every secret key set on the function. Plaintext is NEVER returned — only the last 4 characters of each value, for visual confirmation. - [Set function secret](https://www.zavu.dev/docs/api-reference/functions/set-function-secret.md): Create or update a secret on a function. Marks the function out-of-sync; the next POST /deploy re-publishes the function with the new environment. Keys must match [A-Z_][A-Z0-9_] (uppercase env-var style), be at most 64 characters, and not start with a prefix the runtime reserves: AWS_, _AWS_, LAMBDA_, _HANDLER, _X_AMZN. Those are refused with 400. - [Unset function secret](https://www.zavu.dev/docs/api-reference/functions/unset-function-secret.md): Remove a secret from a function. Doesn't take effect on the running function until the next deploy. - [Get the linked repository](https://www.zavu.dev/docs/api-reference/functions/get-the-linked-repository.md): The link and its last deploy. Never returns the webhook secret. - [Link a GitHub repository](https://www.zavu.dev/docs/api-reference/functions/link-a-github-repository.md): Bind a repository to this function so every push to branch deploys it. A function holds at most one link; linking again returns 400. - [Update the linked repository](https://www.zavu.dev/docs/api-reference/functions/update-the-linked-repository.md): Change the branch, the root directory, or whether pushes deploy. Pass at least one field. rootDir: null clears the subdirectory. - [Unlink the repository](https://www.zavu.dev/docs/api-reference/functions/unlink-the-repository.md): Remove the link. The function and its deployments stay. A manual webhook left in the repository stops being accepted, so remove it there too. - [Deploy the linked branch now](https://www.zavu.dev/docs/api-reference/functions/deploy-the-linked-branch-now.md): Fetch the linked branch and deploy it without waiting for a push. Returns immediately; follow the outcome with GET /v1/functions/{functionId}/git-link, whose lastStatus and lastError describe the run. - [Tail function logs](https://www.zavu.dev/docs/api-reference/functions/tail-function-logs.md): Fetch invocation logs for a function. Logs are paginated via nextToken. Pass startTime / endTime (Unix epoch milliseconds) to bound the window, or filterPattern to filter messages. ## API v1 reference: Introspect - [Introspect phone number](https://www.zavu.dev/docs/api-reference/introspect-phone-number.md): Validate a phone number and check if a WhatsApp conversation window is open. - [Validate email addresses](https://www.zavu.dev/docs/api-reference/validate-email-addresses.md): Heuristic email validation to run before sending: catches invalid syntax, dead domains (no MX/A records), disposable inboxes, role-based addresses (info@, contacto@, sales@), and addresses already on your project's suppression list. Use it to clean a list before a broadcast and keep your bounce rate low. ## API v1 reference: Invitations - [List invitations](https://www.zavu.dev/docs/api-reference/list-invitations.md): List partner invitations for this project. - [Create invitation](https://www.zavu.dev/docs/api-reference/create-invitation.md): Create a partner invitation link for a client to connect a Meta channel. The client opens the returned url and authorizes with Meta; the resulting sender is created in your project when they finish, and the invitation transitions to completed. - [Get project webhook](https://www.zavu.dev/docs/api-reference/get-project-webhook.md): The project webhook for the project behind the API key. webhook is null when none is configured. The secret is never returned here. - [Configure project webhook](https://www.zavu.dev/docs/api-reference/configure-project-webhook.md): Create or replace the project webhook for the project behind the API key, and activate it. The response carries the signing secret; an existing secret is kept. - [Update project webhook](https://www.zavu.dev/docs/api-reference/update-project-webhook.md): Change the URL, the events, or whether the webhook is active. The webhook must already exist. - [Remove project webhook](https://www.zavu.dev/docs/api-reference/remove-project-webhook.md): Remove the project webhook and its secret. Project events stop being delivered. - [Get invitation](https://www.zavu.dev/docs/api-reference/get-invitation.md): GET /v1/invitations/{invitationId} - [Cancel invitation](https://www.zavu.dev/docs/api-reference/cancel-invitation.md): Cancel an active invitation. The client will no longer be able to use the invitation link. ## API v1 reference: Memory - [List collections](https://www.zavu.dev/docs/api-reference/memory/list-collections.md): GET /v1/memory/collections - [Create a collection](https://www.zavu.dev/docs/api-reference/memory/create-a-collection.md): Declare a collection of JSON documents addressed by key. This is the counterpart to facts: POST /v1/memory recalls by meaning, a collection recalls by key. - [Get a collection](https://www.zavu.dev/docs/api-reference/memory/get-a-collection.md): The collection's definition: its indexes, default TTL and status. Collections are project-level, so this takes no scope. - [Update a collection](https://www.zavu.dev/docs/api-reference/memory/update-a-collection.md): Only defaultTtlSeconds can change. Indexes are fixed at creation: changing them would require rewriting every item in the collection. - [Delete a collection](https://www.zavu.dev/docs/api-reference/memory/delete-a-collection.md): Delete the collection and every item it holds, in every scope — the per-contact and per-conversation copies included. Returns immediately; the purge drains in batches and writes are refused while status is deleting. - [List items](https://www.zavu.dev/docs/api-reference/memory/list-items.md): Items in one scope of a collection, by key in lexicographic order. Narrow with prefix — key your documents so a prefix is meaningful (order:2026-08:...) and this becomes a range scan rather than a filter. - [Write items in bulk](https://www.zavu.dev/docs/api-reference/memory/write-items-in-bulk.md): Up to 25 sets and deletes in one call, in one scope. - [Get an item](https://www.zavu.dev/docs/api-reference/memory/get-an-item.md): GET /v1/memory/collections/{collection}/items/{key} - [Write an item](https://www.zavu.dev/docs/api-reference/memory/write-an-item.md): Store a JSON document under a key. Creates the collection if it does not exist — with no indexes, which query then cannot use. Declare indexes with POST /v1/memory/collections first if you need them. - [Delete an item](https://www.zavu.dev/docs/api-reference/memory/delete-an-item.md): Idempotent: deleting a key that is not there, or a key of a collection that does not exist, still answers 204. Deletes are never refused for quota reasons. - [Query items by field](https://www.zavu.dev/docs/api-reference/memory/query-items-by-field.md): Find items by an indexed field instead of by key, within one scope. - [List facts](https://www.zavu.dev/docs/api-reference/memory/list-facts.md): Every fact in a scope, newest first. This is the bookkeeping view — to actually recall something, use POST /v1/memory/search, which ranks by meaning. - [Remember a fact](https://www.zavu.dev/docs/api-reference/memory/remember-a-fact.md): Store one fact so the agent can recall it later by meaning. The text is embedded on write; retrieval is semantic, not keyword. - [Forget an entire scope](https://www.zavu.dev/docs/api-reference/memory/forget-an-entire-scope.md): Delete every fact in one scope. Returns immediately; the purge runs in batches in the background, so a list right afterwards can still show rows. - [Recall facts by meaning](https://www.zavu.dev/docs/api-reference/memory/recall-facts-by-meaning.md): Embed the query and return the closest facts in the scope, ranked by cosine similarity. - [Get Memory usage](https://www.zavu.dev/docs/api-reference/memory/get-memory-usage.md): This month's Memory consumption for the project, with the plan quotas it is measured against. Read capReached to know whether writes are currently being refused. - [Get a fact](https://www.zavu.dev/docs/api-reference/memory/get-a-fact.md): GET /v1/memory/{memoryId} - [Forget a fact](https://www.zavu.dev/docs/api-reference/memory/forget-a-fact.md): Delete one fact. Idempotent: deleting a fact that is not there, or no longer there, still answers 204. Deletes are never refused for quota reasons. ## API v1 reference: Messages - [List messages](https://www.zavu.dev/docs/api-reference/list-messages.md): List messages previously sent by this project. - [Send a message](https://www.zavu.dev/docs/api-reference/send-a-message.md): Send a message to a recipient via SMS or WhatsApp. - [Get message by ID](https://www.zavu.dev/docs/api-reference/get-message-by-id.md): GET /v1/messages/{messageId} - [Send reaction to message](https://www.zavu.dev/docs/api-reference/send-reaction-to-message.md): Send an emoji reaction to an existing WhatsApp message. Reactions are only supported for WhatsApp messages. - [Show typing indicator](https://www.zavu.dev/docs/api-reference/show-typing-indicator.md): Mark an inbound WhatsApp message as read and display a typing indicator to the user while you prepare a response. The indicator is automatically dismissed when you send a reply, or after 25 seconds — whichever comes first. Only valid for inbound WhatsApp messages. Use this when a reply will take more than a couple of seconds (LLM agent, tool call, lookup) to improve the recipient's experience. - [List message attachments](https://www.zavu.dev/docs/api-reference/list-message-attachments.md): List the stored file attachments for an email message and get a short-lived signed downloadUrl for each. Works for both inbound emails (received via message.inbound) and outbound emails you sent with attachments. Messages without stored attachments (including SMS, WhatsApp, and other channels) return an empty list. Each downloadUrl is generated fresh per request and expires — fetch the file promptly and do not cache the URL. ## API v1 reference: Phone numbers - [Get regulatory requirements](https://www.zavu.dev/docs/api-reference/get-regulatory-requirements.md): Get the regulatory information needed to buy a phone number, for one specific number or for a country and number type. Prefer phoneNumber: the response is then exactly the list the purchase of that number validates against. Pass each requirementTypes[].id back as requirementType in regulatoryRequirements on POST /v1/phone-numbers. - [Search available phone numbers](https://www.zavu.dev/docs/api-reference/search-available-phone-numbers.md): Search for available phone numbers to purchase by country and type. - [List phone numbers](https://www.zavu.dev/docs/api-reference/list-phone-numbers.md): List all phone numbers owned by this project. - [Purchase a phone number](https://www.zavu.dev/docs/api-reference/purchase-a-phone-number.md): Purchase an available phone number. Requires a paid plan: the Free plan cannot purchase phone numbers and receives 402 with code paid_plan_required. - [Get phone number](https://www.zavu.dev/docs/api-reference/get-phone-number.md): Get details of a specific phone number. - [Update phone number](https://www.zavu.dev/docs/api-reference/update-phone-number.md): Update a phone number's name or sender assignment. - [Release phone number](https://www.zavu.dev/docs/api-reference/release-phone-number.md): Release a phone number. The phone number must not be assigned to a sender. ## API v1 reference: Regulatory - [List addresses](https://www.zavu.dev/docs/api-reference/regulatory/list-addresses.md): List regulatory addresses for this project. - [Create address](https://www.zavu.dev/docs/api-reference/regulatory/create-address.md): Create a regulatory address, to use as the value of an address requirement when buying a phone number. It is registered for review when it is created, with status pending. - [Get address](https://www.zavu.dev/docs/api-reference/regulatory/get-address.md): Get a specific regulatory address. - [Delete address](https://www.zavu.dev/docs/api-reference/regulatory/delete-address.md): Delete a regulatory address from this project. Any address can be deleted, whatever its status. Phone numbers already purchased with it are not affected, and neither is information already submitted for later purchases in its country. - [List documents](https://www.zavu.dev/docs/api-reference/regulatory/list-documents.md): List regulatory documents for this project. - [Create document](https://www.zavu.dev/docs/api-reference/regulatory/create-document.md): Create a regulatory document record after uploading the file. Use the upload-url endpoint first to get an upload URL. - [Get document upload URL](https://www.zavu.dev/docs/api-reference/regulatory/get-document-upload-url.md): Get a presigned URL to upload a document file. After uploading, use the storageId to create the document record. - [Get document](https://www.zavu.dev/docs/api-reference/regulatory/get-document.md): Get a specific regulatory document. - [Delete document](https://www.zavu.dev/docs/api-reference/regulatory/delete-document.md): Delete a regulatory document. Cannot delete verified documents. ## API v1 reference: Senders - [List senders](https://www.zavu.dev/docs/api-reference/list-senders.md): GET /v1/senders - [Create sender](https://www.zavu.dev/docs/api-reference/create-sender.md): POST /v1/senders - [Get sender](https://www.zavu.dev/docs/api-reference/get-sender.md): GET /v1/senders/{senderId} - [Update sender](https://www.zavu.dev/docs/api-reference/update-sender.md): PATCH /v1/senders/{senderId} - [Delete sender](https://www.zavu.dev/docs/api-reference/delete-sender.md): Delete a sender. The project's default sender cannot be deleted while other senders exist: set another as default first. The default can be deleted when it is the project's only sender, and then the project has no default: every send that names no sender (no Zavu-Sender header) fails until another sender exists and is set as default. - [Regenerate webhook secret](https://www.zavu.dev/docs/api-reference/regenerate-webhook-secret.md): Regenerate the webhook secret for a sender. The old secret will be invalidated immediately. - [Activate a sender channel](https://www.zavu.dev/docs/api-reference/senders/activate-a-sender-channel.md): Switch on the account connected to this sender for one channel, so it sends and receives. This is the same switch as Activate on the dashboard's Accounts screen, with the same price and the same limits. - [Deactivate a sender channel](https://www.zavu.dev/docs/api-reference/senders/deactivate-a-sender-channel.md): Switch off the account connected to this sender for one channel. Sends on it are refused and it leaves the sender's channels. The account stays connected, so activating it again needs no reconnection. - [Get WhatsApp Business profile](https://www.zavu.dev/docs/api-reference/get-whatsapp-business-profile.md): Get the WhatsApp Business profile for a sender. The sender must have a WhatsApp Business Account connected. - [Update WhatsApp Business profile](https://www.zavu.dev/docs/api-reference/update-whatsapp-business-profile.md): Update the WhatsApp Business profile for a sender. The sender must have a WhatsApp Business Account connected. - [Upload WhatsApp Business profile picture](https://www.zavu.dev/docs/api-reference/upload-whatsapp-business-profile-picture.md): Upload a new profile picture for the WhatsApp Business profile. The image will be uploaded to Meta and set as the profile picture. - [Connect Telegram](https://www.zavu.dev/docs/api-reference/senders/connect-telegram.md): Connect a Telegram bot to a sender. Provide the bot token from @BotFather; Zavu validates it, registers the webhook, and routes the sender's Telegram messages through it. - [Disconnect Telegram](https://www.zavu.dev/docs/api-reference/senders/disconnect-telegram.md): Disconnect Telegram from a sender and remove the webhook. ## API v1 reference: Sub-Accounts - [List sub-accounts](https://www.zavu.dev/docs/api-reference/sub-accounts/list-sub-accounts.md): List sub-accounts for this team. Requires a parent project API key; sub-account API keys receive HTTP 403. - [Create sub-account](https://www.zavu.dev/docs/api-reference/sub-accounts/create-sub-account.md): Create a new sub-account (project) with its own API key. All charges are billed to the parent team's balance. Use creditLimit to set a spending cap. The sub-account's API key is returned only in the creation response. Requires a parent project API key; sub-account API keys receive HTTP 403. - [Get sub-account](https://www.zavu.dev/docs/api-reference/sub-accounts/get-sub-account.md): Get sub-account. Requires a parent project API key; sub-account API keys receive HTTP 403. - [Update sub-account](https://www.zavu.dev/docs/api-reference/sub-accounts/update-sub-account.md): Update sub-account. Requires a parent project API key; sub-account API keys receive HTTP 403. - [Deactivate sub-account](https://www.zavu.dev/docs/api-reference/sub-accounts/deactivate-sub-account.md): Deactivate a sub-account. Remaining balance is returned to the parent team and all API keys are revoked. Requires a parent project API key; sub-account API keys receive HTTP 403. - [Get sub-account spending](https://www.zavu.dev/docs/api-reference/sub-accounts/get-sub-account-spending.md): Get spending information for a sub-account. Returns the parent team's balance, the sub-account's total spending, and its credit limit (spending cap). Requires a parent project API key; sub-account API keys receive HTTP 403. - [List sub-account API keys](https://www.zavu.dev/docs/api-reference/sub-accounts/list-sub-account-api-keys.md): List sub-account API keys. Requires a parent project API key; sub-account API keys receive HTTP 403. - [Create sub-account API key](https://www.zavu.dev/docs/api-reference/sub-accounts/create-sub-account-api-key.md): Create sub-account API key. Requires a parent project API key; sub-account API keys receive HTTP 403. - [Revoke sub-account API key](https://www.zavu.dev/docs/api-reference/sub-accounts/revoke-sub-account-api-key.md): Revoke sub-account API key. Requires a parent project API key; sub-account API keys receive HTTP 403. ## API v1 reference: Templates - [List templates](https://www.zavu.dev/docs/api-reference/list-templates.md): List WhatsApp message templates for this project. - [Create template](https://www.zavu.dev/docs/api-reference/create-template.md): Create a WhatsApp message template. Note: Templates must be approved by Meta before use. - [Get template](https://www.zavu.dev/docs/api-reference/get-template.md): GET /v1/templates/{templateId} - [Delete template](https://www.zavu.dev/docs/api-reference/delete-template.md): DELETE /v1/templates/{templateId} - [Sync templates from WhatsApp](https://www.zavu.dev/docs/api-reference/sync-templates-from-whatsapp.md): Reconcile this project's templates against WhatsApp. Three things happen per connected WhatsApp Business Account: templates that exist on Meta but not in Zavu are imported (or linked to an existing template with the same name), the approval status of the templates Zavu already knows about is refreshed from Meta, and their category is refreshed from Meta. - [Submit template for approval](https://www.zavu.dev/docs/api-reference/submit-template-for-approval.md): Submit a WhatsApp template to Meta for approval. The template must be in draft status and associated with a sender that has a WhatsApp Business Account configured. ## API v1 reference: URL Verification - [Escalate a rejected URL](https://www.zavu.dev/docs/api-reference/url-verification/escalate-a-rejected-url.md): Request manual review of a rejected URL. Only URLs in 'rejected' status can be escalated; the status then moves to 'escalated'. - [List verified URLs](https://www.zavu.dev/docs/api-reference/url-verification/list-verified-urls.md): List URLs that have been verified for this project. - [Submit URL for verification](https://www.zavu.dev/docs/api-reference/url-verification/submit-url-for-verification.md): Submit a URL for verification. URLs are automatically checked against Google Web Risk API. Safe URLs are auto-approved, malicious URLs are blocked. URL shorteners (bit.ly, t.co, etc.) are always blocked. - [Get URL details](https://www.zavu.dev/docs/api-reference/url-verification/get-url-details.md): Get details of a specific verified URL. ## API v1 reference: Voice Agents - [List voice calls](https://www.zavu.dev/docs/api-reference/voice-agents/list-voice-calls.md): List voice calls for this project, most recent first. Transcripts are omitted from the list; fetch a single call to get its transcript. - [Place a voice call](https://www.zavu.dev/docs/api-reference/voice-agents/place-a-voice-call.md): Place an outbound voice call answered by the voice agent configured on the sender. Zavu dials the recipient and runs the conversation through its managed voice pipeline (speech recognition, the agent's LLM, and speech synthesis, with real-time interruption handling). - [Get voice call](https://www.zavu.dev/docs/api-reference/voice-agents/get-voice-call.md): Retrieve a single voice call, including its full transcript once the conversation has produced turns. - [Hang up a voice call](https://www.zavu.dev/docs/api-reference/voice-agents/hang-up-a-voice-call.md): End an active voice call. The call must still be queued, ringing or in progress; a call that already ended answers 409. Not available with test-mode API keys. ## API v1 reference: WhatsApp Sync - [Get WhatsApp sync status](https://www.zavu.dev/docs/api-reference/whatsapp-sync/get-whatsapp-sync-status.md): Get the current sync status for a sender's WhatsApp coexistence account. Only available for senders connected in coexistence mode (WhatsApp Business App + Cloud API). - [Start history sync](https://www.zavu.dev/docs/api-reference/whatsapp-sync/start-history-sync.md): Initiate message history sync from the WhatsApp Business App. This sends a request to the account owner to approve sharing their conversation history. Only available for coexistence accounts with active status. - [Start contacts sync](https://www.zavu.dev/docs/api-reference/whatsapp-sync/start-contacts-sync.md): Initiate contact names sync from the WhatsApp Business App. This imports contact names stored in the app to Zavu. Only available for coexistence accounts with active status. ## API v2: API v2 - [API v2](https://www.zavu.dev/docs/api-v2/overview.md): A smaller Zavu API on the same engine as v1. No sender object: you send from an address. One project webhook, flat errors, and a 409 that tells you what to connect. - [Addresses and channels](https://www.zavu.dev/docs/api-v2/addresses.md): How API v2 names where a message leaves from: one entry per address and transport, how from is resolved, and how to connect, switch and remove channels. - [Webhook](https://www.zavu.dev/docs/api-v2/webhook.md): One webhook per project in API v2: configure it, read its payload, verify its signature, and switch off the v1 sender webhooks when you are ready. - [Errors](https://www.zavu.dev/docs/api-v2/errors.md): Every API v2 error is {code, message, details} at the root. The codes you will meet, what they mean, and the details keys that tell you what to do next. - [Migrate from v1](https://www.zavu.dev/docs/api-v2/migrate-from-v1.md): Move from Zavu API v1 to v2 at your own pace. v1 keeps working unchanged. What maps to what, what behaves differently, and what stays on v1. ## API v2: Agents - [List agents](https://www.zavu.dev/docs/api-v2/reference/agents/list-agents.md): GET /v2/agents - [Create an agent](https://www.zavu.dev/docs/api-v2/reference/agents/create-an-agent.md): Connect it to an address with POST /v2/agents/{agentId}/channels. - [Get an agent](https://www.zavu.dev/docs/api-v2/reference/agents/get-an-agent.md): GET /v2/agents/{agentId} - [Update an agent](https://www.zavu.dev/docs/api-v2/reference/agents/update-an-agent.md): PATCH /v2/agents/{agentId} - [Delete an agent](https://www.zavu.dev/docs/api-v2/reference/agents/delete-an-agent.md): As DELETE /v1/agents/{agentId}. - [Test an agent](https://www.zavu.dev/docs/api-v2/reference/agents/test-an-agent.md): Run the agent's prompt, model and knowledge base against a message and return the reply instead of delivering it. Nothing is delivered and no execution is recorded. - [Connect an address](https://www.zavu.dev/docs/api-v2/reference/agents/connect-an-address.md): Make the agent answer on an address. Connecting {address, type} connects the whole channel group that entry belongs to (the entries of GET /v2/channels that share its v1SenderId): the agent then answers on each transport of that group that its triggerOnChannels allows, which channels on the agent lists. type is what picks the group when two groups share the address. - [Disconnect an address](https://www.zavu.dev/docs/api-v2/reference/agents/disconnect-an-address.md): Stop the agent answering on the address. This disconnects the channel group behind {address, type}, so every transport of that group stops reaching the agent. An agent created on /v1 for a sender keeps that sender: its addresses cannot be disconnected here, and that answers 400. ## API v2: Campaigns - [List campaigns](https://www.zavu.dev/docs/api-v2/reference/campaigns/list-campaigns.md): Campaigns of this project, newest first, as GET /v1/broadcasts, each with from instead of senderId. Cursor pagination: pass nextCursor back as cursor. - [Create a campaign](https://www.zavu.dev/docs/api-v2/reference/campaigns/create-a-campaign.md): A campaign is a /v1 broadcast; the id works on /v1/broadcasts/{broadcastId}. Runs POST /v1/broadcasts with the sender resolved from from. A repeated idempotencyKey answers 409 conflict with the original in details.campaign. A channel the resolved sender does not carry (smart: no channel at all) is refused at creation with 409 no_channel, as on POST /v2/messages, rather than created and failed at send. from with a channel it does not carry (a sms campaign from: "sms_oneway") is that same 409 no_channel, in the words POST /v2/messages uses (details.connected, and sms vs sms_oneway told apart); channel only picks between senders that share an address, it never makes an existing address 404. - [Get a campaign](https://www.zavu.dev/docs/api-v2/reference/campaigns/get-a-campaign.md): GET /v2/campaigns/{campaignId} - [Delete a draft campaign](https://www.zavu.dev/docs/api-v2/reference/campaigns/delete-a-draft-campaign.md): Deletes a campaign that is still a draft, as DELETE /v1/broadcasts/{broadcastId}. Any other status is refused with 409 invalid_status (details.status): a campaign that was sent or cancelled is kept as the record of what went out, and one still in review, scheduled or sending is cancelled with POST /v2/campaigns/{campaignId}/cancel (details.recommendation). /v1 refuses the same with a 400. - [Add recipients](https://www.zavu.dev/docs/api-v2/reference/campaigns/add-recipients.md): Up to 1,000 per call. Recipients are held to the rules POST /v2/messages holds to to. Validation happens in two steps with different outcomes: - [Send or schedule a campaign](https://www.zavu.dev/docs/api-v2/reference/campaigns/send-or-schedule-a-campaign.md): Same review rules as POST /v1/broadcasts/{broadcastId}/send: a WhatsApp campaign on an approved template starts directly, email starts once automated review passes, other channels wait for a person. Omit scheduledAt to send now. - [Get campaign progress](https://www.zavu.dev/docs/api-v2/reference/campaigns/get-campaign-progress.md): GET /v2/campaigns/{campaignId}/progress - [Cancel a campaign](https://www.zavu.dev/docs/api-v2/reference/campaigns/cancel-a-campaign.md): As POST /v1/broadcasts/{broadcastId}/cancel. Recipients not yet sent are skipped; messages already queued may still be delivered. ## API v2: Channels - [List channels](https://www.zavu.dev/docs/api-v2/reference/channels/list-channels.md): Every (address, type) the project can send from, and whether it can send right now. Paginated by sender: a page holds every entry of up to limit senders, so it can hold more than limit entries. - [Connect a channel](https://www.zavu.dev/docs/api-v2/reference/channels/connect-a-channel.md): Connect a channel without buying anything, so a new project can send its first message from /v2. Returns every entry of the connected address (GET /v2/channels/{address}). - [Get the entries of one address](https://www.zavu.dev/docs/api-v2/reference/channels/get-the-entries-of-one-address.md): Every transport the address carries, one entry each. - [Activate a transport](https://www.zavu.dev/docs/api-v2/reference/channels/activate-a-transport.md): The same switch as Activate on Accounts in the dashboard, with the same price and limits: on a paid plan a month is charged at once, stated in chargedCents and monthlyCents. activated: false means it was already on and nothing was charged. - [Deactivate a transport](https://www.zavu.dev/docs/api-v2/reference/channels/deactivate-a-transport.md): Switch the connection off. It stays connected, so activating it again needs no reconnection. The month already paid is not refunded. - [Disconnect a channel](https://www.zavu.dev/docs/api-v2/reference/channels/disconnect-a-channel.md): Disconnect one (address, type). sms_oneway, telegram and voice can be disconnected here. The others answer 409 disconnect_unavailable saying what to do instead: whatsapp, instagram, messenger and email can be switched off with .../deactivate (they stay connected); two-way sms comes with the address's number. ## API v2: Contacts - [List contacts](https://www.zavu.dev/docs/api-v2/reference/contacts/list-contacts.md): List contacts with their channels. A repeated tag means all of them. - [Create a contact](https://www.zavu.dev/docs/api-v2/reference/contacts/create-a-contact.md): Create a contact with one or more channels. An identifier another contact already holds on the same channel is refused (400 duplicate_identifier, with details.conflicts[{channel, identifier, contactId}]); update the existing contact with PATCH /v2/contacts/{contactId} instead. - [Get a contact](https://www.zavu.dev/docs/api-v2/reference/contacts/get-a-contact.md): GET /v2/contacts/{contactId} - [Update a contact](https://www.zavu.dev/docs/api-v2/reference/contacts/update-a-contact.md): PATCH /v2/contacts/{contactId} - [Delete a contact](https://www.zavu.dev/docs/api-v2/reference/contacts/delete-a-contact.md): Permanently delete a contact and its channels (right to erasure). Conversations, message history and campaign delivery logs are kept and no longer reference it. ## API v2: Conversations - [List conversations](https://www.zavu.dev/docs/api-v2/reference/conversations/list-conversations.md): List inbox threads, most recently active first. Filter by from (one of your addresses) and channel. Each conversation carries from, the address it was last handled from. - [Get a conversation](https://www.zavu.dev/docs/api-v2/reference/conversations/get-a-conversation.md): GET /v2/conversations/{conversationId} - [List a conversation's messages](https://www.zavu.dev/docs/api-v2/reference/conversations/list-a-conversations-messages.md): Reply with POST /v2/messages and this conversationId. - [Mark a conversation read](https://www.zavu.dev/docs/api-v2/reference/conversations/mark-a-conversation-read.md): Resets unreadCount in your inbox. Sends no read receipt to the contact. ## API v2: Email Domains - [List email domains](https://www.zavu.dev/docs/api-v2/reference/email-domains/list-email-domains.md): Email domains of this project. - [Add an email domain](https://www.zavu.dev/docs/api-v2/reference/email-domains/add-an-email-domain.md): Add a domain to send email from. domain is validated first: a bare domain (a leading https:// and a trailing path are dropped); anything else, spaces included, is 400 with details.errors[0].path ["domain"]. Adding a domain the project already has returns it with 200 (nothing created), like POST /v2/channels. - [Get an email domain](https://www.zavu.dev/docs/api-v2/reference/email-domains/get-an-email-domain.md): The domain with its DNS records and status. - [Remove an email domain](https://www.zavu.dev/docs/api-v2/reference/email-domains/remove-an-email-domain.md): DELETE /v2/email-domains/{emailDomainId} - [Verify an email domain](https://www.zavu.dev/docs/api-v2/reference/email-domains/verify-an-email-domain.md): Re-check the domain's DNS records and refresh its status. 404 only for a domain that is not this project's; 503 verification_unavailable when the check could not run (nothing changed, retry). A domain with no DKIM records (verifiable: false) cannot verify whatever DNS says: verify runs the check (it may recover the records), and when the domain still has none it answers 409 domain_setup_failed with the same setupError the domain carries. ## API v2: Functions - [List functions](https://www.zavu.dev/docs/api-v2/reference/functions/list-functions.md): The project's functions, newest first. - [Get a function](https://www.zavu.dev/docs/api-v2/reference/functions/get-a-function.md): GET /v2/functions/{functionId} - [Configure a function](https://www.zavu.dev/docs/api-v2/reference/functions/configure-a-function.md): Name, description, timeout, memory, architecture, pause and the HTTP endpoint, with the same rules as the dashboard's Settings tab. ## API v2: Messages - [List messages](https://www.zavu.dev/docs/api-v2/reference/messages/list-messages.md): List messages of this project, newest first. - [Send a message](https://www.zavu.dev/docs/api-v2/reference/messages/send-a-message.md): Send one message. The body is the /v1 message body plus from and conversationId. There is no Zavu-Sender header. - [Get a message](https://www.zavu.dev/docs/api-v2/reference/messages/get-a-message.md): A message, with from and to naming addresses, plus attemptedChannels and riskHold. ## API v2: Numbers - [Search numbers to buy](https://www.zavu.dev/docs/api-v2/reference/numbers/search-numbers-to-buy.md): Search numbers to buy, by country and type. - [Buy a number](https://www.zavu.dev/docs/api-v2/reference/numbers/buy-a-number.md): Buy a number and make it an SMS channel in the same call. The purchase follows the same rules as POST /v1/phone-numbers, including regulatory requirements, and the number comes back with SMS on. There is no separate assign step. Where it lands: when the project's default channel group has no number yet, the number joins that group (and becomes the project's first channel and default when there is none); otherwise it gets a channel group of its own. ## API v2: Templates - [List templates](https://www.zavu.dev/docs/api-v2/reference/templates/list-templates.md): GET /v2/templates - [Create a template](https://www.zavu.dev/docs/api-v2/reference/templates/create-a-template.md): POST /v2/templates - [Get a template](https://www.zavu.dev/docs/api-v2/reference/templates/get-a-template.md): GET /v2/templates/{templateId} - [Delete a template](https://www.zavu.dev/docs/api-v2/reference/templates/delete-a-template.md): As DELETE /v1/templates/{templateId}. - [Submit a template to WhatsApp](https://www.zavu.dev/docs/api-v2/reference/templates/submit-a-template-to-whatsapp.md): Submit a draft template to Meta for approval, naming the WhatsApp number by its address (from). ## API v2: Webhook - [Get the project webhook](https://www.zavu.dev/docs/api-v2/reference/webhook/get-the-project-webhook.md): One webhook for the whole project and every event, message., conversation.new and call. included. Payloads name addresses (from, to) and the transport (type), never a sender id; see WebhookPayloadV2. - [Create or replace the project webhook](https://www.zavu.dev/docs/api-v2/reference/webhook/create-or-replace-the-project-webhook.md): Create or replace the webhook. url must be HTTPS. The signature scheme defaults to v2. A webhook cannot move straight from v1 to v2, or from v2 to v1 (400): a receiver verifying the current scheme would break on the next delivery, so both directions go through v1+v2. Replacing keeps the secret. - [Remove the webhook](https://www.zavu.dev/docs/api-v2/reference/webhook/remove-the-webhook.md): Remove the /v2 webhook and its secret. /v1 sender webhooks are not touched, including any disableSenderWebhooks switched off: they stay off. - [Rotate the webhook secret](https://www.zavu.dev/docs/api-v2/reference/webhook/rotate-the-webhook-secret.md): POST /v2/webhook/secret ## TypeScript SDK: TypeScript SDK - [TypeScript SDK Overview](https://www.zavu.dev/docs/sdks/typescript/overview.md): Official Zavu SDK for Node.js and TypeScript. Send SMS, WhatsApp, Email and Voice with full type safety, retries and idempotency built in. - [API v2](https://www.zavu.dev/docs/sdks/typescript/v2.md): Call Zavu API v2 from the TypeScript SDK as client.v2: send from an address, connect channels, and read flat errors, with the same client and API key as v1. - [Send Messages with the TypeScript SDK](https://www.zavu.dev/docs/sdks/typescript/messages.md): Send and manage SMS, WhatsApp, Email, and Voice messages with the Zavu TypeScript SDK. - [Templates](https://www.zavu.dev/docs/sdks/typescript/templates.md): Create, list and submit WhatsApp message templates via the Zavu TypeScript SDK. Manage variables, categories and approval status from your code. - [Manage Senders with the TypeScript SDK](https://www.zavu.dev/docs/sdks/typescript/senders.md): Create, update and list sender profiles via the Zavu TypeScript SDK. Combine phone numbers, WhatsApp accounts and webhooks into routing identities. - [Contacts](https://www.zavu.dev/docs/sdks/typescript/contacts.md): Create, list, retrieve and update contacts via the Zavu TypeScript SDK. Manage profile metadata, channels and merge suggestions from your code. - [Phone Numbers](https://www.zavu.dev/docs/sdks/typescript/phone-numbers.md): Search, purchase and assign phone numbers via the Zavu TypeScript SDK. Manage SMS, WhatsApp and Voice numbers across countries with one API. - [Broadcasts](https://www.zavu.dev/docs/sdks/typescript/broadcasts.md): Create, schedule and track bulk message broadcasts via the Zavu TypeScript SDK. Add contacts, send to thousands and monitor delivery progress. - [Voice Calls with the TypeScript SDK](https://www.zavu.dev/docs/sdks/typescript/calls.md): Place outbound voice-agent calls, read transcripts, and hang up active calls via the Zavu TypeScript SDK. - [Invitations](https://www.zavu.dev/docs/sdks/typescript/invitations.md): Generate partner invitations for client WhatsApp Business onboarding via the Zavu TypeScript SDK. Track status and manage expiration. - [Sub-Accounts](https://www.zavu.dev/docs/sdks/typescript/sub-accounts.md): Create and manage isolated sub-accounts for customers via the Zavu TypeScript SDK. Independent API keys, spend limits and routing per sub-account.