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

# Unduh Dokumen Bertanda Tangan API: PDF Bertanda Tangan

> Unduh PDF bertanda tangan dari satu dokumen pada langkah Tanda Tangan Elektronik untuk sesi KYC atau KYB, dengan kunci API Didit Anda.

Mengembalikan PDF yang ditandatangani dari satu dokumen setelah penandatangan menandatanganinya. Anda tidak perlu membangun URL: setiap dokumen yang ditandatangani dalam keputusan membawa jalurnya di `signatures[].documents[].signed_file`.

```bash theme={null}
curl -L 'https://verification.didit.me/v3/session/{session_id}/signatures/{node_id}/documents/{document_id}/file/' \
  -H 'x-api-key: YOUR_API_KEY' \
  -o agreement-signed.pdf
```

PDF berisi dokumen yang ditampilkan kepada penandatangan beserta nilai kolomnya yang dibubuhkan, serta halaman bukti (kecuali jika `signature_evidence_page` pada langkah dinonaktifkan). PDF Advanced (AES) juga memuat tanda tangan PAdES beserta stempel waktunya; PDF Simple tidak memiliki tanda tangan digital, segel, atau stempel waktu. Sebelum mengembalikannya, Didit memeriksa file tersimpan terhadap `sha256_signed` dan merespons dengan `409` dan `signature_document_changed` jika keduanya berbeda.

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

## Terkait

* [Laporan Tanda Tangan Elektronik](https://docs.didit.me/id/core-technology/electronic-signature/report-electronic-signature.md#pdf-yang-ditandatangani): isi PDF yang ditandatangani.
* [Unduh bukti tanda tangan](https://docs.didit.me/id/sessions-api/electronic-signature/download-evidence.md)
* [Verifikasi tanda tangan](https://docs.didit.me/id/sessions-api/electronic-signature/validate-signatures.md)


## OpenAPI

````yaml id/openapi-25.json GET /v3/session/{sessionId}/signatures/{nodeId}/documents/{documentId}/file/
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}/documents/{documentId}/file/:
    get:
      tags:
        - Sessions
      summary: Unduh dokumen yang ditandatangani
      description: >-
        Unduh PDF yang ditandatangani dari satu dokumen pada langkah Tanda
        Tangan Elektronik. Gunakan jalur `signed_file` dari
        `signatures[].documents[]` dalam keputusan. PDF memuat dokumen yang
        diperlihatkan kepada penandatangan dengan nilai kolom yang telah
        dibubuhkan dan halaman bukti (kecuali jika `signature_evidence_page`
        dimatikan). PDF Lanjutan (AES) juga memuat tanda tangan PAdES beserta
        stempel waktunya; PDF Sederhana tidak memiliki tanda tangan digital,
        segel, atau stempel waktu. Didit memeriksa file terhadap `sha256_signed`
        sebelum mengembalikannya.


        Berfungsi untuk sesi Verifikasi Pengguna (KYC) dan Verifikasi Bisnis
        (KYB). Memerlukan `read:sessions`; kunci API Anda berfungsi. Lihat
        [Laporan Tanda Tangan
        Elektronik](/id/core-technology/electronic-signature/report-electronic-signature#unduh-dokumen-yang-ditandatangani).
      operationId: get_v3_session_signature_document_file
      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: documentId
          in: path
          required: true
          description: '`id` dokumen di `signatures[].documents[]`.'
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: PDF yang telah ditandatangani.
          headers:
            Content-Disposition:
              description: Lampiran dengan nama file.
              schema:
                type: string
                example: attachment; filename="agreement-signed.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 dokumen bertanda tangan yang cocok: sesi, langkah, atau
            dokumen tidak ada, telah dihapus, atau belum ditandatangani.
          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 document:
                  summary: Tidak ada dokumen 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_document(
                "11111111-2222-3333-4444-555555555555",
                "feature_signature",
                "11111111-2222-3333-4444-555555555555",
            )
            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.downloadDocument(
              "11111111-2222-3333-4444-555555555555",
              "feature_signature",
              "11111111-2222-3333-4444-555555555555",
            );

            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.DownloadDocument(ctx, \"11111111-2222-3333-4444-555555555555\", \"feature_signature\", \"11111111-2222-3333-4444-555555555555\")\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().downloadDocument("11111111-2222-3333-4444-555555555555",
            "feature_signature", "11111111-2222-3333-4444-555555555555")
                    .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->downloadDocument('11111111-2222-3333-4444-555555555555',
            'feature_signature', '11111111-2222-3333-4444-555555555555');

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

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

            content = didit.sessions.signatures.download_document(
              "11111111-2222-3333-4444-555555555555",
              "feature_signature",
              "11111111-2222-3333-4444-555555555555"
            )
            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.DownloadDocumentAsync("11111111-2222-3333-4444-555555555555",
            "feature_signature", "11111111-2222-3333-4444-555555555555");

            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.