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

# List KYB Extracted Parties API

> Read the shareholders, directors and ownership percentages that the documents uploaded to a KYB session name.



## OpenAPI

````yaml GET /v3/session/{sessionId}/kyb/extracted-parties/
openapi: 3.0.0
info:
  version: 3.0.0
  title: Didit Verification API
  description: Identity verification API. Authenticate with x-api-key header.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/session/{sessionId}/kyb/extracted-parties/:
    get:
      tags:
        - Sessions
      summary: List the parties named by the uploaded documents
      description: >-
        Return the shareholders and directors that the documents uploaded to
        this KYB session name, merged per person and attributed to the documents
        that named them. Show them to your applicant to confirm, then declare
        them with the party draft endpoints. A range stays a range:
        `ownership_percent.text` keeps the verbatim figure and `min` / `max` the
        numbers read from it. Nobody is labelled a UBO here; that is decided
        when the parties are submitted, from the role settings and ownership
        thresholds of the workflow. The same list is in the session decision as
        `document_verifications[].extracted_parties`. Requires `read:businesses`
        or `read:sessions`.
      operationId: get_v3_session_kyb_extracted_parties
      parameters:
        - name: sessionId
          in: path
          required: true
          description: >-
            UUID of the Business Verification (KYB) session. It must belong to
            the application of the API key.
          schema:
            type: string
            format: uuid
            example: 33333333-4444-5555-6666-777777777777
        - name: node_id
          in: query
          required: false
          description: >-
            Workflow node of the KYB step. Only needed when the workflow has
            more than one KYB node; by default Didit uses the session's own
            node.
          schema:
            type: string
      responses:
        '200':
          description: Parties named by the current documents.
          content:
            application/json:
              schema:
                type: object
                required:
                  - parties
                  - document_count
                properties:
                  parties:
                    type: array
                    items:
                      type: object
                      properties:
                        name:
                          type: string
                        entity_type:
                          type: string
                          enum:
                            - person
                            - company
                        first_name:
                          type: string
                          nullable: true
                        last_name:
                          type: string
                          nullable: true
                        appointment_date:
                          type: string
                          nullable: true
                        designation:
                          type: string
                          nullable: true
                        roles:
                          type: array
                          items:
                            type: object
                            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
                              ownership_percent:
                                type: object
                                properties:
                                  text:
                                    type: string
                                    nullable: true
                                    description: >-
                                      The ownership figure exactly as the
                                      document states it, such as `25-50%`,
                                      `>50%` or `NO EXHIBE`.
                                  min:
                                    type: number
                                    nullable: true
                                    description: >-
                                      Lower number read out of `text`; null when
                                      it states none.
                                  max:
                                    type: number
                                    nullable: true
                                    description: >-
                                      Upper number read out of `text`; null when
                                      it states none.
                        documents:
                          type: array
                          description: The uploaded documents that named this party.
                          items:
                            type: object
                            properties:
                              document_uuid:
                                type: string
                                format: uuid
                              document_type:
                                type: string
                                nullable: true
                              document_subtype:
                                type: string
                                nullable: true
                              original_filename:
                                type: string
                                nullable: true
                              status:
                                type: string
                                nullable: true
                    description: >-
                      The shareholders and directors the uploaded documents
                      name, merged per person. Nobody is labelled a UBO here:
                      that is decided when the parties are submitted.
                  document_count:
                    type: integer
                    description: Number of uploaded documents the list was read from.
                  node_id:
                    type: string
                    nullable: true
              example:
                parties:
                  - name: Ana Lopez
                    entity_type: person
                    first_name: Ana
                    last_name: Lopez
                    appointment_date: null
                    designation: Administrador unico
                    roles:
                      - role: shareholder
                        ownership_percent:
                          text: 60%
                          min: 60
                          max: 60
                    documents:
                      - document_uuid: 0a3f1e2c-7c2f-4a1b-9d55-2f8d2a5d6b41
                        document_type: OWNERSHIP_STRUCTURE
                        document_subtype: ARTICLES_OF_INCORPORATION
                        original_filename: acta_constitutiva.pdf
                        status: Approved
                document_count: 1
                node_id: node_kyb_documents
        '401':
          description: >-
            The scoped API key has expired. This is the only case that returns
            `401`: a missing, invalid or revoked key returns `403`.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Human-readable error message.
              examples:
                Expired key:
                  summary: The key's expiry date has passed
                  value:
                    detail: This API key has expired.
        '403':
          description: >-
            Authentication or authorization failure. Missing, invalid and
            revoked keys return `403` (not `401`); so do a key of another
            application, a scoped key without the permission this endpoint
            needs, and a request from outside the key's IP allowlist.
            Distinguish them by `detail`.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Human-readable error message.
              examples:
                Missing or invalid credentials:
                  summary: No x-api-key header, or the key failed validation
                  value:
                    detail: >-
                      Authentication credentials were not provided or are
                      invalid.
                Other application:
                  summary: >-
                    A valid key that belongs to a different application than the
                    session
                  value:
                    detail: You do not have permission to perform this action.
                Scoped key without decisions write:
                  summary: 'Scoped key lacks decisions: write'
                  value:
                    detail: This API key has no write access to decisions.
                IP not allowed:
                  summary: Request from outside the key's IP allowlist
                  value:
                    detail: This API key can't be used from this IP address.
        '404':
          description: >-
            The session does not exist, was deleted, belongs to another
            application or is outside a scoped key's limits; no detail
            distinguishes them.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Human-readable error message.
              example:
                detail: Session not found.
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            result = client.sessions.list_kyb_extracted_parties(
                "33333333-4444-5555-6666-777777777777",
            )
            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.listKybExtractedParties("33333333-4444-5555-6666-777777777777");

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

            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->listKybExtractedParties('33333333-4444-5555-6666-777777777777');

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


            # Reads DIDIT_API_KEY.

            didit = Didit::Client.new


            result =
            didit.sessions.list_kyb_extracted_parties("33333333-4444-5555-6666-777777777777")

            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.ListKybExtractedPartiesAsync("33333333-4444-5555-6666-777777777777");

            Console.WriteLine(JsonSerializer.Serialize(result));
components:
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        Your application's API key, from Developers -> API keys in the Business
        Console. The primary key has full access. A named key can be scoped:
        none, read or write per resource, limited to some workflows or to
        approved sessions, to a list of IP addresses, and to an expiry date. 401
        means the key is missing, wrong, revoked or expired; 403 means the key
        has no access to this resource or action, or the request came from an
        address outside its IP list; 404 on a session route means the session is
        outside the key's workflows or statuses. A key without media access
        receives image, video and PDF URLs as null, and a key without sessions
        write receives session links and tokens as null. See
        https://docs.didit.me/console/api-keys.

````

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