Skip to main content

Python SDK for SagaPay - The world's first free, non-custodial blockchain payment gateway

Project description

SagaPay Python SDK

Python SDK for SagaPay - the world's first free, non-custodial blockchain payment gateway service provider. This SDK enables Python developers to seamlessly integrate cryptocurrency payments without holding customer funds. With enterprise-grade security and zero transaction fees, SagaPay empowers merchants to accept crypto payments across multiple blockchains while maintaining full control of their digital assets.

Installation

pip install sagapay

Quick Start

from sagapay import Client, NetworkType

# Initialize the SagaPay client
client = Client(
    api_key="your-api-key",
    api_secret="your-api-secret"
)

# Create a deposit address
deposit = client.create_deposit({
    "network_type": NetworkType.BEP20,
    "contract_address": "0",  # Use '0' for native tokens (BNB)
    "amount": "1.5",
    "ipn_url": "https://yourwebsite.com/webhook",
    "udf": "order-123",
    "type": "TEMPORARY"
})

print(f"Deposit address created: {deposit.address}")
print(f"Expires at: {deposit.expires_at}")

Features

  • Deposit address generation
  • Withdrawal processing
  • Transaction status checking
  • Wallet balance fetching
  • Multi-chain support (ERC20, BEP20, TRC20, POLYGON, SOLANA)
  • Webhook notifications (IPN)
  • Custom UDF field support
  • Non-custodial architecture
  • Comprehensive error handling
  • Pydantic models for type safety

API Reference

Create Deposit

deposit = client.create_deposit({
    "network_type": NetworkType.BEP20,      # Required: Blockchain network type
    "contract_address": "0",                # Required: Contract address or '0' for native coins
    "amount": "1.5",                        # Required: Expected deposit amount
    "ipn_url": "https://example.com/webhook", # Required: URL for notifications
    "udf": "order-123",                     # Optional: User-defined field
    "type": "TEMPORARY"                     # Optional: TEMPORARY or PERMANENT
})

Create Withdrawal

withdrawal = client.create_withdrawal({
    "network_type": NetworkType.ERC20,
    "contract_address": "0xdAC17F958D2ee523a2206206994597C13D831ec7", # USDT on Ethereum
    "address": "0x742d35Cc6634C0532925a3b844Bc454e4438f44e",
    "amount": "10.5",
    "ipn_url": "https://example.com/webhook",
    "udf": "withdrawal-456"
})

Check Transaction Status

status = client.check_transaction_status(
    address="0x742d35Cc6634C0532925a3b844Bc454e4438f44e",
    transaction_type=TransactionType.DEPOSIT
)

Fetch Wallet Balance

balance = client.fetch_wallet_balance(
    address="0x742d35Cc6634C0532925a3b844Bc454e4438f44e",
    network_type=NetworkType.ERC20,
    contract_address="0xdAC17F958D2ee523a2206206994597C13D831ec7" # USDT on Ethereum
)

Handling Webhooks (IPN)

SagaPay sends webhook notifications to your specified ipn_url when transaction statuses change. Use the WebhookHandler to process these notifications:

from flask import Flask, request, jsonify
from sagapay import WebhookHandler, TransactionStatus

app = Flask(__name__)

# Initialize the webhook handler
webhook_handler = WebhookHandler(api_secret="your-api-secret")

@app.route("/webhook", methods=["POST"])
def handle_webhook():
    # Get the signature from the headers
    signature = request.headers.get("x-sagapay-signature")
    
    # Get the raw request body
    payload = request.get_data()
    
    try:
        # Process and validate the webhook
        webhook = webhook_handler.process_webhook(payload, signature)
        
        # Handle different transaction statuses
        if webhook.status == TransactionStatus.COMPLETED:
            # Payment successful, update your database
            if webhook.type == "deposit":
                # Handle successful deposit
                update_order_status(webhook.udf, "paid")
            else:
                # Handle successful withdrawal
                update_withdrawal_status(webhook.udf, "completed")
        
        # Return a success response
        return jsonify({"received": True}), 200
        
    except Exception as e:
        # Log the error and return a response
        # Still return 200 to prevent retries
        return jsonify({"received": False, "error": str(e)}), 200

Webhook Payload Format

When SagaPay sends a webhook to your endpoint, it will include the following payload:

{
  "id": "transaction-uuid",
  "type": "deposit|withdrawal",
  "status": "PENDING|PROCESSING|COMPLETED|FAILED|CANCELLED",
  "address": "0x123abc...",
  "networkType": "ERC20|BEP20|TRC20|POLYGON|SOLANA",
  "amount": "10.5",
  "udf": "your-optional-user-defined-field",
  "txHash": "0xabc123...",
  "timestamp": "2025-03-16T14:30:00Z"
}

Error Handling

The SDK includes comprehensive error handling with specific exception types:

from sagapay import Client
from sagapay.exceptions import APIError, ValidationError, WebhookError, NetworkError

try:
    client = Client(api_key="your-api-key", api_secret="your-api-secret")
    deposit = client.create_deposit(params)
except ValidationError as e:
    print(f"Validation error: {e}")
except APIError as e:
    print(f"API error ({e.status_code}): {e.message}")
    if e.error_code:
        print(f"Error code: {e.error_code}")
except NetworkError as e:
    print(f"Network error: {e}")

License

This SDK is released under the MIT License.

Support

For questions or support, please contact support@sagapay.net or visit https://sagapay.net.

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

sagapay-0.1.0.tar.gz (10.2 kB view details)

Uploaded Source

Built Distribution

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

sagapay-0.1.0-py3-none-any.whl (9.3 kB view details)

Uploaded Python 3

File details

Details for the file sagapay-0.1.0.tar.gz.

File metadata

  • Download URL: sagapay-0.1.0.tar.gz
  • Upload date:
  • Size: 10.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.9

File hashes

Hashes for sagapay-0.1.0.tar.gz
Algorithm Hash digest
SHA256 b18bbc9bf04c1449d45b75c01ad54c8991eddea3d03ab2b98f4a85000e2c3ebe
MD5 226c250e17c3227f4ebe2413e711de92
BLAKE2b-256 fef79438fa7120a1e5eda29c3507686c62a96e4b59859f94fe40012845cae04e

See more details on using hashes here.

File details

Details for the file sagapay-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: sagapay-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 9.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.9

File hashes

Hashes for sagapay-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 9655ed146f55ff2350d8b55343fa44b893be8cce2bf68ae1e6423279040c01cb
MD5 3100b13151d25d89c0435912b63698e1
BLAKE2b-256 d10031e1c22ce97733b3e1fe01dcf25c6715c97b088f8b9db5db0d4dc63c7d73

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