docs/platform/sdks/server/python.mdx
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
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.
```bash
poetry add novu-py
```
```bash
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:
```python
#!/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` where `script.py` can be replaced with the actual file name.
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": "[email protected]",
},
payload={
"comment_id": "string",
"post": {
"text": "string",
},
},
overrides={
"email": {
"bcc": "[email protected]"
}
},
))
# Handle response
print(res)
</Tab>
<Tab title="Asynchronous">
```python
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": "[email protected]",
},
payload={
"comment_id": "string",
"post": {
"text": "string",
},
},
overrides={
"email": {
"bcc": "[email protected]",
}
},
))
# Handle response
print(res)
asyncio.run(main())
</Tab>
</Tabs>
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": "[email protected]"
}
},
))
# Handle response
print(res)
</Tab>
</Tabs>