---
title: "SDKs"
description: "Die offiziellen SDKs für TypeScript und Python: aus der eingefrorenen Spec generiert, mit Idempotenz, Backoff, Blättern und Webhook-Prüfung. Während der Preview als Download mit Prüfsumme."
lang: de
url: https://developers.bodo-app.com/sdks/
apiVersion: 2026-11-01
---

# SDKs

Die offiziellen SDKs für TypeScript und Python: aus der eingefrorenen Spec generiert, mit Idempotenz, Backoff, Blättern und Webhook-Prüfung. Während der Preview als Download mit Prüfsumme.

> **Preview** Die SDKs gibt es während der Preview nur hier als Download. Auf npm und PyPI erscheinen sie mit dem Aufstieg der API zu stabil; der Download bleibt dann als zweiter Weg.

## TypeScript

Node 20 und neuer, Bun, Deno, Edge-Runtimes. Ohne Laufzeit-Abhängigkeiten, es braucht nur `fetch` und WebCrypto.

[bodo-api-1.0.0.tgz herunterladen](/sdk/1.0.0/bodo-api-1.0.0.tgz)

SHA-256: `b391653b2dbc9e0a465e62107f2dedac3cbdfaab10ae05a28025ae3cf2eb6927`

```bash
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);
```

## Python

Python 3.11 und neuer, synchron über `httpx`. Typisiert, mit generierten `attrs`-Modellen.

[bodo_api-1.0.0-py3-none-any.whl herunterladen](/sdk/1.0.0/bodo_api-1.0.0-py3-none-any.whl)

SHA-256: `07675907708e4d05d829be8c39c41996ba635fefacc9071b1232ff58f2878539`

```bash
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)
```

## Was das SDK für dich erledigt

- **Idempotency-Key**: bei jedem POST und DELETE, gleichbleibend über Wiederholungen
- **Backoff**: nach 429 und 503 mit `Retry-After`, höchstens 3 Versuche
- **Blättern**: über `nextCursor`, als Schleife statt Hand-Code
- **Webhooks und Fehler**: Signaturprüfung, Fehlerklasse mit `code` und `requestId`, Warnung bei Deprecation

## Versionierung des SDK

Semantische Versionen. Jede SDK-Version gehört zu genau einer API-Version und sendet sie im Header `Bodo-Version`.

| SDK-Version | API-Version | Unterstützt bis |
| --- | --- | --- |
| 1.x | 2026-11-01 | Sunset dieser API-Version, 12 Monate nach der Nachfolgerin |
| 2.x (Beispiel) | 2027-05-01 | Sunset ihrer API-Version |

Major: neue API-Version mit Bruch. Minor: neue Operationen, Felder oder Ereignisse. Patch: Fehlerkorrekturen. Preview-Operationen stehen hinter `preview: true` und dürfen sich auch im Minor ändern.

## Wie ein SDK entsteht

1. `openapi.2026-11-01.json` aus dem Repo
2. offene Generatoren: `openapi-typescript` mit `openapi-fetch` und `openapi-python-client`
3. Beispiele laufen als Tests gegen die Sandbox
4. CI legt die Archive hier ins Portal; ab stabil auch auf npm und PyPI, mit Herkunftsnachweis (Trusted Publishing)

Kein Dienst eines Dritten im Bauweg. Handgeschrieben sind nur die dünnen Hüllen für Retry, Blättern und Webhooks.
