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

# Regenerar sesión KYC de personas clave: API

> Didit crea una nueva sesión KYC para una persona clave de KYB cuya sesión se eliminó o expiró sin iniciarse y le envía un nuevo enlace por email.



Prompt para la API de regeneración de la sesión KYC de personas clave
        Copiar el prompt al portapapeles



      
      

\<pre>

\`Give a Key People party of a Didit Business Verification (KYB) session a new individual KYC session through the API.

Endpoint:
POST https://verification.didit.me/v3/session/{session_id}/kyb/parties/{party_uuid}/regenerate/
(no request body)

Authentication:
Send my Didit API key in the x-api-key header. A scoped key needs decisions: write.

Goal:
\- Re-verify a person (UBO, director, other key person) whose individual KYC session was deleted, or expired before the person started it. Neither link lets the person complete verification. An expired child can cause the business session to become Declined; regenerate the party to issue a fresh link.

Behavior:
\- {session_id} is the parent business session; {party_uuid} is key_people_checks[].submitted.parties[].uuid from its decision and must belong to that session.
\- Works when the party's KYC session was deleted (kyc_session_deleted: true) or expired before the person started it. A session still in progress or one that ended in another status (Approved, Declined, In Review, Abandoned...) returns 409 unless it was deleted. A party that never had one or a company party always returns 409.
\- Deleted sessions qualify even if the person had already started or finished verification. Imported sessions do not qualify through expiry; they must have been deleted.
\- Didit creates a new hosted KYC session for the person, with the workflow the party was verified with (its latest published version) or, when that is no longer known, the workflow my Key People settings assign to the person's role. The new link lasts that KYC workflow's session expiration time, not the business session's. Its vendor_data is kyb-party-PARTY_UUID.
\- Didit emails the verification link to the party's email, when there is one.
\- is_skipped is cleared, so the Key People check waits on the new session.
\- The Key People check and the business session status are recomputed at once.
\- A data.updated webhook is sent for the business session with trigger "console_key_people_regenerate".
\- To exempt the party instead of re-verifying them, use PATCH /v3/session/{session_id}/kyb/parties/{party_uuid}/ with {"is_skipped": true}.

Example call:
curl -X POST "https://verification.didit.me/v3/session/33333333-4444-5555-6666-777777777777/kyb/parties/0a3f1e2c-7c2f-4a1b-9d55-2f8d2a5d6b41/regenerate/" \
-H "x-api-key: YOUR_API_KEY"

What to read from the response (the updated party):
\- kyc_session_id: the new KYC session.
\- kyc_session_url: its hosted link, to share yourself if the party has no email. A scoped key without sessions: write receives it as null.
\- kyc_session_status (Not Started), kyc_session_deleted (false), is_skipped (false).

Failure modes:
\- 401: the API key has expired.
\- 403: missing key (a wrong, revoked or expired key gets 401), a key of another application, a scoped key without decisions: write, or a request from outside the key's IP allowlist.
\- 404: the session does not exist, was deleted, or is outside a scoped key's limits; no party has this UUID; or the party belongs to another session.
\- 409 with code kyb_party_kyc_session_not_deleted: no eligible KYC session to replace. A person qualifies only when their session was deleted or a non-imported session expired before the person started it. All other sessions, a party that never had one, and company parties are rejected.

Side effects: creates a KYC session, may send an email to the party, recomputes the business session status and sends a data.updated webhook.

For the full integration shape, see /integration/integration-prompt.`

\</pre>



      
      

Pegar en

Usa esta opción cuando el enlace anterior ya no sirve: la sesión se eliminó o expiró antes de que la persona llegara a iniciarla. Las sesiones eliminadas cumplen el requisito aunque la persona ya hubiera iniciado o completado la verificación. Las sesiones importadas no cumplen el requisito por expiración; deben haberse eliminado. Una sesión que no se ha eliminado y que la persona ya había iniciado no cumple el requisito por expiración.La nueva sesión queda vinculada a la misma parte, por lo que su resultado se incorpora a la comprobación de personas clave como lo habría hecho la original, y su enlace dura el tiempo de expiración de sesión del flujo de verificación (workflow) KYC que ejecuta (de 1 hora a 4 semanas), no el de la sesión de empresa. Consulta la parte y sus sesiones secundarias en la [decisión de la sesión de empresa](https://docs.didit.me/es/business-verification/response-schema.md#key_people_checks). Si la persona no debe verificarse en absoluto, [omite la parte](https://docs.didit.me/es/sessions-api/update-data.md#omitir-a-una-parte-de-personas-clave) en su lugar. Consulta [Personas clave](https://docs.didit.me/es/business-verification/key-people.md) para saber cómo funcionan las partes y sus verificaciones.


## OpenAPI

````yaml es/openapi-25.json POST /v3/session/{sessionId}/kyb/parties/{partyUuid}/regenerate/
openapi: 3.0.0
info:
  version: 3.0.0
  title: Didit Verification API
  description: API de verificación de identidad. Autentícate con el encabezado x-api-key.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/session/{sessionId}/kyb/parties/{partyUuid}/regenerate/:
    post:
      tags:
        - Sessions
      summary: Regenerar la sesión de KYC de una parte de Personas clave
      description: >-
        Asigna a una parte de Personas clave de una sesión de Verificación de
        empresas (KYB) una nueva sesión KYC individual después de que la
        anterior se eliminara o expirara antes de que la persona la iniciara,
        para que la comprobación de Personas clave pueda completarse de nuevo;
        no envíes cuerpo en la solicitud. Funciona cuando la sesión KYC de la
        parte se eliminó (`kyc_session_deleted: true`) o expiró antes de que la
        persona la iniciara (`Expired`, nunca iniciada). Una sesión aún en curso
        o que terminó en cualquier otro estado (`Approved`, `Declined`, `In
        Review`, `Abandoned`, ...) devuelve `409` salvo que se haya eliminado.
        Una parte que nunca tuvo una o una parte que es una empresa siempre
        devuelve `409`. Didit crea una nueva sesión KYC alojada con el flujo de
        verificación (workflow) con el que se verificó la parte (su última
        versión publicada) o, cuando ya no se conoce, con el flujo que tu
        configuración de Personas clave asigna al rol de la parte, de modo que
        su enlace dura el tiempo de expiración de sesión de ese flujo KYC; envía
        el enlace por correo electrónico a la parte cuando hay un correo
        registrado, restablece `is_skipped` y vuelve a calcular la comprobación
        de Personas clave y el estado de la sesión de empresa. Después envía un
        [webhook](https://docs.didit.me/es/integration/webhooks) `data.updated`
        de la sesión de empresa con el disparador
        `console_key_people_regenerate`; para eximir a la parte en su lugar, usa
        `PATCH /v3/session/{sessionId}/kyb/parties/{partyUuid}/`. Una clave de
        API con alcance limitado necesita `decisions: write` y, sin `sessions:
        write`, recibe `kyc_session_url` como `null`. Las sesiones eliminadas
        cumplen los requisitos aunque la persona ya hubiera iniciado o terminado
        la verificación. Las sesiones importadas no cumplen los requisitos por
        expiración; deben haberse eliminado.
      operationId: post_v3_session_kyb_party_regenerate
      parameters:
        - name: sessionId
          in: path
          required: true
          description: UUID de la sesión principal de Verificación de empresas (KYB).
          schema:
            type: string
            format: uuid
            example: 33333333-4444-5555-6666-777777777777
        - name: partyUuid
          in: path
          required: true
          description: >-
            UUID de la parte de Personas clave
            (`key_people_checks[].submitted.parties[].uuid` en la decisión de la
            sesión de empresa). Debe pertenecer a la sesión referenciada por
            `sessionId`.
          schema:
            type: string
            format: uuid
            example: 0a3f1e2c-7c2f-4a1b-9d55-2f8d2a5d6b41
      responses:
        '200':
          description: >-
            Se ha creado una nueva sesión KYC. Devuelve la parte actualizada con
            su nueva sesión secundaria, que expira según el tiempo de expiración
            de sesión de su flujo KYC.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/KYBKeyPeopleParty'
              example:
                uuid: 0a3f1e2c-7c2f-4a1b-9d55-2f8d2a5d6b41
                entity_type: person
                source: USER
                name: Jane Smith
                first_name: Jane
                last_name: Smith
                company_name: null
                registration_number: null
                email: user@example.com
                nationality: GB
                phone_number: null
                date_of_birth: '1980-05-04'
                position: Director
                custom_fields: {}
                is_active: true
                is_skipped: false
                requires_verification: true
                roles:
                  - role: director
                    ownership_percent: null
                    voting_percent: null
                kyc_session_id: 55555555-6666-7777-8888-999999999999
                kyc_session_status: Not Started
                kyc_session_url: https://verify.didit.me/session/abc123def456
                kyc_session_deleted: false
                kyb_sub_session_id: null
                kyb_sub_session_status: null
                kyb_sub_session_url: null
                kyb_sub_session_deleted: false
                verification_workflow_type: kyc
                verification_workflow_id: 12121212-3434-5656-7878-909090909090
                verification_workflow_label: Key People KYC
                verification_workflow_features:
                  - feature: ID_VERIFICATION
                    status: Not Finished
                  - feature: LIVENESS
                    status: Not Finished
                  - feature: AML
                    status: Not Finished
                didit_internal_id: null
        '401':
          description: >-
            La clave de API con alcance limitado ha expirado. Este es el único
            caso que devuelve `401`: una clave ausente, no válida o revocada
            devuelve `403`.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Mensaje de error legible.
              examples:
                Expired key:
                  summary: La fecha de caducidad de la clave ya pasó
                  value:
                    detail: This API key has expired.
        '403':
          description: >-
            Fallo de autenticación o autorización. Si falta la clave, se
            devuelve `403`, al igual que con una clave de otra aplicación, una
            clave con alcance limitado sin el permiso que necesita este endpoint
            y una solicitud desde fuera de la lista de IP permitidas de la
            clave; una clave incorrecta, revocada o expirada devuelve `401`.
            Distínguelos por `detail`.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Mensaje de error legible.
              examples:
                Missing or invalid credentials:
                  summary: >-
                    Falta el encabezado x-api-key, o la clave no superó la
                    validación
                  value:
                    detail: >-
                      Authentication credentials were not provided or are
                      invalid.
                Other application:
                  summary: >-
                    Una clave válida que pertenece a una aplicación distinta de
                    la de la sesión
                  value:
                    detail: You do not have permission to perform this action.
                Scoped key without decisions write:
                  summary: 'A la clave con alcance limitado le falta decisions: write'
                  value:
                    detail: This API key has no write access to decisions.
                IP not allowed:
                  summary: >-
                    Solicitud desde fuera de la lista de IP permitidas de la
                    clave
                  value:
                    detail: This API key can't be used from this IP address.
        '404':
          description: >-
            La sesión no existe, se ha eliminado o está fuera de los límites de
            una clave con alcance restringido; no existe ninguna parte con este
            UUID en tu aplicación; o la parte pertenece a otra sesión. Cada caso
            tiene su propio `detail`. La búsqueda de la sesión se ejecuta antes
            de comprobar la credencial, por lo que un `sessionId` desconocido
            devuelve `404` incluso sin una clave válida.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Mensaje de error legible.
              examples:
                Unknown session:
                  summary: No existe ninguna sesión con este ID, o se eliminó
                  value:
                    detail: Not found.
                Outside key limits:
                  summary: >-
                    La sesión está fuera de los límites de flujo o de solo
                    aprobadas de una clave con alcance restringido
                  value:
                    detail: Session not found.
                Unknown party:
                  summary: No hay ninguna parte con este UUID en tu aplicación
                  value:
                    detail: No BusinessParty matches the given query.
                Party of another session:
                  summary: partyUuid existe, pero pertenece a otra sesión
                  value:
                    detail: Party does not belong to the given session.
        '409':
          description: >-
            La parte no tiene ninguna sesión KYC elegible que reemplazar. Salvo
            que se haya eliminado, una sesión todavía en curso o que terminó en
            otro estado (`Approved`, `Declined`, `In Review`, `Abandoned`, ...)
            no se puede regenerar. Una parte que nunca tuvo una sesión o una
            parte que es una empresa también devuelve `409`. Una sesión elegible
            es la que se eliminó o expiró antes de que la persona la iniciara.
            Las sesiones eliminadas son elegibles aunque la persona ya hubiera
            iniciado o terminado la verificación. Las sesiones importadas no son
            elegibles por expiración; deben haberse eliminado. Ramifica según
            `code`.
          content:
            application/json:
              schema:
                type: object
                required:
                  - detail
                  - code
                properties:
                  detail:
                    type: string
                    description: Mensaje de error legible.
                  code:
                    type: string
                    enum:
                      - kyb_party_kyc_session_not_deleted
                    description: Código de error estable legible por máquina.
              example:
                detail: >-
                  This party's KYC session is still live (it has neither been
                  deleted nor expired without starting), so it cannot be
                  regenerated.
                code: kyb_party_kyc_session_not_deleted
        '429':
          description: >-
            Límite de solicitudes superado: 300 solicitudes de escritura (POST,
            PATCH, DELETE) por minuto por clave de API. Espera los segundos
            indicados en `Retry-After` antes de reintentar; los encabezados
            `X-RateLimit-*` muestran el presupuesto.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Mensaje de error legible.
              examples:
                Rate limited:
                  summary: Presupuesto del minuto actual agotado
                  value:
                    detail: >-
                      Write request rate limit exceeded. You can make up to 300
                      requests per minute.
          headers:
            Retry-After:
              description: Segundos que hay que esperar antes de reintentar.
              schema:
                type: integer
                minimum: 1
                example: 30
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: curl
          label: curl
          source: >-
            curl -X POST
            'https://verification.didit.me/v3/session/33333333-4444-5555-6666-777777777777/kyb/parties/0a3f1e2c-7c2f-4a1b-9d55-2f8d2a5d6b41/regenerate/'
            \
              -H 'x-api-key: YOUR_API_KEY'
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            result = client.sessions.regenerate_kyb_party(
                "33333333-4444-5555-6666-777777777777",
                "0a3f1e2c-7c2f-4a1b-9d55-2f8d2a5d6b41",
            )
            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.regenerateKybParty(
              "33333333-4444-5555-6666-777777777777",
              "0a3f1e2c-7c2f-4a1b-9d55-2f8d2a5d6b41",
            );
            console.log(result);
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Sessions.RegenerateKYBParty(ctx, \"33333333-4444-5555-6666-777777777777\", \"0a3f1e2c-7c2f-4a1b-9d55-2f8d2a5d6b41\")\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
        - lang: java
          label: Java
          source: >-
            import me.didit.Didit;


            // Reads DIDIT_API_KEY.

            Didit client = new Didit();


            var result =
            client.sessions().regenerateKybParty("33333333-4444-5555-6666-777777777777",
            "0a3f1e2c-7c2f-4a1b-9d55-2f8d2a5d6b41");

            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->regenerateKybParty('33333333-4444-5555-6666-777777777777',
            '0a3f1e2c-7c2f-4a1b-9d55-2f8d2a5d6b41');

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

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

            result = didit.sessions.regenerate_kyb_party(
              "33333333-4444-5555-6666-777777777777",
              "0a3f1e2c-7c2f-4a1b-9d55-2f8d2a5d6b41"
            )
            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.RegenerateKybPartyAsync("33333333-4444-5555-6666-777777777777",
            "0a3f1e2c-7c2f-4a1b-9d55-2f8d2a5d6b41");

            Console.WriteLine(JsonSerializer.Serialize(result));
components:
  schemas:
    KYBKeyPeopleParty:
      type: object
      description: >-
        Una parte de Personas clave de una sesión de Verificación de empresas
        (KYB), con su verificación secundaria. La misma parte aparece en
        `key_people_checks[].submitted.parties[]` de la decisión de la sesión de
        empresa.
      required:
        - uuid
        - entity_type
        - source
        - name
        - is_active
        - is_skipped
        - requires_verification
        - roles
        - kyc_session_deleted
        - kyb_sub_session_deleted
      properties:
        uuid:
          type: string
          format: uuid
          description: Identificador de la parte.
        entity_type:
          type: string
          enum:
            - person
            - company
          description: Si la parte es una persona física o una empresa.
        source:
          type: string
          enum:
            - REGISTRY
            - USER
          description: >-
            `REGISTRY`: obtenido del registro de empresas. `USER`: introducido
            en la pantalla Personas clave.
        name:
          type: string
          description: Nombre visible de la parte.
        first_name:
          type: string
          nullable: true
          description: Nombre (personas).
        last_name:
          type: string
          nullable: true
          description: Apellido (personas).
        company_name:
          type: string
          nullable: true
          description: Nombre de la empresa (partes que son empresas).
        registration_number:
          type: string
          nullable: true
          description: Número de registro de la empresa (partes que son empresas).
        email:
          type: string
          format: email
          nullable: true
          description: Correo electrónico al que se envía el enlace de verificación.
        nationality:
          type: string
          nullable: true
          description: Nacionalidad para personas, país de constitución para empresas.
        phone_number:
          type: string
          nullable: true
          description: Número de teléfono recopilado para la parte.
        date_of_birth:
          type: string
          format: date
          nullable: true
          description: Fecha de nacimiento (personas).
        position:
          type: string
          nullable: true
          description: Cargo en texto libre (personas).
        custom_fields:
          type: object
          additionalProperties: true
          description: >-
            Campos personalizados definidos en el flujo y recopilados para la
            parte, indexados por la clave del campo.
        is_active:
          type: boolean
          description: Si la parte está activa.
        is_skipped:
          type: boolean
          description: >-
            Si la parte está exenta de verificación. Al regenerar, este valor se
            borra.
        requires_verification:
          type: boolean
          description: >-
            Si las reglas de rol y propiedad exigen una verificación para esta
            parte.
        roles:
          type: array
          description: Roles que tiene la parte en la empresa.
          items:
            type: object
            required:
              - role
              - ownership_percent
              - voting_percent
            properties:
              role:
                type: string
                enum:
                  - director
                  - non_executive_director
                  - secretary
                  - chairman
                  - ubo
                  - shareholder
                  - representative
                  - founder
                  - legal_advisor
                  - authorized_signatory
                  - trustee
                  - beneficiary
                  - settlor
                  - protector
                  - company_officer
                  - investor
                  - other
                description: Código del rol.
              ownership_percent:
                type: number
                nullable: true
                description: >-
                  Porcentaje de propiedad correspondiente a este rol, cuando se
                  conoce.
              voting_percent:
                type: number
                nullable: true
                description: >-
                  Porcentaje de derechos de voto para este rol, cuando se
                  conoce.
        kyc_session_id:
          type: string
          format: uuid
          nullable: true
          description: Sesión KYC individual secundaria (personas).
        kyc_session_status:
          type: string
          nullable: true
          enum:
            - Not Started
            - In Progress
            - Approved
            - Declined
            - In Review
            - Expired
            - Abandoned
            - Kyc Expired
            - Resubmitted
            - Awaiting User
            - null
          description: >-
            Estado de la sesión KYC hija. Una sesión eliminada conserva el
            estado que tenía cuando se eliminó.
        kyc_session_url:
          type: string
          format: uri
          nullable: true
          description: >-
            Enlace alojado de la sesión KYC secundaria. `null` cuando no existe
            o se eliminó, y para una clave de API con alcance limitado sin
            `sessions: write`.
        kyc_session_deleted:
          type: boolean
          description: La sesión KYC hija se eliminó, por lo que nunca podrá resolverse.
        kyb_sub_session_id:
          type: string
          format: uuid
          nullable: true
          description: Sesión KYB secundaria (partes que son empresas).
        kyb_sub_session_status:
          type: string
          nullable: true
          enum:
            - Not Started
            - In Progress
            - Approved
            - Declined
            - In Review
            - Expired
            - Abandoned
            - Kyc Expired
            - Resubmitted
            - Awaiting User
            - null
          description: Estado de la sesión KYB hija.
        kyb_sub_session_url:
          type: string
          format: uri
          nullable: true
          description: >-
            Enlace alojado de la sesión KYB secundaria, con las mismas reglas de
            `null` que `kyc_session_url`.
        kyb_sub_session_deleted:
          type: boolean
          description: >-
            Equivalente de `kyc_session_deleted` para las partes de tipo
            empresa.
        verification_workflow_type:
          type: string
          nullable: true
          enum:
            - kyc
            - kyb
            - adaptive_age_verification
            - biometric_authentication
            - address_verification
            - questionnaire_verification
            - email_verification
            - phone_verification
            - null
          description: Tipo del flujo que ejecuta la sesión secundaria.
        verification_workflow_id:
          type: string
          format: uuid
          nullable: true
          description: Flujo que ejecuta la sesión hija.
        verification_workflow_label:
          type: string
          nullable: true
          description: Etiqueta de ese flujo.
        verification_workflow_features:
          type: array
          nullable: true
          description: Funciones del flujo de la sesión hija con su estado actual.
          items:
            type: object
            required:
              - feature
              - status
            properties:
              feature:
                type: string
                description: >-
                  Código de la función, por ejemplo `ID_VERIFICATION` o
                  `LIVENESS`.
              status:
                type: string
                description: Estado de la función; es `Not Finished` hasta que se ejecuta.
        didit_internal_id:
          type: string
          format: uuid
          nullable: true
          description: Identificador de Didit de la persona verificada, una vez conocido.
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        La clave de API de tu aplicación, que encontrarás en Developers -> API
        keys en la Business Console. La clave principal tiene acceso completo.
        Una clave con nombre puede tener un alcance limitado: ninguno, lectura o
        escritura por recurso, limitada a algunos flujos o a sesiones aprobadas,
        a una lista de direcciones IP y a una fecha de caducidad. 401 significa
        que la clave es incorrecta, se revocó o expiró; 403 significa que no se
        envió ninguna clave, que la clave no tiene acceso a este recurso o
        acción, o que la solicitud provino de una dirección fuera de su lista de
        IP; 404 en una ruta de sesión significa que la sesión está fuera de los
        flujos o estados de la clave. Una clave sin acceso a contenido
        multimedia recibe las URL de imágenes, videos y PDF como null, y una
        clave sin permiso de escritura en sesiones recibe los enlaces y tokens
        de sesión como null. Consulta https://docs.didit.me/console/api-keys.

````

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