Typed Python SDK for WazzAPI
Project description
WazzAPI Python SDK
Official Python SDK for WazzAPI.
Use it to send messages, manage contacts and templates, and verify incoming webhooks with a simple typed client.
What you can do with this SDK
- send direct WhatsApp messages
- list, create, update, and delete contacts
- manage message templates and preview rendered content
- verify and parse incoming WazzAPI webhooks
- work with typed request and response models
Requirements
- Python 3.10+
- a WazzAPI account
- a WazzAPI API key
Install
From PyPI:
pip install wazzapi
With uv:
uv add wazzapi
Need a WazzAPI account first?
Sign up at https://app.wazzapi.com using your Google organization account. On first sign-in, WazzAPI creates a new workspace for you automatically.
Configuration
For most integrations, you only need your API key:
WAZZAPI_API_KEY
If you plan to receive webhooks, also configure:
WAZZAPI_WEBHOOK_SECRET
The SDK uses https://api.wazzapi.com by default, so you do not need to set a base URL.
Quick start
Send a message
from wazzapi import SendMessageRequest, WazzapiClient
with WazzapiClient(api_key="your-api-key") as client:
response = client.messages.send(
SendMessageRequest(
phone_number="+6281234567890",
whatsapp_account_id="your-whatsapp-account-id",
content="Hello from WazzAPI!",
)
)
print(response.model_dump())
Error handling
When the API returns a non-success response, the SDK raises WazzapiAPIError.
from wazzapi import WazzapiAPIError, WazzapiClient
try:
with WazzapiClient(api_key="your-api-key") as client:
client.messages.get("missing-message-id")
except WazzapiAPIError as exc:
print(exc.status_code)
print(exc.message)
More usage examples
List contacts
from wazzapi import WazzapiClient
with WazzapiClient(api_key="your-api-key") as client:
response = client.contacts.list(limit=20, search="alice")
for contact in response.contacts:
print(contact.model_dump())
Create a template
from wazzapi import TemplateCreateRequest, WazzapiClient
with WazzapiClient(api_key="your-api-key") as client:
template = client.templates.create(
TemplateCreateRequest(
name="welcome-message",
category="marketing",
content="Hi {{name}}, welcome to WazzAPI!",
)
)
print(template.model_dump())
Preview a template
from wazzapi import TemplatePreviewRequest, WazzapiClient
with WazzapiClient(api_key="your-api-key") as client:
preview = client.templates.preview(
TemplatePreviewRequest(
content="Hi {{name}}, your code is {{code}}.",
custom_variables={"name": "Alice", "code": "WZ-1234"},
)
)
print(preview.model_dump())
Webhook verification
Use WebhookHandler to verify the raw request body against X-Wazzapi-Signature before parsing JSON.
from wazzapi import WebhookHandler
handler = WebhookHandler("your-webhook-secret")
webhook = handler.verify_and_parse(raw_body, request.headers)
print(webhook.event_type)
print(webhook.data.model_dump())
WazzAPI webhook headers:
X-Wazzapi-SignatureX-Wazzapi-EventX-Wazzapi-Event-ID
Supported webhook event families:
- message events:
message.received,message.sent,message.delivered,message.read,message.failed - device events:
device.connected,device.disconnected
Examples
Ready-to-run examples live in examples/:
examples/list_contacts.pyexamples/send_message.pyexamples/create_template.pyexamples/preview_template.pyexamples/verify_webhook.py
Run them with:
uv run python examples/list_contacts.py
uv run python examples/send_message.py
uv run python examples/create_template.py
uv run python examples/preview_template.py
uv run python examples/verify_webhook.py
Release automation
This repository includes a GitHub Actions workflow that publishes to PyPI automatically when a tag matching v* is pushed.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file wazzapi-0.1.1.tar.gz.
File metadata
- Download URL: wazzapi-0.1.1.tar.gz
- Upload date:
- Size: 12.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.9.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e19ec6a2fc4ee6a08fe215b103a53011908c8eb4ca6788bbddbf135a3cc6d665
|
|
| MD5 |
09d49c1d5974d08eaa900122122725af
|
|
| BLAKE2b-256 |
a2cc1403d488600bf31e309d4cf5f94f0017169804a3a001455197948551aead
|
File details
Details for the file wazzapi-0.1.1-py3-none-any.whl.
File metadata
- Download URL: wazzapi-0.1.1-py3-none-any.whl
- Upload date:
- Size: 13.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.9.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4425da08ddbb90d9f045c63fd7623b819a4df1eaa09cffb856dffe5c40d8c75b
|
|
| MD5 |
ef4bee3c9e7890f99ff146b3f4f70f1f
|
|
| BLAKE2b-256 |
5e0dd36850c02a4482755b1bb95b6a5a086182b11e864403eefb607e19d53382
|