> ## 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.

# C#- und .NET-SDK für KYC, AML und Transaktionen

> Didit C#- und .NET-SDK: Schnelleinstieg mit typisierten API-Aufrufen, Dependency Injection, Signaturprüfung für Webhooks und Token-Validierung.

Die offizielle Didit-Bibliothek für C# und .NET. Sie zielt auf .NET 8 und .NET Standard 2.0 ab, und jede API-Methode ist `async`. Verwenden Sie unter .NET Framework C# 11 oder höher. In der [Übersicht über die Server-SDKs](https://docs.didit.me/de/integration/server-sdks/overview.md) erfahren Sie, was alle SDKs gemeinsam haben.

## Installation

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

Fügen Sie für Dependency Injection in ASP.NET Core zusätzlich `Didit.Extensions.DependencyInjection` hinzu und registrieren Sie den Client mit `services.AddDidit()`.

Die Pakete sind [`Didit`](https://www.nuget.org/packages/Didit) und [`Didit.Extensions.DependencyInjection`](https://www.nuget.org/packages/Didit.Extensions.DependencyInjection) auf NuGet. Deren Quellcode und Changelog finden Sie unter [didit-protocol/sdk-dotnet](https://github.com/didit-protocol/sdk-dotnet) auf GitHub.

## Client konfigurieren

`new DiditClient()` liest `DIDIT_API_KEY` aus der Umgebung aus. Übergeben Sie `DiditClientOptions`, um diesen zu überschreiben oder um die Organisations- und Anwendungs-IDs festzulegen, die Aufrufe auf Anwendungsebene (Fälle, Netzwerke, regulatorische Berichte) benötigen. Erstellen Sie einen einzelnen Client und verwenden Sie ihn wieder.

```csharp theme={null}
using System;
using Didit;

using var client = new DiditClient(new DiditClientOptions
{
    ApiKey = Environment.GetEnvironmentVariable("DIDIT_API_KEY"),
    OrganizationId = Environment.GetEnvironmentVariable("DIDIT_ORGANIZATION_ID"),
    ApplicationId = Environment.GetEnvironmentVariable("DIDIT_APPLICATION_ID"),
    Timeout = TimeSpan.FromSeconds(30),
    MaxRetries = 2,
});

// Options for a single call.
var decision = await client.Sessions.RetrieveDecisionAsync(
    "11111111-2222-3333-4444-555555555555",
    requestOptions: new RequestOptions { Timeout = TimeSpan.FromSeconds(5), MaxRetries = 0 });
Console.WriteLine(decision.Status);
```

Erforderliche Anfrage-Eigenschaften sind als `required` definiert, sodass eine fehlende Eigenschaft zu einem Kompilierungsfehler führt. Optionale Eigenschaften, die Sie nicht setzen, werden nicht gesendet.

## Sitzung erstellen

Erstellen Sie eine [Verifizierungssitzung](https://docs.didit.me/de/sessions-api/create-session.md) für einen Workflow und leiten Sie Ihren Benutzer auf deren URL weiter.

```csharp theme={null}
using System;
using Didit;

using var client = new DiditClient();

var session = await client.Sessions.CreateAsync(new SessionsCreateParams
{
    WorkflowId = "11111111-2222-3333-4444-555555555555",
    VendorData = "user-123",
    Callback = "https://example.com/verification/done",
});
Console.WriteLine(session.Url);
```

## Entscheidung abrufen

Sobald der Benutzer den Vorgang abgeschlossen hat (oder sobald der Webhook eingeht), [rufen Sie die Entscheidung ab](https://docs.didit.me/de/sessions-api/retrieve-session.md). Jedes Funktionsergebnis ist eine Liste mit einem Eintrag pro Workflow-Knoten.

```csharp theme={null}
using System;
using Didit;

using var client = new DiditClient();

var decision = await client.Sessions.RetrieveDecisionAsync("11111111-2222-3333-4444-555555555555");
Console.WriteLine(decision.Status);
foreach (var verification in decision.IdVerifications ?? Array.Empty<SessionDecisionIdVerifications>())
{
    Console.WriteLine(verification.Status);
}
```

## Webhook verifizieren

Übergeben Sie den Roh-Body exakt so, wie er empfangen wurde, sowie eine Möglichkeit zum Lesen der Anfrage-Header. `DiditWebhooks.Verify` wirft eine `WebhookVerificationException` für alles, was keine gültige, zeitnahe Zustellung ist, und gibt andernfalls ein typisiertes Ereignis zurück.

```csharp theme={null}
using System;
using Didit;

var secret = Environment.GetEnvironmentVariable("DIDIT_WEBHOOK_SECRET") ?? "";

int HandleWebhook(string rawBody, Func<string, string?> header)
{
    try
    {
        var evt = DiditWebhooks.Verify(rawBody, header, secret);
        if (evt is SessionStatusUpdatedEvent updated)
        {
            Console.WriteLine($"{updated.SessionId} {updated.Status}");
        }
        return 200;
    }
    catch (WebhookVerificationException error)
    {
        Console.WriteLine($"rejected: {error.Reason}");
        return 400;
    }
}
```

In einer Minimal-API von ASP.NET Core lesen Sie den Body mit einem `StreamReader` ein und übergeben `name => request.Headers[name].FirstOrDefault()`. Wenn Sie das Secret rotieren, übergeben Sie beide: `new[] { newSecret, oldSecret }`. Weitere Informationen zu den Ereignissen und dem Signaturschema finden Sie unter [Webhooks](https://docs.didit.me/de/integration/webhooks.md).

## Transaktion überprüfen

Übermitteln Sie eine Zahlung, Auszahlung oder Krypto-Überweisung an die [Transaktionsüberwachung](https://docs.didit.me/de/transaction-monitoring/overview.md); die Antwort enthält deren Status und Risiko-Score.

```csharp theme={null}
using System;
using Didit;

using var client = new DiditClient();

var transaction = await client.Transactions.CreateAsync(new TransactionsCreateParams
{
    TransactionId = "txn-1001",
    TransactionCategory = "finance",
    TransactionDetails = new()
    {
        Direction = "outbound",
        Amount = 1500,
        Currency = "EUR",
    },
    Subject = new()
    {
        EntityType = "individual",
        VendorData = "user-123",
        FullName = "Maria Garcia",
    },
});
Console.WriteLine($"{transaction.Status} {transaction.Score}");
```

## Authentication-Token verifizieren

`Authentication` prüft die von Ihrem [Authentication](https://docs.didit.me/de/authentication/overview.md)-Aussteller signierten Zugriffs-Token direkt in Ihrem Backend, ohne für jede Anfrage Didit aufzurufen. Es tauscht außerdem Codes aus, aktualisiert Token, prüft und widerruft Sitzungen und führt Step-up-Authentifizierungen durch.

> [!NOTE]
>
> Die Token-Prüfung führt die unter [Token auf Ihrem Server verifizieren](https://docs.didit.me/de/authentication/tokens-and-jwks.md#token-auf-ihrem-server-prüfen) beschriebenen Prüfungen anhand des Ausstellers und der Signaturschlüssel Ihrer Anwendung durch.

```csharp theme={null}
using System;
using System.Threading.Tasks;
using Didit;

// The publishable key (pk_live_... or pk_test_...) carries your issuer URL.
var auth = Authentication.FromPublishableKey("pk_live_...");

async Task<string?> CurrentUserAsync(string accessToken)
{
    try
    {
        var claims = await auth.VerifyAccessTokenAsync(accessToken, audience: "your-application-id");
        return claims.Subject;
    }
    catch (TokenVerificationException error)
    {
        Console.WriteLine($"rejected: {error.Reason}");
        return null;
    }
}
```

## Fehler

```csharp theme={null}
using System;
using Didit;

using var client = new DiditClient();

try
{
    await client.Sessions.RetrieveDecisionAsync("11111111-2222-3333-4444-555555555555");
}
catch (NotFoundException)
{
    Console.WriteLine("no such session");
}
catch (ApiStatusException error)
{
    Console.WriteLine($"{error.StatusCode} {error.RequestId}");
}
```

## Listen und Dateien

```csharp theme={null}
using System;
using Didit;

using var client = new DiditClient();

// Lists page through every result.
await foreach (var session in await client.Sessions.ListAsync(new SessionsListParams { Status = "Approved" }))
{
    Console.WriteLine(session.SessionId);
}

// Uploads take FileUpload.FromPath, FromBytes or FromStream.
var result = await client.IdVerification.VerifyAsync(new IdVerificationVerifyParams
{
    FrontImage = FileUpload.FromPath("id-front.jpg"),
    BackImage = FileUpload.FromPath("id-back.jpg"),
});
Console.WriteLine(result.IdVerification?.Status);
```

Die Server-Endpoint-Seiten der [API-Referenz](https://docs.didit.me/de/api-reference/overview.md) enthalten ein .NET-Beispiel für ihre jeweilige Operation, mit Ausnahme der in der [Übersicht](https://docs.didit.me/de/integration/server-sdks/overview.md) genannten Endpoints und Felder, die in keinem 1.0.1-Release enthalten sind.


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