This is the official Python SDK for the Siren notification platform.
pip install trysirenfrom 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="[email protected]",
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="[email protected]",
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")from siren import AsyncSirenClient
# Using async context manager (recommended)
async with AsyncSirenClient() as client:
message_id = await client.message.send(
recipient_value="[email protected]",
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="[email protected]",
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.
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
For detailed usage examples of all SDK methods, see the examples folder.
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)
- Git
- Python 3.8 or higher
uv(installed, see uv installation guide)
-
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 is enforced by
ruff(linting, formatting, import sorting) andpyright(type checking). - These tools are automatically run via pre-commit hooks.
To run the test suite, use the following command from the project root directory:
uv run pytestThis will execute all tests defined in the tests/ directory.
- 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.
- Check how critical is .close() for async client, explore ways to avoid that.