Skip to main content

PyPaystack2

Downloads Downloads Downloads

PyPaystack2 is an Open Source Python client library for integrating Paystack into your python projects. It aims at being developer friendly and easy to use.

Features

  • 1st class support for type annotations.
  • Synchronous and Asynchronous clients.
  • Pydantic for data modelling.
  • Fees Calculation utilities.
  • Webhook support & utilities (>= v3.1.0).

Installation

$ pip install -U pypaystack2
# or install with uv
$ uv add pypaystack2
# For webhook cli
$ pip install -U "pypaystack2[webhook]"
or install with uv
$ uv add "pypaystack2[webhook]"

Usage Preview

In the REPL session below, we're using PyPaystack2 to create a Customer (user) and a Plan on Paystack and then add the newly created customer as a subscriber to the plan.

Note

The REPL session below assumes the environmental variable PAYSTACK_SECRET_KEY="YOUR_SECRET_KEY" is set. if not, you can alternatively pass it into the PaystackClient on instantiation like so PaystackClient(secret_key='YOUR_SECRET_KEY') otherwise, you will get a MissingSecretKeyException raised prompting you to provide a secret key. It also does not handle likely exceptions that calling client methods like client.customers.create, client.plans.create & client.subscriptions.create may raise like ClientNetworkError for network related issues and ValueError for validation related issues.

Python 3.11.13 (main, Sep  2 2025, 14:20:25) [Clang 20.1.4 ] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from pypaystack2 import __version__
>>> print(__version__)
3.0.0 # Ensure you're running PyPaystack2 version >= 3.0.0 for the following entries to work
>>> from pypaystack2 import PaystackClient
>>> from pypaystack2.enums import Interval
>>> from pypaystack2.models import Customer, Plan
>>> client = PaystackClient()
>>> new_customer_response = client.customers.create(email="johndoe@example.com",first_name="John",last_name="Doe")
>>> assert new_customer_response.status # Validating the request is successful
>>> new_customer = new_customer_response.data
>>> assert isinstance(new_customer,Customer) # Showing that we indeed get an instance of a pydantic model name `Customer` a modelled representation of the data returned by paystack as a result of the request to create a new user
>>> new_plan_response = client.plans.create(name="Test 1k Daily Contributions", amount=client.to_subunit(1000), interval=Interval.DAILY)
>>> assert new_plan_response.status # Validating the request is successful
>>> new_plan = new_plan_response.data # Validating the request is successful
>>> assert isinstance(new_plan,Plan)
>>> new_subscription_response = client.subscriptions.create(customer=new_customer.customer_code,plan=new_plan.plan_code)
>>> assert new_subscription_response.status == True # Validating the request is successful
>>> print(repr(new_subscription_response))
Response(
  status_code=<HTTPStatus.OK: 200>,
  status=True,
  message='Subscription successfully created',
  data=Subscription(
    customer=87934333,
    plan=2237384,...

Webhook

PyPaystack2 now supports verifying the authenticity of a webhook payload and a CLI to make working with webhooks locally seamless

Verifying a webhook payload

Python 3.11.13 (main, Sep  2 2025, 14:20:25) [Clang 20.1.4 ] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from pypaystack2 import PaystackClient
>>> client = PaystackClient()
>>> payload = ... # webhook payload e.g., b'{"event": "customeridentification.success", "data": {"customer_id": 324345768, "customer_code": "CUS_e7urjebaoyk1ze2", "email": "jddae8446e-e54c-42ab-bf37-e5abff14527e@example.com", "identification": {"country": "NG", "type": "bank_account", "bvn": "123*****543", "account_number": "342****22", "bank_code": "121"}}}'
>>> signature = ... # x-paystack-signature e.g., "5d049eb93c7c71fa098f5215d7297bda401710b62df8b392b9052adf8d1a02ff308f6ca57a1db14ffeabd5b66264e9c42de029b7067b9c71eb9c231fb2a8e383"
>>> is_verified_webhook_payload = client.is_verified_webhook_payload(payload,signature)
>>> print(is_verified_webhook_payload)
True

Forward webhook events from paystack to your app running locally

Note: This requires that you install pypaystack2[webhook]

pypaystack2 webhook start-tunnel-server --addr localhost:8000 --ngrok-auth-token

Documentation

See Documentation for more on this package.

Disclaimer

This project is an Open Source client library for Paystack. It is not officially endorsed or affiliated with Paystack. All trademarks and company names belong to their respective owners.

Contributions

Thank you for being interested in contributing to PyPaystack2. There are many ways you can contribute to the project:

Name Language Functionality
Paystack CLI Python A command line app for interacting with paystack APIs
paystack Go A client library for integration paystack in go
@gray-adeyi/paystack-sdk Typescript/Javascript A client library for integrating paystack in Javascript runtimes (Node,Deno,Bun)
paystack Dart A client library for integration paystack in Dart

Metadata

Release files for pypaystack2 3.4.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pypaystack2 3.4.0
File Size Uploaded Provenance Actions
pypaystack2-3.4.0.tar.gz 103.3 kB Without provenance Details for pypaystack2-3.4.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for pypaystack2 3.4.0
File Interpreter ABI Platform Actions
pypaystack2-3.4.0-py3-none-any.whl Python 3 none any Details for pypaystack2-3.4.0-py3-none-any.whl

Total release size: 268.8 kB

Release files / pypaystack2-3.4.0.tar.gz

Download URL pypaystack2-3.4.0.tar.gz
Size 103.3 kB
Tags Source
SHA-256 checksum
How to use checksums
be7829079263ba274a3ce51d7f1a02ec05d6832de2ea0d0f3d283c650e7355fe
BLAKE2b-256 checksum
How to use checksums
9c279ce4ade30bf1a99d5648361aadecc7c0fcd8eab6d82d5aca5c04e7f62c95
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.13.0 {"installer":{"name":"uv","version":"0.13.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / pypaystack2-3.4.0-py3-none-any.whl

Download URL pypaystack2-3.4.0-py3-none-any.whl
Size 165.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
85b81642465ebd472067392c60272ad9dad0c87bdc34a8dab45c99554d4cc344
BLAKE2b-256 checksum
How to use checksums
a3f39bcfb18007c2d38c619427ef754457765a4d26829e62f2c86c49d4b14abb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.13.0 {"installer":{"name":"uv","version":"0.13.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Security for pypaystack2 3.4.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page