Siren Python SDK
This is the official Python SDK for the Siren notification platform.
Table of Contents
Installation
pip install trysiren
Basic Usage
Synchronous
from siren import SirenClient
# Uses SIREN_API_KEY and SIREN_ENV environment variables
client = SirenClient()
# Send a direct message without template
message_id = client.message.send(
recipient_value="alice@company.com",
channel="EMAIL",
body="Your account has been successfully verified. You can now access all features."
)
# Send a message using a template
message_id = client.message.send(
recipient_value="U01UBCD06BB",
channel="SLACK",
template_name="welcome_template",
template_variables={"user_name": "John"},
)
# Send a message with specific provider
from siren.models.messaging import ProviderCode
message_id = client.message.send(
recipient_value="alice@company.com",
channel="EMAIL",
body="Your account has been successfully verified.",
provider_name="email-provider",
provider_code=ProviderCode.EMAIL_SENDGRID,
)
# Send a message using awesome template
message_id = client.message.send_awesome_template(
recipient_value="U01UBCD06BB",
channel="SLACK",
template_identifier="awesome-templates/customer-support/escalation_required/official/casual.yaml",
template_variables={
"ticket_id": "123456",
"customer_name": "John",
"issue_summary": "Payment processing issue",
"ticket_url": "https://support.company.com/ticket/123456",
"sender_name": "Support Team"
},
provider_name="slack-provider",
provider_code=ProviderCode.SLACK,
)
# You can also do:
client = SirenClient(api_key="YOUR_SIREN_API_KEY") # default env is "prod"
# Or:
client = SirenClient(api_key="YOUR_SIREN_API_KEY", env="dev")
Asynchronous
from siren import AsyncSirenClient
# Using async context manager (recommended)
async with AsyncSirenClient() as client:
message_id = await client.message.send(
recipient_value="alice@company.com",
channel="EMAIL",
body="Your account has been successfully verified. You can now access all features."
)
# Or manually managing the client
client = AsyncSirenClient()
try:
message_id = await client.message.send(
recipient_value="alice@company.com",
channel="EMAIL",
body="Your account has been successfully verified. You can now access all features."
)
finally:
await client.aclose()
All synchronous methods have a 1-to-1 asynchronous equivalent—just await them on the async client.
SDK Methods
The Siren Python SDK provides a clean, namespaced interface to interact with the Siren API.
Templates (client.template.*)
client.template.get()- Retrieves a list of notification templates with optional filtering, sorting, and paginationclient.template.create()- Creates a new notification templateclient.template.update()- Updates an existing notification templateclient.template.delete()- Deletes an existing notification templateclient.template.publish()- Publishes a template, making its latest draft version live
Channel Templates (client.channel_template.*)
client.channel_template.create()- Creates or updates channel-specific templates (EMAIL, SMS, etc.)client.channel_template.get()- Retrieves channel templates for a specific template version
Messaging (client.message.*)
client.message.send()- Sends a message (with or without a template) to a recipient via a chosen channelclient.message.send_awesome_template()- Sends a message using a template path/identifierclient.message.get_replies()- Retrieves replies for a specific message IDclient.message.get_status()- Retrieves the status of a specific message (SENT, DELIVERED, FAILED, etc.)
Workflows (client.workflow.*)
client.workflow.trigger()- Triggers a workflow with given data and notification payloadsclient.workflow.trigger_bulk()- Triggers a workflow in bulk for multiple recipientsclient.workflow.schedule()- Schedules a workflow to run at a future time (once or recurring)
Webhooks (client.webhook.*)
client.webhook.configure_notifications()- Configures webhook URL for receiving status updatesclient.webhook.configure_inbound()- Configures webhook URL for receiving inbound messages
Users (client.user.*)
client.user.add()- Creates a new user or updates existing user with given unique_idclient.user.update()- Updates an existing user's informationclient.user.delete()- Deletes an existing user
Examples
For detailed usage examples of all SDK methods, see the examples folder.
For Package Developers
Environment Configuration
For testing the SDK, set these environment variables:
SIREN_API_KEY: Your API key from the Siren dashboardSIREN_ENV: Set todevfor development/testing (defaults toprod)
Prerequisites
- Git
- Python 3.8 or higher
uv(installed, see uv installation guide)
Setup Steps
-
Clone the repository:
git clone https://github.com/KeyValueSoftwareSystems/siren-py-sdk.git cd siren-py-sdk
-
Create a virtual environment using
uv: This creates an isolated environment in a.venvdirectory.uv venv -
Activate the virtual environment: Commands will now use this environment's Python and packages.
source .venv/bin/activate
(On Windows, use:
.venv\Scripts\activate) -
Install dependencies with
uv: This installstrysirenin editable mode (-e) and all development dependencies (.[dev]).uv pip install -e ".[dev]"
-
Set up pre-commit hooks: (Ensures code quality before commits)
uv run pre-commit install
You are now ready to contribute to the
trysirenSDK!Try
$ python examples/messaging_async.py
Code Style & Linting
- Code style is enforced by
ruff(linting, formatting, import sorting) andpyright(type checking). - These tools are automatically run via pre-commit hooks.
Running Tests
To run the test suite, use the following command from the project root directory:
uv run pytest
This will execute all tests defined in the tests/ directory.
Submitting Changes
- Create a feature branch for your changes.
- Commit your changes (pre-commit hooks will run).
- Push your branch and open a Pull Request against the
developrepository branch.
Changes planned
- Check how critical is .close() for async client, explore ways to avoid that.
Metadata
Release files for trysiren 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| trysiren-0.1.1.tar.gz | 38.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| trysiren-0.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 72.0 kB
Release files / trysiren-0.1.1.tar.gz
| Download URL | trysiren-0.1.1.tar.gz |
|---|---|
| Size | 38.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
8c60856176ad170acbf70c671d8c4ec7a7da96d6118f204689f643fa1cb31552
|
|
BLAKE2b-256 checksum How to use checksums |
76addcb5d1496af61478bef1c428fcb95e794da783a4f5c0eb09ff036a183ae1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.11.13
|
Release files / trysiren-0.1.1-py3-none-any.whl
| Download URL | trysiren-0.1.1-py3-none-any.whl |
|---|---|
| Size | 33.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
817e7e2e6b7fedee449069c0548bc05a7088cccfc92e30c9fa22b65a8d244e10
|
|
BLAKE2b-256 checksum How to use checksums |
02903b4da9faace18d4f278e23c5e1da4e46f9290e0d731e64a671b39cdf44b3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.11.13
|