jambonz Python SDK — Feature Tracker
Done
REST API Client
- [x] Sync client (
JambonzClient) + Async client (AsyncJambonzClient)
- [x] Context manager (
with / async with) with Self typing
- [x] Config from env vars +
.env file (Pydantic Settings)
- [x] Auth via Bearer token
- [x] Retry with exponential backoff (429 rate limit + 5xx errors)
- [x] Typed exceptions (
JambonzAuthError, JambonzNotFoundError, JambonzRateLimitError, JambonzValidationError)
- [x] Request/Response hooks (
on_request, on_response)
- [x] Resources: Carriers, PhoneNumbers, Applications, SpeechServices, Calls
- [x] Resource chaining:
client.carriers("sid").get() / .delete()
- [x] Sub-resources:
client.carriers("sid").gateways.list()
- [x] Scoped vs top-level endpoints (
_scoped flag)
- [x] Generic base (
SyncResource[T] / AsyncResource[T])
- [x] Full test suite with respx mocks (48 tests)
Webhook Response (Verbs)
- [x] Pydantic models for verbs: Say, Play, Gather, Pause, Hangup, Redirect, LLM, Dial
- [x] Discriminated union (
Verb) on verb field
- [x]
JambonzResponse as RootModel[list[Verb]] with custom serializer
- [x] Excludes nulls, uses camelCase aliases, serializes enums — all via
model_serializer
- [x]
alias_generator=to_camel in base class (_JambonzBase) — no manual Field(alias=...) needed
- [x]
Input enum with UPPER_CASE names, lowercase values
- [x] Works with FastAPI (
response_model, -> type hint, or explicit construction)
- [x] Framework-agnostic:
model_dump() / model_dump_json() for Flask/Django
- [x]
Synthesizer and Recognizer typed models
- [x] FastAPI integration tests
Pending — Minimum
- [ ] Verify all resource paths match jambonz.cloud API (some may differ from docs)
- [ ] Webhook incoming models — typed models for parsing jambonz webhook payloads (call info, gather results, etc.)
- [ ]
py.typed marker for PEP 561
- [ ] Basic README with install + usage examples
Pending — Should Have
- [ ] Pagination support (if jambonz API supports it)
- [ ] All remaining resources: Users, Clients, ApiKeys, Alerts, RecentCalls, LcrRoutes, MicrosoftTeamsTenants
- [ ] Twilio-style dual access:
client.gateways.list(voip_carrier_sid="x") alongside chaining
- [ ] More verbs: Conference, Enqueue, Dequeue, Listen, Transcribe, SipRequest, Tag
- [ ] Verb validators (e.g. Gather without action_hook warning)
- [ ] Tests for sub-resources (gateways chaining)
- [ ] Tests against real API (integration test suite, skipped by default)
Pending — Nice to Have
- [ ] Composition operator
| for JambonzResponse
- [ ]
__repr__ for JambonzResponse
- [ ] Idempotency keys (if jambonz supports them)
- [ ] Streaming support for real-time events
- [ ] Webhook signature verification (like
WebhookResponse.verifyJambonzSignature in Node SDK)
- [ ] OpenAPI spec auto-discovery / validation
Dream
- [ ] MCP server exposing jambonz resources as tools (manage carriers, numbers, apps via LLM)
- [ ] CLI tool (
jambonz carriers list, jambonz numbers create)
- [ ] Code generation from jambonz OpenAPI spec (auto-generate resources + models)
- [ ] WebSocket client SDK (equivalent to
@jambonz/node-client-ws)
- [ ] Publish to PyPI
- [ ] Documentation site with examples per framework (FastAPI, Flask, Django)