Skip to main content

Send SMS through your own phone's SIM via API — Django app.

Project description

ownsms

PyPI Python Django CI License: MIT

Send SMS through your own phone's SIM card via a simple REST API. ownsms is a Django app that pairs with an Android device; the device long-polls for outbound messages and dispatches them over its own SIM — like Eskiz or Play Mobile, but from your number, at your tariff, with no third-party SMS gateway.

Installation

pip install ownsms

Usage

Add the app to INSTALLED_APPS and include its URLs:

# settings.py
INSTALLED_APPS = [
    ...
    "ownsms",
]

# urls.py
from django.urls import include, path

urlpatterns = [
    path("", include("ownsms.urls")),
]

Migrate, then send an SMS with a Bearer API key:

$ python manage.py migrate
POST /api/v1/messages
Authorization: Bearer osk_<your-api-key>
Content-Type: application/json

{"to": "+998901234567", "text": "Hello from ownsms!"}

The paired Android device polls the server, picks up the message, and sends it over the SIM. See the quickstart for the full register → key → send → status flow.

Features

  • Single send — immediate or queued, with per-message from (SIM), ttl, idempotency_key, callback_url, and send_at scheduling.
  • Campaigns — one template with {var} placeholders + a recipients list, fail-fast validation, progress, and pause / resume / cancel.
  • Delivery lifecyclequeued → sending → sent → delivered | failed, expired, canceled; at-most-once (a job left uncertain by a crash is failed, never resent).
  • Webhooks — HMAC-signed, retried delivery on status transitions (off by default).
  • Per-SIM pacing — rate limits, jitter, working hours, and daily quota, synced to the device.
  • Security — API-key scopes (send / read), revocation, IP allowlist, and an audit log.
  • Sandboxis_test API keys simulate delivery without touching a device.
  • Django admin — every model registered for management.

Full endpoint reference: Swagger UI at /api/v1/docs, schema at /api/v1/openapi.yaml.

Compatibility

Tested on Python 3.11 – 3.14 and Django 4.2 – 5.2 (Django 4.2 and 5.0 require Python ≤ 3.12). Requires Python 3.11+.

Development

pip install -e ".[dev]"
pytest                 # tests
ruff check src tests   # lint
ruff format src tests  # format
tox                    # full Python × Django matrix

License

MIT

Project details


Download files

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

Source Distribution

ownsms-0.3.3.tar.gz (34.9 kB view details)

Uploaded Source

Built Distribution

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

ownsms-0.3.3-py3-none-any.whl (38.5 kB view details)

Uploaded Python 3

File details

Details for the file ownsms-0.3.3.tar.gz.

File metadata

  • Download URL: ownsms-0.3.3.tar.gz
  • Upload date:
  • Size: 34.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for ownsms-0.3.3.tar.gz
Algorithm Hash digest
SHA256 d90a1d62352be376ad2fb1bfce123ba2773350f832388400f35971be8ed59cf8
MD5 f3452ae3a09fb538f43d3527dd372277
BLAKE2b-256 394b605859a924cc7f0f702607922463bac459ff1e1b98c4a41a4b7a9e59331f

See more details on using hashes here.

Provenance

The following attestation bundles were made for ownsms-0.3.3.tar.gz:

Publisher: publish.yml on ownsms/django-ownsms

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

File details

Details for the file ownsms-0.3.3-py3-none-any.whl.

File metadata

  • Download URL: ownsms-0.3.3-py3-none-any.whl
  • Upload date:
  • Size: 38.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for ownsms-0.3.3-py3-none-any.whl
Algorithm Hash digest
SHA256 f4cae667e2dca6d920cadd2edbebf16936e455349911de965b81ef47cf68c7c3
MD5 f866682793aa3709723c846b0e84e86d
BLAKE2b-256 f260f2a47a7fceb3340ac945dd0f48ed4adb4a6f0ff9f9830ebd519578406e61

See more details on using hashes here.

Provenance

The following attestation bundles were made for ownsms-0.3.3-py3-none-any.whl:

Publisher: publish.yml on ownsms/django-ownsms

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

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page