This release is a pre-release and may not be stable for production use.
billdogeng (Python)
Official BilldogEng server SDK for Python — the engagement suite for server-side use: Analytics, Feature Flags (remote + local evaluation), Surveys (data API), Messaging dispatch, and LLM observability.
This is the Python port of the canonical Node reference SDK; the wire protocol
and method surface are identical across all billdogeng-* server SDKs.
Install
pip install billdogeng
Zero runtime dependencies (stdlib only). Requires Python 3.8+.
Quickstart
from billdogeng import BilldogEng
bd = BilldogEng("bd_test_xxx", local_evaluation=True)
# Analytics (batched + background flush + gzip + retry)
bd.capture("user-123", "order_completed", {"revenue": 49.99}, {"company": "acme"})
bd.identify("user-123", {"email": "a@b.com", "plan": "pro"})
bd.group_identify("company", "acme", {"seats": 50})
bd.alias("user-123", "anon-abc")
# Feature flags (local evaluation = deterministic murmurhash3 bucketing)
if bd.is_feature_enabled("new_checkout", "user-123"):
...
variant = bd.get_feature_flag("pricing_test", "user-123")
payload = bd.get_feature_flag_payload("pricing_test", "user-123")
all_flags = bd.get_all_flags("user-123")
# Surveys (data API — no rendering)
surveys = bd.surveys.list("user-123")
config = bd.surveys.fetch(survey_id, "user-123")
started = bd.surveys.start(survey_id, {"customer_id": "user-123"})
bd.surveys.submit(survey_id, [{"question_id": q, "answer_number": 9}],
{"respondent_id": started["respondent_id"]})
# Messaging dispatch (Bearer JWT auth)
bd.messaging.dispatch(
project_id="…", channel="push",
content={"title": "Hi", "body": "There"},
access_token="<supabase-jwt>",
targeting={"type": "all"},
scheduling={"deliveryType": "immediate"},
)
# LLM observability
bd.llm.capture_trace(
trace_id="t-1", span_id="s-1", model="claude-opus-4-8",
input_text="…", output_text="…",
prompt_tokens=10, completion_tokens=5, duration_ms=123, cost_usd=0.002,
)
bd.shutdown() # flushes remaining events + stops the background timer
# Or as a context manager:
with BilldogEng("bd_test_xxx") as bd:
bd.capture("user-123", "page_view")
Configuration
| Option | Default | Description |
|---|---|---|
host |
https://api.billdog.io/v1 |
Base URL for all requests |
flush_at |
20 |
Batch size that triggers a flush |
flush_interval |
10000 |
Background flush cadence (ms) |
max_queue_size |
1000 |
Max queued events before oldest are dropped |
gzip |
True |
Gzip request bodies large enough to benefit |
local_evaluation |
False |
Enable local (server-side) flag evaluation |
request_timeout |
10000 |
Per-request timeout (ms) |
max_retries |
3 |
Retry attempts for 5xx / network errors |
Auth: X-BillDog-API-Key: <apiKey> on every request (bd_test_* sandbox /
bd_live_* live). Messaging dispatch authenticates with a Bearer JWT instead.
Tests
python3 -m venv .venv && . .venv/bin/activate
pip install -e ".[dev]"
pytest -q
The suite covers: batching (10 captures → 1 POST), identify/group/alias event shapes, the 12 canonical murmurhash3 vectors + rollout/targeting/multivariate evaluation, 503-then-200 retry with backoff (local stub server), and the survey round-trip + messaging dispatch + LLM trace payload shapes.
BillDog Auth
Session-token verification is not available in this SDK yet.
billdogeng-node is the only
server SDK that can verify a BillDog Auth token offline today.
Until it lands here, either verify in a Node service, or call the
auth-introspect endpoint over HTTP — that costs a network round-trip per
check, and in exchange tells you whether the session is live right now rather
than only that the token was valid when it was issued.
Metadata
Release files for billdogeng 1.1.0b3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| billdogeng-1.1.0b3.tar.gz | 54.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| billdogeng-1.1.0b3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 96.2 kB
Release files / billdogeng-1.1.0b3.tar.gz
| Download URL | billdogeng-1.1.0b3.tar.gz |
|---|---|
| Size | 54.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
921f867e298933c877719782bca7c52b38f4ffafee92ad5cda3b2ec2db37b070
|
|
BLAKE2b-256 checksum How to use checksums |
404c98f8259e2c72818f1875fbac823f98442ef9fa45febf2f644712722b8859
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.9.6
|
Release files / billdogeng-1.1.0b3-py3-none-any.whl
| Download URL | billdogeng-1.1.0b3-py3-none-any.whl |
|---|---|
| Size | 42.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
4ae68900ba6c89cffdd7081ab1a89534e13070bb5aae65e0922b18ac815420e4
|
|
BLAKE2b-256 checksum How to use checksums |
9088bd26c49fc6366c13ad69b47fa5721630a2372a6afaf80ac0b5b32761dee0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.9.6
|