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

# Screening VASP Lawan API: Cek Sanksi Travel Rule

> Jalankan skrining sanksi dan media negatif opt-in berbayar untuk VASP pihak lawan Travel Rule di aplikasi Anda melalui Didit.



Prompt untuk Skrining VASP via API
        Salin prompt ke papan klip



      
      

\<pre>

\`Screen a Travel Rule counterparty VASP against sanctions and adverse media for my application.

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

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

Prerequisite:
Turn on counterparty screening first: PUT /v3/travel-rule/settings/ with {"counterparty_screening_enabled": true}. It is off by default.

Example call:
curl -X POST "https://verification.didit.me/v3/travel-rule/vasps/{vasp_id}/screening/" \
-H "x-api-key: YOUR_API_KEY" -H "Content-Type: application/json" \
-d '{"refresh": false}'

Body (optional):
\- refresh - true screens again even when a fresh screening exists. Default false.

What happens:
\- 201 {"outcome": "screened", "screening": {...}} - a new screening ran and was billed at my organization's Company AML Screening price (GET .../screening/ returns the price).
\- 200 {"outcome": "reused", "screening": {...}} - a screening younger than 30 days already existed and was returned. Nothing was billed.
\- screening is {id, status, total_hits, score, screened_at, fresh, flagged}. status is Approved, In Review or Declined; flagged is true while a fresh screening is In Review or Declined.
\- While my latest screening is flagged and screening stays on, my rules read counterparty_risk_level as HIGH for this counterparty. The shared risk_level in the directory does not change.
\- The screening is private to my application: no other Didit customer sees it.
\- With screening on, Didit also screens the counterparty an outbound Travel Rule exchange reaches when the exchange starts, reusing a fresh screening and billing a new one the same way. A refusal or failure there never fails the transfer.

Failure modes (nothing runs and nothing is billed):
\- 400 - the counterparty has no name to screen, or the body is not valid.
\- 403 - my organization's balance cannot cover the screening (code insufficient_credits), or my contract has no rate configured for it.
\- 404 - no directory entry or listed Didit network member has this id, or the id is my own VASP profile.
\- 409 - counterparty screening is off, the application is a sandbox one, or a screening of this counterparty is already running.
\- 502 - the screening could not be completed; try again in a moment.

Full guide: /transaction-monitoring/travel-rule#counterparty-screening.`

\</pre>



      
      

Tempel ke



## OpenAPI

````yaml id/openapi-25.json POST /v3/travel-rule/vasps/{vasp_id}/screening/
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}/screening/:
    post:
      tags:
        - Travel Rule
      summary: Lakukan skrining VASP
      description: >-
        Skrining entitas pihak lawan terhadap sanksi dan media negatif untuk
        aplikasi Anda. Keikutsertaan: counterparty_screening_enabled harus aktif
        di pengaturan Travel Rule Anda. Setiap skrining baru ditagih sesuai
        harga Skrining AML Perusahaan milik organisasi Anda; skrining yang
        berusia kurang dari 30 hari akan dikembalikan sebagai gantinya (200,
        tidak ditagih) kecuali Anda mengirimkan refresh: true. Satu skrining
        pihak lawan berjalan dalam satu waktu per aplikasi. Hasilnya bersifat
        privat untuk aplikasi Anda. Aplikasi sandbox tidak pernah diskrining.
      operationId: screenTravelRuleVasp
      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: false
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TravelRuleCounterpartyScreeningRequest'
            example:
              refresh: false
      responses:
        '200':
          description: >-
            Skrining baru sudah ada dan telah dikembalikan. Tidak ada biaya yang
            ditagihkan.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TravelRuleCounterpartyScreeningResult'
              example:
                outcome: reused
                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
        '201':
          description: Skrining baru telah dijalankan dan ditagihkan.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TravelRuleCounterpartyScreeningResult'
              example:
                outcome: screened
                screening:
                  id: 7a1d2c3b-4e5f-4a6b-8c7d-9e0f1a2b3c4d
                  status: In Review
                  total_hits: 2
                  score: 85
                  screened_at: '2026-10-14T09:58:00Z'
                  fresh: true
                  flagged: true
        '400':
          description: >-
            Isi body tidak valid, atau pihak lawan tidak memiliki nama untuk
            diskrining.
          content:
            application/json:
              schema:
                type: object
                additionalProperties:
                  type: array
                  items:
                    type: string
              example:
                detail:
                  - This counterparty has no name to screen.
        '403':
          description: >-
            Saldo organisasi Anda tidak mencukupi untuk skrining (kode
            insufficient_credits; tidak ada yang dijalankan dan tidak ada yang
            ditagih), atau kontrak Anda belum mengonfigurasi tarif untuknya.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                  code:
                    type: string
              example:
                detail: >-
                  You don't have enough credits to perform this request. Please
                  top up at https://business.didit.me
                code: insufficient_credits
        '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.
        '409':
          description: >-
            Tidak ada yang berjalan dan tidak ada yang ditagihkan: skrining
            pihak lawan dinonaktifkan untuk aplikasi Anda, aplikasi berstatus
            sandbox, atau skrining pihak lawan ini sedang berjalan.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
              examples:
                Screening off:
                  value:
                    detail: >-
                      Counterparty screening is turned off. Enable it in the
                      Travel Rule settings first.
                Sandbox application:
                  value:
                    detail: >-
                      Counterparty screening does not run for sandbox
                      applications.
                Already running:
                  value:
                    detail: >-
                      A screening of this counterparty is already running. Try
                      again in a moment.
        '502':
          description: >-
            Skrining tidak dapat diselesaikan. Tidak ada biaya yang ditagihkan;
            coba lagi sebentar lagi.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
              example:
                detail: The screening provider did not answer. Try again in a moment.
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: curl
          label: curl
          source: >-
            curl -X POST
            https://verification.didit.me/v3/travel-rule/vasps/{vasp_id}/screening/
            \
              -H 'x-api-key: YOUR_API_KEY' -H 'Content-Type: application/json' \
              -d '{"refresh": false}'
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            result = client.travel_rule.screen_vasp(
                "11111111-2222-3333-4444-555555555555",
                refresh=False,
            )
            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.screenVasp("11111111-2222-3333-4444-555555555555",
            {
              refresh: false,
            });

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


            // Reads DIDIT_API_KEY.

            Didit client = new Didit();


            var result =
            client.travelRule().screenVasp("11111111-2222-3333-4444-555555555555",
            TravelRuleCounterpartyScreeningRequest.builder()
                    .refresh(false)
                    .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->screenVasp('11111111-2222-3333-4444-555555555555',
            [
                'refresh' => false,
            ]);

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

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

            result = didit.travel_rule.screen_vasp(
              "11111111-2222-3333-4444-555555555555",
              refresh: false
            )
            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.ScreenVaspAsync("11111111-2222-3333-4444-555555555555",
            new TravelRuleCounterpartyScreeningRequest

            {
                Refresh = false,
            });

            Console.WriteLine(JsonSerializer.Serialize(result));
components:
  schemas:
    TravelRuleCounterpartyScreeningRequest:
      type: object
      properties:
        refresh:
          type: boolean
          default: false
          description: >-
            true melakukan skrining lagi (dan menagih lagi) bahkan ketika
            skrining terkini sudah ada.
    TravelRuleCounterpartyScreeningResult:
      type: object
      properties:
        outcome:
          type: string
          enum:
            - screened
            - reused
          description: >-
            screened: skrining baru dijalankan dan ditagih (201). reused:
            skrining terkini dikembalikan dan tidak ada yang ditagih (200).
        screening:
          $ref: '#/components/schemas/TravelRuleCounterpartyScreening'
    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.
  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.