SDKs
SDKs
Two officially-supported clients — Node and Python — that mirror each other 1:1.
We ship two SDKs. Both are typed end-to-end, both include retries + auto-idempotency + webhook verification, and both stay in lock-step with the REST API. Anything you can do in one, you can do in the other.
Node SDK
@genie-os/sdk — TypeScript-first, ESM + CJS, runs anywhere fetch is available.
Python SDK
genieos — sync + async clients on httpx + Pydantic. Python 3.10+.
What\u2019s included in both
- Typed methods for every endpoint (workspaces, templates, transactional, sequences, events, webhooks, audit).
- Per-call idempotency keys, auto-generated when not supplied. See Idempotency.
- Exponential-backoff retries on 408/429/5xx, honouring
Retry-After. - Typed errors that round-trip the API\u2019s structured envelope
(
GenieOSValidationError,GenieOSRateLimitError, etc.). - A webhook verifier that takes the raw body + signature header and either returns the decoded event or throws.
- A codegen command that turns published schema contracts
into typed
variablesfortemplates.send().
What\u2019s not in the SDKs
We deliberately keep the SDKs thin:
- No template authoring helpers. Push templates with the CLI or via the dashboard — your IDE is the right place to edit MJML/HTML.
- No retry queues / outbox tables. That\u2019s your domain; the API\u2019s idempotency support means you don\u2019t need ours.
- No analytics / "open tracking inflators" / "ai subject line scorers". Those live in the dashboard or are deliberate features of the product you build on top of GenieOS.
Other languages
If you want a client we don\u2019t ship — Go, Ruby, Elixir, Rust, .NET — the path is short:
- Use the REST API directly. Every example in these docs has a
curltab. - Verify webhooks with the 5-line snippet on the Webhooks page.
- Open an issue at github.com/mail-genie/genieos if you\u2019d use a first-class SDK in your language; we triage SDKs by demand, not by checklist.