Official Python SDK for the PawPayments Native V2 API.
Ships both a synchronous client (PawPayments, built on requests) and an
asynchronous one (AsyncPawPayments, built on httpx).
pip install pawpaymentsRequires Python 3.9+.
from pawpayments import PawPayments
paw = PawPayments(api_key="…")
invoice = paw.invoices.create(
amount=25,
fiat_currency="USD",
billing_type="STATIC",
asset="usdt_tron",
description="Pro plan, 1 month",
notify_url="https://example.com/paw/webhook",
)
print(invoice["payment_url"])import asyncio
from pawpayments import AsyncPawPayments
async def main():
async with AsyncPawPayments(api_key="…") as paw:
invoice = await paw.invoices.create(
amount=25,
fiat_currency="USD",
billing_type="STATIC",
asset="usdt_tron",
)
print(invoice["payment_url"])
asyncio.run(main())| Group | Methods |
|---|---|
paw.assets |
list() |
paw.rates |
get(base=, assets=) |
paw.balance |
get() |
paw.invoices |
create(**), get(id), list(**), notify(id) |
paw.payouts |
create(**, uniq_id=), get(id), list(**), batch(items, uniq_id=) |
paw.ledger |
list(type=, ...) |
paw.notifications |
list(**), test(url=) |
paw.permanent |
create(**), get(id), list(**), deactivate(id) |
payouts.create and payouts.batch accept an optional uniq_id for explicit
idempotency (UUIDv4). When omitted the SDK generates one with uuid.uuid4().
A repeated uniq_id within 2 hours yields a 409.
from flask import Flask, request, abort
from pawpayments import Webhook
app = Flask(__name__)
@app.post("/paw/webhook")
def webhook():
raw = request.get_data()
sig = request.headers.get("X-Paw-Signature", "")
if not Webhook.verify_raw_body(raw, sig, API_KEY):
abort(401)
payload = Webhook.parse_payload(raw)
# …handle the invoice update…
return "", 200from pawpayments import PawPaymentsApiError
try:
paw.invoices.create(...)
except PawPaymentsApiError as exc:
print(exc.code, exc.http_status, str(exc), exc.details)pytest tests/test_webhook.py— signature unit tests + PHP-interop parity.PAW_API_KEY=… pytest tests/test_live.py tests/test_negative.py— live happy-path + negative-case suites againsthttps://api.pawpayments.com. Tests skip whenPAW_API_KEYis absent.
MIT