Device2SMS Python SDK (E2EE via Google Tink)
Project description
Device2SMS Python SDK (End-to-End Encrypted SMS)
The official Python SDK for Device2SMS.
This SDK allows you to send SMS messages through your paired Android devices using
end-to-end encryption (E2EE) powered by Google Tink.
Message content is encrypted before it leaves your application and is only
decrypted on the paired Android device.
🚀 Features
- 🔐 End-to-end encrypted SMS (E2EE)
- 📱 Uses your own Android devices to send SMS
- 🔑 Simple API-key authentication
- ♻️ Idempotent message sending
- 🧩 No key management required by the user
- 🐍 Pythonic API with minimal dependencies
📦 Requirements
- Python 3.11 or newer
- A Device2SMS account
- At least one paired Android device
- An API key created in the Device2SMS dashboard
📥 Installation
From PyPI (recommended)
pip install device2sms-sdk
Local development install
cd sdk/python
python -m venv .venv
.venv\Scripts\activate
pip install -e .
Linux / macOS
source .venv/bin/activate
Windows
.venv\Scripts\activate
🔑 Authentication
Create an API key in the Device2SMS dashboard and store it securely:
export DEVICE2SMS_API_KEY="your_api_key_here"
✉️ Sending an SMS (E2EE)
from device2sms_sdk import Device2SmsClient
client = Device2SmsClient(
base_url="https://api.device2sms.ie",
api_key="YOUR_API_KEY",
)
result = client.send_sms(
to="+353000000000",
message="Hello from Device2SMS!",
idempotency_key="order-123"
)
print(result)
Response example
{
"job_id": "f1d1b4e6-3c9a-4d6a-8b9e-1c8a9e2d1234",
"status": "queued"
}
🔐 How End-to-End Encryption Works
- The SDK calls
/v1/sms/prepare. - The backend selects an online device and returns its public encryption key.
- The SDK encrypts the message locally using Google Tink.
- Only ciphertext is sent to the backend.
- The Android device decrypts the message and sends the SMS.
Plaintext message content is never transmitted to or stored by the Device2SMS backend. Only encrypted ciphertext and non-reversible message metadata are processed server-side.
🧪 Idempotency
To safely retry requests, pass an idempotency_key:
client.send_sms(
to="+353000000000",
message="Hello again",
idempotency_key="order-123"
)
Repeated requests with the same key will not send duplicate messages.
⚠️ System Messages
Verification and test messages may be sent without E2EE for operational reasons. All user-initiated SMS messages sent via the SDK are always end-to-end encrypted.
🧯 Error Handling
All SDK errors raise Device2SmsError:
from device2sms_sdk import Device2SmsClient, Device2SmsError
try:
client.send_sms(...)
except Device2SmsError as e:
print("SMS failed:", e)
📚 Documentation & Support
- Homepage: https://device2sms.ie
- API reference: https://docs.device2sms.ie
- Support: support@device2sms.ie
🛡 Security Model Summary
| Component | Access to plaintext |
|---|---|
| Your application | ✅ Yes |
| Device2SMS backend | ❌ No |
| Android device | ✅ Yes |
| Database / logs | ❌ No |
Project details
Release history Release notifications | RSS feed
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 device2sms_sdk-0.1.2.tar.gz.
File metadata
- Download URL: device2sms_sdk-0.1.2.tar.gz
- Upload date:
- Size: 5.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b451dfbca07c82da13437f0195265037e4221af3dc77169e4cec29b8cfd3e772
|
|
| MD5 |
02c2abab622b8e70a4edbda523318737
|
|
| BLAKE2b-256 |
0153a028cd410f74a3e9cc6cd58fef2e882e41f2603e86740997cdc7da4acf6b
|
File details
Details for the file device2sms_sdk-0.1.2-py3-none-any.whl.
File metadata
- Download URL: device2sms_sdk-0.1.2-py3-none-any.whl
- Upload date:
- Size: 5.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
65dfd9b4bf35081fe94185265f7b44567b9e79d2e31536f0f0c0bef2381ce3ae
|
|
| MD5 |
d49f478fc45f3d178470549420e5e9a5
|
|
| BLAKE2b-256 |
d811aa0a7c519cdbba340f858f5bd9b083f0c1f3993b448560b419411246342c
|