# ZenoPay Python SDK
Modern Python SDK for ZenoPay payment API with async/sync support, order management, and disbursements.
## Installation
```bash
pip install zenopay-sdk
```
## Quick Start
```python
from elusion.zenopay import ZenoPay
from elusion.zenopay.models.order import NewOrder
from elusion.zenopay.utils import generate_order_id
# Initialize client (uses environment variables)
client = ZenoPay()
# Create order (sync)
with client:
order = NewOrder(
order_id=generate_order_id(),
buyer_email="customer@example.com",
buyer_name="John Doe",
buyer_phone="07XXXXXXXX",
amount=1000
)
response = client.orders.sync.create(order)
print(f"Order ID: {response.results.order_id}")
```
## Configuration
### Environment Variables
```bash
export ZENOPAY_API_KEY="your_api_key"
```
### Code Configuration
```python
client = ZenoPay(
api_key="your_api_key",
timeout=30.0
)
```
## Orders API
### Synchronous Operations
```python
from elusion.zenopay import ZenoPay
from elusion.zenopay.models.order import NewOrder
from elusion.zenopay.utils import generate_order_id
client = ZenoPay()
# Create order
def create_order():
with client:
order = NewOrder(
order_id=generate_order_id(),
buyer_email="test@example.com",
buyer_name="Test User",
buyer_phone="07XXXXXXXX",
amount=1000,
)
response = client.orders.sync.create(order)
return response.results.order_id
# Check status
def check_status(order_id: str):
with client:
response = client.orders.sync.check_status(order_id)
return response.results
# Check if paid
def check_payment(order_id: str):
with client:
return client.orders.sync.check_payment(order_id)
# Wait for payment completion
def wait_for_payment(order_id: str):
with client:
return client.orders.sync.wait_for_payment(order_id)
# Usage example
if __name__ == "__main__":
order_id = create_order()
status = check_status(order_id)
is_paid = check_payment(order_id)
print(f"Order: {order_id}")
print(f"Status: {status.data[0].payment_status}")
print(f"Paid: {is_paid}")
order_content = wait_for_payment(order_id)
print(f"Order completed: {order_content}")
```
### Asynchronous Operations
```python
import asyncio
from elusion.zenopay import ZenoPay
from elusion.zenopay.models.order import NewOrder
from elusion.zenopay.utils import generate_order_id
client = ZenoPay()
# Create order (async)
async def create_order_async():
async with client:
order = NewOrder(
order_id=generate_order_id(),
buyer_email="test@example.com",
buyer_name="Test User",
buyer_phone="07XXXXXXXX",
amount=1000,
webhook_url="https://example.com/webhook",
metadata={"key": "value"},
)
response = await client.orders.create(order)
return response.results.order_id
# Check status (async)
async def check_status_async(order_id: str):
async with client:
response = await client.orders.check_status(order_id)
return response.results.data[0].payment_status
# Check payment (async)
async def check_payment_async(order_id: str):
async with client:
return await client.orders.check_payment(order_id)
# Usage example
async def async_example():
order_id = await create_order_async()
status = await check_status_async(order_id)
is_paid = await check_payment_async(order_id)
print(f"Async Order: {order_id}")
print(f"Async Status: {status}")
print(f"Async Paid: {is_paid}")
asyncio.run(async_example())
```
## Disbursements API
### Mobile Money Disbursements
```python
from elusion.zenopay import ZenoPay
from elusion.zenopay.models.disbursement import NewDisbursement, UtilityCodes
from elusion.zenopay.utils import generate_order_id
client = ZenoPay()
def disburse():
response = client.disbursements.sync.disburse(
disbursement_data=NewDisbursement(
amount=5000,
pin=0000, # Your ZenoPay PIN
transid=generate_order_id(),
utilitycode=UtilityCodes.CASHIN,
utilityref="07XXXXXXXX" # Phone number
)
)
return response.results.zenopay_response.result
# Usage
if __name__ == "__main__":
result = disburse()
print(f"Disbursement result: {result}")
```
### Available Utility Codes
```python
from elusion.zenopay.models.disbursement import UtilityCodes
# Available disbursement types
UtilityCodes.CASHIN # Mobile money cash-in
# Add other available codes as needed
```
## Webhook Handling
### Basic Setup
```python
# Setup handlers
def payment_completed(event):
order_id = event.payload.order_id
reference = event.payload.reference
print(f"Payment completed: {order_id} - {reference}")
def payment_failed(event):
order_id = event.payload.order_id
print(f"Payment failed: {order_id}")
# Register handlers
client.webhooks.on_payment_completed(payment_completed)
client.webhooks.on_payment_failed(payment_failed)
# Process webhook
webhook_data = '{"order_id":"123","payment_status":"COMPLETED","reference":"REF123"}'
response = client.webhooks.process_webhook_request(webhook_data)
```
### Flask Integration
```python
from flask import Flask, request, jsonify
from elusion.zenopay import ZenoPay
app = Flask(__name__)
client = ZenoPay()
def handle_completed_payment(event):
order_id = event.payload.order_id
# Update database, send emails, etc.
print(f"Order {order_id} completed")
client.webhooks.on_payment_completed(handle_completed_payment)
@app.route('/zenopay/webhook', methods=['POST'])
def webhook():
raw_data = request.data.decode('utf-8')
response = client.webhooks.process_webhook_request(raw_data)
return jsonify({'status': response.status})
if __name__ == '__main__':
app.run()
```
### FastAPI Integration
```python
from fastapi import FastAPI, Request
from elusion.zenopay import ZenoPay
app = FastAPI()
client = ZenoPay()
def handle_completed_payment(event):
order_id = event.payload.order_id
print(f"Order {order_id} completed")
client.webhooks.on_payment_completed(handle_completed_payment)
@app.post("/zenopay/webhook")
async def webhook(request: Request):
raw_data = await request.body()
raw_data_str = raw_data.decode('utf-8')
response = client.webhooks.process_webhook_request(raw_data_str)
return {'status': response.status}
```
## Error Handling
```python
from elusion.zenopay.exceptions import (
ZenoPayError,
ZenoPayValidationError,
ZenoPayNetworkError,
ZenoPayAuthenticationError
)
try:
with client:
response = client.orders.sync.create(order)
except ZenoPayValidationError as e:
print(f"Validation error: {e.message}")
print(f"Details: {e.validation_errors}")
except ZenoPayAuthenticationError as e:
print(f"Authentication error: {e.message}")
except ZenoPayNetworkError as e:
print(f"Network error: {e.message}")
except ZenoPayError as e:
print(f"General error: {e.message}")
```
## Models
### Order Models
```python
from elusion.zenopay.models.order import NewOrder
from elusion.zenopay.utils import generate_order_id
# Create order with all fields
order = NewOrder(
order_id=generate_order_id(),
buyer_email="customer@example.com",
buyer_name="John Doe",
buyer_phone="07XXXXXXXX",
amount=1000,
webhook_url="https://yoursite.com/webhook",
metadata={
"product_id": "12345",
"campaign": "summer_sale"
}
)
# Minimal order
order = NewOrder(
order_id=generate_order_id(),
buyer_email="customer@example.com",
buyer_name="John Doe",
buyer_phone="07XXXXXXXX",
amount=1000
)
```
### Disbursement Models
```python
from elusion.zenopay.models.disbursement import NewDisbursement, UtilityCodes
from elusion.zenopay.utils import generate_order_id
# Mobile money disbursement
disbursement = NewDisbursement(
amount=5000,
pin=0000, # Your ZenoPay PIN
transid=generate_order_id(),
utilitycode=UtilityCodes.CASHIN,
utilityref="07XXXXXXXX" # Phone number
)
```
### Response Models
```python
# Order creation response
response = client.orders.sync.create(order)
print(f"Order ID: {response.results.order_id}")
# Status check response
status = client.orders.sync.check_status(order_id)
print(f"Payment Status: {status.results.data[0].payment_status}")
# Disbursement response
response = client.disbursements.sync.disburse(disbursement_data)
print(f"Result: {response.results.zenopay_response.result}")
```
## API Reference
### Order Operations
| Method | Sync | Async | Description |
| ---------------- | --------------------------------------- | ---------------------------------------- | -------------------------- |
| Create Order | `client.orders.sync.create()` | `await client.orders.create()` | Create new payment order |
| Check Status | `client.orders.sync.check_status()` | `await client.orders.check_status()` | Check order payment status |
| Check Payment | `client.orders.sync.check_payment()` | `await client.orders.check_payment()` | Returns boolean if paid |
| Wait for Payment | `client.orders.sync.wait_for_payment()` | `await client.orders.wait_for_payment()` | Poll until completed |
### Disbursement Operations
| Method | Sync | Async | Description |
| -------- | -------------------------------------- | --------------------------------------- | ----------------------- |
| Disburse | `client.disbursements.sync.disburse()` | `await client.disbursements.disburse()` | Send money disbursement |
### Webhook Events
| Event | Handler Method | Description |
| --------- | ---------------------------------------- | ------------------ |
| COMPLETED | `client.webhooks.on_payment_completed()` | Payment successful |
| FAILED | `client.webhooks.on_payment_failed()` | Payment failed |
| PENDING | `client.webhooks.on_payment_pending()` | Payment initiated |
| CANCELLED | `client.webhooks.on_payment_cancelled()` | Payment cancelled |
## Best Practices
### Context Managers
Always use context managers for proper resource cleanup:
```python
# Sync
with client:
response = client.orders.sync.create(order)
# Async
async with client:
response = await client.orders.create(order)
```
### Error Handling
Handle specific exceptions for better error management:
```python
try:
with client:
response = client.orders.sync.create(order)
except ZenoPayValidationError:
# Handle validation errors
pass
except ZenoPayNetworkError:
# Handle network issues
pass
```
### Environment Configuration
Use environment variables for sensitive configuration:
```python
# Don't hardcode credentials
client = ZenoPay(api_key=os.getenv('ZENOPAY_API_KEY'))
```
### Generate Unique Order IDs
Always use the built-in utility to generate unique order IDs:
```python
from elusion.zenopay.utils import generate_order_id
order_id = generate_order_id() # Generates UUID-based unique ID
```
## Support
- **GitHub**: [zenopay-python-sdk](https://github.com/elusionhub/zenopay-python-sdk)
- **Issues**: [Report bugs](https://github.com/elusionhub/zenopay-python-sdk/issues)
- **Email**: elusion.lab@gmail.com
## License
MIT License - see [LICENSE](LICENSE) file for details.
Raw data
{
"_id": null,
"home_page": null,
"name": "zenopay-sdk",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.8",
"maintainer_email": "Elution Hub <elusion.lab@gmail.com>",
"keywords": "africa, api, mobile-money, payments, payments-gateway, sdk, tanzania, ussd, zenopay",
"author": null,
"author_email": "Elution Hub <elusion.lab@gmail.com>",
"download_url": "https://files.pythonhosted.org/packages/15/3b/7e501fd020bdd499fac4941d1c7ea96ef4f8b9eeef659ee2efb121eb41d5/zenopay_sdk-0.3.0.tar.gz",
"platform": null,
"description": "# ZenoPay Python SDK\n\nModern Python SDK for ZenoPay payment API with async/sync support, order management, and disbursements.\n\n## Installation\n\n```bash\npip install zenopay-sdk\n```\n\n## Quick Start\n\n```python\nfrom elusion.zenopay import ZenoPay\nfrom elusion.zenopay.models.order import NewOrder\nfrom elusion.zenopay.utils import generate_order_id\n\n# Initialize client (uses environment variables)\nclient = ZenoPay()\n\n# Create order (sync)\nwith client:\n order = NewOrder(\n order_id=generate_order_id(),\n buyer_email=\"customer@example.com\",\n buyer_name=\"John Doe\",\n buyer_phone=\"07XXXXXXXX\",\n amount=1000\n )\n response = client.orders.sync.create(order)\n print(f\"Order ID: {response.results.order_id}\")\n```\n\n## Configuration\n\n### Environment Variables\n\n```bash\nexport ZENOPAY_API_KEY=\"your_api_key\"\n```\n\n### Code Configuration\n\n```python\nclient = ZenoPay(\n api_key=\"your_api_key\",\n timeout=30.0\n)\n```\n\n## Orders API\n\n### Synchronous Operations\n\n```python\nfrom elusion.zenopay import ZenoPay\nfrom elusion.zenopay.models.order import NewOrder\nfrom elusion.zenopay.utils import generate_order_id\n\nclient = ZenoPay()\n\n# Create order\ndef create_order():\n with client:\n order = NewOrder(\n order_id=generate_order_id(),\n buyer_email=\"test@example.com\",\n buyer_name=\"Test User\",\n buyer_phone=\"07XXXXXXXX\",\n amount=1000,\n )\n response = client.orders.sync.create(order)\n return response.results.order_id\n\n# Check status\ndef check_status(order_id: str):\n with client:\n response = client.orders.sync.check_status(order_id)\n return response.results\n\n# Check if paid\ndef check_payment(order_id: str):\n with client:\n return client.orders.sync.check_payment(order_id)\n\n# Wait for payment completion\ndef wait_for_payment(order_id: str):\n with client:\n return client.orders.sync.wait_for_payment(order_id)\n\n# Usage example\nif __name__ == \"__main__\":\n order_id = create_order()\n status = check_status(order_id)\n is_paid = check_payment(order_id)\n\n print(f\"Order: {order_id}\")\n print(f\"Status: {status.data[0].payment_status}\")\n print(f\"Paid: {is_paid}\")\n\n order_content = wait_for_payment(order_id)\n print(f\"Order completed: {order_content}\")\n```\n\n### Asynchronous Operations\n\n```python\nimport asyncio\nfrom elusion.zenopay import ZenoPay\nfrom elusion.zenopay.models.order import NewOrder\nfrom elusion.zenopay.utils import generate_order_id\n\nclient = ZenoPay()\n\n# Create order (async)\nasync def create_order_async():\n async with client:\n order = NewOrder(\n order_id=generate_order_id(),\n buyer_email=\"test@example.com\",\n buyer_name=\"Test User\",\n buyer_phone=\"07XXXXXXXX\",\n amount=1000,\n webhook_url=\"https://example.com/webhook\",\n metadata={\"key\": \"value\"},\n )\n response = await client.orders.create(order)\n return response.results.order_id\n\n# Check status (async)\nasync def check_status_async(order_id: str):\n async with client:\n response = await client.orders.check_status(order_id)\n return response.results.data[0].payment_status\n\n# Check payment (async)\nasync def check_payment_async(order_id: str):\n async with client:\n return await client.orders.check_payment(order_id)\n\n# Usage example\nasync def async_example():\n order_id = await create_order_async()\n status = await check_status_async(order_id)\n is_paid = await check_payment_async(order_id)\n\n print(f\"Async Order: {order_id}\")\n print(f\"Async Status: {status}\")\n print(f\"Async Paid: {is_paid}\")\n\nasyncio.run(async_example())\n```\n\n## Disbursements API\n\n### Mobile Money Disbursements\n\n```python\nfrom elusion.zenopay import ZenoPay\nfrom elusion.zenopay.models.disbursement import NewDisbursement, UtilityCodes\nfrom elusion.zenopay.utils import generate_order_id\n\nclient = ZenoPay()\n\ndef disburse():\n response = client.disbursements.sync.disburse(\n disbursement_data=NewDisbursement(\n amount=5000,\n pin=0000, # Your ZenoPay PIN\n transid=generate_order_id(),\n utilitycode=UtilityCodes.CASHIN,\n utilityref=\"07XXXXXXXX\" # Phone number\n )\n )\n return response.results.zenopay_response.result\n\n# Usage\nif __name__ == \"__main__\":\n result = disburse()\n print(f\"Disbursement result: {result}\")\n```\n\n### Available Utility Codes\n\n```python\nfrom elusion.zenopay.models.disbursement import UtilityCodes\n\n# Available disbursement types\nUtilityCodes.CASHIN # Mobile money cash-in\n# Add other available codes as needed\n```\n\n## Webhook Handling\n\n### Basic Setup\n\n```python\n# Setup handlers\ndef payment_completed(event):\n order_id = event.payload.order_id\n reference = event.payload.reference\n print(f\"Payment completed: {order_id} - {reference}\")\n\ndef payment_failed(event):\n order_id = event.payload.order_id\n print(f\"Payment failed: {order_id}\")\n\n# Register handlers\nclient.webhooks.on_payment_completed(payment_completed)\nclient.webhooks.on_payment_failed(payment_failed)\n\n# Process webhook\nwebhook_data = '{\"order_id\":\"123\",\"payment_status\":\"COMPLETED\",\"reference\":\"REF123\"}'\nresponse = client.webhooks.process_webhook_request(webhook_data)\n```\n\n### Flask Integration\n\n```python\nfrom flask import Flask, request, jsonify\nfrom elusion.zenopay import ZenoPay\n\napp = Flask(__name__)\nclient = ZenoPay()\n\ndef handle_completed_payment(event):\n order_id = event.payload.order_id\n # Update database, send emails, etc.\n print(f\"Order {order_id} completed\")\n\nclient.webhooks.on_payment_completed(handle_completed_payment)\n\n@app.route('/zenopay/webhook', methods=['POST'])\ndef webhook():\n raw_data = request.data.decode('utf-8')\n response = client.webhooks.process_webhook_request(raw_data)\n return jsonify({'status': response.status})\n\nif __name__ == '__main__':\n app.run()\n```\n\n### FastAPI Integration\n\n```python\nfrom fastapi import FastAPI, Request\nfrom elusion.zenopay import ZenoPay\n\napp = FastAPI()\nclient = ZenoPay()\n\ndef handle_completed_payment(event):\n order_id = event.payload.order_id\n print(f\"Order {order_id} completed\")\n\nclient.webhooks.on_payment_completed(handle_completed_payment)\n\n@app.post(\"/zenopay/webhook\")\nasync def webhook(request: Request):\n raw_data = await request.body()\n raw_data_str = raw_data.decode('utf-8')\n response = client.webhooks.process_webhook_request(raw_data_str)\n return {'status': response.status}\n```\n\n## Error Handling\n\n```python\nfrom elusion.zenopay.exceptions import (\n ZenoPayError,\n ZenoPayValidationError,\n ZenoPayNetworkError,\n ZenoPayAuthenticationError\n)\n\ntry:\n with client:\n response = client.orders.sync.create(order)\nexcept ZenoPayValidationError as e:\n print(f\"Validation error: {e.message}\")\n print(f\"Details: {e.validation_errors}\")\nexcept ZenoPayAuthenticationError as e:\n print(f\"Authentication error: {e.message}\")\nexcept ZenoPayNetworkError as e:\n print(f\"Network error: {e.message}\")\nexcept ZenoPayError as e:\n print(f\"General error: {e.message}\")\n```\n\n## Models\n\n### Order Models\n\n```python\nfrom elusion.zenopay.models.order import NewOrder\nfrom elusion.zenopay.utils import generate_order_id\n\n# Create order with all fields\norder = NewOrder(\n order_id=generate_order_id(),\n buyer_email=\"customer@example.com\",\n buyer_name=\"John Doe\",\n buyer_phone=\"07XXXXXXXX\",\n amount=1000,\n webhook_url=\"https://yoursite.com/webhook\",\n metadata={\n \"product_id\": \"12345\",\n \"campaign\": \"summer_sale\"\n }\n)\n\n# Minimal order\norder = NewOrder(\n order_id=generate_order_id(),\n buyer_email=\"customer@example.com\",\n buyer_name=\"John Doe\",\n buyer_phone=\"07XXXXXXXX\",\n amount=1000\n)\n```\n\n### Disbursement Models\n\n```python\nfrom elusion.zenopay.models.disbursement import NewDisbursement, UtilityCodes\nfrom elusion.zenopay.utils import generate_order_id\n\n# Mobile money disbursement\ndisbursement = NewDisbursement(\n amount=5000,\n pin=0000, # Your ZenoPay PIN\n transid=generate_order_id(),\n utilitycode=UtilityCodes.CASHIN,\n utilityref=\"07XXXXXXXX\" # Phone number\n)\n```\n\n### Response Models\n\n```python\n# Order creation response\nresponse = client.orders.sync.create(order)\nprint(f\"Order ID: {response.results.order_id}\")\n\n# Status check response\nstatus = client.orders.sync.check_status(order_id)\nprint(f\"Payment Status: {status.results.data[0].payment_status}\")\n\n# Disbursement response\nresponse = client.disbursements.sync.disburse(disbursement_data)\nprint(f\"Result: {response.results.zenopay_response.result}\")\n```\n\n## API Reference\n\n### Order Operations\n\n| Method | Sync | Async | Description |\n| ---------------- | --------------------------------------- | ---------------------------------------- | -------------------------- |\n| Create Order | `client.orders.sync.create()` | `await client.orders.create()` | Create new payment order |\n| Check Status | `client.orders.sync.check_status()` | `await client.orders.check_status()` | Check order payment status |\n| Check Payment | `client.orders.sync.check_payment()` | `await client.orders.check_payment()` | Returns boolean if paid |\n| Wait for Payment | `client.orders.sync.wait_for_payment()` | `await client.orders.wait_for_payment()` | Poll until completed |\n\n### Disbursement Operations\n\n| Method | Sync | Async | Description |\n| -------- | -------------------------------------- | --------------------------------------- | ----------------------- |\n| Disburse | `client.disbursements.sync.disburse()` | `await client.disbursements.disburse()` | Send money disbursement |\n\n### Webhook Events\n\n| Event | Handler Method | Description |\n| --------- | ---------------------------------------- | ------------------ |\n| COMPLETED | `client.webhooks.on_payment_completed()` | Payment successful |\n| FAILED | `client.webhooks.on_payment_failed()` | Payment failed |\n| PENDING | `client.webhooks.on_payment_pending()` | Payment initiated |\n| CANCELLED | `client.webhooks.on_payment_cancelled()` | Payment cancelled |\n\n## Best Practices\n\n### Context Managers\n\nAlways use context managers for proper resource cleanup:\n\n```python\n# Sync\nwith client:\n response = client.orders.sync.create(order)\n\n# Async\nasync with client:\n response = await client.orders.create(order)\n```\n\n### Error Handling\n\nHandle specific exceptions for better error management:\n\n```python\ntry:\n with client:\n response = client.orders.sync.create(order)\nexcept ZenoPayValidationError:\n # Handle validation errors\n pass\nexcept ZenoPayNetworkError:\n # Handle network issues\n pass\n```\n\n### Environment Configuration\n\nUse environment variables for sensitive configuration:\n\n```python\n# Don't hardcode credentials\nclient = ZenoPay(api_key=os.getenv('ZENOPAY_API_KEY'))\n```\n\n### Generate Unique Order IDs\n\nAlways use the built-in utility to generate unique order IDs:\n\n```python\nfrom elusion.zenopay.utils import generate_order_id\n\norder_id = generate_order_id() # Generates UUID-based unique ID\n```\n\n\n## Support\n\n- **GitHub**: [zenopay-python-sdk](https://github.com/elusionhub/zenopay-python-sdk)\n- **Issues**: [Report bugs](https://github.com/elusionhub/zenopay-python-sdk/issues)\n- **Email**: elusion.lab@gmail.com\n\n## License\n\nMIT License - see [LICENSE](LICENSE) file for details.\n",
"bugtrack_url": null,
"license": null,
"summary": "A modern Python SDK for the ZenoPay payment API",
"version": "0.3.0",
"project_urls": {
"Changelog": "https://github.com/elusionhub/zenopay-python-sdk/blob/main/CHANGELOG.md",
"Documentation": "https://github.com/elusionhub/zenopay-python-sdk#readme",
"Homepage": "https://github.com/elusionhub/zenopay-python-sdk",
"Issues": "https://github.com/elusionhub/zenopay-python-sdk/issues",
"Repository": "https://github.com/elusionhub/zenopay-python-sdk.git"
},
"split_keywords": [
"africa",
" api",
" mobile-money",
" payments",
" payments-gateway",
" sdk",
" tanzania",
" ussd",
" zenopay"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "be3f266ae404b32d4101ca99a5b9a013e707b1b6b97fd3ea50b736dd7d387597",
"md5": "797e413ad95b8ef21c03283799b094c1",
"sha256": "f07d5585575658b146a2fbc1e630223f7f68f2641c1ffa5fecfa57e345a56f57"
},
"downloads": -1,
"filename": "zenopay_sdk-0.3.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "797e413ad95b8ef21c03283799b094c1",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8",
"size": 31277,
"upload_time": "2025-07-27T07:07:13",
"upload_time_iso_8601": "2025-07-27T07:07:13.320743Z",
"url": "https://files.pythonhosted.org/packages/be/3f/266ae404b32d4101ca99a5b9a013e707b1b6b97fd3ea50b736dd7d387597/zenopay_sdk-0.3.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "153b7e501fd020bdd499fac4941d1c7ea96ef4f8b9eeef659ee2efb121eb41d5",
"md5": "736dda3463b66d9edaa695279d3034d5",
"sha256": "869d05a055e738aa2cf6042db513e3835a6cba2122913d55a55fe6a9800dc1f0"
},
"downloads": -1,
"filename": "zenopay_sdk-0.3.0.tar.gz",
"has_sig": false,
"md5_digest": "736dda3463b66d9edaa695279d3034d5",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8",
"size": 22493,
"upload_time": "2025-07-27T07:07:14",
"upload_time_iso_8601": "2025-07-27T07:07:14.768432Z",
"url": "https://files.pythonhosted.org/packages/15/3b/7e501fd020bdd499fac4941d1c7ea96ef4f8b9eeef659ee2efb121eb41d5/zenopay_sdk-0.3.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-07-27 07:07:14",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "elusionhub",
"github_project": "zenopay-python-sdk",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"requirements": [
{
"name": "black",
"specs": [
[
"==",
"25.1.0"
]
]
},
{
"name": "bump-my-version",
"specs": [
[
"==",
"1.2.0"
]
]
},
{
"name": "flake8-pyproject",
"specs": [
[
"==",
"1.2.3"
]
]
},
{
"name": "ginx",
"specs": [
[
"==",
"0.1.6"
]
]
},
{
"name": "httpx",
"specs": [
[
"==",
"0.28.1"
]
]
},
{
"name": "pip-check-updates",
"specs": [
[
"==",
"0.27.0"
]
]
},
{
"name": "pydantic",
"specs": [
[
"==",
"2.11.7"
]
]
},
{
"name": "pytest",
"specs": [
[
"==",
"8.4.1"
]
]
},
{
"name": "pytest-cov",
"specs": [
[
"==",
"6.2.1"
]
]
},
{
"name": "python-dotenv",
"specs": [
[
"==",
"1.1.1"
]
]
},
{
"name": "typing-extensions",
"specs": [
[
"==",
"4.14.0"
]
]
}
],
"lcname": "zenopay-sdk"
}