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

# Ambil Entri Direktori VASP API: Rute Travel Rule

> Baca satu VASP dari direktori Travel Rule atau jaringan Didit berdasarkan id, beserta rute yang dimiliki aplikasi Anda ke VASP tersebut.

Prompt API untuk Mendapatkan Entri Direktori VASP
Salin prompt ke papan klip

<pre>
  \`Read one VASP of the Travel Rule directory by the id GET /v3/travel-rule/vasps/ returned.

  Endpoint:
  GET [https://verification.didit.me/v3/travel-rule/vasps/\{vasp\_id}/](https://verification.didit.me/v3/travel-rule/vasps/\{vasp_id}/)

  Authentication:
  Use the x-api-key header with my Didit API key.

  The response is the same object as one row of the search: kind, name, lei, jurisdiction, domains, reachable, aliases, networks, routes, umbrella, entities, contacts and the due-diligence fields. Read routes\[] for what my application can use today: an unavailable network route carries its reason (no\_membership or network\_switched\_off). On a sandbox application every route is unavailable with reason sandbox\_application, because sandbox sends only to the Didit Test VASP.

  Due diligence on the same id:

  * dd\_score (0-100, higher is safer), risk\_level, dd\_score\_breakdown, responsiveness and essential\_checks - the shared assessment. Didit network members are not scored.
  * decision, entity\_screening, questionnaires - my application's own records, private to it. Manage them with GET/PUT/DELETE /v3/travel-rule/vasps/{vasp_id}/decision/, GET/POST /v3/travel-rule/vasps/{vasp_id}/screening/ and GET/POST /v3/travel-rule/vasps/{vasp_id}/questionnaires/.
  * My Travel Rule transfers with this VASP: GET /v3/travel-rule/transfers/?counterparty={vasp_id}.

  Failure modes:

  * 404 - no directory entry or listed Didit network member has this id.

  Full guide: /transaction-monitoring/travel-rule#directory.\`
</pre>

Tempel ke


## OpenAPI

````yaml id/openapi-25.json GET /v3/travel-rule/vasps/{vasp_id}/
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/travel-rule/vasps/{vasp_id}/:
    get:
      tags:
        - Travel Rule
      summary: Dapatkan entri direktori VASP
      description: >-
        Satu entri direktori atau anggota jaringan Didit berdasarkan id yang
        dikembalikan oleh pencarian, dengan kolom yang sama dan rute yang
        dimiliki aplikasi Anda ke entri tersebut.
      operationId: getTravelRuleVasp
      parameters:
        - name: vasp_id
          in: path
          required: true
          schema:
            type: string
            format: uuid
          description: ID dari baris GET /v3/travel-rule/vasps/.
      responses:
        '200':
          description: Entri.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VaspDirectoryEntry'
        '404':
          description: >-
            Tidak ada entri atau anggota jaringan Didit terdaftar yang memiliki
            id ini.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
              example:
                detail: No directory entry has this id.
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: curl
          label: curl
          source: >-
            curl -X GET
            https://verification.didit.me/v3/travel-rule/vasps/{vasp_id}/ \
              -H 'x-api-key: YOUR_API_KEY'
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            result = client.travel_rule.retrieve_vasp(
                "11111111-2222-3333-4444-555555555555",
            )
            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.travelRule.retrieveVasp("11111111-2222-3333-4444-555555555555");

            console.log(result);
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.TravelRule.RetrieveVASP(ctx, \"11111111-2222-3333-4444-555555555555\")\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.travelRule().retrieveVasp("11111111-2222-3333-4444-555555555555");

            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->travelRule->retrieveVasp('11111111-2222-3333-4444-555555555555');

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


            # Reads DIDIT_API_KEY.

            didit = Didit::Client.new


            result =
            didit.travel_rule.retrieve_vasp("11111111-2222-3333-4444-555555555555")

            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.TravelRule.RetrieveVaspAsync("11111111-2222-3333-4444-555555555555");

            Console.WriteLine(JsonSerializer.Serialize(result));
components:
  schemas:
    VaspDirectoryEntry:
      type: object
      description: >-
        VASP dari direktori atau anggota jaringan Didit, beserta rute yang
        dimiliki aplikasi Anda ke VASP tersebut. Pelanggan adalah anggota
        jaringan Didit hanya selama aplikasinya berstatus aktif, Travel Rule
        aktif, profilnya dapat ditemukan, memiliki nama resmi dan email
        kepatuhan yang telah dikonfirmasi, serta Didit belum menandai aplikasi
        tersebut sebagai aplikasi uji coba, demo, atau internal. Setiap baris
        juga memuat penilaian uji tuntas bersama (dd_score, risk_level,
        responsiveness, essential_checks) serta keputusan, skrining entitas, dan
        kuesioner aplikasi Anda sendiri, yang tidak dapat dilihat oleh pelanggan
        lain.
      properties:
        id:
          type: string
          format: uuid
          description: ID entri, untuk GET /v3/travel-rule/vasps/{vasp_id}/.
        kind:
          type: string
          enum:
            - directory
            - didit
          description: >-
            directory untuk entri direktori bersama; didit untuk anggota
            jaringan Didit.
        name:
          type: string
        lei:
          type: string
        jurisdiction:
          type: string
          description: Kode negara ISO 3166, sesuai yang diberikan oleh sumber.
        domains:
          type: array
          items:
            type: string
          description: Domain web VASP. Selalu kosong untuk anggota jaringan Didit.
        reachable:
          type: boolean
          description: >-
            Menentukan apakah aplikasi Anda memiliki rute yang tersedia ke VASP
            ini, atau ke salah satu entitasnya untuk suatu merek. Selalu true
            untuk anggota jaringan Didit, kecuali pada aplikasi sandbox, di mana
            setiap baris bernilai false.
        aliases:
          type: array
          items:
            type: object
            properties:
              name:
                type: string
              kind:
                type: string
                enum:
                  - trading_name
                  - other_legal_name
                  - network_name
                  - attribution
                  - merged
                  - staff
                description: >-
                  trading_name, other_legal_name (dari daftar LEI global),
                  network_name (nama pada jaringan Travel Rule), attribution
                  (nama entitas yang diberikan analitik blockchain untuk dompet
                  VASP), merged (nama entri duplikat yang digabungkan ke entri
                  ini) atau staff.
          description: Nama lain yang digunakan untuk mengidentifikasi VASP.
        networks:
          type: array
          items:
            type: object
            description: >-
              Daftar terkini dari VASP ini di direktori anggota jaringan Travel
              Rule. Daftar TRISA menyatakan siapa VASP tersebut di TRISA; Didit
              tidak memiliki rel TRISA, sehingga tidak pernah menjadi rute.
            properties:
              network:
                type: string
                enum:
                  - GTR
                  - TRUST
                  - VERIFYVASP
                  - SYGNA
                  - TRISA
              code:
                type: string
                description: Pengidentifikasi VASP pada jaringan tersebut.
              listed_name:
                type: string
                description: Nama yang digunakan jaringan untuk mencantumkan VASP.
              country:
                type: string
                description: Negara yang dicantumkan jaringan, jika menyediakannya.
              verified_at:
                type: string
                format: date-time
                nullable: true
                description: >-
                  Waktu ketika staf Didit memverifikasi listing tersebut.
                  Bernilai null untuk listing yang dibaca dari direktori publik.
              last_seen_at:
                type: string
                format: date-time
                nullable: true
                description: >-
                  Waktu sumber terakhir menampilkan daftar. Daftar yang tidak
                  ditampilkan oleh sumber selama tiga minggu akan dihapus.
              source:
                type: string
                enum:
                  - trisa_directory
                  - staff
                description: 'Asal listing: direktori publik TRISA, atau staf Didit.'
        routes:
          type: array
          items:
            type: object
            description: >-
              Satu cara aplikasi Anda dapat mengirimkan data Travel Rule ke VASP
              ini, sesuai urutan percobaan pengiriman. Rute jaringan memerlukan
              keanggotaan pada jaringan tersebut: milik Anda sendiri (terhubung
              di Marketplace) atau milik Didit setelah Didit memilikinya.
              Tanpanya rute akan dicantumkan sebagai tidak tersedia beserta
              alasannya, tidak pernah sebagai cara untuk menghubungi VASP.
            properties:
              rail:
                type: string
                enum:
                  - INTERNAL
                  - TRP
                  - GTR
                  - TRUST
                  - VERIFYVASP
                  - SYGNA
                  - EMAIL
              status:
                type: string
                enum:
                  - available
                  - unavailable
              reason:
                type: string
                enum:
                  - ''
                  - no_membership
                  - network_switched_off
                  - sandbox_application
                description: >-
                  Alasan mengapa rute yang tidak tersedia tidak dapat digunakan:
                  no_membership (baik Anda maupun Didit tidak memiliki
                  keanggotaan di jaringan tersebut), network_switched_off (Anda
                  menonaktifkan jaringan tersebut di pengaturan Anda), atau
                  sandbox_application (aplikasi sandbox hanya mengirim ke Didit
                  Test VASP, sehingga tidak ada rute yang tersedia untuknya).
                  Kosong jika rute tersedia.
              via:
                type: string
                enum:
                  - ''
                  - own_membership
                  - didit_membership
                  - directory
                  - contact
                  - didit_network
                description: >-
                  Cara mencapai rute yang tersedia: own_membership atau
                  didit_membership untuk rail jaringan, directory untuk endpoint
                  TRP yang diverifikasi direktori, contact untuk rail EMAIL,
                  didit_network untuk anggota jaringan Didit. Kosong jika rute
                  tidak tersedia.
        umbrella:
          type: object
          nullable: true
          description: >-
            Brand yang menaungi entitas teregulasi ini. Null jika bukan bagian
            dari salah satunya.
          properties:
            id:
              type: string
              format: uuid
            name:
              type: string
        entities:
          type: array
          items:
            type: object
            description: >-
              Entitas teregulasi dari suatu merek: entitas hukum yang menerima
              transfer.
            properties:
              id:
                type: string
                format: uuid
              name:
                type: string
              lei:
                type: string
              jurisdiction:
                type: string
              reachable:
                type: boolean
                description: >-
                  Menentukan apakah aplikasi Anda memiliki rute yang tersedia ke
                  entitas tersebut.
          description: >-
            Untuk sebuah merek, entitas teregulasi yang menerima transfernya.
            Transfer yang menyebutkan merek tersebut akan diarahkan ke entitas
            yang dapat dijangkau di yurisdiksi yang dinyatakannya
            (beneficiary_data.counterparty_vasp_jurisdiction), jika tidak ada
            maka ke atribusi analitik blockchain entitas yang ditautkan ke
            dompet tujuan, jika tidak ada maka ke satu-satunya entitas yang
            dapat dijangkau ketika tidak ada yurisdiksi yang dinyatakan. Dua
            entitas yang sama-sama cocok tidak pernah ditebak salah satunya.
        contacts:
          type: array
          items:
            type: object
            description: Kontak kepatuhan yang dapat dikirimi pesan oleh rel EMAIL.
            properties:
              id:
                type: string
                format: uuid
              email:
                type: string
                format: email
              name:
                type: string
              source:
                type: string
                enum:
                  - staff
                  - application
                  - learned
                description: >-
                  staff: dikurasi oleh Didit; application: ditambahkan oleh
                  aplikasi Anda; learned: alamat yang menjawab permintaan Travel
                  Rule melalui tautan responsnya.
              scope:
                type: string
                enum:
                  - platform
                  - application
                description: >-
                  kontak platform digunakan untuk transfer setiap pelanggan
                  Didit; kontak aplikasi bersifat privat untuk aplikasi Anda,
                  yang hanya melihat miliknya sendiri.
              verified_at:
                type: string
                format: date-time
                nullable: true
                description: >-
                  Waktu ketika seseorang di alamat ini menjawab permintaan. Null
                  jika belum.
          description: >-
            Kontak platform untuk VASP ini dan kontak milik aplikasi Anda
            sendiri.
        dd_status:
          type: string
          enum:
            - NOT_STARTED
            - IN_PROGRESS
            - COMPLETED
            - REJECTED
          description: >-
            Status verifikasi Didit untuk entri tersebut, dinilai berdasarkan
            komponen verifikasi dari dd_score. Selalu bernilai COMPLETED untuk
            anggota jaringan Didit.
        dd_score:
          type: integer
          nullable: true
          minimum: 0
          maximum: 100
          description: >-
            Skor uji tuntas bersama dari entri direktori, 0 hingga 100, di mana
            nilai lebih tinggi lebih aman (lihat dd_score_semantic): jumlah poin
            dalam dd_score_breakdown. Bernilai null untuk anggota jaringan
            Didit, yang tidak dinilai. Entri yang belum dinilai (dd_assessed_at
            bernilai null) menampilkan 0 dengan risk_level kosong, jadi bacalah
            risk_level daripada skor mentah.
        reachable_rails:
          type: array
          items:
            type: string
            enum:
              - INTERNAL
              - TRP
              - GTR
              - TRUST
              - VERIFYVASP
              - SYGNA
              - EMAIL
          description: >-
            Rail yang dicatat pada entri. Baca rute untuk mengetahui apa yang
            dapat digunakan aplikasi Anda saat ini.
        is_didit_customer:
          type: boolean
          description: >-
            true untuk anggota jaringan Didit (dd_status selalu COMPLETED,
            dd_score null dan risk_level kosong untuk ini) dan untuk entri
            direktori yang ditautkan ke pelanggan Didit.
        dd_score_breakdown:
          type: object
          description: >-
            Satu objek per komponen dari dd_score. Komponen, bobotnya (maks),
            dan kode alasannya: jurisdiction, 25 (jurisdiction_not_high_risk,
            jurisdiction_high_risk, jurisdiction_unknown); verification, 15
            (dd_status_completed, dd_status_in_progress, dd_status_not_started,
            dd_status_rejected); protocol, 15 (native_rail, email_only,
            no_rail); lei, 10 (lei_valid, lei_missing); history, 10 (history,
            no_history); essentials, 15 (essential_checks, no_essential_checks);
            responsiveness, 10 (responsive, unresponsive,
            responsiveness_unknown). Kosong untuk anggota jaringan Didit.
          additionalProperties:
            type: object
            properties:
              points:
                type: number
                description: >-
                  Poin yang dikontribusikan komponen, dibulatkan ke satu
                  desimal.
              max:
                type: integer
                description: 'Bobot komponen: poin maksimal yang dapat diatribusikannya.'
              reason:
                type: string
                description: Kode yang dapat dibaca mesin untuk keputusan komponen.
              detail:
                type: string
                description: Penjelasan satu baris dalam bahasa Inggris.
        dd_assessed_at:
          type: string
          format: date-time
          nullable: true
          description: >-
            Waktu ketika dd_score, risk_level, dan responsiveness terakhir
            dihitung: setelah pertukaran dengan entri tersebut selesai,
            berakhir, kedaluwarsa, tidak cocok, atau ditolak, saat Didit
            menyegarkan atau mengkurasi entri tersebut, serta dalam penyegaran
            direktori mingguan. Null untuk anggota jaringan Didit.
        dd_score_semantic:
          type: string
          enum:
            - higher_is_safer
          description: 'Arah pembacaan dd_score: selalu higher_is_safer.'
        risk_level:
          type: string
          enum:
            - LOW
            - MEDIUM
            - HIGH
            - ''
          description: >-
            Rentang tempat dd_score berada: LOW (70 atau lebih), MEDIUM (40
            hingga 69), atau HIGH (di bawah 40). Kosong untuk anggota jaringan
            Didit dan untuk entri yang belum dinilai. Gunakan filter risk untuk
            memfilter nilai ini. Skrining yang Anda tandai sendiri tidak pernah
            mengubah nilai bersama ini: melainkan menjadikan
            counterparty_risk_level bernilai HIGH dalam aturan Anda.
        responsiveness:
          type: object
          description: >-
            Apakah VASP merespons permintaan Travel Rule: persentase permintaan
            yang diajukan oleh pelanggan Didit kepadanya dalam 90 hari terakhir
            yang direspons. Hanya permintaan yang dikirim melalui jalur jaringan
            atau protokol, atau melalui email ke alamat bersama (alamat
            kepatuhan entri atau kontak platform), yang dihitung; permintaan
            yang dikirim ke alamat yang diketik pelanggan, atau ke kontak
            pribadi pelanggan, tidak pernah dihitung. Permintaan yang
            kedaluwarsa dianggap tidak terjawab; pertukaran yang selesai,
            penolakan, atau ketidakcocokan data dianggap sebagai respons;
            permintaan yang dibatalkan atau jalur yang tidak dapat dihubungi
            bukan merupakan keduanya. Selalu UNKNOWN dengan hitungan nol untuk
            anggota jaringan Didit.
          properties:
            status:
              type: string
              enum:
                - RESPONSIVE
                - UNRESPONSIVE
                - UNKNOWN
              description: >-
                UNKNOWN jika kurang dari 5 permintaan yang diputuskan dalam
                jendela waktu; UNRESPONSIVE jika kurang dari 10 persen di
                antaranya terjawab; selain itu RESPONSIVE.
            answered:
              type: integer
              description: >-
                Permintaan yang diputuskan dalam jendela waktu yang dijawab oleh
                VASP.
            total:
              type: integer
              description: >-
                Permintaan yang diputuskan dalam jendela waktu: yang dijawab
                ditambah yang kedaluwarsa.
            computed_at:
              type: string
              format: date-time
              nullable: true
        essential_checks:
          type: object
          description: >-
            Laporan pemeriksaan penting (essential-checks) dari suatu entri
            direktori, yang dibuat hanya dari sumber terverifikasi platform:
            pendaftaran (registri resmi mencantumkan VASP: registri interim MiCA
            UE, direktori publik TRISA, atau registri LEI global), lisensi
            (otorisasi MiCA tercatat dan masih berlaku), domain (domain entri
            cocok dengan endpoint TRP-nya atau situs web yang tercantum di
            registrinya), dan lei (rekaman LEI-nya aktif, diterbitkan, dan
            konsisten dengan nama serta negara entri). Komponen penting dari
            dd_score adalah proporsi pemeriksaan yang telah diputuskan dan
            lulus. Kosong hingga pembaruan direktori mingguan pertama kali
            memeriksa entri tersebut, dan selalu kosong untuk anggota jaringan
            Didit.
          properties:
            level:
              type: string
              enum:
                - essential
            checked_at:
              type: string
              format: date-time
            checks:
              type: array
              items:
                type: object
                properties:
                  id:
                    type: string
                    enum:
                      - registration
                      - licence
                      - domain
                      - lei
                  status:
                    type: string
                    enum:
                      - pass
                      - fail
                      - unknown
                    description: >-
                      unknown jika tidak ada sumber tercatat yang dapat
                      memutuskan pemeriksaan.
                  reason:
                    type: string
                    description: Kode keputusan yang dapat dibaca mesin.
                  detail:
                    type: string
                    description: Penjelasan satu baris dalam bahasa Inggris.
            passed:
              type: integer
            failed:
              type: integer
            unknown:
              type: integer
            total:
              type: integer
        decision:
          allOf:
            - $ref: '#/components/schemas/TravelRuleCounterpartyDecision'
          nullable: true
          description: >-
            Keputusan aplikasi Anda terhadap VASP ini, atau untuk entitas yang
            tidak memiliki keputusan tersendiri, keputusan mereknya
            (inherited_from menyebutkan nama merek tersebut). Bernilai null jika
            tidak ada. Bersifat privat untuk aplikasi Anda.
        entity_screening:
          allOf:
            - $ref: '#/components/schemas/TravelRuleCounterpartyScreening'
          nullable: true
          description: >-
            Skrining sanksi dan media negatif terbaru dari aplikasi Anda untuk
            VASP ini. Bernilai null jika Anda belum pernah melakukan skrining.
            Bersifat privat untuk aplikasi Anda.
        questionnaires:
          type: array
          items:
            $ref: '#/components/schemas/TravelRuleCounterpartyQuestionnaire'
          description: >-
            Kuesioner uji tuntas aplikasi Anda dengan VASP ini, yang terbaru
            lebih dahulu. Bersifat privat untuk aplikasi Anda.
      example:
        id: 0d6f3c2a-6a1e-4c55-9a39-1f2b0c7d8e91
        kind: directory
        name: Example Counterparty VASP
        lei: 529900EXAMPLECPTY001
        jurisdiction: DE
        domains:
          - counterparty.example
        reachable: true
        aliases:
          - name: Example Counterparty
            kind: trading_name
        networks:
          - network: GTR
            code: EXAMPLE01
            listed_name: Example Counterparty VASP
            country: DE
            verified_at: '2026-10-12T09:30:00Z'
            last_seen_at: '2026-10-12T09:30:00Z'
            source: staff
        routes:
          - rail: GTR
            status: unavailable
            reason: no_membership
            via: ''
          - rail: EMAIL
            status: available
            reason: ''
            via: contact
        umbrella: null
        entities: []
        contacts:
          - id: 6c1f9b8e-2d4a-4f7e-8b3c-5a9d0e1f2a3b
            email: travelrule@counterparty.example
            name: Travel Rule desk
            source: staff
            scope: platform
            verified_at: null
        dd_status: NOT_STARTED
        dd_score: 62
        dd_score_breakdown:
          jurisdiction:
            points: 25
            max: 25
            reason: jurisdiction_not_high_risk
            detail: DEU is not on the high-risk jurisdiction list
          verification:
            points: 3.8
            max: 15
            reason: dd_status_not_started
            detail: due diligence status NOT_STARTED
          protocol:
            points: 6
            max: 15
            reason: email_only
            detail: reachable over the email fallback only
          lei:
            points: 10
            max: 10
            reason: lei_valid
            detail: valid LEI on record
          history:
            points: 5
            max: 10
            reason: no_history
            detail: no exchange history
          essentials:
            points: 7.5
            max: 15
            reason: no_essential_checks
            detail: no decided essential check yet
          responsiveness:
            points: 5
            max: 10
            reason: responsiveness_unknown
            detail: 0 decided recent requests, too few to judge
        dd_assessed_at: '2026-10-12T09:30:00Z'
        dd_score_semantic: higher_is_safer
        risk_level: MEDIUM
        responsiveness:
          status: UNKNOWN
          answered: 0
          total: 0
          computed_at: '2026-10-12T09:30:00Z'
        essential_checks: {}
        reachable_rails:
          - GTR
          - EMAIL
        is_didit_customer: false
        decision:
          decision: APPROVED
          reason: Licensed in DE, questionnaire reviewed
          decided_by: ''
          updated_at: '2026-10-14T10:05:00Z'
          inherited_from: null
        entity_screening:
          id: 7a1d2c3b-4e5f-4a6b-8c7d-9e0f1a2b3c4d
          status: Approved
          total_hits: 0
          score: null
          screened_at: '2026-10-14T09:58:00Z'
          fresh: true
          flagged: false
        questionnaires:
          - id: 8b7a6c5d-4e3f-4a2b-9c1d-0e9f8a7b6c5d
            status: ANSWERED
            form_version: '1'
            sent_to: travelrule@counterparty.example
            sent_at: '2026-09-02T08:00:00Z'
            expires_at: '2026-10-02T08:00:00Z'
            answered_at: '2026-09-04T15:20:00Z'
            valid_until: '2027-09-04T15:20:00Z'
            current: true
            answers:
              legal_name: >-
                Example Counterparty VASP, incorporated in the example
                jurisdiction.
              licensing: >-
                Crypto-asset service provider authorised under MiCA by its
                national regulator, licence active.
              jurisdictions: EU and EEA. We do not serve the United States.
              aml_program: >-
                Written AML/CFT policy, annual independent review, last
                completed in March 2026.
              compliance_officer: >-
                Head of Compliance, reachable at
                compliance@counterparty.example.
              sanctions_screening: >-
                Customers at onboarding and daily; counterparties on every
                transfer.
              transaction_monitoring: >-
                Rule-based monitoring with analyst review; suspicious activity
                reports filed with the FIU.
              travel_rule: TRP and email; we answer requests within one business day.
              custody: >-
                Segregated customer wallets held with a qualified custodian,
                insured.
              ownership: >-
                No shareholder holds 25 percent or more; parent company Example
                Holding Group.
              record_keeping: >-
                Five-year record-keeping for Travel Rule and transaction data,
                as our regulator requires.
              data_protection: Encrypted at rest and in transit, stored in the EU.
    TravelRuleCounterpartyDecision:
      type: object
      description: >-
        Keputusan aplikasi Anda terhadap VASP pihak lawan. Bersifat privat untuk
        aplikasi Anda: keputusan ini tidak pernah mengubah entri direktori
        bersama dan pelanggan lain tidak pernah melihatnya. Keputusan ini hanya
        berlaku melalui aturan transaksi Anda (kolom aturan
        counterparty_dd_status serta preset travel-rule-counterparty-blocked dan
        travel-rule-counterparty-restricted); ini tidak pernah mengubah cara
        transfer diarahkan.
      properties:
        decision:
          type: string
          enum:
            - APPROVED
            - RESTRICTED
            - BLOCKED
          description: >-
            APPROVED: tim Anda telah menyetujui pihak lawan. RESTRICTED:
            transfer kepadanya dapat dilanjutkan setelah peninjauan. BLOCKED:
            tim Anda menolaknya.
        reason:
          type: string
          maxLength: 255
          description: Alasan teks bebas yang Anda berikan, kosong jika tidak ada.
        decided_by:
          type: string
          description: >-
            Pengguna konsol yang membuat atau terakhir mengubah keputusan.
            Kosong jika dibuat oleh kunci API.
        updated_at:
          type: string
          format: date-time
        inherited_from:
          type: object
          nullable: true
          description: >-
            Brand yang keputusannya diikuti oleh entitas ini karena Anda tidak
            membuat keputusan pada entitas itu sendiri. Null jika keputusan
            tersebut merupakan milik pihak lawan itu sendiri.
          properties:
            id:
              type: string
              format: uuid
            name:
              type: string
    TravelRuleCounterpartyScreening:
      type: object
      description: >-
        Satu skrining sanksi dan media negatif dari entitas pihak lawan,
        dijalankan untuk dan ditagihkan ke aplikasi Anda. Bersifat privat untuk
        aplikasi Anda: pelanggan lain tidak akan pernah melihatnya.
      properties:
        id:
          type: string
          format: uuid
        status:
          type: string
          enum:
            - Approved
            - In Review
            - Declined
          description: >-
            Disetujui: tidak ada kecocokan potensial yang memerlukan perhatian.
            Dalam Peninjauan atau Ditolak: potensi kecocokan sanksi atau media
            negatif.
        total_hits:
          type: integer
          description: Berapa banyak kemungkinan kecocokan yang dikembalikan oleh skrining.
        score:
          type: number
          nullable: true
          description: >-
            Skor risiko tertinggi di antara kemungkinan kecocokan. Null jika
            tidak ada yang cocok.
        screened_at:
          type: string
          format: date-time
        fresh:
          type: boolean
          description: >-
            Apakah usia skrining kurang dari fresh_days (30 hari). Skrining baru
            akan digunakan kembali alih-alih ditagih lagi.
        flagged:
          type: boolean
          description: >-
            true selama skrining masih baru dan statusnya Dalam Peninjauan atau
            Ditolak. Selama skrining terbaru Anda ditandai dan skrining pihak
            lawan tetap aktif, counterparty_risk_level bernilai HIGH dalam
            aturan Anda.
    TravelRuleCounterpartyQuestionnaire:
      type: object
      description: >-
        Satu kuesioner uji tuntas (due-diligence) yang dikirim aplikasi Anda ke
        pihak lawan: kuesioner standar Didit, dikirimkan melalui email ke alamat
        kepatuhan yang tercatat dengan tautan jawaban sekali pakai. Bersifat
        privat bagi aplikasi Anda.
      properties:
        id:
          type: string
          format: uuid
        status:
          type: string
          enum:
            - SENT
            - ANSWERED
            - EXPIRED
          description: >-
            SENT: menunggu jawaban. ANSWERED: pihak lawan menjawab setiap
            pertanyaan. EXPIRED: tautan jawaban ditutup tanpa dijawab (batas
            waktunya terlampaui, atau kuesioner baru menggantikannya), atau
            jawaban telah melewati valid_until.
        form_version:
          type: string
          description: >-
            Versi kuesioner standar Didit tempat jawaban tersebut berada. Saat
            ini 1.
        sent_to:
          type: string
          format: email
        sent_at:
          type: string
          format: date-time
          nullable: true
        expires_at:
          type: string
          format: date-time
          nullable: true
          description: >-
            Batas waktu untuk menjawab, 30 hari setelah pengiriman. Tautan
            berhenti berfungsi setelah batas waktu tersebut.
        answered_at:
          type: string
          format: date-time
          nullable: true
        valid_until:
          type: string
          format: date-time
          nullable: true
          description: >-
            Berapa lama jawaban tetap berlaku: 365 hari setelah dijawab. Null
            hingga dijawab.
        current:
          type: boolean
          description: true selama kuesioner bernilai ANSWERED dan valid_until belum lewat.
        answers:
          type: object
          additionalProperties:
            type: string
          description: >-
            Jawaban yang dipetakan berdasarkan ID pertanyaan: legal_name,
            licensing, jurisdictions, aml_program, compliance_officer,
            sanctions_screening, transaction_monitoring, travel_rule, custody,
            ownership, record_keeping, data_protection. Setiap jawaban hingga
            2.000 karakter. Kosong hingga dijawab.
  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.