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

# Invia persone chiave KYB: API Didit

> Con Didit dichiari le persone chiave preparate di una sessione KYB e avvii la verifica KYC di ciascuna parte che la richiede.



## OpenAPI

````yaml it/openapi-25.json POST /v3/session/{sessionId}/kyb/parties/submit/
openapi: 3.0.0
info:
  version: 3.0.0
  title: Didit Verification API
  description: API di verifica dell'identità. Autenticati con l'intestazione x-api-key.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/session/{sessionId}/kyb/parties/submit/:
    post:
      tags:
        - Sessions
      summary: Invia le bozze delle parti KYB
      description: >-
        Dichiara le bozze salvate come persone chiave dell'azienda. Questo è il
        passaggio Persone chiave ospitato con la tua chiave API: Didit decide,
        in base alle impostazioni dei ruoli e alle soglie dell'assetto
        proprietario del workflow, quali soggetti devono essere verificati, crea
        una sessione KYC individuale (o una sotto-sessione KYB per un titolare
        societario) per ciascuno di essi, invia le email richieste dal workflow
        e fa avanzare la sessione. Ogni sessione figlia viene fatturata come nel
        flusso ospitato. Le bozze vengono consumate. Ripetere la chiamata dopo
        un invio riuscito non modifica nulla e risponde con `200`,
        `already_submitted: true` e i soggetti già esistenti. La sessione deve
        trovarsi nel passaggio Persone chiave. Invia a ciascuna persona il
        proprio `kyc_session_url` oppure incorporalo. Richiede
        `write:businesses`.
      operationId: post_v3_session_kyb_parties_submit
      parameters:
        - name: sessionId
          in: path
          required: true
          description: >-
            UUID della sessione di Verifica aziendale (KYB). Deve appartenere
            all'applicazione della chiave API.
          schema:
            type: string
            format: uuid
            example: 33333333-4444-5555-6666-777777777777
        - name: node_id
          in: query
          required: false
          description: >-
            Nodo del workflow del passaggio KYB. Necessario solo quando il
            workflow contiene più di un nodo KYB; per impostazione predefinita
            Didit utilizza il nodo della sessione stessa.
          schema:
            type: string
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                locale:
                  type: string
                  maxLength: 10
                  description: >-
                    Locale utilizzato per tradurre la risposta del passaggio a
                    cui avanza la sessione.
            example:
              locale: es
      responses:
        '200':
          description: Parti dichiarate (o già dichiarate).
          content:
            application/json:
              schema:
                type: object
                properties:
                  valid:
                    type: boolean
                  next_step:
                    type: string
                    nullable: true
                    description: Passaggio in cui si trova la sessione.
                  status:
                    type: string
                    description: Stato della sessione aziendale.
                  advanced:
                    type: boolean
                    description: >-
                      `true` quando questa chiamata ha dichiarato le parti e ha
                      fatto avanzare la sessione.
                  already_submitted:
                    type: boolean
                    description: >-
                      `true` quando le parti erano state dichiarate da una
                      chiamata precedente.
                  kyb_key_people_status:
                    type: string
                  parties:
                    type: array
                    items:
                      $ref: '#/components/schemas/KYBKeyPeopleParty'
              example:
                valid: true
                next_step: FINISHED
                status: In Progress
                advanced: true
                already_submitted: false
                kyb_key_people_status: In Progress
                parties: []
        '401':
          description: >-
            La chiave API con ambito è scaduta. Questo è l'unico caso che
            restituisce `401`: una chiave mancante, non valida o revocata
            restituisce `403`.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Messaggio di errore di facile lettura.
              examples:
                Expired key:
                  summary: La data di scadenza della chiave è stata superata
                  value:
                    detail: This API key has expired.
        '402':
          description: >-
            L'organizzazione non ha più credito residuo per le sessioni di
            verifica secondarie.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Messaggio di errore di facile lettura.
              example:
                detail: Insufficient credits.
        '403':
          description: >-
            Errore di autenticazione o autorizzazione. Una chiave mancante
            restituisce `403`, così come la chiave di un'altra applicazione, una
            chiave con ambito limitato priva dell'autorizzazione necessaria per
            questo endpoint e una richiesta proveniente dall'esterno
            dell'allowlist IP della chiave; una chiave errata, revocata o
            scaduta restituisce `401`. Distinguili tramite `detail`.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Messaggio di errore di facile lettura.
              examples:
                Missing or invalid credentials:
                  summary: >-
                    Nessuna intestazione x-api-key, oppure validazione della
                    chiave non riuscita
                  value:
                    detail: >-
                      Authentication credentials were not provided or are
                      invalid.
                Other application:
                  summary: >-
                    Una chiave valida appartenente a un'applicazione diversa da
                    quella della sessione
                  value:
                    detail: You do not have permission to perform this action.
                Scoped key without decisions write:
                  summary: 'La chiave con ambito non dispone di decisions: write'
                  value:
                    detail: This API key has no write access to decisions.
                IP not allowed:
                  summary: >-
                    Richiesta proveniente da un indirizzo esterno all'allowlist
                    degli IP della chiave
                  value:
                    detail: This API key can't be used from this IP address.
        '404':
          description: >-
            La sessione non esiste, è stata eliminata, appartiene a un'altra
            applicazione o non rientra nei limiti di una chiave con ambito
            limitato; nessun dettaglio li distingue.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Messaggio di errore di facile lettura.
              example:
                detail: Session not found.
        '409':
          description: >-
            `kyb_no_party_drafts`: non c'è nulla da inviare.
            `kyb_parties_already_submitted`: le bozze sono state aggiunte dopo
            che le parti sono state dichiarate. `kyb_step_mismatch`: la sessione
            non si trova nel passaggio Persone chiave (`next_step` indica il
            relativo passaggio). `kyb_session_not_writable`: la sessione è
            conclusa.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Messaggio di errore di facile lettura.
                  code:
                    type: string
                  next_step:
                    type: string
              example:
                detail: There are no draft parties to submit.
                code: kyb_no_party_drafts
        '429':
          description: >-
            Limite di frequenza superato: 300 richieste di scrittura (POST,
            PATCH, DELETE) al minuto per chiave API. Attendi i secondi indicati
            in `Retry-After` prima di riprovare; le intestazioni `X-RateLimit-*`
            indicano il budget.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Messaggio di errore di facile lettura.
              examples:
                Rate limited:
                  summary: Budget per il minuto corrente esaurito
                  value:
                    detail: >-
                      Write request rate limit exceeded. You can make up to 300
                      requests per minute.
          headers:
            Retry-After:
              description: Secondi da attendere prima di effettuare un nuovo tentativo.
              schema:
                type: integer
                minimum: 1
                example: 30
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            result = client.sessions.submit_kyb_parties(
                "33333333-4444-5555-6666-777777777777",
                locale="es",
            )
            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.submitKybParties("33333333-4444-5555-6666-777777777777",
            {
              locale: "es",
            });

            console.log(result);
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Sessions.SubmitKYBParties(ctx, \"33333333-4444-5555-6666-777777777777\", didit.SessionsSubmitKYBPartiesParams{\n\tLocale: didit.String(\"es\"),\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.SessionsSubmitKybPartiesParams;


            // Reads DIDIT_API_KEY.

            Didit client = new Didit();


            var result =
            client.sessions().submitKybParties("33333333-4444-5555-6666-777777777777",
            SessionsSubmitKybPartiesParams.builder()
                    .locale("es")
                    .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->submitKybParties('33333333-4444-5555-6666-777777777777',
            [
                'locale' => 'es',
            ]);

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

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

            result = didit.sessions.submit_kyb_parties(
              "33333333-4444-5555-6666-777777777777",
              locale: "es"
            )
            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.SubmitKybPartiesAsync("33333333-4444-5555-6666-777777777777",
            new SessionsSubmitKybPartiesParams

            {
                Locale = "es",
            });

            Console.WriteLine(JsonSerializer.Serialize(result));
components:
  schemas:
    KYBKeyPeopleParty:
      type: object
      description: >-
        Una parte relativa alle persone chiave di una sessione di Verifica
        aziendale (KYB), con la relativa verifica figlia. La stessa parte
        compare in `key_people_checks[].submitted.parties[]` della decisione
        sulla sessione aziendale.
      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: Identificativo della parte.
        entity_type:
          type: string
          enum:
            - person
            - company
          description: Indica se la parte è una persona fisica o un'azienda.
        source:
          type: string
          enum:
            - REGISTRY
            - USER
          description: >-
            `REGISTRY`: ricavato dal registro delle imprese. `USER`: inserito
            nella schermata Persone chiave.
        name:
          type: string
          description: Nome visualizzato della parte.
        first_name:
          type: string
          nullable: true
          description: Nome (persone).
        last_name:
          type: string
          nullable: true
          description: Cognome (persone fisiche).
        company_name:
          type: string
          nullable: true
          description: Ragione sociale (parti aziendali).
        registration_number:
          type: string
          nullable: true
          description: Numero di registrazione dell'azienda (parti aziendali).
        email:
          type: string
          format: email
          nullable: true
          description: Email a cui viene inviato il link di verifica.
        nationality:
          type: string
          nullable: true
          description: >-
            Nazionalità per le persone fisiche, paese di costituzione per le
            aziende.
        phone_number:
          type: string
          nullable: true
          description: Numero di telefono raccolto per la parte.
        date_of_birth:
          type: string
          format: date
          nullable: true
          description: Data di nascita (persone).
        position:
          type: string
          nullable: true
          description: Titolo professionale in formato testo libero (persone).
        custom_fields:
          type: object
          additionalProperties: true
          description: >-
            Campi personalizzati definiti dal workflow raccolti per la parte,
            indicizzati per chiave del campo.
        is_active:
          type: boolean
          description: Indica se la parte è attiva.
        is_skipped:
          type: boolean
          description: >-
            Indica se la parte è esente dalla verifica. La rigenerazione
            cancella questa impostazione.
        requires_verification:
          type: boolean
          description: >-
            Indica se il ruolo e le regole sull'assetto proprietario richiedono
            una verifica per questa parte.
        roles:
          type: array
          description: Ruoli ricoperti dalla parte nell'azienda.
          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: Codice del ruolo.
              ownership_percent:
                type: number
                nullable: true
                description: >-
                  Percentuale dell'assetto proprietario per questo ruolo, quando
                  nota.
              voting_percent:
                type: number
                nullable: true
                description: Percentuale dei diritti di voto per questo ruolo, se nota.
        kyc_session_id:
          type: string
          format: uuid
          nullable: true
          description: Sessione KYC individuale figlia (persone fisiche).
        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: >-
            Stato della sessione KYC figlia. Una sessione eliminata mantiene lo
            stato che aveva al momento dell'eliminazione.
        kyc_session_url:
          type: string
          format: uri
          nullable: true
          description: >-
            Link ospitato della sessione KYC secondaria. `null` quando non è
            presente alcuna sessione o è stata eliminata, e per una chiave API
            con ambito limitato senza `sessions: write`.
        kyc_session_deleted:
          type: boolean
          description: >-
            La sessione KYC figlia è stata eliminata, pertanto non potrà mai
            concludersi.
        kyb_sub_session_id:
          type: string
          format: uuid
          nullable: true
          description: Sessione KYB figlia (parti aziendali).
        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: Stato della sessione KYB figlia.
        kyb_sub_session_url:
          type: string
          format: uri
          nullable: true
          description: >-
            Link ospitato della sessione KYB secondaria, con le stesse regole
            per `null` di `kyc_session_url`.
        kyb_sub_session_deleted:
          type: boolean
          description: Controparte a livello di azienda di `kyc_session_deleted`.
        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 di workflow eseguito dalla sessione figlia.
        verification_workflow_id:
          type: string
          format: uuid
          nullable: true
          description: Workflow eseguito dalla sessione figlia.
        verification_workflow_label:
          type: string
          nullable: true
          description: Etichetta di quel workflow.
        verification_workflow_features:
          type: array
          nullable: true
          description: >-
            Funzionalità del workflow della sessione figlia con il relativo
            stato attuale.
          items:
            type: object
            required:
              - feature
              - status
            properties:
              feature:
                type: string
                description: >-
                  Codice della funzionalità, ad esempio `ID_VERIFICATION` o
                  `LIVENESS`.
              status:
                type: string
                description: >-
                  Stato della funzionalità, `Not Finished` fino a quando non
                  viene eseguita.
        didit_internal_id:
          type: string
          format: uuid
          nullable: true
          description: Identificatore Didit della persona verificata, una volta nota.
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        La chiave API della tua applicazione, da Developers -> API keys nella
        Business Console. La chiave primaria ha accesso completo. Una chiave con
        nome può avere un ambito definito: nessuno, lettura o scrittura per
        risorsa, limitata ad alcuni workflow o a sessioni approvate, a un elenco
        di indirizzi IP e a una data di scadenza. 401 indica che la chiave è
        errata, revocata o scaduta; 403 indica che non è stata inviata alcuna
        chiave, che la chiave non ha accesso a questa risorsa o azione, oppure
        che la richiesta proviene da un indirizzo non incluso nel suo elenco IP;
        404 su una route di sessione indica che la sessione non rientra nei
        workflow o negli stati previsti dalla chiave. Una chiave senza accesso
        ai media riceve gli URL di immagini, video e PDF come null, e una chiave
        senza permessi di scrittura sulle sessioni riceve link e token di
        sessione come null. Consulta https://docs.didit.me/console/api-keys.

````

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