Skip to main content

📱 SMSGate Python Client

Contributors Forks Stars Issues License PyPI Version

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 APIClient and asynchronous AsyncAPIClient (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 (APIError subclasses)

📦 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)

🚀 Getting Started

Prerequisites

  • Python 3.9 or higher
  • An SMSGate account with API credentials
  • An Android device running the SMSGate app

Quick Setup

  1. Install the library with your preferred HTTP backend:

    pip install android-sms-gateway[requests]
    
  2. Set environment variables:

    export SMSGATE_LOGIN="your-login"
    export SMSGATE_PASSWORD="your-password"
    
  3. Send your first message:

    import os
    from android_sms_gateway import client, domain
    
    message = domain.Message(
        phone_numbers=["+12025550100"],
        text_message=domain.TextMessage(text="Hello from Python"),
    )
    
    with client.APIClient(os.getenv("SMSGATE_LOGIN"), os.getenv("SMSGATE_PASSWORD")) as c:
        state = c.send(message)
        print(f"Message ID: {state.id}")
    

🔑 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)

💻 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

🗺️ Roadmap

  • Add support for batch message sending
  • Implement message scheduling
  • Add webhook signature verification
  • Support for custom HTTP headers
  • Async context manager improvements

See the open issues for a full list of proposed features and known issues.

🤝 Contributing

Contributions are welcome. Open an issue to discuss major changes before submitting a pull request; PRs target the master branch.

📞 Contact

Aleksandr Soloshenko - admin@sms-gate.app

Project Link: https://github.com/android-sms-gateway/client-py

📄 License

Distributed under the Apache License 2.0. See LICENSE.

🙏 Acknowledgments

Metadata

Release files for android-sms-gateway 4.3.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for android-sms-gateway 4.3.2
File Size Uploaded
android_sms_gateway-4.3.2.tar.gz 39.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for android-sms-gateway 4.3.2
File Interpreter ABI Platform
android_sms_gateway-4.3.2-py3-none-any.whl Python 3 none any Details

Total release size: 67.6 kB

Release files / android_sms_gateway-4.3.2.tar.gz

Download URL android_sms_gateway-4.3.2.tar.gz
Size 39.7 kB
Tags Source
SHA-256 checksum
How to use checksums
2005f30af05956c96dae20945dc6c9702167f40d5bcfda240c763e0591164fc3
BLAKE2b-256 checksum
How to use checksums
c8df7818ebdaf579e8d847ebb4007f331d935c76eb6a9cc22e50befc3f48c6e4
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 Oct 16, 2026.

Transparency log

Release files / android_sms_gateway-4.3.2-py3-none-any.whl

Download URL android_sms_gateway-4.3.2-py3-none-any.whl
Size 27.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
e973f3621cb9a766a9ab0f7e794070cae58161d16ccecb845abe182e827ffdd3
BLAKE2b-256 checksum
How to use checksums
c46a24e25314bcb1811a9fc3d376b9ce95cefed0523305574f95a32120629362
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 Oct 16, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

4.3.2 This release

2 release files

4.3.1

2 release files

4.3.0

2 release files

4.2.1

2 release files

4.2.0

2 release files

4.1.0

2 release files

4.0.0

2 release files

3.3.0

2 release files

3.2.2

2 release files

3.1.1

2 release files

3.1.0

2 release files

3.0.0

2 release files

2.1.0

2 release files

2.0.0

2 release files

1.1.1

2 release files

1.1.0

2 release files

1.0.1

2 release files

1.0.0

2 release files

0.0.3

2 release files

0.0.2

2 release 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