This is the official Python SDK for the Siren notification platform.

Installation

pip install trysiren

Basic Usage

Synchronous Client

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,
)

# Alternative initialization
client = SirenClient(api_key="YOUR_SIREN_API_KEY")  # default env is "prod"
# Or:
client = SirenClient(api_key="YOUR_SIREN_API_KEY", env="dev")

Asynchronous Client

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. Below are the available methods organized by functionality.

Templates

MethodDescription
client.template.get()Retrieves a list of notification templates with optional filtering, sorting, and pagination
client.template.create()Creates a new notification template
client.template.update()Updates an existing notification template
client.template.delete()Deletes an existing notification template
client.template.publish()Publishes a template, making its latest draft version live

Channel Templates

MethodDescription
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

MethodDescription
client.message.send()Sends a message (with or without a template) to a recipient via a chosen channel
client.message.send_awesome_template()Sends a message using a template path/identifier
client.message.get_replies()Retrieves replies for a specific message ID
client.message.get_status()Retrieves the status of a specific message (SENT, DELIVERED, FAILED, etc.)

Workflows

MethodDescription
client.workflow.trigger()Triggers a workflow with given data and notification payloads
client.workflow.trigger_bulk()Triggers a workflow in bulk for multiple recipients
client.workflow.schedule()Schedules a workflow to run at a future time (once or recurring)

Webhooks

MethodDescription
client.webhook.configure_notifications()Configures webhook URL for receiving status updates
client.webhook.configure_inbound()Configures webhook URL for receiving inbound messages

Users

MethodDescription
client.user.add()Creates a new user or updates existing user with given unique_id
client.user.update()Updates an existing user’s information
client.user.delete()Deletes an existing user

For Package Developers

Environment Configuration

For testing the SDK, set these environment variables:
  • SIREN_API_KEY: Your API key from the Siren dashboard
  • SIREN_ENV: Set to dev for development/testing (defaults to prod)

Prerequisites

Setup Steps

  1. Clone the repository:
    git clone https://github.com/KeyValueSoftwareSystems/siren-py-sdk.git
    cd siren-py-sdk
    
  2. Create a virtual environment using uv:
    uv venv
    
  3. Activate the virtual environment:
    # On macOS/Linux
    source .venv/bin/activate
    # On Windows
    .venv\Scripts\activate
    
  4. Install dependencies with uv:
    uv pip install -e ".[dev]"
    
  5. Set up pre-commit hooks:
    uv run pre-commit install
    
You are now ready to contribute to the trysiren SDK!

Code Style & Linting

Code style is enforced by:
  • ruff (linting, formatting, import sorting)
  • pyright (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

  1. Create a feature branch for your changes
  2. Commit your changes (pre-commit hooks will run)
  3. Push your branch and open a Pull Request against the develop branch

Changes Planned

  • Investigate how critical .close() is for async client
  • Explore ways to avoid manual .close() calls