UseSend Python SDK
A minimal Python SDK for the UseSend API, mirroring the structure of the JavaScript SDK.
Installation
Install via pip or Poetry:
pip install usesend
# or
poetry add usesend
Usage
from usesend import UseSend, types
# By default: raises UseSendHTTPError on non-2xx.
client = UseSend("us_123")
# 1) TypedDict payload (autocomplete in IDEs). Use dict to pass 'from'.
payload: types.EmailCreate = {
"to": "test@example.com",
"from": "no-reply@example.com",
"subject": "Hello",
"html": "<strong>Hi!</strong>",
}
resp, _ = client.emails.send(payload=payload)
# 2) Or pass a plain dict (supports 'from')
resp, _ = client.emails.send(payload={
"to": "test@example.com",
"from": "no-reply@example.com",
"subject": "Hello",
"html": "<strong>Hi!</strong>",
})
# Idempotent retries: same payload + same key returns the original response
resp, _ = client.emails.send(
payload=payload,
options={"idempotency_key": "signup-123"},
)
# Works for batch requests as well
resp, _ = client.emails.batch(
payload=[payload],
options={"idempotency_key": "bulk-welcome-1"},
)
# If the same key is reused with a different payload, the API responds with HTTP 409.
# 3) Campaigns
campaign_payload: types.CampaignCreate = {
"name": "Welcome Series",
"subject": "Welcome to our service!",
"html": "<p>Thanks for joining us!</p>",
"from": "welcome@example.com",
"contactBookId": "cb_1234567890",
}
campaign_resp, _ = client.campaigns.create(payload=campaign_payload)
# Schedule a campaign
schedule_payload: types.CampaignSchedule = {
"scheduledAt": "2024-12-01T10:00:00Z",
}
schedule_resp, _ = client.campaigns.schedule(
campaign_id=campaign_resp["id"],
payload=schedule_payload
)
# Pause/resume campaigns
client.campaigns.pause(campaign_id="campaign_123")
client.campaigns.resume(campaign_id="campaign_123")
# Toggle behavior if desired:
# - raise_on_error=False: return (None, error_dict) instead of raising
# No model parsing occurs; methods return plain dicts following the typed shapes.
client = UseSend("us_123", raise_on_error=False)
raw, err = client.emails.get(email_id="email_123")
if err:
print("error:", err)
else:
print("ok:", raw)
Webhook Local Example
For a runnable webhook verification demo project, see:
example/webhook-test-project/README.md
Development
This package is managed with Poetry. Models are maintained in-repo under
usesend/types.py (readable names). Update this file as the API evolves.
It is published as usesend on PyPI.
Available Resources
- Emails:
client.emails.send(),client.emails.get() - ContactBooks:
client.contact_books.list(),client.contact_books.create(),client.contact_books.get(),client.contact_books.update() - Contacts:
client.contacts.create(),client.contacts.list(),client.contacts.get(),client.contacts.bulk_create(),client.contacts.bulk_delete() - Domains:
client.domains.create(),client.domains.get(),client.domains.verify() - Campaigns:
client.campaigns.create(),client.campaigns.get(),client.campaigns.schedule(),client.campaigns.pause(),client.campaigns.resume()
Notes
- Human-friendly models are available under
usesend.types(e.g.,EmailCreate,CampaignCreate,Contact,APIError). - Endpoint methods accept TypedDict payloads or plain dicts via the
payload=keyword.
Metadata
Release files for usesend 0.2.11
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| usesend-0.2.11.tar.gz | 13.3 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| usesend-0.2.11-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 29.2 kB
Release files / usesend-0.2.11.tar.gz
| Download URL | usesend-0.2.11.tar.gz |
|---|---|
| Size | 13.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
c4b7fb868ccecc9fee83c3bb96d86c8c6f9f460124cd12c43912234f2d9b17ce
|
|
BLAKE2b-256 checksum How to use checksums |
b36b6a7fc623f47eb427894799e997ba97d6caa2507ee933e42cbe4e4681f48b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Release files / usesend-0.2.11-py3-none-any.whl
| Download URL | usesend-0.2.11-py3-none-any.whl |
|---|---|
| Size | 15.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
ebcfed2b7dc16b08b6b519aa938fd0e8b51bed988fbc93b42599501ea573a7e6
|
|
BLAKE2b-256 checksum How to use checksums |
64e4eeca269004362ce798819d0611768ec51492d976391bcd596fc2845f4cf0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Security for usesend 0.2.11
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.