{"id":58,"library":"paddle-python-sdk","title":"Paddle","description":"Official Python SDK for Paddle Billing (the new Paddle platform). PyPI package is paddle-python-sdk, imports as paddle_billing. Requires Python >=3.11. Note: there are two Paddle platforms — Paddle Classic (legacy) and Paddle Billing (current). This SDK is Paddle Billing only.","status":"active","version":"1.13.0","language":"python","source_language":"en","source_url":"https://github.com/PaddleHQ/paddle-python-sdk","tags":["payments","paddle","billing","subscriptions","merchant-of-record","python"],"install":[{"cmd":"pip install paddle-python-sdk","lang":"bash","label":"Python (requires Python >=3.11)"}],"dependencies":[{"reason":"HTTP client used internally.","package":"httpx","optional":false}],"imports":[{"note":"Package is paddle-python-sdk, module is paddle_billing. There is no 'paddle' importable module from this package.","wrong":"import paddle\npaddle.Client('...')","symbol":"Client","correct":"from paddle_billing import Client\n\npaddle = Client('PADDLE_API_SECRET_KEY')"},{"note":"Sandbox is passed via Options(Environment.SANDBOX), not a boolean flag. Sandbox API keys are separate from live keys.","wrong":"paddle = Client('PADDLE_API_SECRET_KEY', sandbox=True)","symbol":"Sandbox environment","correct":"from paddle_billing import Client, Environment, Options\n\npaddle = Client('PADDLE_API_SECRET_KEY', options=Options(Environment.SANDBOX))"}],"quickstart":{"code":"from paddle_billing import Client\n\npaddle = Client('PADDLE_API_SECRET_KEY')\n\n# List products\nproducts = paddle.products.list()\nfor product in products:\n    print(f'{product.id}: {product.name}')\n\n# Verify webhook signature\nfrom paddle_billing.Notifications import Secret, Verifier\n\nintegrity_check = Verifier().verify(request, Secret('WEBHOOK_SECRET_KEY'))","lang":"python","description":"Paddle Billing SDK. Import module is paddle_billing, not paddle."},"warnings":[{"fix":"Check your Paddle dashboard. Paddle Classic shows 'Paddle Classic' branding. Billing uses api.paddle.com endpoints. Classic uses vendors.paddle.com. There is no official Python SDK for Paddle Classic — use requests against the REST API directly.","message":"Paddle Classic (old platform) and Paddle Billing (new platform) are entirely different APIs with different SDKs. This SDK (paddle-python-sdk) is Paddle Billing only. If your account is on Paddle Classic, this SDK will not work.","severity":"breaking","affected_versions":"all"},{"fix":"Upgrade to Python 3.11+.","message":"Requires Python >=3.11. Installing on Python 3.10 or lower will fail at install time or raise a RuntimeError.","severity":"breaking","affected_versions":"all"},{"fix":"from paddle_billing import Client","message":"Package name is paddle-python-sdk but import module is paddle_billing. 'import paddle' or 'from paddle import ...' will fail — 'paddle' is not the module name.","severity":"gotcha","affected_versions":"all"},{"fix":"Generate separate API keys in your Paddle Sandbox account and your live account.","message":"Sandbox and live API keys are separate credentials. Using a live key against the sandbox environment (or vice versa) returns 401 or unexpected data.","severity":"gotcha","affected_versions":"all"},{"fix":"Iterate with for product in paddle.products.list() or convert with list(paddle.products.list()).","message":"Paddle Billing list() methods return iterators, not lists. Code that indexes the result directly (products[0]) raises TypeError.","severity":"gotcha","affected_versions":"all"}],"env_vars":{"optional":[{"name":"PADDLE_WEBHOOK_SECRET","note":"Used for webhook signature verification via Verifier class."}],"required":[{"name":"PADDLE_API_SECRET_KEY","note":"API secret key from Paddle Dashboard > Developer Tools > Authentication. Separate keys for sandbox and live."}]},"last_verified":"2026-05-12T06:15:16.627Z","next_check":"2026-06-01T00:00:00.000Z","problems":[{"fix":"Install the SDK using `pip install paddle-python-sdk`. Ensure your import statements correctly reference `paddle_billing`, e.g., `from paddle_billing import Client`.","cause":"The `paddle-python-sdk` package is not installed in your Python environment or the import statement is incorrect.","error":"ModuleNotFoundError: No module named 'paddle_billing'"},{"fix":"Verify your Paddle Billing API key is correct and has the required permissions. Ensure it's passed correctly when initializing the SDK client.","cause":"The API key provided is either missing, incorrect, or does not have the necessary permissions to perform the requested operation.","error":"AuthenticationError"},{"fix":"Initialize the `Client` with your API key, for example: `from paddle_billing import Client; client = Client(api_key='YOUR_API_KEY')`.","cause":"The `Client` class was instantiated without providing the mandatory `api_key` argument.","error":"TypeError: Client.__init__ missing 1 required positional argument: 'api_key'"}],"ecosystem":"pypi","meta_description":null,"install_score":80,"install_tag":"verified","quickstart_score":0,"quickstart_tag":"stale","pypi_latest":null,"install_checks":{"last_tested":"2026-05-12","tag":"verified","tag_description":"installs cleanly on critical runtimes, fast import, recently tested","results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":1.94,"mem_mb":17.3,"disk_size":"31.7M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":1.58,"mem_mb":17.3,"disk_size":"32M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":1.61,"mem_mb":17.1,"disk_size":"23.4M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":1.65,"mem_mb":17.1,"disk_size":"24M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":1.59,"mem_mb":18,"disk_size":"23.1M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":1.58,"mem_mb":18,"disk_size":"24M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null}]},"quickstart_checks":{"last_tested":"2026-05-12","tag":"stale","tag_description":"widespread failures or data too old to trust","results":[{"runtime":"python:3.10-alpine","exit_code":1},{"runtime":"python:3.10-slim","exit_code":1},{"runtime":"python:3.11-alpine","exit_code":1},{"runtime":"python:3.11-slim","exit_code":1},{"runtime":"python:3.12-alpine","exit_code":1},{"runtime":"python:3.12-slim","exit_code":1},{"runtime":"python:3.13-alpine","exit_code":1},{"runtime":"python:3.13-slim","exit_code":1},{"runtime":"python:3.9-alpine","exit_code":1},{"runtime":"python:3.9-slim","exit_code":1}]}}