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

# Kirim Pihak Kunci KYB via API

> Deklarasikan pihak kunci yang telah disiapkan dari sesi KYB dan mulai verifikasi KYC untuk setiap pihak yang membutuhkannya di Didit.



## OpenAPI

````yaml id/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 Verifikasi Identitas. Lakukan autentikasi dengan header x-api-key.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/session/{sessionId}/kyb/parties/submit/:
    post:
      tags:
        - Sessions
      summary: Kirim draf pihak KYB
      description: >-
        Deklarasikan draf yang disimpan sebagai pihak kunci perusahaan. Ini
        adalah langkah Pihak Kunci yang di-hosting di bawah kunci API Anda:
        Didit memutuskan dari pengaturan peran dan ambang batas kepemilikan alur
        kerja pihak mana yang harus diverifikasi, membuat satu sesi KYC individu
        (atau sub-sesi KYB untuk pemilik korporat) untuk masing-masing pihak,
        mengirimkan email yang diminta alur kerja, dan memajukan sesi. Setiap
        sesi turunan ditagihkan seperti pada alur yang di-hosting. Draf akan
        dikonsumsi. Mengulangi panggilan setelah pengiriman yang berhasil tidak
        mengubah apa pun dan merespons `200` dengan `already_submitted: true`
        dan pihak yang sudah ada. Sesi harus berada pada langkah Pihak Kunci.
        Kirimkan `kyc_session_url` setiap orang kepada mereka, atau sematkan.
        Memerlukan `write:businesses`.
      operationId: post_v3_session_kyb_parties_submit
      parameters:
        - name: sessionId
          in: path
          required: true
          description: >-
            UUID dari sesi Verifikasi Bisnis (KYB). UUID ini harus dimiliki oleh
            aplikasi yang terkait dengan kunci API.
          schema:
            type: string
            format: uuid
            example: 33333333-4444-5555-6666-777777777777
        - name: node_id
          in: query
          required: false
          description: >-
            Node alur kerja dari langkah KYB. Hanya diperlukan jika alur kerja
            memiliki lebih dari satu node KYB; secara default Didit menggunakan
            node milik sesi itu sendiri.
          schema:
            type: string
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                locale:
                  type: string
                  maxLength: 10
                  description: >-
                    Lokal yang digunakan untuk menerjemahkan respons langkah
                    yang dituju sesi.
            example:
              locale: es
      responses:
        '200':
          description: Pihak yang dideklarasikan (atau sudah dideklarasikan).
          content:
            application/json:
              schema:
                type: object
                properties:
                  valid:
                    type: boolean
                  next_step:
                    type: string
                    nullable: true
                    description: Langkah yang sedang dijalani sesi.
                  status:
                    type: string
                    description: Status sesi bisnis.
                  advanced:
                    type: boolean
                    description: >-
                      `true` saat pemanggilan ini mendeklarasikan para pihak dan
                      melanjutkan sesi.
                  already_submitted:
                    type: boolean
                    description: >-
                      `true` saat para pihak telah dinyatakan melalui
                      pemanggilan sebelumnya.
                  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: >-
            Kunci API dengan cakupan terbatas telah kedaluwarsa. Ini
            satu-satunya kasus yang mengembalikan `401`: kunci yang hilang,
            tidak valid, atau dicabut mengembalikan `403`.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Pesan kesalahan yang mudah dibaca manusia.
              examples:
                Expired key:
                  summary: Tanggal kedaluwarsa kunci telah lewat
                  value:
                    detail: This API key has expired.
        '402':
          description: Organisasi tidak memiliki sisa kredit untuk sesi verifikasi turunan.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Pesan kesalahan yang mudah dibaca manusia.
              example:
                detail: Insufficient credits.
        '403':
          description: >-
            Kegagalan autentikasi atau otorisasi. Kunci yang hilang
            mengembalikan `403`, begitu juga dengan kunci dari aplikasi lain,
            kunci dengan cakupan tanpa izin yang dibutuhkan endpoint ini, dan
            permintaan dari luar daftar izin IP kunci tersebut; kunci yang
            salah, dicabut, atau kedaluwarsa mengembalikan `401`. Bedakan
            kegagalan tersebut berdasarkan `detail`.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Pesan kesalahan yang mudah dibaca manusia.
              examples:
                Missing or invalid credentials:
                  summary: Tidak ada header x-api-key, atau kunci gagal divalidasi
                  value:
                    detail: >-
                      Authentication credentials were not provided or are
                      invalid.
                Other application:
                  summary: Kunci valid milik aplikasi yang berbeda dari sesi
                  value:
                    detail: You do not have permission to perform this action.
                Scoped key without decisions write:
                  summary: 'Kunci ber-scope tidak memiliki decisions: write'
                  value:
                    detail: This API key has no write access to decisions.
                IP not allowed:
                  summary: Permintaan dari luar daftar izin IP kunci
                  value:
                    detail: This API key can't be used from this IP address.
        '404':
          description: >-
            Sesi tidak ada, telah dihapus, milik aplikasi lain, atau berada di
            luar batas kunci dengan cakupan terbatas; tidak ada detail yang
            membedakannya.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Pesan kesalahan yang mudah dibaca manusia.
              example:
                detail: Session not found.
        '409':
          description: >-
            `kyb_no_party_drafts`: tidak ada yang perlu dikirimkan.
            `kyb_parties_already_submitted`: draf ditambahkan setelah
            pihak-pihak dideklarasikan. `kyb_step_mismatch`: sesi tidak berada
            pada langkah Pihak Kunci (`next_step` menyebutkan nama langkahnya).
            `kyb_session_not_writable`: sesi telah selesai.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Pesan kesalahan yang mudah dibaca manusia.
                  code:
                    type: string
                  next_step:
                    type: string
              example:
                detail: There are no draft parties to submit.
                code: kyb_no_party_drafts
        '429':
          description: >-
            Batas laju terlampaui: 300 permintaan penulisan (POST, PATCH,
            DELETE) per menit per kunci API. Tunggu selama `Retry-After` detik
            sebelum mencoba lagi; header `X-RateLimit-*` menunjukkan anggaran
            tersebut.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Pesan kesalahan yang mudah dibaca manusia.
              examples:
                Rate limited:
                  summary: Anggaran untuk menit saat ini habis
                  value:
                    detail: >-
                      Write request rate limit exceeded. You can make up to 300
                      requests per minute.
          headers:
            Retry-After:
              description: Detik untuk menunggu sebelum mencoba lagi.
              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: >-
        Pihak dari pihak kunci pada sesi Verifikasi Bisnis (KYB), beserta
        verifikasi turunannya. Pihak yang sama muncul di
        `key_people_checks[].submitted.parties[]` dari keputusan sesi bisnis.
      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: Pengidentifikasi pihak.
        entity_type:
          type: string
          enum:
            - person
            - company
          description: Apakah pihak tersebut adalah individu atau perusahaan.
        source:
          type: string
          enum:
            - REGISTRY
            - USER
          description: >-
            `REGISTRY`: diambil dari registri perusahaan. `USER`: dimasukkan di
            layar Key People.
        name:
          type: string
          description: Nama tampilan pihak.
        first_name:
          type: string
          nullable: true
          description: Nama depan (individu).
        last_name:
          type: string
          nullable: true
          description: Nama belakang (individu).
        company_name:
          type: string
          nullable: true
          description: Nama perusahaan (pihak perusahaan).
        registration_number:
          type: string
          nullable: true
          description: Nomor registrasi perusahaan (pihak perusahaan).
        email:
          type: string
          format: email
          nullable: true
          description: Alamat email tujuan pengiriman tautan verifikasi.
        nationality:
          type: string
          nullable: true
          description: Kewarganegaraan untuk perorangan, negara pendirian untuk perusahaan.
        phone_number:
          type: string
          nullable: true
          description: Nomor telepon yang dikumpulkan untuk pihak tersebut.
        date_of_birth:
          type: string
          format: date
          nullable: true
          description: Tanggal lahir (perorangan).
        position:
          type: string
          nullable: true
          description: Jabatan berupa teks bebas (individu).
        custom_fields:
          type: object
          additionalProperties: true
          description: >-
            Kolom kustom yang ditentukan alur kerja yang dikumpulkan untuk pihak
            tersebut, dengan kunci berupa kunci kolom.
        is_active:
          type: boolean
          description: Apakah pihak tersebut aktif.
        is_skipped:
          type: boolean
          description: >-
            Apakah pihak tersebut dikecualikan dari verifikasi. Pembuatan ulang
            akan menghapusnya.
        requires_verification:
          type: boolean
          description: >-
            Apakah aturan peran dan kepemilikan mewajibkan verifikasi untuk
            pihak ini.
        roles:
          type: array
          description: Peran yang dipegang pihak terkait di dalam perusahaan.
          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: Kode peran.
              ownership_percent:
                type: number
                nullable: true
                description: Persentase kepemilikan untuk peran ini, jika diketahui.
              voting_percent:
                type: number
                nullable: true
                description: Persentase hak suara untuk peran ini, jika diketahui.
        kyc_session_id:
          type: string
          format: uuid
          nullable: true
          description: Sesi KYC individu turunan (perorangan).
        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: >-
            Status sesi KYC turunan. Sesi yang dihapus tetap mempertahankan
            status yang dimilikinya saat dihapus.
        kyc_session_url:
          type: string
          format: uri
          nullable: true
          description: >-
            Tautan yang di-hosting untuk sesi KYC turunan. `null` jika tidak ada
            atau telah dihapus, dan untuk kunci API yang dibatasi tanpa
            `sessions: write`.
        kyc_session_deleted:
          type: boolean
          description: >-
            Sesi KYC turunan telah dihapus, sehingga tidak akan pernah dapat
            diselesaikan.
        kyb_sub_session_id:
          type: string
          format: uuid
          nullable: true
          description: Sesi KYB turunan (pihak perusahaan).
        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: Status sesi KYB turunan.
        kyb_sub_session_url:
          type: string
          format: uri
          nullable: true
          description: >-
            Tautan yang di-hosting untuk sesi KYB turunan, dengan aturan `null`
            yang sama seperti `kyc_session_url`.
        kyb_sub_session_deleted:
          type: boolean
          description: Padanan pihak perusahaan untuk `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: Jenis alur kerja yang dijalankan oleh sesi turunan.
        verification_workflow_id:
          type: string
          format: uuid
          nullable: true
          description: Alur kerja yang dijalankan oleh sesi anak.
        verification_workflow_label:
          type: string
          nullable: true
          description: Label alur kerja tersebut.
        verification_workflow_features:
          type: array
          nullable: true
          description: Fitur dari alur kerja sesi turunan beserta statusnya saat ini.
          items:
            type: object
            required:
              - feature
              - status
            properties:
              feature:
                type: string
                description: Kode fitur, misalnya `ID_VERIFICATION` atau `LIVENESS`.
              status:
                type: string
                description: Status fitur, `Not Finished` sampai fitur dijalankan.
        didit_internal_id:
          type: string
          format: uuid
          nullable: true
          description: >-
            Pengidentifikasi Didit untuk orang yang terverifikasi, setelah
            diketahui.
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        Kunci API aplikasi Anda, dari Developers -> API keys di Business
        Console. Kunci utama memiliki akses penuh. Kunci bernama dapat diberi
        cakupan: none, read, atau write per sumber daya, dibatasi pada beberapa
        alur kerja atau pada sesi yang disetujui, pada daftar alamat IP, dan
        pada tanggal kedaluwarsa. 401 berarti kuncinya salah, dicabut, atau
        kedaluwarsa; 403 berarti tidak ada kunci yang dikirimkan, kunci tidak
        memiliki akses ke sumber daya atau tindakan ini, atau permintaan datang
        dari alamat di luar daftar IP-nya; 404 pada rute sesi berarti sesi
        berada di luar alur kerja atau status kunci tersebut. Kunci tanpa akses
        media menerima URL gambar, video, dan PDF sebagai null, dan kunci tanpa
        izin tulis sesi menerima tautan sesi dan token sebagai null. Lihat
        https://docs.didit.me/console/api-keys.

````

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