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

# Criar VASP privado na Travel Rule

> Adicione uma contraparte ausente ao diretório privado de Travel Rule da Didit, salve o contato de conformidade e envie um convite opcional.

A API de criação de VASP do Didit adiciona uma contraparte, de forma privada, ao diretório da sua aplicação e, opcionalmente, envia um convite para o e-mail de conformidade dela.

Envie `name` e `email`. Você também pode informar `lei` (20 caracteres alfanuméricos), `jurisdiction` (um código de país ISO alfa-2 ou alfa-3) e `invite` (padrão `false`). Valores vazios de LEI e jurisdição opcionais são aceitos. A API exige acesso de gravação a transações.

A resposta `201` é uma entrada do diretório com `source: added_by_you`. O contato de conformidade é privado da sua aplicação. Adicionar uma entrada não certifica a identidade da contraparte nem a torna membro da rede do Didit.

Um nome visível ou uma LEI correspondente retorna `409` com `vasp_id`; nesse caso, selecione a entrada existente. Campos inválidos retornam `400`.

Use [Pesquisar no diretório de VASPs](https://docs.didit.me/pt-br/management-api/travel-rule/search-vasps.md) para encontrar a entrada e as rotas disponíveis. Use o `id` dela com a ação `beneficiary_vasp` em [Atualizar uma transferência](https://docs.didit.me/pt-br/management-api/travel-rule/update-transfer.md). Consulte o [guia do diretório](https://docs.didit.me/pt-br/transaction-monitoring/travel-rule.md#diretório) para roteamento e diligência devida.


## OpenAPI

````yaml pt-br/openapi-25.json POST /v3/travel-rule/vasps/
openapi: 3.0.0
info:
  version: 3.0.0
  title: Didit Verification API
  description: API de verificação de identidade. Autentique-se com o cabeçalho x-api-key.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/travel-rule/vasps/:
    post:
      tags:
        - Travel Rule
      summary: Crie uma entrada de diretório VASP privada
      description: >-
        Adicione uma VASP de forma privada à sua aplicação e, opcionalmente,
        convide-a. Requer acesso de escrita a transações. A resposta usa
        source=added_by_you. Um nome visível ou uma LEI correspondente retorna
        409 com o vasp_id existente. Veja [Pesquise no
        diretório](/pt-br/management-api/travel-rule/search-vasps).
      operationId: createTravelRuleVasp
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TravelRuleVaspCreateRequest'
            example:
              name: Example VASP
              email: compliance@example.com
              jurisdiction: DE
              invite: false
      responses:
        '201':
          description: Resposta bem-sucedida.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VaspDirectoryEntry'
              example:
                id: 11111111-2222-3333-4444-555555555555
                kind: directory
                name: Example VASP
                lei: ''
                jurisdiction: DE
                source: added_by_you
                contacts:
                  - id: 22222222-3333-4444-5555-666666666666
                    email: compliance@example.com
                    name: ''
                    source: application
                    scope: application
                    verified_at: null
        '400':
          description: Campos da requisição inválidos.
        '403':
          description: Permissão para gravar transações ausente.
        '409':
          description: >-
            Uma entrada visível já corresponde ao nome ou à LEI. Selecione o
            vasp_id existente.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Explicação do conflito.
                  vasp_id:
                    type: string
                    description: Identificador do VASP existente.
                    format: uuid
                required:
                  - detail
                  - vasp_id
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: curl
          label: curl
          source: |-
            curl -X POST 'https://verification.didit.me/v3/travel-rule/vasps/' \
              -H 'x-api-key: YOUR_API_KEY' -H 'Content-Type: application/json' \
              -d '{"name": "Example VASP", "email": "compliance@example.com", "jurisdiction": "DE", "invite": false}'
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            result = client.travel_rule.create_vasp(
                name="Example VASP",
                email="compliance@example.com",
                jurisdiction="DE",
                invite=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.createVasp({
              name: "Example VASP",
              email: "compliance@example.com",
              jurisdiction: "DE",
              invite: 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.CreateVASP(ctx, didit.TravelRuleVASPCreateRequest{\n\tName:         \"Example VASP\",\n\tEmail:        \"compliance@example.com\",\n\tJurisdiction: didit.String(\"DE\"),\n\tInvite:       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.TravelRuleVaspCreateRequest;


            // Reads DIDIT_API_KEY.

            Didit client = new Didit();


            var result =
            client.travelRule().createVasp(TravelRuleVaspCreateRequest.builder()
                    .name("Example VASP")
                    .email("compliance@example.com")
                    .jurisdiction("DE")
                    .invite(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->createVasp([
                'name' => 'Example VASP',
                'email' => 'compliance@example.com',
                'jurisdiction' => 'DE',
                'invite' => false,
            ]);
            print_r($result->toArray());
        - lang: ruby
          label: Ruby
          source: |-
            require "didit"

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

            result = didit.travel_rule.create_vasp(
              name: "Example VASP",
              email: "compliance@example.com",
              jurisdiction: "DE",
              invite: 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.CreateVaspAsync(new
            TravelRuleVaspCreateRequest

            {
                Name = "Example VASP",
                Email = "compliance@example.com",
                Jurisdiction = "DE",
                Invite = false,
            });

            Console.WriteLine(JsonSerializer.Serialize(result));
components:
  schemas:
    TravelRuleVaspCreateRequest:
      type: object
      properties:
        name:
          type: string
          description: Nome da VASP, sem espaços extras; não pode estar vazio.
          minLength: 1
          maxLength: 255
        email:
          type: string
          description: >-
            E-mail de conformidade salvo como contato privado da aplicação e
            usado para um convite opcional.
          format: email
          maxLength: 254
        lei:
          type: string
          description: LEI opcional, normalizado para maiúsculas.
          pattern: ^([A-Za-z0-9]{20})?$
          default: ''
        jurisdiction:
          type: string
          description: >-
            Código de país ISO 3166 alpha-2 ou alpha-3, opcional, normalizado
            para maiúsculas.
          maxLength: 3
          default: ''
        invite:
          type: boolean
          default: false
          description: Envia um convite para o e-mail informado.
      required:
        - name
        - email
    VaspDirectoryEntry:
      type: object
      description: >-
        Um VASP do diretório ou um membro da rede Didit, com as rotas que sua
        aplicação tem até ele. Um cliente é membro da rede Didit somente
        enquanto sua aplicação estiver em produção, sua Travel Rule estiver
        ativada, seu perfil for localizável, tiver uma razão social e um e-mail
        de conformidade confirmado, e a Didit não tiver marcado a aplicação como
        de teste, demonstração ou interna. Cada linha também traz a avaliação de
        due diligence compartilhada (dd_score, risk_level, responsiveness,
        essential_checks) e a decisão, a triagem da entidade e os questionários
        da sua própria aplicação, que nenhum outro cliente vê.
      properties:
        id:
          type: string
          format: uuid
          description: O id da entrada, para GET /v3/travel-rule/vasps/{vasp_id}/.
        kind:
          type: string
          enum:
            - directory
            - didit
          description: >-
            directory para uma entrada de diretório compartilhada ou privada da
            aplicação; didit para um membro da rede Didit.
        name:
          type: string
        lei:
          type: string
        jurisdiction:
          type: string
          description: Código de país ISO 3166, conforme informado pela fonte.
        domains:
          type: array
          items:
            type: string
          description: Os domínios web do VASP. Sempre vazio para membros da rede Didit.
        reachable:
          type: boolean
          description: >-
            Se a sua aplicação tem uma rota disponível até este VASP ou, no caso
            de uma marca, até uma de suas entidades. Sempre true para um membro
            da rede Didit, exceto em uma aplicação de sandbox, onde todas as
            linhas são 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 (do registro global de LEI),
                  network_name (o nome em uma rede de Travel Rule), attribution
                  (o nome da entidade que a análise de blockchain atribui às
                  carteiras do VASP), merged (o nome de uma entrada duplicada
                  mesclada nesta) ou staff.
          description: Outros nomes pelos quais o VASP é conhecido.
        networks:
          type: array
          items:
            type: object
            description: >-
              Uma listagem atual deste VASP no diretório de membros de uma rede
              de Travel Rule. Uma listagem na TRISA indica quem o VASP é na
              TRISA; a Didit não tem canal TRISA, então ela nunca é uma rota.
            properties:
              network:
                type: string
                enum:
                  - GTR
                  - TRUST
                  - VERIFYVASP
                  - SYGNA
                  - TRISA
              code:
                type: string
                description: O identificador do VASP nessa rede.
              listed_name:
                type: string
                description: O nome sob o qual a rede lista o VASP.
              country:
                type: string
                description: O país informado pela rede, quando ela informa um.
              verified_at:
                type: string
                format: date-time
                nullable: true
                description: >-
                  Quando a equipe da Didit verificou a listagem. Nulo para
                  listagens lidas de um diretório público.
              last_seen_at:
                type: string
                format: date-time
                nullable: true
                description: >-
                  Quando a fonte exibiu a listagem pela última vez. Uma listagem
                  que a fonte não exibe há três semanas é removida.
              source:
                type: string
                enum:
                  - trisa_directory
                  - staff
                description: >-
                  Origem da listagem: o diretório público da TRISA ou a equipe
                  da Didit.
        routes:
          type: array
          items:
            type: object
            description: >-
              Uma forma pela qual sua aplicação pode entregar dados de Travel
              Rule a este VASP, na ordem em que o envio as tenta. Uma rota de
              rede exige uma associação a essa rede: a sua própria (conectada no
              Marketplace) ou a da Didit, quando a Didit tiver uma. Sem ela, a
              rota é listada como indisponível, com o motivo, e nunca como uma
              forma de alcançar o 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: >-
                  Por que uma rota indisponível não pode ser usada:
                  no_membership (nem você nem a Didit têm associação nessa
                  rede), network_switched_off (você desativou essa rede nas suas
                  configurações) ou sandbox_application (uma aplicação sandbox
                  envia apenas para o Didit Test VASP, então nenhuma rota está
                  disponível para ela). Vazio quando a rota está disponível.
              via:
                type: string
                enum:
                  - ''
                  - own_membership
                  - didit_membership
                  - directory
                  - contact
                  - didit_network
                description: >-
                  Como uma rota disponível é alcançada: own_membership ou
                  didit_membership para um trilho de rede, directory para um
                  endpoint TRP verificado pelo diretório, contact para o trilho
                  EMAIL, didit_network para um membro da rede Didit. Vazio
                  quando a rota não está disponível.
        umbrella:
          type: object
          nullable: true
          description: >-
            A marca da qual esta entrada é uma entidade regulada. Nulo quando
            não faz parte de nenhuma.
          properties:
            id:
              type: string
              format: uuid
            name:
              type: string
        entities:
          type: array
          items:
            type: object
            description: >-
              Uma entidade regulada de uma marca: a entidade jurídica que recebe
              uma transferência.
            properties:
              id:
                type: string
                format: uuid
              name:
                type: string
              lei:
                type: string
              jurisdiction:
                type: string
              reachable:
                type: boolean
                description: Se a sua aplicação tem uma rota disponível até ele.
          description: >-
            Para uma marca, as entidades reguladas que recebem as suas
            transferências. Uma transferência que indica a marca vai para a
            entidade acessível na jurisdição que ela informa
            (beneficiary_data.counterparty_vasp_jurisdiction); caso contrário,
            para a entidade que a atribuição da análise de blockchain vinculou à
            carteira de destino; caso contrário, para a única entidade acessível
            quando nenhuma jurisdição é informada. Nunca se escolhe por
            suposição entre duas entidades que se encaixam igualmente.
        contacts:
          type: array
          items:
            type: object
            description: >-
              Um contato de conformidade para o qual o canal EMAIL pode
              escrever.
            properties:
              id:
                type: string
                format: uuid
              email:
                type: string
                format: email
              name:
                type: string
              source:
                type: string
                enum:
                  - staff
                  - application
                  - learned
                description: >-
                  staff: curado pela Didit; application: adicionado pela sua
                  aplicação; learned: um endereço que respondeu a uma requisição
                  de Travel Rule pelo link de resposta.
              scope:
                type: string
                enum:
                  - platform
                  - application
                description: >-
                  Os contatos platform são usados nas transferências de todos os
                  clientes da Didit; os contatos application são privados da sua
                  aplicação, que vê apenas os próprios.
              verified_at:
                type: string
                format: date-time
                nullable: true
                description: >-
                  Quando alguém neste endereço respondeu a uma requisição. Nulo
                  enquanto ainda não tiver respondido.
          description: >-
            Os contatos da plataforma para este VASP e os da sua própria
            aplicação.
        dd_status:
          type: string
          enum:
            - NOT_STARTED
            - IN_PROGRESS
            - COMPLETED
            - REJECTED
          description: >-
            Status de verificação da entrada atribuído pela Didit, pontuado pelo
            componente de verificação do dd_score. Sempre COMPLETED para um
            membro da rede Didit.
        dd_score:
          type: integer
          nullable: true
          minimum: 0
          maximum: 100
          description: >-
            A pontuação de due diligence compartilhada de uma entrada do
            diretório, de 0 a 100, em que valores mais altos são mais seguros
            (veja dd_score_semantic): a soma dos pontos em dd_score_breakdown.
            Nula para um membro da rede Didit, que não é pontuado. Uma entrada
            ainda não avaliada (dd_assessed_at nulo) mostra 0 com risk_level
            vazio, então leia risk_level em vez da pontuação bruta.
        reachable_rails:
          type: array
          items:
            type: string
            enum:
              - INTERNAL
              - TRP
              - GTR
              - TRUST
              - VERIFYVASP
              - SYGNA
              - EMAIL
          description: >-
            Canais registrados na entrada. Consulte as rotas para ver o que sua
            aplicação pode usar hoje.
        is_didit_customer:
          type: boolean
          description: >-
            true para um membro da rede Didit (para esses, dd_status é sempre
            COMPLETED, dd_score é null e risk_level fica vazio) e para uma
            entrada do diretório vinculada a um cliente da Didit.
        dd_score_breakdown:
          type: object
          description: >-
            Um objeto por componente de dd_score. Componentes, seu peso (máximo)
            e seus códigos de motivo: 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). Vazio para um
            membro da rede Didit.
          additionalProperties:
            type: object
            properties:
              points:
                type: number
                description: >-
                  Pontos com que o componente contribui, arredondados para uma
                  casa decimal.
              max:
                type: integer
                description: 'O peso do componente: o máximo de pontos que ele pode somar.'
              reason:
                type: string
                description: Código legível por máquina do veredito do componente.
              detail:
                type: string
                description: Explicação de uma linha em inglês.
        dd_assessed_at:
          type: string
          format: date-time
          nullable: true
          description: >-
            Quando dd_score, risk_level e responsiveness foram calculados pela
            última vez: após uma troca com a entrada ser concluída, finalizada,
            expirar, apresentar divergência ou ser recusada, quando a Didit
            atualiza ou faz a curadoria da entrada e na atualização semanal do
            diretório. Nulo para um membro da rede Didit.
        dd_score_semantic:
          type: string
          enum:
            - higher_is_safer
          description: 'Em que direção o dd_score aponta: sempre higher_is_safer.'
        risk_level:
          type: string
          enum:
            - LOW
            - MEDIUM
            - HIGH
            - ''
          description: >-
            A faixa em que dd_score se encontra: LOW (70 ou mais), MEDIUM (40 a
            69) ou HIGH (abaixo de 40). Vazio para um membro da rede Didit e
            para uma entrada ainda não avaliada. Filtre por ela com risk. Sua
            própria triagem sinalizada nunca altera esse valor compartilhado: em
            vez disso, ela torna counterparty_risk_level HIGH nas suas regras.
        responsiveness:
          type: object
          description: >-
            Se o VASP responde a requisições de Travel Rule: a proporção das
            requisições que clientes da Didit iniciaram para ele nos últimos 90
            dias e que ele respondeu. Só contam as requisições enviadas por um
            trilho de rede ou de protocolo, ou por e-mail para um endereço
            compartilhado (o endereço de conformidade da entrada ou um contato
            da plataforma); uma requisição enviada para um endereço digitado por
            um cliente, ou para um contato privado de um cliente, nunca conta.
            Uma requisição expirada é considerada sem resposta; uma troca
            concluída, uma recusa ou uma divergência de dados é uma resposta;
            uma requisição cancelada ou um trilho inacessível não é nenhum dos
            dois. Sempre UNKNOWN com contagens zeradas para um membro da rede
            Didit.
          properties:
            status:
              type: string
              enum:
                - RESPONSIVE
                - UNRESPONSIVE
                - UNKNOWN
              description: >-
                UNKNOWN com menos de 5 requisições decididas na janela;
                UNRESPONSIVE quando menos de 10 por cento delas foram
                respondidas; RESPONSIVE nos demais casos.
            answered:
              type: integer
              description: Requisições decididas na janela que o VASP respondeu.
            total:
              type: integer
              description: 'Requisições decididas na janela: respondidas mais expiradas.'
            computed_at:
              type: string
              format: date-time
              nullable: true
        essential_checks:
          type: object
          description: >-
            O relatório de verificações essenciais de uma entrada do diretório,
            construído apenas a partir das fontes verificadas da plataforma:
            registration (um registro oficial lista o VASP: o registro
            provisório MiCA da UE, o diretório público TRISA ou o registro
            global de LEI), licence (uma autorização MiCA consta nos registros e
            está vigente), domain (o domínio da entrada corresponde ao seu
            endpoint TRP ou ao site indicado pelo seu registro) e lei (seu
            registro LEI está ativo, emitido e consistente com os nomes e o país
            da entrada). O componente essentials de dd_score é a proporção de
            verificações decididas que são aprovadas. Fica vazio até que a
            atualização semanal do diretório verifique a entrada pela primeira
            vez, e fica sempre vazio para um membro da rede 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 quando nenhuma fonte registrada consegue decidir a
                      verificação.
                  reason:
                    type: string
                    description: Código legível por máquina do veredito.
                  detail:
                    type: string
                    description: Explicação de uma linha em inglês.
            passed:
              type: integer
            failed:
              type: integer
            unknown:
              type: integer
            total:
              type: integer
        decision:
          allOf:
            - $ref: '#/components/schemas/TravelRuleCounterpartyDecision'
          nullable: true
          description: >-
            A decisão da sua aplicação sobre esta VASP ou, para uma entidade sem
            decisão própria, a da sua marca (inherited_from indica a marca).
            Nulo quando não há nenhuma. Privada da sua aplicação.
        entity_screening:
          allOf:
            - $ref: '#/components/schemas/TravelRuleCounterpartyScreening'
          nullable: true
          description: >-
            A análise mais recente de sanções e mídia adversa desta VASP feita
            pela sua aplicação. Nula quando você nunca a analisou. Privada da
            sua aplicação.
        questionnaires:
          type: array
          items:
            $ref: '#/components/schemas/TravelRuleCounterpartyQuestionnaire'
          description: >-
            Os questionários de due diligence da sua aplicação com esta VASP,
            dos mais recentes para os mais antigos. Privados da sua aplicação.
        source:
          type: string
          description: >-
            directory para uma entrada de diretório compartilhada, added_by_you
            para a entrada privada da sua aplicação, ou didit_network para uma
            entrada de diretório vinculada a um cliente da Didit. Resultados
            separados de membros com kind=didit podem omitir este campo; use
            kind para identificá-los.
          enum:
            - didit_network
            - directory
            - added_by_you
      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.
        source: directory
    TravelRuleCounterpartyDecision:
      type: object
      description: >-
        A decisão da sua aplicação sobre uma VASP contraparte. Privada da sua
        aplicação: ela nunca altera a entrada compartilhada do diretório e
        nenhum outro cliente a vê. Ela atua apenas por meio das suas regras de
        transação (o campo de regra counterparty_dd_status e os presets
        travel-rule-counterparty-blocked e travel-rule-counterparty-restricted);
        ela nunca altera como uma transferência é roteada.
      properties:
        decision:
          type: string
          enum:
            - APPROVED
            - RESTRICTED
            - BLOCKED
          description: >-
            APPROVED: sua equipe liberou a contraparte. RESTRICTED:
            transferências para ela podem prosseguir após revisão. BLOCKED: sua
            equipe a recusou.
        reason:
          type: string
          maxLength: 255
          description: >-
            Motivo em texto livre que você informou, vazio quando nenhum foi
            informado.
        decided_by:
          type: string
          description: >-
            O usuário do console que tomou a decisão ou a alterou por último.
            Vazio quando a decisão foi tomada por uma chave de API.
        updated_at:
          type: string
          format: date-time
        inherited_from:
          type: object
          nullable: true
          description: >-
            A marca cuja decisão esta entidade segue porque você não tomou
            nenhuma decisão na própria entidade. Nulo quando a decisão é da
            própria contraparte.
          properties:
            id:
              type: string
              format: uuid
            name:
              type: string
    TravelRuleCounterpartyScreening:
      type: object
      description: >-
        Uma análise de sanções e mídia adversa da entidade contraparte,
        executada para a sua aplicação e faturada a ela. Privada para a sua
        aplicação: nenhum outro cliente a vê.
      properties:
        id:
          type: string
          format: uuid
        status:
          type: string
          enum:
            - Approved
            - In Review
            - Declined
          description: >-
            Aprovado: nenhuma possível correspondência requer atenção. Em
            revisão ou Recusado: uma possível correspondência em sanções ou
            mídia adversa.
        total_hits:
          type: integer
          description: Quantas possíveis correspondências a análise retornou.
        score:
          type: number
          nullable: true
          description: >-
            A maior pontuação de risco entre as possíveis correspondências. Nulo
            quando não houve nenhuma correspondência.
        screened_at:
          type: string
          format: date-time
        fresh:
          type: boolean
          description: >-
            Se a triagem é mais recente que fresh_days (30 dias). Uma triagem
            recente é reutilizada em vez de ser cobrada novamente.
        flagged:
          type: boolean
          description: >-
            true enquanto a análise estiver recente e seu status for In Review
            ou Declined. Enquanto sua análise mais recente estiver sinalizada e
            a análise de contrapartes permanecer ativada,
            counterparty_risk_level é HIGH nas suas regras.
    TravelRuleCounterpartyQuestionnaire:
      type: object
      description: >-
        Um questionário de due diligence que sua aplicação enviou à contraparte:
        o questionário padrão da Didit, enviado por e-mail a um endereço de
        conformidade registrado, com um link de resposta de uso único. Privado
        para sua aplicação.
      properties:
        id:
          type: string
          format: uuid
        status:
          type: string
          enum:
            - SENT
            - ANSWERED
            - EXPIRED
          description: >-
            SENT: aguardando respostas. ANSWERED: a contraparte respondeu a
            todas as perguntas. EXPIRED: o link de resposta foi fechado sem
            resposta (o prazo passou ou um questionário mais recente o
            substituiu), ou as respostas ultrapassaram valid_until.
        form_version:
          type: string
          description: >-
            Versão do questionário padrão da Didit à qual as respostas
            pertencem. Atualmente 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: >-
            O prazo de resposta, 30 dias após o envio. O link para de funcionar
            depois dele.
        answered_at:
          type: string
          format: date-time
          nullable: true
        valid_until:
          type: string
          format: date-time
          nullable: true
          description: >-
            Por quanto tempo as respostas permanecem válidas: 365 dias após
            serem respondidas. Null até serem respondidas.
        current:
          type: boolean
          description: >-
            true enquanto o questionário estiver ANSWERED e valid_until não
            tiver passado.
        answers:
          type: object
          additionalProperties:
            type: string
          description: >-
            As respostas indexadas pelo id da pergunta: legal_name, licensing,
            jurisdictions, aml_program, compliance_officer, sanctions_screening,
            transaction_monitoring, travel_rule, custody, ownership,
            record_keeping, data_protection. Cada resposta tem até 2,000
            caracteres. Ficam vazias até serem respondidas.
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        Chave de API da sua aplicação, em Developers -> API keys no Business
        Console. A chave principal tem acesso total. Uma chave nomeada pode ter
        escopo restrito: nenhum acesso, leitura ou escrita por recurso, limitada
        a alguns fluxos ou a sessões aprovadas, a uma lista de endereços IP e a
        uma data de validade. 401 significa que a chave está errada, revogada ou
        expirada; 403 significa que nenhuma chave foi enviada, que a chave não
        tem acesso a este recurso ou ação, ou que a requisição veio de um
        endereço fora da sua lista de IPs; 404 em uma rota de sessão significa
        que a sessão está fora dos fluxos ou status da chave. Uma chave sem
        acesso a mídia recebe URLs de imagem, vídeo e PDF como null, e uma chave
        sem permissão de escrita em sessões recebe links e tokens de sessão como
        null. Consulte https://docs.didit.me/console/api-keys.

````

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