Documentation Index
Fetch the complete documentation index at: https://docs.zavu.dev/llms.txt
Use this file to discover all available pages before exploring further.
Partner invitations allow you to generate links for clients to connect their WhatsApp Business accounts to your project.
Create Invitation
invitation = client.invitations.create(
client_name="Acme Corp",
client_email="contact@acme.com",
expires_in_days=14
)
print(invitation.id) # jh7am5bng9p3v2x1k4r8
print(invitation.url) # https://dashboard.zavu.dev/invite/abc123xyz
print(invitation.status) # pending
With Phone Number Restrictions
Restrict which countries the client can register phone numbers from:
invitation = client.invitations.create(
client_name="Acme Corp",
client_email="contact@acme.com",
expires_in_days=7,
allowed_phone_countries=["US", "MX"]
)
Get Invitation
result = client.invitations.get(invitation_id="jh7am5bng9p3v2x1k4r8")
invitation = result.invitation
print(invitation.status) # pending | in_progress | completed | expired | cancelled
print(invitation.client_name) # Acme Corp
print(invitation.sender_id) # None (until completed)
print(invitation.expires_at) # 2025-01-15T00:00:00.000Z
List Invitations
result = client.invitations.list()
for invitation in result.items:
print(invitation.id, invitation.client_name, invitation.status)
Filter by Status
result = client.invitations.list(
status="pending",
limit=50
)
cursor = None
while True:
result = client.invitations.list(
limit=50,
cursor=cursor
)
for invitation in result.items:
print(invitation.id)
if not result.next_cursor:
break
cursor = result.next_cursor
Cancel Invitation
Cancel an active invitation to prevent the client from using it:
result = client.invitations.cancel(invitation_id="jh7am5bng9p3v2x1k4r8")
print(result.invitation.status) # cancelled
You cannot cancel a completed invitation. Once a sender is created, manage it through the senders API.
After Completion
When a client completes the signup flow, a sender is created in your project:
result = client.invitations.get(invitation_id="jh7am5bng9p3v2x1k4r8")
invitation = result.invitation
if invitation.status == "completed" and invitation.sender_id:
# Use the sender to send messages
client.messages.send(
to="+14155551234",
channel="whatsapp",
message_type="template",
content={
"template_id": "tmpl_xyz789",
"template_variables": {
"1": "John"
}
},
extra_headers={
"Zavu-Sender": invitation.sender_id
}
)
Full Example
import os
from zavu import Zavu
client = Zavu(api_key=os.environ["ZAVU_API_KEY"])
def onboard_client(client_name: str, client_email: str):
"""Create an invitation for a new client."""
invitation = client.invitations.create(
client_name=client_name,
client_email=client_email,
expires_in_days=7
)
print(f"Send this link to {client_name}: {invitation.url}")
return invitation
def check_invitation_status(invitation_id: str):
"""Check the status of an invitation."""
result = client.invitations.get(invitation_id=invitation_id)
invitation = result.invitation
match invitation.status:
case "pending":
print("Waiting for client to start signup")
case "in_progress":
print("Client is completing the signup flow")
case "completed":
print(f"Success! Sender ID: {invitation.sender_id}")
case "expired":
print("Invitation expired, create a new one")
case "cancelled":
print("Invitation was cancelled")
return invitation
# Usage
invitation = onboard_client("Acme Corp", "contact@acme.com")
# Later...
check_invitation_status(invitation.id)
Async Usage
import asyncio
from zavudev import AsyncZavudev
async def main():
client = AsyncZavudev()
invitation = await client.invitations.create(
client_name="Acme Corp",
client_email="contact@acme.com",
expires_in_days=7
)
print(invitation.url)
# List pending invitations
result = await client.invitations.list(status="pending")
for inv in result.items:
print(inv.client_name, inv.status)
asyncio.run(main())