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

# Submeter pessoas-chave KYB API

> Declare as pessoas-chave preparadas de uma sessão KYB e inicie a verificação KYC de cada uma que o necessite, com a Didit.



## OpenAPI

````yaml pt/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 de Verificação de identidade. Autentique-se com o cabeçalho x-api-key.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/session/{sessionId}/kyb/parties/submit/:
    post:
      tags:
        - Sessions
      summary: Submeter os rascunhos das partes do KYB
      description: >-
        Declarar os rascunhos guardados como as pessoas-chave da empresa. Este é
        o passo alojado de Pessoas-chave sob a sua chave de API: a Didit decide,
        a partir das definições de funções e limiares de propriedade do fluxo,
        quais as partes que têm de ser verificadas, cria uma sessão individual
        de KYC (ou uma subsessão de KYB para um proprietário que seja uma
        empresa) para cada uma delas, envia os e-mails solicitados pelo fluxo e
        avança a sessão. Cada sessão dependente é faturada como no fluxo
        alojado. Os rascunhos são consumidos. Repetir a chamada após um envio
        bem-sucedido não altera nada e responde `200` com `already_submitted:
        true` e as partes que já existem. A sessão tem de estar no passo de
        Pessoas-chave. Envie o `kyc_session_url` de cada pessoa para a própria,
        ou incorpore-o. Requer `write:businesses`.
      operationId: post_v3_session_kyb_parties_submit
      parameters:
        - name: sessionId
          in: path
          required: true
          description: >-
            UUID da sessão de Verificação de empresas (KYB). Tem de pertencer à
            aplicação da chave de API.
          schema:
            type: string
            format: uuid
            example: 33333333-4444-5555-6666-777777777777
        - name: node_id
          in: query
          required: false
          description: >-
            Nó do fluxo do passo de KYB. Apenas necessário quando o fluxo tem
            mais de um nó de KYB; por predefinição, a Didit utiliza o nó próprio
            da sessão.
          schema:
            type: string
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                locale:
                  type: string
                  maxLength: 10
                  description: >-
                    Localidade utilizada para traduzir a resposta do passo para
                    o qual a sessão avança.
            example:
              locale: es
      responses:
        '200':
          description: Partes declaradas (ou já declaradas).
          content:
            application/json:
              schema:
                type: object
                properties:
                  valid:
                    type: boolean
                  next_step:
                    type: string
                    nullable: true
                    description: Passo em que a sessão se encontra.
                  status:
                    type: string
                    description: Estado da sessão da empresa.
                  advanced:
                    type: boolean
                    description: >-
                      `true` quando esta chamada declarou as partes e avançou a
                      sessão.
                  already_submitted:
                    type: boolean
                    description: >-
                      `true` quando as partes tinham sido declaradas por uma
                      chamada anterior.
                  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: >-
            A chave de API com âmbito expirou. Este é o único caso que devolve
            `401`: uma chave em falta, inválida ou revogada devolve `403`.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Mensagem de erro legível.
              examples:
                Expired key:
                  summary: A data de validade da chave já passou
                  value:
                    detail: This API key has expired.
        '402':
          description: >-
            A organização já não tem crédito para as sessões de verificação
            subordinadas.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Mensagem de erro legível.
              example:
                detail: Insufficient credits.
        '403':
          description: >-
            Falha de autenticação ou autorização. Uma chave em falta devolve
            `403`, assim como uma chave de outra aplicação, uma chave com âmbito
            restrito sem a permissão que este endpoint requer e um pedido
            proveniente de fora da lista de IPs permitidos da chave; uma chave
            incorreta, revogada ou expirada devolve `401`. Distinga-as através
            de `detail`.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Mensagem de erro legível.
              examples:
                Missing or invalid credentials:
                  summary: Sem cabeçalho x-api-key ou a chave falhou a validação
                  value:
                    detail: >-
                      Authentication credentials were not provided or are
                      invalid.
                Other application:
                  summary: >-
                    Uma chave válida que pertence a uma aplicação diferente da
                    sessão
                  value:
                    detail: You do not have permission to perform this action.
                Scoped key without decisions write:
                  summary: 'Chave com âmbito não tem decisions: write'
                  value:
                    detail: This API key has no write access to decisions.
                IP not allowed:
                  summary: >-
                    Pedido proveniente de fora da lista de permissões de IP da
                    chave
                  value:
                    detail: This API key can't be used from this IP address.
        '404':
          description: >-
            A sessão não existe, foi eliminada, pertence a outra aplicação ou
            está fora dos limites de uma chave com âmbito restrito; nenhum
            detalhe os distingue.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Mensagem de erro legível.
              example:
                detail: Session not found.
        '409':
          description: >-
            `kyb_no_party_drafts`: não há nada a submeter.
            `kyb_parties_already_submitted`: foram adicionados rascunhos após a
            declaração das partes. `kyb_step_mismatch`: a sessão não se encontra
            no passo de Pessoas-chave (`next_step` indica o respetivo passo).
            `kyb_session_not_writable`: a sessão está terminada.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Mensagem de erro legível.
                  code:
                    type: string
                  next_step:
                    type: string
              example:
                detail: There are no draft parties to submit.
                code: kyb_no_party_drafts
        '429':
          description: >-
            Limite de pedidos excedido: 300 pedidos de escrita (POST, PATCH,
            DELETE) por minuto por chave de API. Aguarde `Retry-After` segundos
            antes de tentar novamente; os cabeçalhos `X-RateLimit-*` mostram o
            orçamento.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Mensagem de erro legível.
              examples:
                Rate limited:
                  summary: Orçamento esgotado para o minuto atual
                  value:
                    detail: >-
                      Write request rate limit exceeded. You can make up to 300
                      requests per minute.
          headers:
            Retry-After:
              description: Segundos a aguardar antes de tentar novamente.
              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: >-
        Uma parte de pessoas-chave de uma sessão de Verificação de empresas
        (KYB), com a sua verificação subordinada. A mesma parte aparece em
        `key_people_checks[].submitted.parties[]` da decisão da sessão da
        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 da parte.
        entity_type:
          type: string
          enum:
            - person
            - company
          description: Se a parte é uma pessoa singular ou uma empresa.
        source:
          type: string
          enum:
            - REGISTRY
            - USER
          description: >-
            `REGISTRY`: obtido a partir do registo de empresas. `USER`:
            introduzido no ecrã Pessoas-chave.
        name:
          type: string
          description: Nome de apresentação da parte.
        first_name:
          type: string
          nullable: true
          description: Primeiro nome (pessoas).
        last_name:
          type: string
          nullable: true
          description: Apelido (pessoas singulares).
        company_name:
          type: string
          nullable: true
          description: Nome da empresa (partes empresariais).
        registration_number:
          type: string
          nullable: true
          description: Número de registo da empresa (partes empresariais).
        email:
          type: string
          format: email
          nullable: true
          description: E-mail para o qual a ligação de verificação é enviada.
        nationality:
          type: string
          nullable: true
          description: >-
            Nacionalidade para pessoas singulares, país de constituição para
            empresas.
        phone_number:
          type: string
          nullable: true
          description: Número de telefone recolhido para a parte.
        date_of_birth:
          type: string
          format: date
          nullable: true
          description: Data de nascimento (pessoas).
        position:
          type: string
          nullable: true
          description: Cargo em texto livre (pessoas singulares).
        custom_fields:
          type: object
          additionalProperties: true
          description: >-
            Campos personalizados definidos pelo fluxo recolhidos para a parte,
            indexados pela chave do campo.
        is_active:
          type: boolean
          description: Se a parte está ativa.
        is_skipped:
          type: boolean
          description: >-
            Se a parte está isenta de verificação. A regeneração elimina esta
            isenção.
        requires_verification:
          type: boolean
          description: >-
            Se as regras de função e propriedade exigem uma verificação para
            esta parte.
        roles:
          type: array
          description: Funções que a parte desempenha na 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 da função.
              ownership_percent:
                type: number
                nullable: true
                description: Percentagem de propriedade para esta função, quando conhecida.
              voting_percent:
                type: number
                nullable: true
                description: >-
                  Percentagem de direitos de voto para esta função, quando
                  conhecida.
        kyc_session_id:
          type: string
          format: uuid
          nullable: true
          description: Sessão KYC individual dependente (pessoas singulares).
        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 da sessão KYC subordinada. Uma sessão eliminada mantém o
            estado que tinha quando foi eliminada.
        kyc_session_url:
          type: string
          format: uri
          nullable: true
          description: >-
            Ligação alojada da sessão de KYC dependente. `null` quando não
            existe nenhuma ou se foi eliminada, e para uma chave de API com
            âmbito restrito sem `sessions: write`.
        kyc_session_deleted:
          type: boolean
          description: >-
            A sessão de KYC subordinada foi eliminada, pelo que nunca poderá ser
            concluída.
        kyb_sub_session_id:
          type: string
          format: uuid
          nullable: true
          description: Sessão KYB dependente (partes empresariais).
        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 da sessão KYB subordinada.
        kyb_sub_session_url:
          type: string
          format: uri
          nullable: true
          description: >-
            Ligação alojada da sessão de KYB dependente, com as mesmas regras de
            `null` que `kyc_session_url`.
        kyb_sub_session_deleted:
          type: boolean
          description: Equivalente da parte empresarial de `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 do fluxo que a sessão filha executa.
        verification_workflow_id:
          type: string
          format: uuid
          nullable: true
          description: Fluxo que a sessão filha executa.
        verification_workflow_label:
          type: string
          nullable: true
          description: Rótulo desse fluxo.
        verification_workflow_features:
          type: array
          nullable: true
          description: >-
            Funcionalidades do fluxo da sessão filha com o respetivo estado
            atual.
          items:
            type: object
            required:
              - feature
              - status
            properties:
              feature:
                type: string
                description: >-
                  Código da funcionalidade, por exemplo `ID_VERIFICATION` ou
                  `LIVENESS`.
              status:
                type: string
                description: Estado da funcionalidade, `Not Finished` até ser executada.
        didit_internal_id:
          type: string
          format: uuid
          nullable: true
          description: Identificador da Didit da pessoa verificada, assim que conhecida.
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        A chave de API da sua aplicação, a partir de Programadores -> Chaves de
        API na Business Console. A chave principal tem acesso total. Uma chave
        nomeada pode ter o âmbito definido: nenhum, leitura ou escrita por
        recurso, limitada a alguns fluxos ou a sessões aprovadas, a uma lista de
        endereços IP e a uma data de validade. 401 significa que a chave está
        incorreta, revogada ou expirada; 403 significa que nenhuma chave foi
        enviada, que a chave não tem acesso a este recurso ou ação, ou que o
        pedido veio de um endereço fora da sua lista de IP; 404 numa rota de
        sessão significa que a sessão está fora dos fluxos ou estados da chave.
        Uma chave sem acesso a multimédia recebe URLs de imagens, vídeos e PDFs
        como nulos, e uma chave sem permissão de escrita em sessões recebe
        ligações de sessão e tokens como nulos. Consulte
        https://docs.didit.me/console/api-keys.

````

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