Skip to main content

Unified API client for payments, subscriptions, SMS, email, and marketplace features

Project description

OneRouter Python SDK

Official Python SDK for OneRouter - Unified API for payments, SMS, email, and more.

PyPI version Python 3.8+

Installation

pip install onerouter

Quick Start

from onerouter import OneRouter

client = OneRouter(api_key="unf_live_xxx")

# Create payment
order = await client.payments.create(
    amount=500.00,
    currency="INR"
)

print(f"Order ID: {order['transaction_id']}")
print(f"Checkout URL: {order['checkout_url']}")

Features

  • Unified API: Single interface for Razorpay, PayPal, Twilio, Resend
  • Async & Sync: Support for both async/await and synchronous code
  • Automatic Retries: Built-in retry logic with exponential backoff
  • Idempotency: Prevent duplicate requests automatically
  • Type Hints: Full type support for IDE autocomplete
  • Error Handling: Comprehensive exception hierarchy

Usage Examples

Async Usage (Recommended)

import asyncio
from onerouter import OneRouter

async def main():
    async with OneRouter(api_key="unf_live_xxx") as client:
        # Create payment
        order = await client.payments.create(
            amount=500.00,
            currency="INR",
            receipt="order_123"
        )

        # Get payment status
        status = await client.payments.get(order['transaction_id'])

        # Create refund
        refund = await client.payments.refund(
            payment_id=order['provider_order_id'],
            amount=100.00  # Partial refund
        )

asyncio.run(main())

Sync Usage

from onerouter import OneRouterSync

client = OneRouterSync(api_key="unf_live_xxx")

try:
    order = client.payments.create(
        amount=500.00,
        currency="INR"
    )
    print(f"Order: {order['transaction_id']}")
finally:
    client.close()

Send SMS (Twilio)

async with OneRouter(api_key="unf_live_xxx") as client:
    # Send SMS
    sms = await client.sms.send(
        to="+1234567890",
        body="Your verification code is 123456"
    )

    print(f"Message SID: {sms['message_id']}")
    print(f"Status: {sms['status']}")

    # Check delivery status
    status = await client.sms.get(sms['message_id'])
    print(f"Delivery status: {status['status']}")

Send Email (Resend)

async with OneRouter(api_key="unf_live_xxx") as client:
    # Send email
    email = await client.email.send(
        to="user@example.com",
        subject="Welcome to OneRouter!",
        html_body="<h1>Welcome!</h1><p>Thanks for signing up.</p>",
        from_email="hello@yourdomain.com"  # Optional
    )

    print(f"Email ID: {email['email_id']}")
    print(f"Status: {email['status']}")

Subscriptions

async with OneRouter(api_key="unf_live_xxx") as client:
    # Create subscription
    subscription = await client.subscriptions.create(
        plan_id="plan_monthly_99",
        customer_notify=True,
        total_count=12
    )

    # Get subscription
    sub_details = await client.subscriptions.get(subscription['id'])

    # Cancel subscription
    await client.subscriptions.cancel(
        subscription_id=subscription['id'],
        cancel_at_cycle_end=True
    )

Payment Links

async with OneRouter(api_key="unf_live_xxx") as client:
    # Create payment link
    link = await client.payment_links.create(
        amount=999.00,
        description="Premium Plan",
        customer_email="user@example.com"
    )

    print(f"Share this link: {link['short_url']}")

Error Handling

from onerouter import (
    OneRouter,
    AuthenticationError,
    RateLimitError,
    ValidationError,
    APIError
)

async with OneRouter(api_key="unf_live_xxx") as client:
    try:
        order = await client.payments.create(amount=500.00)

    except AuthenticationError:
        print("Invalid API key")

    except RateLimitError as e:
        print(f"Rate limit exceeded. Retry after {e.retry_after} seconds")

    except ValidationError as e:
        print(f"Validation error: {e}")

    except APIError as e:
        print(f"API error ({e.status_code}): {e}")

Configuration

client = OneRouter(
    api_key="unf_live_xxx",
    base_url="https://api.onerouter.dev",  # Optional: Custom API URL
    timeout=30,                             # Optional: Request timeout (seconds)
    max_retries=3                           # Optional: Max retry attempts
)

API Reference

Payments

Method Description
payments.create(amount, currency, ...) Create a payment order
payments.get(transaction_id) Get payment details
payments.refund(payment_id, amount) Create refund

SMS

Method Description
sms.send(to, body) Send SMS message
sms.get(message_id) Get delivery status

Email

Method Description
email.send(to, subject, html_body, ...) Send email
email.get(email_id) Get email status

Subscriptions

Method Description
subscriptions.create(plan_id, ...) Create subscription
subscriptions.get(subscription_id) Get subscription details
subscriptions.cancel(subscription_id) Cancel subscription

Payment Links

Method Description
payment_links.create(amount, ...) Create payment link

Testing

# Install dev dependencies
pip install -e ".[dev]"

# Run tests
pytest

# Run with coverage
pytest --cov=onerouter tests/

Requirements

  • Python 3.8+
  • httpx
  • pydantic

Support

License

MIT License - see LICENSE file for details.

Related

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

onerouter-2.0.6.tar.gz (17.5 kB view details)

Uploaded Source

Built Distribution

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

onerouter-2.0.6-py3-none-any.whl (20.4 kB view details)

Uploaded Python 3

File details

Details for the file onerouter-2.0.6.tar.gz.

File metadata

  • Download URL: onerouter-2.0.6.tar.gz
  • Upload date:
  • Size: 17.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.9

File hashes

Hashes for onerouter-2.0.6.tar.gz
Algorithm Hash digest
SHA256 f5f0c79bee66461873b5a03519ebbccdfcb8d0ffa19d0b59073859d1c510ceb0
MD5 b816995a9331e76f09259e63bfc13a34
BLAKE2b-256 556c5a8837510413da8eb99ce3369eb2d7c975954cc922f9d4d905a3ad146032

See more details on using hashes here.

File details

Details for the file onerouter-2.0.6-py3-none-any.whl.

File metadata

  • Download URL: onerouter-2.0.6-py3-none-any.whl
  • Upload date:
  • Size: 20.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.9

File hashes

Hashes for onerouter-2.0.6-py3-none-any.whl
Algorithm Hash digest
SHA256 dd50a40a5e68c34cc5d2451a42c52699461b971aa2890bda30cb94e588fdb00e
MD5 d77386fdd7f50cd8713e29c35094e542
BLAKE2b-256 bb842f609deb9820a828a711a7fa0b63001e428bcf2ec8b407b98efada1d2566

See more details on using hashes here.

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