OneRouter Python SDK
Official Python SDK for OneRouter - Unified API for payments, SMS, email, and more.
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 |
| 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
- Documentation: https://docs.onerouter.dev
- PyPI: https://pypi.org/project/onerouter/
- GitHub: https://github.com/onerouter/onerouter-python
- Email: support@onerouter.dev
License
MIT License - see LICENSE file for details.
Related
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)
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
onerouter-2.0.6-py3-none-any.whl
(20.4 kB
view details)
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f5f0c79bee66461873b5a03519ebbccdfcb8d0ffa19d0b59073859d1c510ceb0
|
|
| MD5 |
b816995a9331e76f09259e63bfc13a34
|
|
| BLAKE2b-256 |
556c5a8837510413da8eb99ce3369eb2d7c975954cc922f9d4d905a3ad146032
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dd50a40a5e68c34cc5d2451a42c52699461b971aa2890bda30cb94e588fdb00e
|
|
| MD5 |
d77386fdd7f50cd8713e29c35094e542
|
|
| BLAKE2b-256 |
bb842f609deb9820a828a711a7fa0b63001e428bcf2ec8b407b98efada1d2566
|