Skip to main content

Bulko Python

Dependency-free Python SDK and CLI for the Bulko API.

Install

pip install bulko

SDK

import os
from bulko import Bulko

client = Bulko(os.environ["BULKO_API_KEY"])

print(client.account.balance())

campaign = client.campaigns.launch(
    name="Product update",
    subject="A useful update for your team",
    body="<p>Hello, here is the update you requested.</p>",
    recipients=["alex@example.com", {"email": "sam@example.com", "name": "Sam"}],
    reply_to="replies@example.com",
)

print(client.campaigns.stats(campaign["id"]))

Available resources are campaigns, subscribers, replies, account, and smtp_accesses. AsyncBulko provides async helpers for read operations. API keys must remain server-side.

CLI

export BULKO_API_KEY=bulko_live_...

bulko balance
bulko campaign-stats 42
bulko replies --status positive --limit 25
bulko smtp-accesses
bulko import-subscribers contacts.txt --list-name "Webinar attendees"

Campaign launch is intentionally protected by an explicit flag:

bulko launch-campaign \
  --name "Product update" \
  --subject "A useful update" \
  --html-file message.html \
  --recipients-file recipients.txt \
  --confirm-send

Only send permission-based email that complies with the Bulko Acceptable Use Policy and applicable law.

Errors

HTTP failures map to typed exceptions: ValidationError, AuthenticationError, InsufficientCreditsError, ContentBlockedError, NotFoundError, and RateLimitError. Each API exception exposes status_code, response, and request_id.

Development

python -m pip install -e . ruff build
ruff check .
python -m unittest discover -s tests -v
python -m build

License

MIT

Metadata

Release files for bulko 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for bulko 0.1.1
File Size Uploaded
bulko-0.1.1.tar.gz 9.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for bulko 0.1.1
File Interpreter ABI Platform
bulko-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 18.0 kB

Release files / bulko-0.1.1.tar.gz

Download URL bulko-0.1.1.tar.gz
Size 9.2 kB
Tags Source
SHA-256 checksum
How to use checksums
d710fefffdb1f0a58ae300a9be19e4179bd7e3124e3897fccd738e04500188f7
BLAKE2b-256 checksum
How to use checksums
f32726e2cdd413f6ad5304421d2ba4a760d86dd6748a6319daae127e440a90bd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Release files / bulko-0.1.1-py3-none-any.whl

Download URL bulko-0.1.1-py3-none-any.whl
Size 8.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
72f80c04bbcb68cc936cb751d0a0148c8c15099950d269fac98c4c2adc8a1935
BLAKE2b-256 checksum
How to use checksums
af14f2b641cfa6da1180c011c25fa712df55ba01e2b5fdb90783feeff68813f3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page