sumup-py provides first-party Python bindings for every SumUp API. It ships both synchronous and asynchronous clients powered by httpx, includes Pydantic models for request bodies, and offers type hints for modern editors.
Installation
Install with pip install sumup. If you use uv, run uv add sumup.
Configure Authentication
Expose your secret API key or OAuth access token as an environment variable and pass it to either the synchronous Sumup or asynchronous AsyncSumup client. You can also pass the key manually:
client = Sumup(api_key="sup_sk_MvxmLOl0...")
Examples
Online Payment Checkout
import os
from sumup import Sumup
from sumup.checkouts.resource import CreateCheckoutBody
client = Sumup(api_key=os.environ["SUMUP_API_KEY"])
checkout = client.checkouts.create(
CreateCheckoutBody(
merchant_code=os.environ["SUMUP_MERCHANT_CODE"],
amount=25.00,
checkout_reference="ORDER-1001",
currency="EUR",
description="Online payment via card widget",
)
)
print(checkout.id)
# Return checkout.id to your webpage so the SumUp card widget can complete the payment.
Cloud API Checkout
import asyncio
import os
from time import time
from sumup import AsyncSumup
from sumup.readers.resource import (
CreateReaderCheckoutBody,
CreateReaderCheckoutBodyAffiliate,
CreateReaderCheckoutBodyTotalAmount,
)
async def create_solo_checkout() -> None:
client = AsyncSumup(api_key=os.environ["SUMUP_API_KEY"])
merchant_code = os.environ["SUMUP_MERCHANT_CODE"]
readers = await client.readers.list(merchant_code)
solo = next((reader for reader in readers.items if reader.device.model == "solo"), None)
if solo is None:
raise RuntimeError("Pair a Solo reader before using the Cloud API.")
checkout = await client.readers.create_checkout(
merchant_code,
solo.id,
CreateReaderCheckoutBody(
total_amount=CreateReaderCheckoutBodyTotalAmount(currency="EUR", minor_unit=2, value=1500),
),
)
print(checkout.data.client_transaction_id)
asyncio.run(create_solo_checkout())