> ## Documentation Index
> Fetch the complete documentation index at: https://docs.didit.me/llms.txt
> Use this file to discover all available pages before exploring further.

# Server-SDKs: Python, Node.js, Go, Java, PHP, Ruby, .NET

> Didit Server-APIs direkt im Backend mit offiziellen, typisierten SDKs aufrufen. Details zu Installation, Konfiguration, Fehlern und Versionierung.

Die Server-SDKs sind die offiziellen Didit-Bibliotheken für Ihr Backend. Jedes SDK ruft die Server-Endpoints der [API-Referenz](https://docs.didit.me/de/api-reference/overview.md) mit typisierten Anfragen und Antworten auf, verifiziert die Webhooks, die Didit an Sie sendet, und überprüft die Token von [Didit Authentication](https://docs.didit.me/de/authentication/overview.md). In Version 1.0.1 sind die beiden Google-Wallet-Endpoints noch in keinem Release enthalten: [eine Google-Wallet-Verifizierung starten](https://docs.didit.me/de/api-reference/digital-id-wallets/google-wallet.md) und [eine Wallet-Antwort übermitteln](https://docs.didit.me/de/standalone-apis/digital-id-wallet-response.md). Die SDKs für Python, Node.js, Java, PHP, Ruby und .NET enthalten alle anderen Server-Endpoints. In Go 1.0.1 fehlen zudem neun weitere Endpoints, größtenteils für die Travel Rule: siehe [Noch nicht im Go-SDK enthaltene Endpoints](https://docs.didit.me/de/integration/server-sdks/go.md#endpoints-die-noch-nicht-im-go-sdk-enthalten-sind).

Verwenden Sie sie überall dort, wo Ihr Code einen Didit-API-Schlüssel enthält: beim Erstellen von Verifizierungssitzungen, Abrufen von Entscheidungen, Aufrufen der eigenständigen APIs, Verwalten von Benutzern, Unternehmen, Workflows und Fällen sowie beim Screenen von Transaktionen und Wallets und für die Travel Rule. Verwenden Sie im Browser oder in einer mobilen App stattdessen die [Web-](https://docs.didit.me/de/integration/web-sdks/overview.md) und [Native-](https://docs.didit.me/de/integration/native-sdks/overview.md)SDKs: Sie präsentieren den Verifizierungsablauf Ihren Benutzern und enthalten zu keinem Zeitpunkt Ihren API-Schlüssel.

Die Seiten der Server-Endpoints in der [API-Referenz](https://docs.didit.me/de/api-reference/overview.md), einschließlich der Seiten für die [Datenbankvalidierung](https://docs.didit.me/de/standalone-apis/database-validation.md), zeigen für jedes Server-SDK ein Codebeispiel neben der cURL-Anfrage. Ein Beispiel wird angezeigt, sobald das neueste Release des SDKs den Endpoint und alle im Beispiel gesendeten Felder enthält: Wird der API ein Endpoint oder ein Feld hinzugefügt, werden die entsprechenden Beispiele mit dem nächsten Release des jeweiligen SDKs bereitgestellt. In Version 1.0.1 ist keines der 16 nach der Generierung hinzugefügten Anfragefelder der Datenbankvalidierung (wie `vin` oder `bank_account_number`) enthalten, weshalb auf den entsprechenden Dienstseiten ausschließlich cURL angezeigt wird.

## Installieren

```bash Python theme={null}
pip install didit-sdk
```

```bash Node.js theme={null}
npm install @didit-protocol/sdk-node
```

```bash Go theme={null}
go get github.com/didit-protocol/sdk-go
```

```kotlin Java theme={null}
implementation("me.didit:didit-java:1.0.1")
```

```bash PHP theme={null}
composer require didit-protocol/sdk-php guzzlehttp/guzzle
```

```bash Ruby theme={null}
gem install didit-sdk
```

```bash .NET theme={null}
dotnet add package Didit
```

| Sprache | Paket | Quelle | Minimale Laufzeitumgebung |
| - | - | - | - |
| [Python](https://docs.didit.me/de/integration/server-sdks/python.md) | [PyPI `didit-sdk`](https://pypi.org/project/didit-sdk/) | [sdk-python](https://github.com/didit-protocol/sdk-python) | Python 3.10 |
| [Node.js und TypeScript](https://docs.didit.me/de/integration/server-sdks/node.md) | [npm `@didit-protocol/sdk-node`](https://www.npmjs.com/package/@didit-protocol/sdk-node) | [sdk-node](https://github.com/didit-protocol/sdk-node) | Node.js 18, Bun, Deno, Edge-Laufzeitumgebungen mit `fetch` |
| [Go](https://docs.didit.me/de/integration/server-sdks/go.md) | [Go module `github.com/didit-protocol/sdk-go`](https://pkg.go.dev/github.com/didit-protocol/sdk-go) | [sdk-go](https://github.com/didit-protocol/sdk-go) | Go 1.22 |
| [Java und Kotlin](https://docs.didit.me/de/integration/server-sdks/java.md) | [Maven Central `me.didit:didit-java`](https://central.sonatype.com/artifact/me.didit/didit-java) | [sdk-java](https://github.com/didit-protocol/sdk-java) | Java 11 |
| [PHP](https://docs.didit.me/de/integration/server-sdks/php.md) | [Packagist `didit-protocol/sdk-php`](https://packagist.org/packages/didit-protocol/sdk-php) | [sdk-php](https://github.com/didit-protocol/sdk-php) | PHP 8.1 |
| [Ruby](https://docs.didit.me/de/integration/server-sdks/ruby.md) | [RubyGems `didit-sdk`](https://rubygems.org/gems/didit-sdk) | [sdk-ruby](https://github.com/didit-protocol/sdk-ruby) | Ruby 3.1 |
| [C# und .NET](https://docs.didit.me/de/integration/server-sdks/dotnet.md) | [NuGet `Didit`](https://www.nuget.org/packages/Didit) | [sdk-dotnet](https://github.com/didit-protocol/sdk-dotnet) | .NET 8 oder .NET Standard 2.0 |

## Konfigurieren

Jedes SDK liest dieselben Umgebungsvariablen aus, sodass ein ohne Optionen erstellter Client sofort einsatzbereit ist. Edge-Laufzeitumgebungen verfügen über keine Prozessumgebung: Übergeben Sie den API-Schlüssel dem Node.js-Client dort als Option.

| Variable | Verwendungszweck |
| - | - |
| `DIDIT_API_KEY` | Jede Anfrage, die einen API-Schlüssel erfordert. Erstellen Sie den Schlüssel in der Konsole unter [API-Schlüssel](https://docs.didit.me/de/console/api-keys.md). |
| `DIDIT_ORGANIZATION_ID`, `DIDIT_APPLICATION_ID` | Operationen unter `/v3/organization/{organization_id}/application/{application_id}/` (Fälle, Netzwerke, regulatorische Berichte, Berichtsvorlagen sowie einige Benutzer- und Unternehmens-Tools). Das SDK befüllt beide Pfad-IDs aus dem Client, sodass Sie diese nie pro Aufruf übergeben müssen. Ohne diese schlagen jene Aufrufe fehl, noch bevor eine Anfrage gesendet wird. |
| `DIDIT_LOG=debug` | Protokolliert Methode, Pfad, Status, Dauer und Anfrage-ID jeder Anfrage. Payloads und Header werden niemals protokolliert. |

Alles, was Sie über die Umgebung festlegen können, lässt sich auch an den Client übergeben – zusammen mit der Basis-URL, dem Timeout, Wiederholungsversuchen, Standard-Headern und Ihrem eigenen HTTP-Client. Erstellen Sie einen Client pro Prozess und teilen Sie ihn: Er verwaltet einen Connection-Pool und kann sicher über mehrere Threads oder Tasks hinweg verwendet werden.

Die `account`-Methoden ([programmatische Registrierung](https://docs.didit.me/de/integration/programmatic-registration.md): Registrieren, Anmelden, Organisationen und Anwendungen) rufen `https://apx.didit.me/auth/v2` auf und senden Ihren API-Schlüssel zu keinem Zeitpunkt. Melden Sie sich mit `account.login` an und übergeben Sie das zurückgegebene Access-Token anschließend als Account-Token an den Client.

## Was jedes SDK bietet

* **Ressourcen und Methoden.** Aufrufe folgen den Ressourcen der API: `client.<resource>.<method>(...)`, beispielsweise `sessions.create`, `sessions.retrieve_decision` oder `transactions.create`, in der jeweiligen Schreibweise der Sprache. Pfad-IDs sind Positionsargumente; Body und Query bilden eine Gruppe benannter Felder. Python, Node.js, PHP und Ruby verwenden die API-eigenen Feldnamen (`workflow_id`); Go, Java und .NET nutzen die Konventionen ihrer jeweiligen Sprache (`WorkflowID`, `workflowId`, `WorkflowId`).
* **Listen.** Listenmethoden paginieren automatisch durch alle Ergebnisse für Sie (unter Verwendung von `limit` und `offset`) und stellen zudem jede Seite mit `count`, `next`, `previous` und `results` bereit. In Ruby iteriert `auto_paging_each` durch jede Seite, wobei `total_count`, `next_url` und `previous_url` einer Seite den Feldern `count`, `next` und `previous` der API entsprechen.
* **Dateien.** Uploads (Dokumentbilder, Selfies, Adressnachweise, Importe) akzeptieren einen Pfad, Bytes oder einen Stream. Downloads (Sitzungs-PDFs, Berichte) geben Bytes oder einen Stream zurück, niemals geparstes JSON.
* **Vorwärtskompatibilität.** Ein Antwortfeld oder ein Enum-Wert, den die SDK-Version noch nicht kennt, wird beibehalten und bleibt lesbar, ohne einen Fehler auszulösen. So führt eine API-Erweiterung nicht zu Problemen in einer produktiven Integration.
* **Webhooks.** `webhooks.verify` prüft die Header `X-Signature-V2` und `X-Signature` sowie den Zeitstempel einer Zustellung anhand Ihres Webhook-Secrets und gibt ein typisiertes Ereignis zurück. Es akzeptiert eine Liste von Secrets, während Sie ein Secret rotieren. Das Signaturschema finden Sie unter [Webhooks](https://docs.didit.me/de/integration/webhooks.md).
* **Authentifizierung.** Ein `Authentication`-Helper verifiziert die Access- und ID-Token, die der Aussteller Ihrer Authentication signiert, und ruft dessen Token-, Sitzungs- und Step-up-Endpoints auf. Er verwendet Ihren API-Schlüssel zu keinem Zeitpunkt.

## Fehler, Wiederholungsversuche und Timeouts

| Fehler | Wann |
| - | - |
| `APIConnectionError`, `APITimeoutError` | Keine Antwort erhalten |
| `APIStatusError` | Jede andere Nicht-2xx-Antwort, mit dem Status, dem geparsten Body, den Headern und der Request-ID |
| `BadRequestError` 400, `AuthenticationError` 401, `PermissionDeniedError` 403, `NotFoundError` 404, `ConflictError` 409, `UnprocessableEntityError` 422, `RateLimitError` 429, `InternalServerError` 5xx | Unterklassen von `APIStatusError` |
| `WebhookVerificationError` | Eine Webhook-Zustellung hat die Verifizierung nicht bestanden; der `reason` gibt den Grund an |
| `ConfigurationError` | Ein fehlender API-Schlüssel, ein fehlendes Account-Token, eine fehlende Organisations-ID oder eine fehlende Anwendungs-ID |

Jeder Fehler leitet sich von `DiditError` ab. In Go implementiert jeder Fehler das `didit.Error`-Interface und ist ein Zeigertyp wie `*didit.NotFoundError`. Java, PHP und .NET benennen sie mit ihrem üblichen `Exception`-Suffix und schreiben `API` als `Api`: `DiditException`, `ApiStatusException`, `NotFoundException`.

Die SDKs wiederholen eine fehlgeschlagene Anfrage bis zu 2-mal mit exponentiellem Backoff ab 0,5 Sekunden (Full Jitter, maximal 8 Sekunden) und unter Berücksichtigung von `Retry-After`. `GET`, `HEAD`, `PUT` und `DELETE` werden bei Verbindungsfehlern, Timeouts, 408, 429 und 5xx wiederholt. `POST` und `PATCH` werden nur bei 429 wiederholt oder wenn die Verbindung vor dem Senden der Anfrage fehlgeschlagen ist, sodass ein Wiederholungsversuch niemals eine zweite Sitzung oder Transaktion erstellt. Das Standard-Timeout beträgt 60 Sekunden. Jede Antwort gibt außerdem den rohen HTTP-Status, die Header und die Request-ID zurück. Siehe [Rate-Limiting](https://docs.didit.me/de/integration/rate-limiting.md) für die Grenzwerte hinter 429.

## Versionierung und Support

* Die SDKs folgen semantischer Versionierung mit einer Regel für API-Änderungen. Eine Änderung, die die Didit-API widerspiegelt, ist ein Minor-Release, selbst wenn sie zu Fehlern in typisiertem Code führen kann (ein Feld, dessen Typ sich geändert hat, ein Feld, das jetzt null sein kann, oder ein entfernter Endpoint, ein entferntes Feld oder ein entfernter Enum-Wert): Die API verhält sich für jeden Aufrufer bereits so, daher ist eine ältere SDK-Version nicht sicherer. In den Release Notes werden solche Änderungen unter „API changes that can break typed code“ aufgeführt.
* Eine Major-Version gibt es nur bei einer Änderung am Design des SDKs selbst: eine Methode oder Ressource wird umbenannt oder entfernt, während die API sie beibehält, eine Änderung an der Client-Konfiguration, an Fehlern, Wiederholungsversuchen, Paginierung oder dem Verhalten der Webhook-Verifizierung oder eine nicht mehr unterstützte Laufzeitversion. Wenn ein Endpoint die API verlässt oder seine Methode umbenannt wird, bleibt die alte Methode für mindestens eine weitere Minor-Version als veraltet markiert bestehen, sodass Ihr Code weiterhin gebaut werden kann, während Sie zur neuen Methode wechseln. Jede Sprache behält ihre eigene Versionsnummer: Node.js, PHP und Ruby sind bei 2.x und die anderen bei 1.x, da diese drei eine API-Änderung als Major-Version veröffentlicht haben, bevor diese Regel galt.
* Sie werden aus dem veröffentlichten API-Vertrag ([`openapi-25.json`](https://docs.didit.me/openapi-25.json) und [`openapi-auth.json`](https://docs.didit.me/openapi-auth.json)) generiert, und ihre [Didit Authentication](https://docs.didit.me/de/authentication/overview.md)-Methoden werden anhand von [`openapi-authentication.json`](https://docs.didit.me/openapi-authentication.json) überprüft. Alle drei werden täglich geprüft, sodass ein neuer Endpoint oder ein neues Feld in einem regulären Release aller sieben SDKs verfügbar wird.
* Jedes SDK unterstützt die in der Tabelle angegebene Mindestversion der Laufzeit und jedes neuere Release. Seine Tests laufen auf der Mindestversion und auf jedem neueren Release bzw. auf jeder Long-Term-Support-Version für Node.js und Java.
* Das `CHANGELOG.md` jedes Repositorys führt die Änderungen jedes Releases auf.
* Melden Sie ein Sicherheitsproblem vertraulich über die Sicherheitsmeldungen des jeweiligen SDK-Repositorys oder an [support@didit.me](mailto:support@didit.me).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.