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

# Atur Keputusan VASP Pihak Lawan via API: Travel Rule

> Setujui, batasi, atau blokir VASP pihak lawan Travel Rule untuk aplikasi Anda, agar aturan transaksi Anda dapat menindaklanjutinya di Didit.



Atur Prompt API Keputusan VASP
        Salin prompt ke papan klip



      
      

\<pre>

\`Make or change my application's decision on a Travel Rule counterparty VASP.

Endpoint:
PUT https://verification.didit.me/v3/travel-rule/vasps/{vasp_id}/decision/

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

vasp_id is the id GET /v3/travel-rule/vasps/ returns for a directory entry or a Didit network member.

Example call:
curl -X PUT "https://verification.didit.me/v3/travel-rule/vasps/{vasp_id}/decision/" \
-H "x-api-key: YOUR_API_KEY" -H "Content-Type: application/json" \
-d '{"decision": "BLOCKED", "reason": "Unlicensed in its home jurisdiction"}'

Body:
\- decision (required) - APPROVED, RESTRICTED or BLOCKED.
\- reason (optional) - up to 255 characters. It replaces the previous reason; leaving it out clears it.

The response is {"decision": {decision, reason, decided_by, updated_at, inherited_from}} as it now applies.

How it works:
\- The decision is private to my application: no other Didit customer sees it, and it never changes the shared directory entry or how a transfer is routed.
\- A decision on a brand also covers each of its entities that has no decision of its own (inherited_from names the brand there). A decision on an entity overrides the brand's for that entity.
\- It acts only through my transaction rules, through the rule field counterparty_dd_status. Install the presets travel-rule-counterparty-blocked (declines) and travel-rule-counterparty-restricted (holds for review), or write my own rule on that field.

Failure modes:
\- 400 - decision missing or not APPROVED, RESTRICTED or BLOCKED, or reason longer than 255 characters.
\- 404 - no directory entry or listed Didit network member has this id, or the id is my own VASP profile.

Full guide: /transaction-monitoring/travel-rule#your-decision-on-a-counterparty.`

\</pre>



      
      

Tempel ke



## OpenAPI

````yaml id/openapi-25.json PUT /v3/travel-rule/vasps/{vasp_id}/decision/
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}/decision/:
    put:
      tags:
        - Travel Rule
      summary: Tetapkan keputusan Anda tentang VASP
      description: >-
        Buat atau ubah keputusan aplikasi Anda mengenai pihak lawan: APPROVED,
        RESTRICTED, atau BLOCKED, dengan alasan opsional. Tindakan ini tidak
        pernah mengubah entri direktori bersama dan hanya berlaku melalui aturan
        transaksi Anda (counterparty_dd_status). Keputusan pada suatu merek juga
        mencakup setiap entitasnya yang belum memiliki keputusannya sendiri.
      operationId: updateTravelRuleVaspDecision
      parameters:
        - name: vasp_id
          in: path
          required: true
          schema:
            type: string
            format: uuid
          description: >-
            ID dari baris GET /v3/travel-rule/vasps/: entri direktori atau
            anggota jaringan Didit.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TravelRuleCounterpartyDecisionRequest'
            example:
              decision: BLOCKED
              reason: Unlicensed in its home jurisdiction
      responses:
        '200':
          description: Keputusan sebagaimana berlaku saat ini.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TravelRuleCounterpartyDecisionResponse'
              example:
                decision:
                  decision: BLOCKED
                  reason: Unlicensed in its home jurisdiction
                  decided_by: ''
                  updated_at: '2026-10-14T10:05:00Z'
                  inherited_from: null
        '400':
          description: >-
            Keputusan tidak ada atau bukan salah satu dari APPROVED, RESTRICTED,
            atau BLOCKED, atau alasannya lebih panjang dari 255 karakter.
          content:
            application/json:
              schema:
                type: object
                additionalProperties:
                  type: array
                  items:
                    type: string
              example:
                decision:
                  - '"MAYBE" is not a valid choice.'
        '404':
          description: >-
            Tidak ada entri direktori atau anggota jaringan Didit terdaftar yang
            memiliki id ini. Profil VASP Anda sendiri tidak pernah menjadi pihak
            lawan Anda.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
              example:
                detail: No directory entry or Didit network member has this id.
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: curl
          label: curl
          source: >-
            curl -X PUT
            https://verification.didit.me/v3/travel-rule/vasps/{vasp_id}/decision/
            \
              -H 'x-api-key: YOUR_API_KEY' -H 'Content-Type: application/json' \
              -d '{"decision": "BLOCKED", "reason": "Unlicensed in its home jurisdiction"}'
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            result = client.travel_rule.update_vasp_decision(
                "11111111-2222-3333-4444-555555555555",
                decision="BLOCKED",
                reason="Unlicensed in its home jurisdiction",
            )
            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.updateVaspDecision("11111111-2222-3333-4444-555555555555",
            {
              decision: "BLOCKED",
              reason: "Unlicensed in its home jurisdiction",
            });

            console.log(result);
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.TravelRule.UpdateVASPDecision(ctx, \"11111111-2222-3333-4444-555555555555\", didit.TravelRuleCounterpartyDecisionRequest{\n\tDecision: \"BLOCKED\",\n\tReason:   didit.String(\"Unlicensed in its home jurisdiction\"),\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.TravelRuleCounterpartyDecisionRequest;


            // Reads DIDIT_API_KEY.

            Didit client = new Didit();


            var result =
            client.travelRule().updateVaspDecision("11111111-2222-3333-4444-555555555555",
            TravelRuleCounterpartyDecisionRequest.builder()
                    .decision(TravelRuleCounterpartyDecisionRequest.Decision.of("BLOCKED"))
                    .reason("Unlicensed in its home jurisdiction")
                    .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->travelRule->updateVaspDecision('11111111-2222-3333-4444-555555555555',
            [
                'decision' => 'BLOCKED',
                'reason' => 'Unlicensed in its home jurisdiction',
            ]);

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

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

            result = didit.travel_rule.update_vasp_decision(
              "11111111-2222-3333-4444-555555555555",
              decision: "BLOCKED",
              reason: "Unlicensed in its home jurisdiction"
            )
            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.UpdateVaspDecisionAsync("11111111-2222-3333-4444-555555555555",
            new TravelRuleCounterpartyDecisionRequest

            {
                Decision = "BLOCKED",
                Reason = "Unlicensed in its home jurisdiction",
            });

            Console.WriteLine(JsonSerializer.Serialize(result));
components:
  schemas:
    TravelRuleCounterpartyDecisionRequest:
      type: object
      required:
        - decision
      properties:
        decision:
          type: string
          enum:
            - APPROVED
            - RESTRICTED
            - BLOCKED
        reason:
          type: string
          maxLength: 255
          description: >-
            Opsional. Menggantikan alasan sebelumnya; jangan sertakan untuk
            menghapusnya.
    TravelRuleCounterpartyDecisionResponse:
      type: object
      properties:
        decision:
          allOf:
            - $ref: '#/components/schemas/TravelRuleCounterpartyDecision'
          nullable: true
          description: >-
            Keputusan yang berlaku untuk pihak lawan bagi aplikasi Anda:
            miliknya sendiri, atau jika tidak (untuk entitas dari sebuah merek)
            milik merek tersebut. Null jika tidak ada.
    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
  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.