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.
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.
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())
# 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())
import novu_py
from novu_py import Novu
import os
with Novu(
server_url="https:/eu.api.novu.co",
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",
},
payload={
"comment_id": "string",
"post": {
"text": "string",
},
},
overrides={
"email": {
"bcc": "no-reply@novu.co"
}
},
))
# Handle response
print(res)