> ## 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 Travel Rule: establir decisió d'un VASP contrapart

> Aprova, restringeix o bloqueja un VASP contrapart de la Travel Rule amb Didit, perquè les regles de transacció hi puguin actuar.



Configura un prompt per a l'API de decisions de VASP
        Copia el prompt al porta-retalls



      
      

\<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>



      
      

Enganxa a



## OpenAPI

````yaml ca/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 de verificació d'identitat. Autentica't amb la capçalera x-api-key.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/travel-rule/vasps/{vasp_id}/decision/:
    put:
      tags:
        - Travel Rule
      summary: Estableix la teva decisió sobre un VASP
      description: >-
        Pren o modifica la decisió de la teva aplicació sobre una contrapart:
        APPROVED, RESTRICTED o BLOCKED, amb un motiu opcional. Mai no modifica
        l'entrada del directori compartit i només actua a través de les teves
        regles de transacció (counterparty_dd_status). Una decisió sobre una
        marca també cobreix cadascuna de les seves entitats que no tingui una
        decisió pròpia.
      operationId: updateTravelRuleVaspDecision
      parameters:
        - name: vasp_id
          in: path
          required: true
          schema:
            type: string
            format: uuid
          description: >-
            L'id d'una fila de GET /v3/travel-rule/vasps/: una entrada de
            directori o un membre de la xarxa Didit.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TravelRuleCounterpartyDecisionRequest'
            example:
              decision: BLOCKED
              reason: Unlicensed in its home jurisdiction
      responses:
        '200':
          description: La decisió tal com s'aplica ara.
          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: >-
            Falta la decisió o no és una d'APPROVED, RESTRICTED o BLOCKED, o el
            motiu té més de 255 caràcters.
          content:
            application/json:
              schema:
                type: object
                additionalProperties:
                  type: array
                  items:
                    type: string
              example:
                decision:
                  - '"MAYBE" is not a valid choice.'
        '404':
          description: >-
            Cap entrada del directori ni membre llistat de la xarxa Didit té
            aquest id. El teu propi perfil de VASP mai és la teva contrapart.
          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: Opcional. Substitueix el motiu anterior; omet-lo per esborrar-lo.
    TravelRuleCounterpartyDecisionResponse:
      type: object
      properties:
        decision:
          allOf:
            - $ref: '#/components/schemas/TravelRuleCounterpartyDecision'
          nullable: true
          description: >-
            La decisió que s'aplica a la contrapart per a la teva aplicació: la
            seva pròpia o, altrament (per a una entitat d'una marca), la de la
            marca. Null quan no n'hi ha cap.
    TravelRuleCounterpartyDecision:
      type: object
      description: >-
        La decisió de la teva aplicació sobre un VASP de contrapart. Privada per
        a la teva aplicació: mai canvia l'entrada compartida del directori i cap
        altre client no la veu. Només actua mitjançant les teves regles de
        transacció (el camp de regla counterparty_dd_status i els valors
        predefinits travel-rule-counterparty-blocked i
        travel-rule-counterparty-restricted); mai canvia com s'enruta una
        transferència.
      properties:
        decision:
          type: string
          enum:
            - APPROVED
            - RESTRICTED
            - BLOCKED
          description: >-
            APPROVED: el teu equip ha autoritzat la contrapart. RESTRICTED: les
            transferències cap a ella poden tirar endavant després de la
            revisió. BLOCKED: el teu equip l'ha rebutjat.
        reason:
          type: string
          maxLength: 255
          description: Motiu de text lliure que has indicat; buit si no n'hi ha cap.
        decided_by:
          type: string
          description: >-
            L'usuari de la consola que ha pres o ha modificat per darrera vegada
            la decisió. Buit quan l'ha pres una clau d'API.
        updated_at:
          type: string
          format: date-time
        inherited_from:
          type: object
          nullable: true
          description: >-
            La marca la decisió de la qual segueix aquesta entitat perquè no
            n'has pres cap sobre la pròpia entitat. Null quan la decisió és
            pròpia de la contrapart.
          properties:
            id:
              type: string
              format: uuid
            name:
              type: string
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        La clau d'API de la teva aplicació, des de Developers -> API keys a la
        Business Console. La clau primària té accés complet. Una clau amb nom
        pot tenir l'abast limitat: cap, lectura o escriptura per recurs,
        limitada a determinats fluxos de treball o a sessions aprovades, a una
        llista d'adreces IP i a una data de caducitat. 401 significa que la clau
        és incorrecta, revocada o caducada; 403 significa que no s'ha enviat cap
        clau, que la clau no té accés a aquest recurs o acció, o que la
        sol·licitud prové d'una adreça fora de la seva llista d'IP; 404 en una
        ruta de sessió significa que la sessió està fora dels fluxos de treball
        o estats de la clau. Una clau sense accés a fitxers multimèdia rep els
        URL d'imatge, vídeo i PDF com a null, i una clau sense permís
        d'escriptura de sessions rep els enllaços de sessió i els tokens com a
        null. Consulta https://docs.didit.me/console/api-keys.

````

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