Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

Jukto (যুক্ত) Python SDK 🇧🇩

A sync and native async Python SDK for Bangladesh's SMS and courier APIs, created by Mehedi H Faysal.

CI License: MIT

Early access: 0.1.0a1. APIs may change before a stable release. Offline tests verify implementation behavior, not live provider compatibility. SSLCOMMERZ is experimental and has not completed authorized merchant lifecycle verification.

What it does

Jukto provides synchronous clients for Steadfast, Pathao, RedX, GreenWeb, AlphaSMS and BulkSMSBD. Shared interfaces and typed result models reduce adapter code; changing providers still requires their credentials, geography, required fields and a review of supported capabilities. The SDK includes py.typed; raw provider data remains dynamically typed.

Known HTTP/application errors become JuktoError subclasses. Malformed or unrecognized responses raise UnexpectedProviderResponseError; undocumented codes retain generic classifications. An accepted submission is not proof of shipment or SMS delivery. Ambiguous outcomes require reconciliation before retry.

Experimental SSLCOMMERZ hosted BDT payments are included in this alpha; see the payment guide and verification gaps. Standalone bKash and Nagad remain planned. Native asyncio clients are included for SMS, logistics and hosted payments; see the async guide for lifecycle, cancellation and FastAPI usage. Existing sync clients still block.

Provider Client Verification and setup
Steadfast SteadfastClient API-Key/Secret-Key; wire contract remains unverified
Pathao PathaoClient OAuth2, store/geography; process-local refresh and bounded replay
RedX RedXClient API-ACCESS-TOKEN; separate declared value and RedX geography
GreenWeb GreenWebClient Token; preserves per-recipient partial/unknown outcomes
AlphaSMS AlphaSMSClient API key; published submission/error codes audited
BulkSMSBD BulkSMSBDClient Legacy HTTP default is rejected; HTTPS POST and codes unverified

See the provider contract and capability matrix for evidence dates and unresolved contracts. Offline tests are implementation regressions, not live provider certification.

Install and try it offline

python -m pip install jukto==0.1.0a1

The installation command works after the alpha is published. Python 3.9+ is required; CI covers 3.9–3.15. Explicitly pin the alpha version when evaluating it.

This standalone example works with the installed package and cannot send an SMS:

import httpx
from jukto import AlphaSMSClient

def reply(request: httpx.Request) -> httpx.Response:
    return httpx.Response(200, json={"error": 0, "data": {"request_id": 123}})

with httpx.Client(transport=httpx.MockTransport(reply)) as http_client:
    with AlphaSMSClient(api_key="synthetic-example-key", http_client=http_client) as provider:
        result = provider.submit_sms("01700000000", "Synthetic offline message")
    assert not http_client.is_closed  # Injected client stays caller-owned.

print(result.status.value)  # accepted means submitted, not delivered.

For source-only framework examples and contributor checks:

git clone https://github.com/jukto-sdk/jukto-python.git
cd jukto-python
python -m venv .venv
# Activate this environment using your shell, then:
python -m pip install -e '.[dev,examples]'
python -m examples.offline_quickstart
python -m pytest tests/test_documentation_examples.py --no-cov

The quickstart uses HTTPX MockTransport and synthetic data; it cannot send an SMS. See Django and FastAPI examples for configuration, client lifetime, dependency injection and offline request tests. Production calls require your own provider account and independent contract verification.

Safety and lifecycle

Clients reuse an owned HTTP client and support with/close(). Injected clients are borrowed and remain caller-owned. HTTPS and verified TLS are the defaults; redirects are refused. Explicit allow_insecure_http=True permits legacy HTTP and exposes credentials/content in cleartext; the quickstarts do not enable it.

Debug logs contain allowlisted metadata only. response_body, result raw, and recipient evidence can contain secrets or personal data; do not log them. No operation has a generic retry or automatic provider failover. See error and reconciliation guidance.

Documentation and contribution

Local checks:

python -m ruff check .
python -m mypy
python -m pytest
python -m mkdocs build --strict

License

MIT © 2026 Mehedi Hasan Faysal.

Metadata

Release files for jukto 0.1.0a1

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

Source distribution (sdist)

Source distribution for jukto 0.1.0a1
File Size Uploaded
jukto-0.1.0a1.tar.gz 204.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for jukto 0.1.0a1
File Interpreter ABI Platform
jukto-0.1.0a1-py3-none-any.whl Python 3 none any Details

Total release size: 262.3 kB

Release files / jukto-0.1.0a1.tar.gz

Download URL jukto-0.1.0a1.tar.gz
Size 204.2 kB
Tags Source
SHA-256 checksum
How to use checksums
2e018bd7d266917560d93cd0b73eaf1336686f8bde72bb89f413df41774f6d8a
BLAKE2b-256 checksum
How to use checksums
29f45a25ffee83f2e3cc45da77bf1ba26dc375092a9c389418f2097353f75be7
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 10, 2026.

Transparency log

Release files / jukto-0.1.0a1-py3-none-any.whl

Download URL jukto-0.1.0a1-py3-none-any.whl
Size 58.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
e1951bdd0def0de0f3184ecd70ae2d3e648b368bf0122244b9ae5aa0fa8279c6
BLAKE2b-256 checksum
How to use checksums
681e4ad81012899349e9d85682117750d75e8ba758a2df27efbb657de84e5496
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 10, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.0a1 This release

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