Skip to content

SDKs

PreviewDuring the preview the SDKs are only available here as a download. They appear on npm and PyPI once the API becomes stable; the download then stays as a second way.

TypeScript@bodo/api 1.0.0

Node 20 and newer, Bun, Deno, edge runtimes. No runtime dependencies, it only needs fetch and WebCrypto.
Download bodo-api-1.0.0.tgz
SHA-256 b391…6927
Shell
npm install ./bodo-api-1.0.0.tgz
TypeScript
// Portal D11 · SDKs — the TypeScript card: pages without hand-written cursor code, one task done.
// Run: BODO_API_KEY=bodo_uk_test_… bun examples/sdk-overview.ts
import { Bodo } from "@bodo/api";

const bodo = new Bodo({ apiKey: process.env.BODO_API_KEY, preview: true });

// walks nextCursor by itself
for await (const contact of bodo.contacts.list({ updatedSince: "2026-11-03T09:00:00Z" })) {
  if ("deleted" in contact) continue;
  console.log(contact.lastName);
}

const task = await bodo.tasks.create({ title: "Angebot nachfassen" });
const done = await bodo.tasks.complete(task.id);
console.log(done.id, done.status);

Pythonbodo-api 1.0.0

Python 3.11 and newer, synchronous over httpx. Typed, with generated attrs models.
Shell
pip install ./bodo_api-1.0.0-py3-none-any.whl
Python
# Pages without hand-written cursor code, one task done.
# Run: BODO_API_KEY=bodo_uk_test_… python examples/sdk_overview.py
import os

from bodo_api import Bodo

bodo = Bodo(api_key=os.environ["BODO_API_KEY"], preview=True)

# walks next_cursor by itself
for contact in bodo.contacts.list(updated_since="2026-11-03T09:00:00Z"):
    print(contact.id)

task = bodo.tasks.create(title="Angebot nachfassen")
done = bodo.tasks.complete(task.id)
print(done.id, done.status)

What the SDK does for you

Idempotency-Keyon every POST and DELETE, the same across retries
Backoffafter 429 and 503 with Retry-After, at most 3 attempts
Pagingover nextCursor, as a loop instead of hand-written code
Webhooks and errorssignature check, error class with code and requestId, warning on deprecation

Versioning of the SDK

Semantic versions. Every SDK version belongs to exactly one API version and sends it in the Bodo-Version header.
SDK versionAPI versionSupported until
1.x2026-11-01Sunset of this API version, 12 months after its successor
2.x (example)2027-05-01Sunset of its API version
Major: new API version with breaking changes. Minor: new operations, fields or events. Patch: bug fixes. Preview operations sit behind preview: true and may change in a minor release too.

How an SDK is made

  1. openapi.2026-11-01.json from the repository
  2. open generators: openapi-typescript with openapi-fetch and openapi-python-client
  3. the examples run as tests against the sandbox
  4. CI puts the archives here into the portal; once stable also on npm and PyPI, with provenance (Trusted Publishing)
No third-party service in the build path. Only the thin wrappers for retry, paging and webhooks are hand-written.