Security News
Research
Data Theft Repackaged: A Case Study in Malicious Wrapper Packages on npm
The Socket Research Team breaks down a malicious wrapper package that uses obfuscation to harvest credentials and exfiltrate sensitive data.
Paddle Billing is a complete digital product sales and subscription management platform, designed for modern software businesses. It helps you increase your revenue, retain customers, and scale your operations.
This is a Python SDK that you can use to integrate Paddle Billing with applications written in Python.
For working with Paddle in your frontend, use Paddle.js. You can open checkouts, securely collect payment information, build pricing pages, and integrate with Paddle Retain.
Important: This package works with Paddle Billing. It does not support Paddle Classic. To work with Paddle Classic, see: Paddle Classic API reference
Python>=3.11 (for native type hinting, StrEnum, trailing commas, f-strings)
Project dependencies (automatically installed by pip):
Because paddle-python-sdk
is available on PyPi, installation is as simple as running the following pip
command:
pip install paddle-python-sdk
To authenticate, you'll need an API key. You can create and manage API keys in Paddle > Developer tools > Authentication.
Pass your API key while initializing a new Paddle client:
from paddle_billing import Client
paddle = Client('PADDLE_API_SECRET_KEY')
You can pass your Paddle API secret key into the SDK from an environment variable:
from os import getenv
from paddle_billing import Client
paddle = Client(getenv('PADDLE_API_SECRET_KEY'))
You can also pass an environment to work with Paddle's sandbox:
from paddle_billing import Client, Environment, Options
paddle = Client('PADDLE_API_SECRET_KEY', options=Options(Environment.SANDBOX))
Keep in mind that API keys are separate for your sandbox and live accounts, so you'll need to generate keys for each environment.
There are examples included in the examples folder. To prevent leaking errors we recommend encapsulating Paddle operations inside Try/Except blocks. For brevity, most of the examples below do not do this.
You can list supported entities with the list()
method in the resource. It returns an iterator to help when working with multiple pages.
from paddle_billing import Client
paddle = Client('PADDLE_API_SECRET_KEY')
products = paddle.products.list()
# list() returns an iterable, so pagination is automatically handled
for product in products:
print(f"Product's id: {product.id}")
You can get an entity with the get()
method in the resource. It accepts the id
of the entity to get. The entity is returned.
from paddle_billing import Client
paddle = Client('PADDLE_API_SECRET_KEY')
product = paddle.products.get('PRODUCT_ID')
You can create a supported entity with the create()
method in the resource. It accepts the resource's corresponding CreateOperation
e.g. CreateProduct
. The created entity is returned.
from paddle_billing import Client
from paddle_billing.Entities.Shared.TaxCategory import TaxCategory
from paddle_billing.Resources.Products.Operations import CreateProduct
paddle = Client('PADDLE_API_SECRET_KEY')
created_product = paddle.products.create(CreateProduct(
name = 'My Product',
tax_category = TaxCategory.Standard,
))
You can update a supported entity with the update()
method in the resource. It accepts the id
of the entity to update and the corresponding UpdateOperation
e.g. UpdateProduct
. The updated entity is returned.
from paddle_billing import Client
from paddle_billing.Resources.Products.Operations import UpdateProduct
paddle = Client('PADDLE_API_SECRET_KEY')
# Update the name of the product
updated_product = paddle.products.update('PRODUCT_ID', UpdateProduct(
name = 'My Improved Product'
))
Where operations require more than one id
, the update()
method accepts multiple arguments. For example, to update an address for a customer, pass the customerId
and the addressId
:
updated_address = paddle.addresses.update(
'CUSTOMER_ID',
'ADDRESS_ID',
operation_goes_here,
)
You can delete an entity with the delete()
method in the resource. It accepts the id
of the entity to delete. The deleted entity is returned.
from paddle_billing import Client
paddle = Client('PADDLE_API_SECRET_KEY')
deleted_product = paddle.products.delete('PRODUCT_ID')
The SDK includes a helper class to verify webhook signatures sent by Notifications from Paddle.
from paddle_billing.Notifications import Secret, Verifier
integrity_check = Verifier().verify(request, Secret('WEBHOOK_SECRET_KEY'))
FAQs
Paddle's Python SDK for Paddle Billing
We found that paddle-python-sdk demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Research
The Socket Research Team breaks down a malicious wrapper package that uses obfuscation to harvest credentials and exfiltrate sensitive data.
Research
Security News
Attackers used a malicious npm package typosquatting a popular ESLint plugin to steal sensitive data, execute commands, and exploit developer systems.
Security News
The Ultralytics' PyPI Package was compromised four times in one weekend through GitHub Actions cache poisoning and failure to rotate previously compromised API tokens.