waservix
WAservix WhatsApp API Gateway - official Python client: send WhatsApp messages from your own number. By Tekservix.
Python client for the WAservix WhatsApp API Gateway.
WAservix links your own WhatsApp number by QR code (the same way WhatsApp Web does) and gives you a REST API to send text, images, video, audio, documents, locations, polls and more, with webhooks for incoming messages and status updates.
- Zero dependencies (standard library only), Python 3.8+
- Works in Django, Flask, FastAPI, scripts and cron jobs
- Webhook check built in
Install
pip install waservix
Quick start
Copy your device's API key from the WAservix dashboard (Devices -> API key) and keep it on your server.
import os
from waservix import WAservix
wa = WAservix(api_key=os.environ["WASERVIX_KEY"])
result = wa.send_text("+15551234567", "Hello Aline, your order is ready")
print(result["msgId"], result["status"]) # 58213 in_progress
Sending
Messages are queued and sent one at a time per number, so each call returns right away with status: "in_progress" and a msgId.
# Image with caption
wa.send_image("+15551234567", "https://example.com/product.jpg", caption="Back in stock")
# Document
wa.send_document("+15551234567", "https://example.com/inv-1042.pdf",
file_name="Invoice-1042.pdf", caption="Your invoice")
# Anything the API supports, including groups (JID ending in @g.us)
wa.send_message("120363040000000000@g.us", text="Team meeting at 3pm")
wa.send_message("+15551234567", location={"latitude": -1.9441, "longitude": 30.0619, "name": "Our shop"})
Status, contacts and groups
info = wa.get_message_info(58213) # queued, sent, delivered, read, played or failed
check = wa.on_whatsapp("+15551234567") # {"exists": True, "jid": "..."}
conn = wa.get_status() # {"status": "connected"}
wa.edit_message(58213, "Corrected text") # own text messages, about 15 minutes
groups = wa.list_groups()
Anything else in the API reference is one call away:
wa.request("POST", "/messages/read", {"msgId": "3EB0X123456789"})
Webhooks
Set a webhook URL and events for the number in the dashboard. Each request carries X-Webhook-Signature, which equals the device's webhook secret. Flask example:
import os
from flask import Flask, request, abort
from waservix import verify_webhook
app = Flask(__name__)
@app.post("/wa/webhook")
def wa_webhook():
if not verify_webhook(request.headers.get("X-Webhook-Signature"), os.environ["WASERVIX_WEBHOOK_SECRET"]):
abort(401)
payload = request.get_json()
if payload["event"] == "messages.received":
m = payload["data"]["messages"]
print(m["key"]["cleanedSenderPn"], m["messageBody"])
return "", 200 # acknowledge fast; queue slow work
Errors
Failed calls raise WAservixError with status, message, field errors and, on 429, retry_after in seconds. A 503 means the device is reconnecting: retry shortly.
Never ship the key inside a browser or mobile app: anyone could read it. Call the API from your server.
Migrating from WaSender
WAservix accepts the same /send-message body and webhook fields as WaSender, so most integrations switch by changing the base URL and key. See the compatibility notes.
Use it responsibly
WAservix is not Meta's official WhatsApp Business Platform. There's no business verification and no per-conversation fee, but WhatsApp's spam rules apply to your number directly. Message people who expect to hear from you, warm up new numbers slowly and keep the built-in account protection on.
More from Tekservix
- SMS Gora SMS Gateway: send SMS through your own Android phones (
pip install smsgora) - AI Sales Agent: answers customers on WhatsApp and SMS using your website's content
- Website to App: turn your website into Android and iOS apps
- Also on npm:
npm install waservix
License
MIT
Metadata
Release files for waservix 1.0.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| waservix-1.0.2.tar.gz | 7.3 kB | With provenance | Details for waservix-1.0.2.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| waservix-1.0.2-py3-none-any.whl | Python 3 | none | any | Details for waservix-1.0.2-py3-none-any.whl |
Total release size: 13.9 kB
Release files / waservix-1.0.2.tar.gz
| Download URL | waservix-1.0.2.tar.gz |
|---|---|
| Size | 7.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
8134f246c204488f603ae45ea924078fb3007fef9f7c361ccabd0e1bf0872672
|
|
BLAKE2b-256 checksum How to use checksums |
7f9a58fae38bdada5c251005edf43b8f3b7bef8a63e114291fd3e447f9b6103d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 11, 2026.
Transparency logRelease files / waservix-1.0.2-py3-none-any.whl
| Download URL | waservix-1.0.2-py3-none-any.whl |
|---|---|
| Size | 6.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
7b7b0fc8636e35c8fa0dc4bfab72b8044761a1547cd13943be81342f990568ec
|
|
BLAKE2b-256 checksum How to use checksums |
fd0777f4cd3cb84c222e3e70fabb6034dbc7ae338d4acc22559a455a5b3e699e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 11, 2026.
Transparency logSecurity for waservix 1.0.2
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
Both files in this release have been uploaded with provenance metadata.
Attestation for waservix-1.0.2.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 11, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.