Official Python SDK for the Resletter API
Project description
Resletter Python SDK
Official Python SDK for the Resletter newsletter platform API.
Installation
pip install resletter
# or
poetry add resletter
# or
uv add resletter
Quick Start
from resletter import Resletter
client = Resletter("rsl_your_api_key")
# Create a subscriber
subscriber = client.subscribers.create(
email="user@example.com",
name="John Doe",
metadata={"source": "website"},
)
print(f"Created subscriber: {subscriber['id']}")
Requirements
- Python >= 3.9
- A Resletter account with Starter plan or above (API access required)
Authentication
Get your API key from your Resletter project settings:
- Navigate to your project settings
- Go to the "API Access" section
- Click "Create API Key"
- Select the required scopes for your use case
- Copy your API key (starts with
rsl_)
API Reference
Subscribers
# List subscribers
result = client.subscribers.list(
page=1,
limit=50,
status="subscribed",
group_id="uuid",
email="search@example.com",
)
subscribers = result["subscribers"]
pagination = result["pagination"]
# Get a subscriber
subscriber = client.subscribers.get("subscriber-id")
# Create a subscriber
new_subscriber = client.subscribers.create(
email="user@example.com",
name="John Doe",
metadata={"plan": "pro"},
group_ids=["group-id"],
bypass_double_opt_in=True,
)
# Create multiple subscribers
result = client.subscribers.create_bulk(
subscribers=[
{"email": "user1@example.com", "name": "User 1"},
{"email": "user2@example.com", "name": "User 2"},
],
group_ids=["group-id"],
skip_duplicates=True,
bypass_double_opt_in=True,
)
# Update a subscriber
updated = client.subscribers.update(
"subscriber-id",
name="Jane Doe",
metadata={"plan": "enterprise"},
group_ids=["new-group-id"],
)
# Unsubscribe (soft delete)
client.subscribers.delete("subscriber-id")
# Hard delete
client.subscribers.delete("subscriber-id", hard=True)
Groups
# List groups
groups = client.groups.list()
# Get a group
group = client.groups.get("group-id")
# Create a group
new_group = client.groups.create(
name="Product Updates",
description="Subscribers interested in product news",
color="#3B82F6",
)
# Update a group
updated = client.groups.update(
"group-id",
name="New Name",
)
# Delete a group
client.groups.delete("group-id")
# Add subscribers to a group
client.groups.add_subscribers(
"group-id",
subscriber_ids=["sub-1", "sub-2"],
)
# Remove subscribers from a group
client.groups.remove_subscribers(
"group-id",
subscriber_ids=["sub-1"],
)
Campaigns
# List campaigns
campaigns = client.campaigns.list(status="active")
# Get a campaign
campaign = client.campaigns.get("campaign-id")
# Create a campaign
new_campaign = client.campaigns.create(
name="Product Launch Campaign",
description="Campaign for new product announcement",
subscriber_group_ids=["group-1", "group-2"],
)
# Update a campaign
updated = client.campaigns.update(
"campaign-id",
name="Updated Campaign Name",
status="paused",
)
# Delete a campaign
client.campaigns.delete("campaign-id")
Events
# Track a custom event to trigger automations
result = client.events.track(
name="purchase_completed",
email="user@example.com",
data={
"product": "Premium Plan",
"amount": 99.0,
},
)
print(f"Triggered {result['automationsTriggered']} automations")
Configuration Options
client = Resletter(
"rsl_your_api_key",
base_url="https://app.resletter.com", # Custom base URL
timeout=30.0, # Request timeout in seconds
)
Context Manager
The client supports context manager protocol for automatic cleanup:
with Resletter("rsl_your_api_key") as client:
subscriber = client.subscribers.create(email="user@example.com")
# Connection is automatically closed when exiting the block
Error Handling
from resletter import Resletter, ResletterError
try:
client.subscribers.create(email="invalid")
except ResletterError as e:
print(f"Status: {e.status}")
print(f"Message: {e.message}")
print(f"Code: {e.code}")
Type Hints
This SDK includes full type hints for all methods and responses:
from resletter import (
Subscriber,
SubscriberGroup,
Campaign,
SubscriberStatus,
CampaignStatus,
)
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file resletter-1.0.1.tar.gz.
File metadata
- Download URL: resletter-1.0.1.tar.gz
- Upload date:
- Size: 9.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ab431c3fe6331f912f14acc609ee574d8e918d4797cce9ffe3ce162152da88eb
|
|
| MD5 |
35227054a77fb5550cac83c817d0af8e
|
|
| BLAKE2b-256 |
e04c3afc2cbac1b9432fc97ffe12b377e5e28c775575e53e3c2188c1775284af
|
File details
Details for the file resletter-1.0.1-py3-none-any.whl.
File metadata
- Download URL: resletter-1.0.1-py3-none-any.whl
- Upload date:
- Size: 12.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
91ab089c74d089199a1e3935813609a572bdce68bc580b4718608956f2275276
|
|
| MD5 |
23d245dc9334b0f7cf57db05e89f79d1
|
|
| BLAKE2b-256 |
53bfb96de3119eab538795a24018b997b6bbd24762cd86e4b598507773ff9ff6
|