📱 SMSGate Python Client
A modern Python client for the SMSGate API: send SMS messages through your Android devices with synchronous and asynchronous interfaces, Basic or JWT authentication, and optional end-to-end encryption. See the client libraries overview for the full ecosystem.
📖 About
android-sms-gateway is a typed Python library for the SMSGate 3rd-party API, with fully type-hinted domain models. It ships a synchronous APIClient and an asynchronous AsyncAPIClient, auto-detects the installed HTTP backend (requests, aiohttp, or httpx), and supports optional end-to-end message encryption via Encryptor (AES-256-CBC). Covers messages (SMS, data, and MMS), inbox (refresh, attachments), devices, webhooks, settings, logs, health probes, and the JWT token lifecycle.
📚 Table of Contents
⭐ Features
- Synchronous
APIClientand asynchronousAsyncAPIClient(context managers) - Basic and JWT authentication; token generate, refresh, and revoke
- HTTP backends:
requests(sync),aiohttp(async),httpx(both), auto-detected - Optional end-to-end encryption via
Encryptor(AES-256-CBC) - Webhooks, devices, settings, logs, and health probes (live, ready, startup)
- Outgoing MMS with subject, text, and base64 attachments via
MmsMessage(E2E-encrypted when configured) - Inbox refresh with webhook delivery and MMS attachment download
- Full type hints and typed exceptions (
APIErrorsubclasses)
📦 Installation
pip install android-sms-gateway
Requires Python 3.9+. Optional extras:
pip install android-sms-gateway[requests] # sync requests backend
pip install android-sms-gateway[aiohttp] # async aiohttp backend
pip install android-sms-gateway[httpx] # httpx backend (sync + async)
pip install android-sms-gateway[encryption] # end-to-end encryption (pycryptodome)
🔑 Authentication
Two methods are supported: Basic authentication with account credentials, and JWT bearer tokens with scoped permissions. Pass login=None with a token to switch to JWT.
Basic Authentication
import os
from android_sms_gateway import client, domain
login = os.getenv("SMSGATE_LOGIN")
password = os.getenv("SMSGATE_PASSWORD")
message = domain.Message(
phone_numbers=["+12025550100"],
text_message=domain.TextMessage(text="Hello from Python"),
)
with client.APIClient(login, password) as c:
state = c.send(message)
JWT Authentication
from android_sms_gateway import client, domain
with client.APIClient(login, password) as c:
token = c.generate_token(
domain.TokenRequest(scopes=["messages:send", "messages:read"], ttl=3600)
)
jwt_client = client.APIClient(None, token.access_token)
🚀 Quickstart
import os
from android_sms_gateway import client, domain
message = domain.Message(
phone_numbers=["+12025550100"],
text_message=domain.TextMessage(text="Hello from Python"),
with_delivery_report=True,
)
with client.APIClient(os.getenv("SMSGATE_LOGIN"), os.getenv("SMSGATE_PASSWORD")) as c:
state = c.send(message)
print(f"Message ID: {state.id}")
💻 Usage
Beyond sending, the client covers message listing and cancellation, inbox listing and refresh, device management, health checks, logs, settings (get, update, patch), webhooks, and the token lifecycle. See android_sms_gateway/client.py for the complete method list with signatures and android_sms_gateway/domain.py for the domain models.
📖 API Reference
- Official API Reference - endpoints, payloads, and error codes
- Authentication Guide - scopes and token management
- Client libraries overview
- Client source - full method reference and examples
🤝 Contributing
Contributions are welcome. Open an issue to discuss major changes before submitting a pull request; PRs target the master branch.
📄 License
Distributed under the Apache License 2.0. See LICENSE.
Metadata
Release files for android-sms-gateway 4.3.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| android_sms_gateway-4.3.0.tar.gz | 38.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| android_sms_gateway-4.3.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 65.5 kB
Release files / android_sms_gateway-4.3.0.tar.gz
| Download URL | android_sms_gateway-4.3.0.tar.gz |
|---|---|
| Size | 38.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
23009eace209af9a64b001b8a50dc77e900d8037efbfa9f699d69264c84c6162
|
|
BLAKE2b-256 checksum How to use checksums |
1f043a5562642ffb684067c52a39ff0f56b3d287158577dd6451d95b20d2450c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Sep 23, 2026.
Transparency logRelease files / android_sms_gateway-4.3.0-py3-none-any.whl
| Download URL | android_sms_gateway-4.3.0-py3-none-any.whl |
|---|---|
| Size | 27.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
8e2cc766b7272773b298ffe9977244808ecd6f4dc911989b83aa9da740864d16
|
|
BLAKE2b-256 checksum How to use checksums |
a7559756a8ca49097b481127de4a4f47dcba1549e7aaf8bcc0d2936060d5ee97
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Sep 23, 2026.
Transparency log