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

# API d'aperçu de l'e-mail de décision : approuvé et refusé

> Didit : visualisez l'e-mail approuvé ou refusé envoyé au destinataire, avec expéditeur et langue, avant de modifier le statut de la session.



Prompt de prévisualisation de l'e-mail de décision
        Copier le prompt dans le presse-papiers



      
      

\<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>



      
      

Coller dans

La prévisualisation ne modifie rien et n'envoie rien.
La réponse affiche l'e-mail tel que la personne le reçoit lorsque vous passez la session à `Approved` ou `Declined` avec `send_email: true`.
Elle indique aussi qui le reçoit, qui en est l'expéditeur, et si la confirmation l'envoie réellement.## Qui reçoit l'e-mailL'e-mail est envoyé à l'adresse de la personne : celle qu'elle a vérifiée lors d'une étape de vérification de l'e-mail du parcours, sinon celle indiquée dans `contact_details` à la création de la session.
`recipient_source` indique celle qui s'applique (`email_verification` ou `contact_details`).
Lorsque la session ne contient aucune adresse pour la personne, `recipient`, `recipient_source` et `preview_token` sont des chaînes vides, et aucun e-mail ne peut être envoyé.L'e-mail est envoyé depuis le domaine d'expédition vérifié de votre application lorsque votre [configuration en marque blanche](https://docs.didit.me/fr/console/white-label.md) s'applique (`sender_kind: customer`), sinon depuis l'expéditeur de Didit (`sender_kind: didit`).## Si l'e-mail est envoyé`will_be_sent` vaut `true` lorsque la confirmation de la modification avec `send_email: true` envoie l'e-mail.
Lorsqu'il vaut `false`, `not_sent_reason` indique la raison :| `not_sent_reason` | Signification |
| - | - |
| `status_unchanged` | La session a déjà ce statut : la mise à jour ne modifie rien et n'envoie rien. |
| `notification_emails_disabled` | La session a été créée sans `contact_details.send_notification_emails: true`, donc aucun e-mail de décision n'est envoyé à l'adresse indiquée dans `contact_details`. |
| `no_recipient` | Aucune adresse n'est connue pour la personne. |
| `sandbox` | La session est une session sandbox et le destinataire n'a pas accepté l'envoi d'e-mails en sandbox : l'e-mail est seulement simulé. Voir [consentement à l'e-mail](https://docs.didit.me/fr/integration/sandbox-testing.md#codes-otp-et-consentement-à-recevoir-des-e-mails). |## Confirmer la décisionAppelez [Mettre à jour le statut de la session](https://docs.didit.me/fr/sessions-api/update-status.md) avec ces champs :| Champ de mise à jour du statut de la session | Valeur |
| - | - |
| `new_status` | Le même `new_status` que celui de la prévisualisation |
| `send_email` | `true` |
| `email_address` | `recipient` de la prévisualisation |
| `email_language` | `language` de la prévisualisation |
| `email_preview_token` | `preview_token` de la prévisualisation |Le justificatif expire au bout de 15 minutes.
Si le destinataire, la langue, le statut de la session, l'expéditeur ou l'e-mail a changé depuis la prévisualisation, la mise à jour renvoie `409` avant que quoi que ce soit ne soit modifié.
Refaites une prévisualisation et confirmez avec le nouveau justificatif.## Pages associées- [Mettre à jour le statut de la session](https://docs.didit.me/fr/sessions-api/update-status.md) : approuver ou refuser la session et envoyer l'e-mail.
- [Prévisualiser l'e-mail de nouvelle soumission](https://docs.didit.me/fr/sessions-api/preview-resubmission.md) : prévisualiser à la place l'e-mail d'une nouvelle soumission.
- [Marque blanche](https://docs.didit.me/fr/console/white-label.md) : l'expéditeur et l'identité visuelle utilisés pour l'e-mail.


## OpenAPI

````yaml fr/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 de vérification d'identité. Authentifiez-vous avec l'en-tête x-api-key.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/session/{sessionId}/decision-email-preview/:
    post:
      tags:
        - Sessions
      summary: Prévisualiser l'e-mail de décision d'une session
      description: >-
        Générez un aperçu de l'e-mail que la personne reçoit lorsque vous faites
        passer une session à `Approved` ou `Declined` avec `send_email: true`,
        sans modifier la session ni envoyer quoi que ce soit. La réponse affiche
        l'objet et le code HTML exactement tels qu'ils sont envoyés, le
        destinataire, l'expéditeur, la langue, et indique si la confirmation du
        changement déclenche réellement l'envoi de l'e-mail (`will_be_sent`,
        `not_sent_reason`).


        Le destinataire est la propre adresse de la personne : celle qu'elle a
        vérifiée lors d'une étape de vérification de l'e-mail du flux, ou à
        défaut celle fournie dans `contact_details` lors de la création de la
        session. L'expéditeur correspond au domaine d'expéditeur vérifié de
        votre application si la marque blanche s'applique (`sender_kind:
        customer`), sinon il s'agit de l'expéditeur de Didit (`sender_kind:
        didit`).


        Pour envoyer exactement ce que vous avez prévisualisé, appelez [Update
        Session Status](/fr/sessions-api/update-status) avec le même
        `new_status`, `send_email: true`, `email_address` défini sur
        `recipient`, `email_language` défini sur `language` et
        `email_preview_token` défini sur `preview_token`. Le reçu expire au bout
        de 15 minutes. Si le destinataire, la langue, le statut de la session,
        l'expéditeur ou l'e-mail a changé depuis l'aperçu, la mise à jour
        renvoie `409` avant toute modification ; générez un nouvel aperçu et
        confirmez avec le nouveau reçu.


        Fonctionne pour les sessions de Vérification des utilisateurs (KYC) et
        de Vérification d'entreprise (KYB) dont le statut est `Approved`,
        `Declined`, `In Review`, `Kyc Expired`, `Abandoned` ou `Resubmitted`. La
        vérification du statut intervient avant la validation du corps de
        requête. Nécessite le privilège `write:sessions` ; une clé API
        restreinte nécessite un accès en écriture aux décisions. Les réponses
        utilisent `Cache-Control: no-store` : traitez-les comme du contenu de
        vérification sensible.
      operationId: post_v3_session_decision_email_preview
      parameters:
        - in: path
          name: sessionId
          required: true
          description: >-
            UUID de la session de vérification. Accepte les identifiants de
            session d'utilisateur (KYC) et d'entreprise (KYB).
          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: La décision dont vous souhaitez prévisualiser l'e-mail.
                  example: Approved
                email_language:
                  type: string
                  default: en
                  description: >-
                    Langue de l'e-mail, même valeur par défaut que pour Update
                    Session Status. Une langue non proposée bascule sur
                    l'anglais ; `language` dans la réponse indique celle qui est
                    utilisée.
                  example: en
            examples:
              Approved:
                summary: Prévisualiser l'e-mail Approuvé en anglais
                value:
                  new_status: Approved
              Declined in Spanish:
                summary: Prévisualiser l'e-mail Refusé en espagnol
                value:
                  new_status: Declined
                  email_language: es
      responses:
        '200':
          description: >-
            Prévisualisation uniquement. La session reste inchangée et aucun
            e-mail n'est envoyé.
          headers:
            Cache-Control:
              description: >-
                Toujours `no-store` : l'aperçu contient du contenu de
                vérification et ne doit pas être mis en cache.
              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: >-
                      L'adresse à laquelle l'e-mail est envoyé. Une chaîne vide
                      lorsqu'aucune adresse n'est connue pour la personne :
                      aucun e-mail ne peut alors être envoyé et `preview_token`
                      est également vide. Transmettez-la en tant que
                      `email_address` lors de la confirmation.
                    example: person@example.com
                  recipient_source:
                    type: string
                    enum:
                      - email_verification
                      - contact_details
                      - ''
                    description: >-
                      Provenance de `recipient`. `email_verification` :
                      l'adresse vérifiée par la personne lors d'une étape de
                      vérification de l'e-mail du flux. `contact_details` :
                      l'adresse fournie dans `contact_details` lors de la
                      création de la session. Une chaîne vide lorsqu'il n'y a
                      pas d'adresse.
                    example: email_verification
                  sender:
                    type: string
                    description: L'en-tête `From` avec lequel l'e-mail est envoyé.
                    example: Example App <no-reply@mail.example.com>
                  sender_name:
                    type: string
                    description: La partie nom d'affichage de `sender`.
                    example: Example App
                  sender_email:
                    type: string
                    format: email
                    description: La partie adresse de `sender`.
                    example: no-reply@mail.example.com
                  sender_kind:
                    type: string
                    enum:
                      - customer
                      - didit
                    description: >-
                      `customer` : l'e-mail est envoyé depuis le domaine
                      d'expéditeur vérifié de votre application (marque
                      blanche). `didit` : il est envoyé depuis le propre
                      expéditeur de Didit.
                    example: customer
                  subject:
                    type: string
                    description: La ligne d'objet exactement telle qu'elle est envoyée.
                    example: Your verification has been approved in Example App
                  html:
                    type: string
                    description: >-
                      Le HTML de l'e-mail exactement tel qu'il est envoyé, avec
                      son logo intégré sous forme de data URL. Affichez-le dans
                      un cadre sandboxé, jamais directement dans le DOM de votre
                      application.
                    example: <!DOCTYPE html><html><body>...</body></html>
                  text:
                    type: string
                    description: >-
                      Le texte brut de l'e-mail, tel qu'il apparaît dans le fil
                      Messages de la personne, pour un aperçu compact (le HTML
                      reste l'e-mail que la personne reçoit).
                    example: >-
                      Verification Approved


                      Your identity has been successfully verified with Acme
                      Pay. No further action is needed on your part.
                  language:
                    type: string
                    description: >-
                      La langue dans laquelle l'e-mail est rédigé. Anglais
                      (`en`) lorsque le `email_language` demandé n'est pas
                      proposé.
                    example: en
                  will_be_sent:
                    type: boolean
                    description: >-
                      Indique si la confirmation de la modification avec
                      `send_email: true` envoie cet e-mail. `false` lorsque
                      `not_sent_reason` est défini.
                    example: true
                  not_sent_reason:
                    type: string
                    nullable: true
                    enum:
                      - status_unchanged
                      - notification_emails_disabled
                      - no_recipient
                      - sandbox
                      - null
                    description: "Raison pour laquelle la confirmation n'enverrait aucun e-mail, ou `null` lorsqu'il sera envoyé. `status_unchanged`\_: la session possède déjà ce statut, la mise à jour ne change donc rien et n'envoie rien. `notification_emails_disabled`\_: la session a été créée sans `contact_details.send_notification_emails: true`, donc aucun e-mail de décision n'est envoyé à l'adresse fournie dans `contact_details`. `no_recipient`\_: aucune adresse n'est connue pour la personne. `sandbox`\_: une session sandbox dont le destinataire n'a pas accepté la réception d'e-mails en sandbox, l'envoi est donc seulement simulé."
                    example: null
                  preview_token:
                    type: string
                    description: >-
                      Récépissé signé pour cet e-mail exact, valide pendant 15
                      minutes. Transmettez-le en tant que `email_preview_token`
                      à [Mettre à jour le statut de la
                      session](/fr/sessions-api/update-status). Une chaîne vide
                      lorsqu'il n'y a aucun destinataire.
                    example: >-
                      eyJkaWdlc3QiOiI0ZjJhIn0:1uExAm:Pl3x4mpleS1gnatureValue000000000000000
              examples:
                Will Be Sent:
                  summary: >-
                    L'e-mail Approuvé est envoyé à l'adresse vérifiée dans le
                    flux
                  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: Aucune adresse n'est connue pour cette personne
                  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: >-
            La session n'est pas dans un statut accepté par cet endpoint
            (`{"detail": ...}`), ou le corps est invalide (`{"<field>":
            ["<message>"]}`).
          content:
            application/json:
              examples:
                Wrong Current Status:
                  summary: La session n'est pas dans un statut accepté par cet endpoint
                  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 n'est ni Approved ni Declined
                  value:
                    new_status:
                      - '"Resubmitted" is not a valid choice.'
                Missing new_status:
                  summary: Champ obligatoire omis
                  value:
                    new_status:
                      - This field is required.
        '401':
          description: La clé API restreinte a expiré.
          content:
            application/json:
              examples:
                Expired API Key:
                  summary: Clé API restreinte ayant dépassé sa date d'expiration
                  value:
                    detail: This API key has expired.
        '403':
          description: >-
            Identifiants manquants, appelant sans le privilège `write:sessions`,
            clé API avec restriction de portée ne disposant pas de l'accès
            requis par cet endpoint, ou un `session_id` qui appartient à une
            autre application.
          content:
            application/json:
              examples:
                Invalid Credentials:
                  summary: x-api-key manquant ou invalide
                  value:
                    detail: >-
                      Authentication credentials were not provided or are
                      invalid.
                Missing Privilege:
                  summary: L'appelant n'a pas write:sessions
                  value:
                    detail: You do not have permission to perform this action.
                Scoped Key Without Access:
                  summary: Clé API restreinte sans cet accès
                  value:
                    detail: This API key has no write access to decisions.
        '404':
          description: Aucune session KYC ou KYB avec ce `session_id` n'existe.
          content:
            application/json:
              examples:
                Not Found:
                  summary: session_id inconnu
                  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: >-
        La clé API de votre application, issue de Développeurs -> Clés API dans
        la Business Console. La clé principale dispose d'un accès complet. Une
        clé nommée peut être restreinte : aucun, lecture ou écriture par
        ressource, limitée à certains workflows ou aux sessions approuvées, à
        une liste d'adresses IP et à une date d'expiration. 401 signifie que la
        clé est incorrecte, révoquée ou expirée ; 403 signifie qu'aucune clé n'a
        été envoyée, que la clé n'a pas accès à cette ressource ou action, ou
        que la requête provient d'une adresse hors de sa liste d'IP ; 404 sur
        une route de session signifie que la session est hors des workflows ou
        des statuts de la clé. Une clé sans accès aux médias reçoit les URL
        d'images, de vidéos et de PDF à null, et une clé sans accès en écriture
        aux sessions reçoit les liens et tokens de session à null. Voir
        https://docs.didit.me/console/api-keys.

````

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