Novu’s Python SDK provides simple, yet comprehensive notification management, and delivery capabilities through multiple channels that you can implement using code that integrates seamlessly with your Python application.

Explore the source code on GitHub

Installation

PIP

PIP is the default package installer for Python, enabling easy installation and management of packages from PyPI via the command line.

pip install novu-py

Poetry

Poetry is a modern tool that simplifies dependency management and package publishing by using a single pyproject.toml file to handle project metadata and dependencies.

poetry add novu-py

Shell and script usage with uv

You can use this SDK in a Python shell with uv and the uvx command that comes with it like so:

uvx --from novu-py python

It’s also possible to write a standalone Python script without needing to set up a whole project like so:

#!/usr/bin/env -S uv run --script
# /// script
# requires-python = ">=3.9"
# dependencies = [
#     "novu-py",
# ]
# ///

from novu_py import Novu

sdk = Novu(
  # SDK arguments
)

# Rest of script here...

Once that is saved to a file, you can run it with uv run script.py wherescript.py can be replaced with the actual file name.

Usage

# Synchronous Example
import novu_py
from novu_py import Novu
import os

with Novu(
    secret_key=os.getenv("NOVU_SECRET_KEY", ""),
) as novu:

    res = novu.trigger(trigger_event_request_dto=novu_py.TriggerEventRequestDto(
        workflow_id="workflow_identifier",
        to={
            "subscriber_id": "subscriber_unique_identifier",
            "first_name": "Albert",
            "last_name": "Einstein",
            "email": "albert@einstein.com",
        },
        payload={
            "comment_id": "string",
            "post": {
                "text": "string",
            },
        },
        overrides={
          "email": {
            "bcc": "no-reply@novu.co"
          }
        },
    ))

    # Handle response
    print(res)

# Asynchronous Example
import asyncio
import novu_py
from novu_py import Novu
import os

async def main():
    async with Novu(
        secret_key=os.getenv("NOVU_SECRET_KEY", ""),
    ) as novu:

        res = await novu.trigger_async(trigger_event_request_dto=novu_py.TriggerEventRequestDto(
            workflow_id="workflow_identifier",
            to={
                "subscriber_id": "subscriber_unique_identifier",
                "first_name": "Albert",
                "last_name": "Einstein",
                "email": "albert@einstein.com",
            },
            payload={
                "comment_id": "string",
                "post": {
                    "text": "string",
                },
            },
            overrides={
              "email": {
                "bcc": "no-reply@novu.co",
              }
            },
        ))

        # Handle response
        print(res)

asyncio.run(main())