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

# Entscheidungs-E-Mail-Vorschau API: genehmigt, abgelehnt

> Didit zeigt die genehmigte oder abgelehnte E-Mail mit Empfänger, Absender und Sprache, bevor Sie den Sitzungsstatus ändern.



Prompt für die Vorschau der Entscheidungs-E-Mail
        Prompt in die Zwischenablage kopieren



      
      

\<pre>

\`Preview the Approved or Declined email a Didit session sends the person, then confirm the decision so exactly that email goes out.

Endpoint:
POST https://verification.didit.me/v3/session/{session_id}/decision-email-preview/

Authentication:
x-api-key (client API key) or a user-auth token. Privilege: write:sessions. A scoped API key needs write access to decisions.

Path parameter:
\- session_id (UUID): KYC or KYB; Didit resolves it against both session types.

Request body:
\- new_status (string, required): "Approved" or "Declined".
\- email_language (string, optional, default "en"): language of the email. A language that is not offered falls back to English.

The session's current status must be one of: Approved, Declined, In Review, Kyc Expired, Abandoned, Resubmitted.

Previewing changes nothing and sends nothing.

Response (200, Cache-Control: no-store):
\- recipient: the person's own address (the one they verified in the flow, else the one in contact_details). Empty string when none is known.
\- recipient_source: "email_verification", "contact_details", or "" when there is no address.
\- sender, sender_name, sender_email: the From header and its parts.
\- sender_kind: "customer" (your verified sender domain) or "didit" (Didit's sender).
\- subject, html: the email exactly as sent. Render html in a sandboxed frame.
\- language: the language actually used.
\- will_be_sent (boolean) and not_sent_reason: null, "status_unchanged", "notification_emails_disabled", "no_recipient" or "sandbox".
\- preview_token: receipt for this exact email, valid 15 minutes. Empty when there is no recipient.

Confirm with PATCH https://verification.didit.me/v3/session/{session_id}/update-status/:
\{
"new_status": "<same new_status>",
"send_email": true,
"email_address": "<recipient>",
"email_language": "<language>",
"email_preview_token": "<preview_token>"
}
If the recipient, language, session status, sender or email changed since the preview, or the receipt is older than 15 minutes, update-status returns 409 { "detail": "This email preview changed or expired. Preview the message again before confirming." } and changes nothing. Preview again and confirm with the new receipt.

curl example:
curl -X POST https://verification.didit.me/v3/session/<SESSION_ID>/decision-email-preview/ \
-H "x-api-key: <API_KEY>" \
-H "Content-Type: application/json" \
-d '{ "new_status": "Approved", "email_language": "en" }'

Failure modes:
\- 400: the session is not in an accepted status ({ "detail": "Only sessions with status ... can be updated. Current status: ..." }), or new_status is missing or invalid.
\- 401: the scoped API key has expired.
\- 403: missing credentials (a wrong, revoked or expired key gets 401), the caller lacks write:sessions, a scoped key lacks decisions write, or the session belongs to another application ({ "detail": "You do not have permission to perform this action." }).
\- 404: { "detail": "Not found." } when no session with this session_id exists.

For end-to-end Didit integration, paste in the full prompt at /integration/integration-prompt.`

\</pre>



      
      

Einfügen in

Die Vorschau ändert nichts und versendet nichts.
Die Antwort zeigt die E-Mail genau so, wie die Person sie erhält, wenn Sie die Sitzung mit `send_email: true` auf `Approved` oder `Declined` setzen.
Außerdem wird angegeben, wer die E-Mail erhält, von wem sie kommt und ob die Bestätigung sie tatsächlich versendet.## Wer die E-Mail erhältDie E-Mail geht an die eigene Adresse der Person: an die, die sie in einem E-Mail-Verifizierungsschritt des Ablaufs verifiziert hat, andernfalls an die in `contact_details` bei der Erstellung der Sitzung angegebene Adresse.
`recipient_source` gibt an, welche davon gilt (`email_verification` oder `contact_details`).
Wenn die Sitzung für die Person keine Adresse hat, sind `recipient`, `recipient_source` und `preview_token` leere Zeichenketten, und es kann keine E-Mail versendet werden.Die E-Mail wird über die verifizierte Absenderdomain Ihrer Anwendung versendet, wenn Ihre [White-Label-Konfiguration](https://docs.didit.me/de/console/white-label.md) gilt (`sender_kind: customer`). Andernfalls wird sie über den Absender von Didit versendet (`sender_kind: didit`).## Ob die E-Mail versendet wird`will_be_sent` ist `true`, wenn die Bestätigung der Änderung mit `send_email: true` die E-Mail versendet.
Ist der Wert `false`, erklärt `not_sent_reason`, warum:| `not_sent_reason` | Bedeutung |
| - | - |
| `status_unchanged` | Die Sitzung hat diesen Status bereits. Die Aktualisierung ändert daher nichts und versendet nichts. |
| `notification_emails_disabled` | Die Sitzung wurde ohne `contact_details.send_notification_emails: true` erstellt, daher wird keine Entscheidungs-E-Mail an die in `contact_details` angegebene Adresse versendet. |
| `no_recipient` | Für die Person ist keine Adresse bekannt. |
| `sandbox` | Die Sitzung ist eine Sandbox-Sitzung, und der Empfänger hat den E-Mail-Versand in der Sandbox nicht aktiviert. Die E-Mail wird daher nur simuliert. Siehe [E-Mail-Opt-in](https://docs.didit.me/de/integration/sandbox-testing.md#otp-codes-und-e-mail-opt-in). |## Entscheidung bestätigenRufen Sie [Sitzungsstatus aktualisieren](https://docs.didit.me/de/sessions-api/update-status.md) mit diesen Feldern auf:| Feld von Sitzungsstatus aktualisieren | Wert |
| - | - |
| `new_status` | Der gleiche `new_status` wie in der Vorschau |
| `send_email` | `true` |
| `email_address` | `recipient` aus der Vorschau |
| `email_language` | `language` aus der Vorschau |
| `email_preview_token` | `preview_token` aus der Vorschau |Der Beleg läuft nach 15 Minuten ab.
Wenn sich Empfänger, Sprache, Sitzungsstatus, Absender oder E-Mail seit der Vorschau geändert haben, gibt die Aktualisierung `409` zurück, bevor sich etwas ändert.
Erstellen Sie dann eine neue Vorschau und bestätigen Sie mit dem neuen Beleg.## Verwandte Themen- [Sitzungsstatus aktualisieren](https://docs.didit.me/de/sessions-api/update-status.md): Sitzung genehmigen oder ablehnen und die E-Mail versenden.
- [Vorschau der E-Mail zur erneuten Einreichung](https://docs.didit.me/de/sessions-api/preview-resubmission.md): stattdessen die E-Mail für eine erneute Einreichung in der Vorschau anzeigen.
- [White-Label](https://docs.didit.me/de/console/white-label.md): Absender und Branding, die für die E-Mail verwendet werden.


## OpenAPI

````yaml de/openapi-25.json POST /v3/session/{sessionId}/decision-email-preview/
openapi: 3.0.0
info:
  version: 3.0.0
  title: Didit Verification API
  description: API für Ausweisverifizierung. Authentifizierung über den x-api-key-Header.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/session/{sessionId}/decision-email-preview/:
    post:
      tags:
        - Sessions
      summary: Vorschau der Entscheidungs-E-Mail einer Sitzung anzeigen
      description: >-
        Rendern Sie die E-Mail, die die Person erhält, wenn Sie eine Sitzung mit
        `send_email: true` auf `Approved` oder `Declined` setzen, ohne die
        Sitzung zu ändern oder etwas zu senden. Die Antwort zeigt Betreff und
        HTML genau so, wie sie gesendet werden, den Empfänger, den Absender, die
        Sprache und ob das Bestätigen der Änderung die E-Mail überhaupt sendet
        (`will_be_sent`, `not_sent_reason`).


        Der Empfänger ist die eigene Adresse der Person: diejenige, die sie in
        einem E-Mail-Verifizierungsschritt des Workflows verifiziert hat,
        andernfalls diejenige, die bei der Erstellung der Sitzung in
        `contact_details` angegeben wurde. Der Absender ist die verifizierte
        Absenderdomain Ihrer Anwendung, wenn White-Label gilt (`sender_kind:
        customer`), andernfalls der Didit-Absender (`sender_kind: didit`).


        Um genau das zu senden, was Sie in der Vorschau gesehen haben, rufen Sie
        [Update Session Status](/de/sessions-api/update-status) mit demselben
        `new_status`, `send_email: true`, `email_address` auf `recipient`,
        `email_language` auf `language` und `email_preview_token` auf
        `preview_token` auf. Der Beleg läuft nach 15 Minuten ab. Wenn sich
        Empfänger, Sprache, Sitzungsstatus, Absender oder E-Mail seit der
        Vorschau geändert haben, gibt die Aktualisierung `409` zurück, bevor
        etwas geändert wird; führen Sie die Vorschau erneut durch und bestätigen
        Sie mit dem neuen Beleg.


        Funktioniert für Benutzerverifizierungs- (KYC) und
        Unternehmensverifizierungs-Sitzungen (KYB) im Status `Approved`,
        `Declined`, `In Review`, `Kyc Expired`, `Abandoned` oder `Resubmitted`.
        Die Statusprüfung läuft vor der Body-Validierung. Erfordert die
        Berechtigung `write:sessions`; ein berechtigungsbeschränkter
        API-Schlüssel benötigt Schreibzugriff auf Entscheidungen. Antworten
        verwenden `Cache-Control: no-store`: Behandeln Sie sie als vertraulichen
        Verifizierungsinhalt.
      operationId: post_v3_session_decision_email_preview
      parameters:
        - in: path
          name: sessionId
          required: true
          description: >-
            UUID der Verifizierungssitzung. Akzeptiert sowohl Benutzer- (KYC)
            als auch Unternehmens- (KYB) Sitzungs-IDs.
          schema:
            type: string
            format: uuid
            example: 3fa85f64-5717-4562-b3fc-2c963f66afa6
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - new_status
              properties:
                new_status:
                  type: string
                  enum:
                    - Approved
                    - Declined
                  description: >-
                    Die Entscheidung, deren E-Mail Sie in der Vorschau anzeigen
                    möchten.
                  example: Approved
                email_language:
                  type: string
                  default: en
                  description: >-
                    Sprache der E-Mail, derselbe Standardwert wie bei
                    Sitzungsstatus aktualisieren. Wird eine nicht angebotene
                    Sprache angegeben, erfolgt ein Fallback auf Englisch; das
                    Feld `language` in der Antwort gibt an, welche Sprache
                    verwendet wird.
                  example: en
            examples:
              Approved:
                summary: Vorschau der E-Mail „Genehmigt“ auf Englisch anzeigen
                value:
                  new_status: Approved
              Declined in Spanish:
                summary: Vorschau der E-Mail „Abgelehnt“ auf Spanisch anzeigen
                value:
                  new_status: Declined
                  email_language: es
      responses:
        '200':
          description: >-
            Nur Vorschau. Die Sitzung bleibt unverändert und es wird keine
            E-Mail gesendet.
          headers:
            Cache-Control:
              description: >-
                Immer `no-store`: Die Vorschau enthält Verifizierungsinhalte und
                darf nicht zwischengespeichert werden.
              schema:
                type: string
                example: no-store
          content:
            application/json:
              schema:
                type: object
                required:
                  - recipient
                  - recipient_source
                  - sender
                  - sender_name
                  - sender_email
                  - sender_kind
                  - subject
                  - html
                  - text
                  - language
                  - will_be_sent
                  - not_sent_reason
                  - preview_token
                properties:
                  recipient:
                    type: string
                    description: >-
                      Die Adresse, an die die E-Mail gesendet wird. Eine leere
                      Zeichenkette, wenn keine Adresse für die Person bekannt
                      ist: Dann kann keine E-Mail gesendet werden und
                      `preview_token` ist ebenfalls leer. Übergeben Sie sie als
                      `email_address`, wenn Sie bestätigen.
                    example: person@example.com
                  recipient_source:
                    type: string
                    enum:
                      - email_verification
                      - contact_details
                      - ''
                    description: >-
                      Woher `recipient` stammt. `email_verification`: die
                      Adresse, die die Person in einem
                      E-Mail-Verifizierungsschritt des Ablaufs verifiziert hat.
                      `contact_details`: die in `contact_details` bei der
                      Erstellung der Sitzung angegebene Adresse. Eine leere
                      Zeichenkette, wenn keine Adresse vorhanden ist.
                    example: email_verification
                  sender:
                    type: string
                    description: Der `From`-Header, mit dem die E-Mail gesendet wird.
                    example: Example App <no-reply@mail.example.com>
                  sender_name:
                    type: string
                    description: Der Teil des Anzeigenamens von `sender`.
                    example: Example App
                  sender_email:
                    type: string
                    format: email
                    description: Der Adressteil von `sender`.
                    example: no-reply@mail.example.com
                  sender_kind:
                    type: string
                    enum:
                      - customer
                      - didit
                    description: >-
                      `customer`: Die E-Mail wird von der verifizierten
                      Absender-Domain Ihrer Anwendung versendet (White-Label).
                      `didit`: Sie wird vom Didit-eigenen Absender versendet.
                    example: customer
                  subject:
                    type: string
                    description: Die Betreffzeile genau so, wie sie gesendet wird.
                    example: Your verification has been approved in Example App
                  html:
                    type: string
                    description: >-
                      Das HTML der E-Mail exakt so, wie es versendet wird, mit
                      eingebettetem Logo als Data-URL. Rendern Sie es in einem
                      Sandboxed-Frame, niemals direkt im DOM Ihrer Anwendung.
                    example: <!DOCTYPE html><html><body>...</body></html>
                  text:
                    type: string
                    description: >-
                      Der Text der E-Mail als Klartext, wie ihn der
                      Nachrichtenverlauf der Person speichert, für eine kompakte
                      Vorschau (das HTML bleibt die E-Mail, die die Person
                      erhält).
                    example: >-
                      Verification Approved


                      Your identity has been successfully verified with Acme
                      Pay. No further action is needed on your part.
                  language:
                    type: string
                    description: >-
                      Die Sprache, in der die E-Mail verfasst ist. Englisch
                      (`en`), wenn das angeforderte `email_language` nicht
                      angeboten wird.
                    example: en
                  will_be_sent:
                    type: boolean
                    description: >-
                      Gibt an, ob das Bestätigen der Änderung mit `send_email:
                      true` diese E-Mail versendet. `false`, wenn
                      `not_sent_reason` gesetzt ist.
                    example: true
                  not_sent_reason:
                    type: string
                    nullable: true
                    enum:
                      - status_unchanged
                      - notification_emails_disabled
                      - no_recipient
                      - sandbox
                      - null
                    description: >-
                      Warum bei der Bestätigung keine E-Mail gesendet werden
                      würde, oder `null`, wenn sie gesendet wird.
                      `status_unchanged`: Die Sitzung hat diesen Status bereits,
                      daher ändert die Aktualisierung nichts und sendet nichts.
                      `notification_emails_disabled`: Die Sitzung wurde ohne
                      `contact_details.send_notification_emails: true` erstellt,
                      daher geht keine Entscheidungs-E-Mail an die in
                      `contact_details` angegebene Adresse. `no_recipient`: Für
                      die Person ist keine Adresse bekannt. `sandbox`: Eine
                      Sandbox-Sitzung, deren Empfänger die
                      Sandbox-E-Mail-Zustellung nicht aktiviert hat, sodass der
                      Versand nur simuliert wird.
                    example: null
                  preview_token:
                    type: string
                    description: >-
                      Signierte Quittung für genau diese E-Mail, gültig für 15
                      Minuten. Übergeben Sie sie als `email_preview_token` an
                      [Sitzungsstatus
                      aktualisieren](/de/sessions-api/update-status). Eine leere
                      Zeichenfolge, wenn kein Empfänger vorhanden ist.
                    example: >-
                      eyJkaWdlc3QiOiI0ZjJhIn0:1uExAm:Pl3x4mpleS1gnatureValue000000000000000
              examples:
                Will Be Sent:
                  summary: >-
                    Die „Approved“-E-Mail geht an die im Ablauf verifizierte
                    Adresse
                  value:
                    recipient: person@example.com
                    recipient_source: email_verification
                    sender: Example App <no-reply@mail.example.com>
                    sender_name: Example App
                    sender_email: no-reply@mail.example.com
                    sender_kind: customer
                    subject: Your verification has been approved in Example App
                    html: <!DOCTYPE html><html><body>...</body></html>
                    language: en
                    will_be_sent: true
                    not_sent_reason: null
                    preview_token: >-
                      eyJkaWdlc3QiOiI0ZjJhIn0:1uExAm:Pl3x4mpleS1gnatureValue000000000000000
                No Recipient:
                  summary: Für die Person ist keine Adresse bekannt
                  value:
                    recipient: ''
                    recipient_source: ''
                    sender: Example App <no-reply@mail.example.com>
                    sender_name: Example App
                    sender_email: no-reply@mail.example.com
                    sender_kind: customer
                    subject: Your verification has been declined in Example App
                    html: <!DOCTYPE html><html><body>...</body></html>
                    language: en
                    will_be_sent: false
                    not_sent_reason: no_recipient
                    preview_token: ''
        '400':
          description: >-
            Die Sitzung befindet sich nicht in einem von diesem Endpoint
            akzeptierten Status (`{"detail": ...}`), oder der Body ist ungültig
            (`{"<field>": ["<message>"]}`).
          content:
            application/json:
              examples:
                Wrong Current Status:
                  summary: >-
                    Sitzung befindet sich nicht in einem Status, den dieser
                    Endpoint akzeptiert
                  value:
                    detail: >-
                      Only sessions with status Approved, Declined, In Review,
                      Kyc Expired, Abandoned, Resubmitted can be updated.
                      Current status: In Progress
                Invalid new_status:
                  summary: new_status ist nicht Approved oder Declined
                  value:
                    new_status:
                      - '"Resubmitted" is not a valid choice.'
                Missing new_status:
                  summary: Erforderliches Feld weggelassen
                  value:
                    new_status:
                      - This field is required.
        '401':
          description: >-
            Der API-Schlüssel mit eingeschränktem Geltungsbereich ist
            abgelaufen.
          content:
            application/json:
              examples:
                Expired API Key:
                  summary: >-
                    API-Schlüssel mit eingeschränktem Berechtigungsumfang nach
                    Ablaufdatum
                  value:
                    detail: This API key has expired.
        '403':
          description: >-
            Fehlende Anmeldedaten, ein Aufrufer ohne das
            `write:sessions`-Privileg, ein API-Schlüssel mit Gültigkeitsbereich
            ohne den für diesen Endpoint erforderlichen Zugriff oder eine
            `session_id`, die zu einer anderen Anwendung gehört.
          content:
            application/json:
              examples:
                Invalid Credentials:
                  summary: Fehlender oder ungültiger x-api-key
                  value:
                    detail: >-
                      Authentication credentials were not provided or are
                      invalid.
                Missing Privilege:
                  summary: Dem Aufrufer fehlt write:sessions
                  value:
                    detail: You do not have permission to perform this action.
                Scoped Key Without Access:
                  summary: >-
                    API-Schlüssel mit eingeschränktem Berechtigungsumfang ohne
                    diesen Zugriff
                  value:
                    detail: This API key has no write access to decisions.
        '404':
          description: Es existiert keine KYC- oder KYB-Sitzung mit dieser `session_id`.
          content:
            application/json:
              examples:
                Not Found:
                  summary: Unbekannte session_id
                  value:
                    detail: Not found.
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: curl
          label: curl
          source: |-
            curl -X POST \
              https://verification.didit.me/v3/session/3fa85f64-5717-4562-b3fc-2c963f66afa6/decision-email-preview/ \
              -H 'x-api-key: YOUR_API_KEY' \
              -H 'Content-Type: application/json' \
              -d '{"new_status": "Approved", "email_language": "en"}'
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            result = client.sessions.preview_decision_email(
                "3fa85f64-5717-4562-b3fc-2c963f66afa6",
                new_status="Approved",
            )
            print(result)
        - lang: javascript
          label: Node.js
          source: >-
            import Didit from "@didit-protocol/sdk-node";


            // Reads DIDIT_API_KEY.

            const didit = new Didit();


            const result = await
            didit.sessions.previewDecisionEmail("3fa85f64-5717-4562-b3fc-2c963f66afa6",
            {
              new_status: "Approved",
            });

            console.log(result);
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Sessions.PreviewDecisionEmail(ctx, \"3fa85f64-5717-4562-b3fc-2c963f66afa6\", didit.SessionsPreviewDecisionEmailParams{\n\tNewStatus: \"Approved\",\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
        - lang: java
          label: Java
          source: >-
            import me.didit.Didit;

            import me.didit.types.SessionsPreviewDecisionEmailParams;


            // Reads DIDIT_API_KEY.

            Didit client = new Didit();


            var result =
            client.sessions().previewDecisionEmail("3fa85f64-5717-4562-b3fc-2c963f66afa6",
            SessionsPreviewDecisionEmailParams.builder()
                    .newStatus(SessionsPreviewDecisionEmailParams.NewStatus.of("Approved"))
                    .build());
            System.out.println(result);
        - lang: php
          label: PHP
          source: >-
            <?php


            require 'vendor/autoload.php';


            use Didit\DiditClient;


            // Reads DIDIT_API_KEY.

            $didit = new DiditClient();


            $result =
            $didit->sessions->previewDecisionEmail('3fa85f64-5717-4562-b3fc-2c963f66afa6',
            [
                'new_status' => 'Approved',
            ]);

            print_r($result->toArray());
        - lang: ruby
          label: Ruby
          source: |-
            require "didit"

            # Reads DIDIT_API_KEY.
            didit = Didit::Client.new

            result = didit.sessions.preview_decision_email(
              "3fa85f64-5717-4562-b3fc-2c963f66afa6",
              new_status: "Approved"
            )
            puts result.to_h
        - lang: csharp
          label: .NET
          source: >-
            using System;

            using System.Text.Json;

            using Didit;


            // Reads DIDIT_API_KEY.

            using var client = new DiditClient();


            var result = await
            client.Sessions.PreviewDecisionEmailAsync("3fa85f64-5717-4562-b3fc-2c963f66afa6",
            new SessionsPreviewDecisionEmailParams

            {
                NewStatus = "Approved",
            });

            Console.WriteLine(JsonSerializer.Serialize(result));
components:
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        Der API-Schlüssel Ihrer Anwendung, aus Entwickler -> API-Schlüssel in
        der Business Console. Der Primärschlüssel hat Vollzugriff. Ein benannter
        Schlüssel kann im Geltungsbereich eingeschränkt werden: keine, Lese-
        oder Schreibberechtigung pro Ressource, beschränkt auf bestimmte
        Workflows oder genehmigte Sitzungen, auf eine Liste von IP-Adressen und
        auf ein Ablaufdatum. 401 bedeutet, dass der Schlüssel falsch, widerrufen
        oder abgelaufen ist; 403 bedeutet, dass kein Schlüssel gesendet wurde,
        der Schlüssel keinen Zugriff auf diese Ressource oder Aktion hat oder
        die Anfrage von einer Adresse außerhalb seiner IP-Liste stammte; 404 bei
        einer Sitzungsroute bedeutet, dass die Sitzung außerhalb der Workflows
        oder Status des Schlüssels liegt. Ein Schlüssel ohne Medienzugriff
        erhält Bild-, Video- und PDF-URLs als null, und ein Schlüssel ohne
        Schreibberechtigung für Sitzungen erhält Sitzungslinks und Token als
        null. Siehe https://docs.didit.me/console/api-keys.

````

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