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

# API Bukti Tanda Tangan: Unduh PDF Jejak Audit

> Unduh PDF bukti penandatangan: hash dokumen dan nilai kolom, serta identitas, kode, sertifikat, dan stempel waktu Tanda Tangan Elektronik AES dari Didit.

Mengembalikan PDF bukti milik satu penandatangan, setelah penandatangan tersebut menandatangani. Path-nya ada di `signatures[].evidence_file`, dengan `signature_id` sudah terisi.

```bash theme={null}
curl -L 'https://verification.didit.me/v3/session/{session_id}/signatures/{node_id}/evidence/?signature_id={signature_id}' \
  -H 'x-api-key: YOUR_API_KEY' \
  -o signature-evidence.pdf
```

> [!WARNING]
>
> Selalu kirimkan `signature_id`. Langkah Verifikasi Bisnis (KYB) dapat memiliki beberapa penandatangan, dan tanpa parameter ini rute akan memilih salah satu dari mereka.

PDF bukti mencatat tingkat dan format, penandatangan, alamat IP, setiap dokumen beserta SHA-256 aslinya, tanda tangan yang digunakan, nilai setiap kolom beserta sumber dan waktunya, persetujuan akhir, dan SHA-256 dari setiap file yang ditandatangani. Untuk tanda tangan Advanced (AES), PDF juga mencatat sesi identitas terverifikasi, konfirmasi kode, sertifikat, dan stempel waktu; tanda tangan Sederhana tidak memiliki satu pun dari hal ini. Lihat [PDF bukti](https://docs.didit.me/id/core-technology/electronic-signature/report-electronic-signature.md#pdf-bukti).

Rute akan mengembalikan `404` untuk penandatangan yang belum menandatangani, dengan `signature_not_signed`. Setelah Anda [menghapus sesi](https://docs.didit.me/id/sessions-api/delete-session.md), rute mengembalikan `404`.

## Terkait

* [Unduh dokumen yang ditandatangani](https://docs.didit.me/id/sessions-api/electronic-signature/download-signed-document.md)
* [Laporan Tanda Tangan Elektronik](https://docs.didit.me/id/core-technology/electronic-signature/report-electronic-signature.md)


## OpenAPI

````yaml id/openapi-25.json GET /v3/session/{sessionId}/signatures/{nodeId}/evidence/
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}/signatures/{nodeId}/evidence/:
    get:
      tags:
        - Sessions
      summary: Unduh bukti tanda tangan
      description: >-
        Unduh PDF bukti penandatangan: tingkat dan format, penandatangan, alamat
        IP, setiap dokumen beserta SHA-256 asli dan nilai kolomnya serta SHA-256
        dari setiap file yang ditandatangani, ditambah lagi, untuk tanda tangan
        Lanjutan (AES), sesi verifikasi identitas, konfirmasi kode, sertifikat,
        dan stempel waktu. Gunakan jalur `evidence_file` dari item penandatangan
        di `signatures[]`.


        Selalu berikan `signature_id` saat langkah Verifikasi Bisnis memiliki
        beberapa penandatangan: tanpanya, rute akan memilih salah satu
        penandatangan langkah tersebut. Memerlukan `read:sessions`; kunci API
        Anda berfungsi.
      operationId: get_v3_session_signature_evidence
      parameters:
        - name: sessionId
          in: path
          required: true
          description: Sesi Verifikasi Pengguna (KYC) atau Verifikasi Bisnis (KYB).
          schema:
            type: string
            format: uuid
            example: 11111111-2222-3333-4444-555555555555
        - name: nodeId
          in: path
          required: true
          description: >-
            Langkah Tanda Tangan Elektronik: `node_id` dari item dalam
            `signatures[]`.
          schema:
            type: string
            example: feature_signature
        - name: signature_id
          in: query
          required: false
          description: '`id` dari item penandatangan di `signatures[]`.'
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: PDF bukti.
          headers:
            Content-Disposition:
              description: Lampiran dengan nama file.
              schema:
                type: string
                example: attachment; filename="signature-evidence.pdf"
          content:
            application/pdf:
              schema:
                type: string
                format: binary
        '403':
          description: >-
            Kredensial tidak ada, atau kredensial yang tidak dapat membaca sesi
            ini. Kunci yang tidak ada mengembalikan `403`; kunci yang salah,
            dicabut, atau kedaluwarsa mengembalikan `401`.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
              example:
                detail: You do not have permission to perform this action.
        '404':
          description: >-
            Tidak ada bukti yang cocok: sesi, langkah, atau penandatangan tidak
            ada, telah dihapus, atau belum menandatangani.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                  code:
                    type: string
              examples:
                Not signed yet:
                  summary: Penandatangan belum menandatangani
                  value:
                    code: signature_not_signed
                    detail: signature_not_signed
                Unknown signer:
                  summary: Tidak ada tanda tangan seperti itu di langkah ini
                  value:
                    code: signature_not_found
                    detail: signature_not_found
        '409':
          description: >-
            File yang disimpan tidak lagi cocok dengan SHA-256 yang tercatat.
            Tidak ada yang dikembalikan.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                  code:
                    type: string
              examples:
                Changed file:
                  summary: File tersimpan tidak cocok dengan hash miliknya
                  value:
                    code: signature_document_changed
                    detail: signature_document_changed
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            content = client.sessions.signatures.download_evidence(
                "11111111-2222-3333-4444-555555555555",
                "feature_signature",
            )
            with open("download.pdf", "wb") as file:
                file.write(content)
        - lang: javascript
          label: Node.js
          source: >-
            import { writeFile } from "node:fs/promises";

            import Didit from "@didit-protocol/sdk-node";


            // Reads DIDIT_API_KEY.

            const didit = new Didit();


            const content = await didit.sessions.signatures.downloadEvidence(
              "11111111-2222-3333-4444-555555555555",
              "feature_signature",
            );

            await writeFile("download.pdf", Buffer.from(await
            content.arrayBuffer()));
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresp, err := client.Sessions.Signatures.DownloadEvidence(ctx, \"11111111-2222-3333-4444-555555555555\", \"feature_signature\", didit.SessionsSignaturesDownloadEvidenceParams{})\nif err != nil {\n\tlog.Fatal(err)\n}\ndefer resp.Body.Close()\nfile, err := os.Create(\"download.pdf\")\nif err != nil {\n\tlog.Fatal(err)\n}\ndefer file.Close()\nif _, err := io.Copy(file, resp.Body); err != nil {\n\tlog.Fatal(err)\n}"
        - lang: java
          label: Java
          source: >-
            import java.nio.file.Path;

            import me.didit.Didit;


            // Reads DIDIT_API_KEY.

            Didit client = new Didit();


            client.sessions().signatures().downloadEvidence("11111111-2222-3333-4444-555555555555",
            "feature_signature")
                    .writeTo(Path.of("download.pdf"));
        - lang: php
          label: PHP
          source: >-
            <?php


            require 'vendor/autoload.php';


            use Didit\DiditClient;


            // Reads DIDIT_API_KEY.

            $didit = new DiditClient();


            $content =
            $didit->sessions->signatures->downloadEvidence('11111111-2222-3333-4444-555555555555',
            'feature_signature');

            $content->saveTo('download.pdf');
        - lang: ruby
          label: Ruby
          source: |-
            require "didit"

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

            content = didit.sessions.signatures.download_evidence(
              "11111111-2222-3333-4444-555555555555",
              "feature_signature"
            )
            File.binwrite("download.pdf", content)
        - lang: csharp
          label: .NET
          source: >-
            using System;

            using Didit;


            // Reads DIDIT_API_KEY.

            using var client = new DiditClient();


            var content = await
            client.Sessions.Signatures.DownloadEvidenceAsync("11111111-2222-3333-4444-555555555555",
            "feature_signature");

            await content.SaveToAsync("download.pdf");
components:
  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.