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

# Crea contatto controparte via API - Travel Rule

> Aggiungi con Didit un indirizzo di compliance privato per una VASP controparte. Il canale email Travel Rule scrive prima sui tuoi contatti.



Prompt API per aggiungere un contatto di controparte
        Copia il prompt negli appunti



      
      

\<pre>

\`Add a private compliance address for a Travel Rule counterparty VASP, so Didit's EMAIL rail writes to it.

Endpoint:
POST https://verification.didit.me/v3/travel-rule/counterparty-contacts/

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

Example call:
curl -X POST "https://verification.didit.me/v3/travel-rule/counterparty-contacts/" \
-H "x-api-key: YOUR_API_KEY" -H "Content-Type: application/json" \
-d '{"counterparty": "0d6f3c2a-6a1e-4c55-9a39-1f2b0c7d8e91", "email": "compliance@counterparty.example", "name": "Compliance desk"}'

Body:
\- counterparty (required) - the directory entry id from GET /v3/travel-rule/vasps/.
\- email (required) - the compliance address, up to 254 characters.
\- name (optional) - a label, for example the team name, up to 255 characters.

What happens:
\- 201 with the contact (scope application). Only my application sees and uses it, and a Travel Rule email to that counterparty goes to my own contacts first, then to platform contacts.
\- Adding an address the entry already has among my own contacts returns that contact (201), unchanged.
\- 400 when a field is missing or invalid, for example {"counterparty": ["No directory entry with this id."]} or {"email": ["Enter a valid email address."]}.

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

\</pre>



      
      

Incolla in



## OpenAPI

````yaml it/openapi-25.json POST /v3/travel-rule/counterparty-contacts/
openapi: 3.0.0
info:
  version: 3.0.0
  title: Didit Verification API
  description: API di verifica dell'identità. Autenticati con l'intestazione x-api-key.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/travel-rule/counterparty-contacts/:
    post:
      tags:
        - Travel Rule
      summary: Aggiungi un contatto della controparte
      description: >-
        Aggiunge un indirizzo di compliance privato per una voce della
        directory. Solo la tua applicazione lo vede e lo utilizza, e il canale
        EMAIL scrive a questo indirizzo prima di qualsiasi contatto della
        piattaforma. L'aggiunta di un indirizzo già presente per la voce tra i
        tuoi contatti restituisce quel contatto.
      operationId: createTravelRuleCounterpartyContact
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TravelRuleCounterpartyContactCreate'
            example:
              counterparty: 0d6f3c2a-6a1e-4c55-9a39-1f2b0c7d8e91
              email: compliance@counterparty.example
              name: Compliance desk
      responses:
        '201':
          description: Il contatto è stato aggiunto.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TravelRuleCounterpartyContact'
              example:
                uuid: 6c1f9b8e-2d4a-4f7e-8b3c-5a9d0e1f2a3b
                counterparty: 0d6f3c2a-6a1e-4c55-9a39-1f2b0c7d8e91
                counterparty_name: Example Counterparty VASP
                email: compliance@counterparty.example
                name: Compliance desk
                source: application
                scope: application
                created_by: ''
                verified_at: null
                is_invalid: false
                invalid_reason: ''
                invalid_detail: ''
                invalid_at: null
                created_at: '2026-10-19T09:00:00Z'
        '400':
          description: >-
            Un campo è mancante o non valido, oppure nessuna voce della
            directory ha questo ID.
          content:
            application/json:
              example:
                counterparty:
                  - No directory entry with this id.
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: curl
          label: curl
          source: >-
            curl -X POST
            https://verification.didit.me/v3/travel-rule/counterparty-contacts/
            \
              -H 'x-api-key: YOUR_API_KEY' -H 'Content-Type: application/json' \
              -d '{"counterparty": "0d6f3c2a-6a1e-4c55-9a39-1f2b0c7d8e91", "email": "compliance@counterparty.example", "name": "Compliance desk"}'
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            result = client.travel_rule.counterparty_contacts.create(
                counterparty="0d6f3c2a-6a1e-4c55-9a39-1f2b0c7d8e91",
                email="compliance@counterparty.example",
                name="Compliance desk",
            )
            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.counterpartyContacts.create({
              counterparty: "0d6f3c2a-6a1e-4c55-9a39-1f2b0c7d8e91",
              email: "compliance@counterparty.example",
              name: "Compliance desk",
            });
            console.log(result);
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.TravelRule.CounterpartyContacts.Create(ctx, didit.TravelRuleCounterpartyContactCreate{\n\tCounterparty: \"0d6f3c2a-6a1e-4c55-9a39-1f2b0c7d8e91\",\n\tEmail:        \"compliance@counterparty.example\",\n\tName:         didit.String(\"Compliance desk\"),\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.TravelRuleCounterpartyContactCreate;


            // Reads DIDIT_API_KEY.

            Didit client = new Didit();


            var result =
            client.travelRule().counterpartyContacts().create(TravelRuleCounterpartyContactCreate.builder()
                    .counterparty("0d6f3c2a-6a1e-4c55-9a39-1f2b0c7d8e91")
                    .email("compliance@counterparty.example")
                    .name("Compliance desk")
                    .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->counterpartyContacts->create([
                'counterparty' => '0d6f3c2a-6a1e-4c55-9a39-1f2b0c7d8e91',
                'email' => 'compliance@counterparty.example',
                'name' => 'Compliance desk',
            ]);
            print_r($result->toArray());
        - lang: ruby
          label: Ruby
          source: |-
            require "didit"

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

            result = didit.travel_rule.counterparty_contacts.create(
              counterparty: "0d6f3c2a-6a1e-4c55-9a39-1f2b0c7d8e91",
              email: "compliance@counterparty.example",
              name: "Compliance desk"
            )
            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.CounterpartyContacts.CreateAsync(new
            TravelRuleCounterpartyContactCreate

            {
                Counterparty = "0d6f3c2a-6a1e-4c55-9a39-1f2b0c7d8e91",
                Email = "compliance@counterparty.example",
                Name = "Compliance desk",
            });

            Console.WriteLine(JsonSerializer.Serialize(result));
components:
  schemas:
    TravelRuleCounterpartyContactCreate:
      type: object
      required:
        - counterparty
        - email
      properties:
        counterparty:
          type: string
          format: uuid
          description: L'`id` della voce della directory.
        email:
          type: string
          format: email
          maxLength: 254
        name:
          type: string
          description: Etichetta opzionale.
          maxLength: 255
    TravelRuleCounterpartyContact:
      type: object
      description: >-
        Un indirizzo di compliance a cui la via EMAIL scrive per una voce della
        directory.
      properties:
        uuid:
          type: string
          format: uuid
        counterparty:
          type: string
          format: uuid
          description: >-
            L'`id` della voce della directory, come mostrato da GET
            /v3/travel-rule/vasps/.
        counterparty_name:
          type: string
        email:
          type: string
          format: email
        name:
          type: string
          description: Etichetta opzionale, ad esempio il nome del team.
        source:
          type: string
          enum:
            - staff
            - application
            - learned
          description: >-
            staff: curato da Didit. learned: un indirizzo presso uno dei domini
            propri del VASP che ha risposto a una richiesta tramite il relativo
            link di risposta. application: aggiunto dalla tua applicazione.
        scope:
          type: string
          enum:
            - platform
            - application
          description: >-
            platform: curato da Didit o appreso da una risposta verificata,
            utilizzato per ogni cliente Didit, in sola lettura per te.
            application: privato per la tua applicazione.
        created_by:
          type: string
          description: >-
            Vuoto per i contatti della piattaforma e per i contatti aggiunti da
            una chiave API.
        verified_at:
          type: string
          format: date-time
          nullable: true
          description: >-
            Quando questo indirizzo ha risposto l'ultima volta a una richiesta
            tramite il relativo link di risposta.
        is_invalid:
          type: boolean
          description: >-
            true quando l'indirizzo ha generato un bounce o un reclamo; il rail
            EMAIL lo salta.
        invalid_reason:
          type: string
          enum:
            - ''
            - hard_bounce
            - soft_bounce
            - spam_complaint
            - suppressed
        invalid_detail:
          type: string
          description: Il motivo fornito dal server di posta ricevente, se disponibile.
        invalid_at:
          type: string
          format: date-time
          nullable: true
        created_at:
          type: string
          format: date-time
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        La chiave API della tua applicazione, da Developers -> API keys nella
        Business Console. La chiave primaria ha accesso completo. Una chiave con
        nome può avere un ambito definito: nessuno, lettura o scrittura per
        risorsa, limitata ad alcuni workflow o a sessioni approvate, a un elenco
        di indirizzi IP e a una data di scadenza. 401 indica che la chiave è
        errata, revocata o scaduta; 403 indica che non è stata inviata alcuna
        chiave, che la chiave non ha accesso a questa risorsa o azione, oppure
        che la richiesta proviene da un indirizzo non incluso nel suo elenco IP;
        404 su una route di sessione indica che la sessione non rientra nei
        workflow o negli stati previsti dalla chiave. Una chiave senza accesso
        ai media riceve gli URL di immagini, video e PDF come null, e una chiave
        senza permessi di scrittura sulle sessioni riceve link e token di
        sessione come null. Consulta https://docs.didit.me/console/api-keys.

````

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