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

# Edita el borrador de persona clau de KYB (API)

> Canvia els camps d'un únic borrador de persona clau d'una sessió KYB de Didit; la part fusionada es valida com a conjunt.



## OpenAPI

````yaml ca/openapi-25.json PATCH /v3/session/{sessionId}/kyb/parties/drafts/{draftId}/
openapi: 3.0.0
info:
  version: 3.0.0
  title: Didit Verification API
  description: API de verificació d'identitat. Autentica't amb la capçalera x-api-key.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/session/{sessionId}/kyb/parties/drafts/{draftId}/:
    patch:
      tags:
        - Sessions
      summary: Edita un esborrany de part de KYB
      description: >-
        Canvia els camps de l'esborrany d'una part. La modificació es fusiona
        amb l'esborrany emmagatzemat i la part fusionada es valida en conjunt,
        de manera que es rebutja qualsevol modificació que deixi la part
        incompleta. Canviar `first_name` o `last_name` substitueix el nom
        complet emmagatzemat. Requereix `write:businesses`.
      operationId: patch_v3_session_kyb_party_draft
      parameters:
        - name: sessionId
          in: path
          required: true
          description: >-
            UUID de la sessió de Verificació d'empreses (KYB). Ha de pertànyer a
            l'aplicació de la clau d'API.
          schema:
            type: string
            format: uuid
            example: 33333333-4444-5555-6666-777777777777
        - name: draftId
          in: path
          required: true
          description: >-
            UUID de l'esborrany de la part (`draft_id` retornat quan es va
            crear).
          schema:
            type: string
            format: uuid
            example: 5b0d7a52-9d3e-4f0c-8c6a-0e5f3a1b2c4d
        - name: node_id
          in: query
          required: false
          description: >-
            Node del flux de treball del pas de KYB. Només cal quan el flux de
            treball té més d'un node de KYB; per defecte, Didit utilitza el node
            propi de la sessió.
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              description: >-
                Qualsevol subconjunt dels camps de la part. L'edició es fusiona
                amb l'esborrany emmagatzemat i la part fusionada es valida en
                conjunt, de manera que un esborrany que es podia enviar abans
                d'una edició encara es pot enviar després d'aquesta.
              properties:
                entity_type:
                  type: string
                  enum:
                    - person
                    - company
                  description: Si la part és una persona física o una empresa.
                full_name:
                  type: string
                  maxLength: 255
                  description: >-
                    Nom complet d'una persona. Envia aquest camp, o bé
                    `first_name` i `last_name`.
                first_name:
                  type: string
                  maxLength: 128
                last_name:
                  type: string
                  maxLength: 128
                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: >-
                    Rol que té la part. Intercanviable amb `roles`; quan
                    s'envien tots dos, es fusionen.
                roles:
                  type: array
                  items:
                    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: >-
                    Tots els rols que té la part. Una persona necessita almenys
                    un rol (aquí o a `role`).
                position:
                  type: string
                  maxLength: 128
                  description: Càrrec laboral d'una persona.
                date_of_birth:
                  type: string
                  format: date
                  nullable: true
                company_name:
                  type: string
                  maxLength: 255
                  description: >-
                    Nom d'una part empresarial. Obligatori quan `entity_type` és
                    `company`.
                registration_number:
                  type: string
                  maxLength: 100
                  description: Número de registre d'una part de l'empresa.
                email:
                  type: string
                  format: email
                  description: >-
                    On s'envia l'enllaç de verificació. Obligatori quan la part
                    ha de completar la verificació, cosa que depèn de la
                    configuració del rol i dels llindars de titularitat del flux
                    de treball.
                ownership_percent:
                  type: number
                  nullable: true
                  description: Participació de l'empresa que posseeix la part interessada.
                nationality:
                  type: string
                  maxLength: 100
                  description: >-
                    Nacionalitat d'una persona, o país de constitució d'una
                    empresa. Obligatori per a cada part.
                phone_number:
                  type: string
                  maxLength: 32
                custom_fields:
                  type: object
                  additionalProperties: true
                  description: Camps addicionals definits pel flux de treball.
                skip_verification:
                  type: boolean
                  default: false
                  description: >-
                    Demana ometre la verificació d'aquesta part. Només s'accepta
                    quan el rol de la part permet l'omissió a la configuració de
                    Persones clau del flux de treball.
            example:
              ownership_percent: 55
      responses:
        '200':
          description: Esborrany actualitzat.
          content:
            application/json:
              schema:
                type: object
                required:
                  - draft_id
                  - created_at
                  - updated_at
                  - party
                properties:
                  draft_id:
                    type: string
                    format: uuid
                  created_at:
                    type: string
                    format: date-time
                  updated_at:
                    type: string
                    format: date-time
                  party:
                    type: object
                    required:
                      - entity_type
                      - nationality
                    properties:
                      entity_type:
                        type: string
                        enum:
                          - person
                          - company
                        description: Si la part és una persona física o una empresa.
                      full_name:
                        type: string
                        maxLength: 255
                        description: >-
                          Nom complet d'una persona. Envia aquest camp, o bé
                          `first_name` i `last_name`.
                      first_name:
                        type: string
                        maxLength: 128
                      last_name:
                        type: string
                        maxLength: 128
                      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: >-
                          Rol que té la part. Intercanviable amb `roles`; quan
                          s'envien tots dos, es fusionen.
                      roles:
                        type: array
                        items:
                          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: >-
                          Tots els rols que té la part. Una persona necessita
                          almenys un rol (aquí o a `role`).
                      position:
                        type: string
                        maxLength: 128
                        description: Càrrec laboral d'una persona.
                      date_of_birth:
                        type: string
                        format: date
                        nullable: true
                      company_name:
                        type: string
                        maxLength: 255
                        description: >-
                          Nom d'una part empresarial. Obligatori quan
                          `entity_type` és `company`.
                      registration_number:
                        type: string
                        maxLength: 100
                        description: Número de registre d'una part de l'empresa.
                      email:
                        type: string
                        format: email
                        description: >-
                          On s'envia l'enllaç de verificació. Obligatori quan la
                          part ha de completar la verificació, cosa que depèn de
                          la configuració del rol i dels llindars de titularitat
                          del flux de treball.
                      ownership_percent:
                        type: number
                        nullable: true
                        description: >-
                          Participació de l'empresa que posseeix la part
                          interessada.
                      nationality:
                        type: string
                        maxLength: 100
                        description: >-
                          Nacionalitat d'una persona, o país de constitució
                          d'una empresa. Obligatori per a cada part.
                      phone_number:
                        type: string
                        maxLength: 32
                      custom_fields:
                        type: object
                        additionalProperties: true
                        description: Camps addicionals definits pel flux de treball.
                      skip_verification:
                        type: boolean
                        default: false
                        description: >-
                          Demana ometre la verificació d'aquesta part. Només
                          s'accepta quan el rol de la part permet l'omissió a la
                          configuració de Persones clau del flux de treball.
              example:
                draft_id: 5b0d7a52-9d3e-4f0c-8c6a-0e5f3a1b2c4d
                created_at: '2026-10-31T10:00:00Z'
                updated_at: '2026-10-31T10:00:00Z'
                party:
                  entity_type: person
                  first_name: Ana
                  last_name: Lopez
                  roles:
                    - ubo
                    - director
                  ownership_percent: 55
                  nationality: MEX
                  email: ana.lopez@example.com
                  date_of_birth: '1984-06-12'
        '400':
          description: La part fusionada no és vàlida.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Missatge d'error fàcil de llegir.
              example:
                non_field_errors:
                  - Person parties require at least one role.
        '401':
          description: >-
            La clau d'API amb abast ha caducat. Aquest és l'únic cas que retorna
            `401`: una clau absent, no vàlida o revocada retorna `403`.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Missatge d'error fàcil de llegir.
              examples:
                Expired key:
                  summary: La data de caducitat de la clau ha passat
                  value:
                    detail: This API key has expired.
        '403':
          description: >-
            Fallada d'autenticació o d'autorització. Si falta la clau es retorna
            `403`, igual que amb una clau d'una altra aplicació, una clau amb
            àmbit sense el permís que necessita aquest endpoint o una
            sol·licitud des de fora de la llista d'adreces IP permeses de la
            clau; una clau incorrecta, revocada o caducada retorna `401`.
            Distingeix-les pel camp `detail`.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Missatge d'error fàcil de llegir.
              examples:
                Missing or invalid credentials:
                  summary: >-
                    Falta la capçalera x-api-key, o la clau ha fallat la
                    validació
                  value:
                    detail: >-
                      Authentication credentials were not provided or are
                      invalid.
                Other application:
                  summary: >-
                    Una clau vàlida que pertany a una aplicació diferent de la
                    de la sessió
                  value:
                    detail: You do not have permission to perform this action.
                Scoped key without decisions write:
                  summary: >-
                    A la clau amb abast li manca el permís d'escriptura de
                    decisions
                  value:
                    detail: This API key has no write access to decisions.
                IP not allowed:
                  summary: >-
                    Sol·licitud des de fora de la llista d'adreces IP permeses
                    de la clau
                  value:
                    detail: This API key can't be used from this IP address.
        '404':
          description: >-
            No existeix la sessió o l'esborrany, o la sessió queda fora de
            l'aplicació de la clau o dels límits d'una clau amb abast limitat.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Missatge d'error fàcil de llegir.
              example:
                detail: Session not found.
        '409':
          description: La sessió ha finalitzat (`kyb_session_not_writable`).
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Missatge d'error fàcil de llegir.
                  code:
                    type: string
              example:
                detail: This verification session is no longer accepting changes.
                code: kyb_session_not_writable
        '429':
          description: >-
            S'ha superat el límit de freqüència: 300 sol·licituds d'escriptura
            (POST, PATCH, DELETE) per minut per clau d'API. Espera els segons
            indicats a `Retry-After` abans de reintentar; les capçaleres
            `X-RateLimit-*` mostren el pressupost restant.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Missatge d'error fàcil de llegir.
              examples:
                Rate limited:
                  summary: Pressupost per al minut actual esgotat
                  value:
                    detail: >-
                      Write request rate limit exceeded. You can make up to 300
                      requests per minute.
          headers:
            Retry-After:
              description: Segons que cal esperar abans de reintentar.
              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.update_kyb_party_draft(
                "33333333-4444-5555-6666-777777777777",
                "5b0d7a52-9d3e-4f0c-8c6a-0e5f3a1b2c4d",
                ownership_percent=55.0,
            )
            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.updateKybPartyDraft(
              "33333333-4444-5555-6666-777777777777",
              "5b0d7a52-9d3e-4f0c-8c6a-0e5f3a1b2c4d",
              {
                ownership_percent: 55.0,
              },
            );
            console.log(result);
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Sessions.UpdateKYBPartyDraft(ctx, \"33333333-4444-5555-6666-777777777777\", \"5b0d7a52-9d3e-4f0c-8c6a-0e5f3a1b2c4d\", didit.SessionsUpdateKYBPartyDraftParams{\n\tOwnershipPercent: didit.Float(55.0),\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.SessionsUpdateKybPartyDraftParams;


            // Reads DIDIT_API_KEY.

            Didit client = new Didit();


            var result =
            client.sessions().updateKybPartyDraft("33333333-4444-5555-6666-777777777777",
            "5b0d7a52-9d3e-4f0c-8c6a-0e5f3a1b2c4d",
            SessionsUpdateKybPartyDraftParams.builder()
                    .ownershipPercent(55.0)
                    .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->updateKybPartyDraft('33333333-4444-5555-6666-777777777777',
            '5b0d7a52-9d3e-4f0c-8c6a-0e5f3a1b2c4d', [
                'ownership_percent' => 55.0,
            ]);

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

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

            result = didit.sessions.update_kyb_party_draft(
              "33333333-4444-5555-6666-777777777777",
              "5b0d7a52-9d3e-4f0c-8c6a-0e5f3a1b2c4d",
              ownership_percent: 55.0
            )
            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.UpdateKybPartyDraftAsync("33333333-4444-5555-6666-777777777777",
            "5b0d7a52-9d3e-4f0c-8c6a-0e5f3a1b2c4d", new
            SessionsUpdateKybPartyDraftParams

            {
                OwnershipPercent = 55.0,
            });

            Console.WriteLine(JsonSerializer.Serialize(result));
components:
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        La clau d'API de la teva aplicació, des de Developers -> API keys a la
        Business Console. La clau primària té accés complet. Una clau amb nom
        pot tenir l'abast limitat: cap, lectura o escriptura per recurs,
        limitada a determinats fluxos de treball o a sessions aprovades, a una
        llista d'adreces IP i a una data de caducitat. 401 significa que la clau
        és incorrecta, revocada o caducada; 403 significa que no s'ha enviat cap
        clau, que la clau no té accés a aquest recurs o acció, o que la
        sol·licitud prové d'una adreça fora de la seva llista d'IP; 404 en una
        ruta de sessió significa que la sessió està fora dels fluxos de treball
        o estats de la clau. Una clau sense accés a fitxers multimèdia rep els
        URL d'imatge, vídeo i PDF com a null, i una clau sense permís
        d'escriptura de sessions rep els enllaços de sessió i els tokens com a
        null. Consulta https://docs.didit.me/console/api-keys.

````

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