Skip to main content

rmyndharis-openwa

Official Python SDK for the OpenWA WhatsApp API Gateway.

A synchronous client built on httpx, with bundled type hints (PEP 561).

Install

pip install rmyndharis-openwa

Requires Python 3.9+. The importable module is openwa.

Usage

from openwa import OpenWAClient

client = OpenWAClient(
    base_url="https://your-gateway.example.com",
    api_key="owa_k1_…",
)

client.sessions.start("my-session")

result = client.messages.send_text("my-session", {
    "chatId": "628123456789@c.us",
    "text": "Hello from the OpenWA Python SDK!",
})
print(result["messageId"])

The client is also a context manager (it closes the underlying connection pool on exit):

with OpenWAClient(base_url="…", api_key="…") as client:
    client.messages.send_text("my-session", {"chatId": "…@c.us", "text": "hi"})

For tests, pass an httpx transport — no global monkey-patching required:

import httpx
client = OpenWAClient(base_url="…", api_key="…", transport=httpx.MockTransport(handler))

Search

GET /search is wrapped as client.search.search(params). Only q is required; the rest (sessionId, chatId, direction, type, from, dateFrom, dateTo, limit, offset) are optional. dateFrom / dateTo are epoch-ms. The active search provider (built-in DB full-text, or a plugin) answers; if none is configured the server returns 501.

res = client.search.search({"q": "invoice", "sessionId": "my-session", "limit": 20})
for hit in res["hits"]:
    print(hit["snippet"], hit["score"])

Messaging

Voice notes: pass ptt=True inside the body dict to send_audio to send a real WhatsApp voice note (PTT). Supply audio/ogg; codecs=opus audio for reliable playback; the server defaults the mimetype to that when ptt is set without one.

Errors

A non-2xx response raises a typed OpenWAApiError subclass — OpenWAAuthError (401), OpenWAForbiddenError (403), OpenWANotFoundError (404), OpenWAConflictError (409), OpenWARateLimitError (429), OpenWANotImplementedError (501) — each carrying .status and the parsed .body. A timeout raises OpenWATimeoutError.

from openwa import OpenWANotFoundError

try:
    client.sessions.get("missing")
except OpenWANotFoundError as e:
    print(e.status)  # 404

Notes

  • Use HTTPS in production — the API key is sent as X-API-Key and is bearer-equivalent.
  • The SDK does not retry, and never follows redirects (so the key is never re-sent to a redirect target). Path segments are percent-encoded; a base-URL path prefix (e.g. behind a reverse proxy) is preserved.
  • Escape hatch for endpoints the SDK does not wrap: client.request(method, path, query=…, body=…).

Releasing

Publishing to PyPI is done by the python-sdk-release.yml workflow, which authenticates with PyPI Trusted Publishing (OIDC). There is no PyPI token in the workflow or in the repository secrets: PyPI mints a short-lived credential from the GitHub OIDC token, so nothing long-lived exists to leak or rotate.

One-time setup, required before the first tag — on pypi.org, open the project's publishing settings and add a GitHub trusted publisher:

  • Owner: rmyndharis
  • Repository: OpenWA
  • Workflow name: python-sdk-release.yml

There are no repository secrets to add. Until the trusted publisher exists PyPI rejects the upload, so configure it first.

Cutting a release:

  1. Bump version in pyproject.toml and land it on main.
  2. Tag that commit py-sdk-v<version> (e.g. py-sdk-v0.2.0) and push the tag. The SDK has its own version line — the monorepo's v* tags are the app version and never trigger an SDK publish.
  3. The workflow re-runs the test suite, builds the sdist and wheel, and uploads. The artifacts published are the ones those tests passed against.

License

MIT

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

rmyndharis_openwa-0.2.0.tar.gz (33.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

rmyndharis_openwa-0.2.0-py3-none-any.whl (34.2 kB view details)

Uploaded Python 3

File details

Details for the file rmyndharis_openwa-0.2.0.tar.gz.

File metadata

  • Download URL: rmyndharis_openwa-0.2.0.tar.gz
  • Upload date:
  • Size: 33.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for rmyndharis_openwa-0.2.0.tar.gz
Algorithm Hash digest
SHA256 bc1ce83a33dbfd0cf9696b330d07683cca42315d4a9cfea80aa7c050c89ad35c
MD5 07ec59775b459f10510f8cb48659a05e
BLAKE2b-256 d8f9b6039137f9a61faf71ed0ad20cef9c63e6a387d9560fd3975236779f2859

See more details on using hashes here.

Provenance

The following attestation bundles were made for rmyndharis_openwa-0.2.0.tar.gz:

Publisher: python-sdk-release.yml on rmyndharis/OpenWA

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rmyndharis_openwa-0.2.0-py3-none-any.whl.

File metadata

File hashes

Hashes for rmyndharis_openwa-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 951fc6791b562b0515f3ad425711483ba0a125a19c5a3cc4ddd0dbe9acb2faad
MD5 4941a57c85da8ebd895ae12f265b9177
BLAKE2b-256 49e858bdfdc06aa52dceafc49862be6ab8afdf7a9f852f6577d84c5dea8c9cb8

See more details on using hashes here.

Provenance

The following attestation bundles were made for rmyndharis_openwa-0.2.0-py3-none-any.whl:

Publisher: python-sdk-release.yml on rmyndharis/OpenWA

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

0.5.0

2 files

0.4.0

2 files

0.3.0

2 files

This release

0.2.0 This release

2 files

0.1.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page