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

# Отправка сообщения Travel Rule через API

> Отправьте сообщение или запрос документов контрагенту VASP в переводе Travel Rule через API Didit, с вложениями при необходимости.



Промпт: отправка сообщения Travel Rule через API
        Скопировать промпт в буфер обмена



      
      

\<pre>

\`Send a message or a document request to the counterparty VASP of a Travel Rule transfer, so a disputed transfer is resolved inside Didit.

Endpoint:
POST https://verification.didit.me/v3/transactions/{transaction_id}/travel-rule/messages/

Authentication:
Use the x-api-key header with my Didit API key. {transaction_id} is the Didit transaction uuid on my application.

Request body (JSON, or multipart/form-data when attaching files):
\- kind - MESSAGE (default) or DOCUMENT_REQUEST.
\- body - up to 5000 characters. A MESSAGE needs a body or a file.
\- requested_documents - up to 10 names. A DOCUMENT_REQUEST needs at least one; a MESSAGE must not have any.
\- reply_to - uuid of an earlier message of the same transfer. A reply carrying a document fulfils the request it answers.
\- files - multipart only, up to 5 files of 10 MB each.

Example call:
curl -X POST "https://verification.didit.me/v3/transactions/{transaction_id}/travel-rule/messages/" \
-H "x-api-key: YOUR_API_KEY" -H "Content-Type: application/json" \
-d '{"kind": "DOCUMENT_REQUEST", "body": "Please confirm the beneficiary date of birth.", "requested_documents": ["Proof of address"]}'

Behavior:
\- Works on INTERNAL transfers (the other Didit customer sees it on its side) and EMAIL transfers (the counterparty is emailed and answers in the pickup portal).
\- A transfer holds up to 100 messages.

Failure modes:
\- 400 - invalid body, file rejected, 100 messages reached, or reply_to is not a message of this transfer.
\- 404 - unknown transaction, or no Travel Rule transfer on it.
\- 409 - no message can reach the counterparty; detail gives the reason: a network rail (TRP, GTR, TRUST, VerifyVASP, Sygna) carries no messages, no counterparty yet, an INTERNAL transfer whose data did not match the wallet holder, an INTERNAL transfer whose recipient has not proved control of the wallet yet, an EMAIL transfer whose counterparty no longer has a compliance email address, or an EMAIL transfer whose pickup link expired or whose transfer is closed.

Full guide: /transaction-monitoring/travel-rule#messages-and-document-requests.`

\</pre>



      
      

Вставьте в



## OpenAPI

````yaml ru/openapi-25.json POST /v3/transactions/{transaction_id}/travel-rule/messages/
openapi: 3.0.0
info:
  version: 3.0.0
  title: Didit Verification API
  description: >-
    API верификации личности. Аутентификация выполняется с помощью заголовка
    x-api-key.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/transactions/{transaction_id}/travel-rule/messages/:
    post:
      tags:
        - Travel Rule
      summary: Отправить сообщение Travel Rule или запрос документов
      description: >-
        Отправляет сообщение или запрос документов контрагенту VASP. Работает
        для переводов типа INTERNAL (другой клиент Didit видит его на своей
        стороне пары) и переводов EMAIL (контрагенту отправляется электронное
        письмо, и он отвечает на портале получения). Перевод через TRP, GTR,
        TRUST, VerifyVASP или Sygna не содержит сообщений, поскольку в этих
        протоколах они не предусмотрены. Лимиты: 100 сообщений на перевод, 5000
        символов в теле сообщения, 10 запрашиваемых документов, 5 файлов по 10
        МБ каждый.
      operationId: createTravelRuleMessage
      parameters:
        - name: transaction_id
          in: path
          required: true
          description: Стабильный UUID транзакции Didit, которой принадлежит перевод.
          schema:
            type: string
            format: uuid
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TravelRuleMessageCreateRequest'
            example:
              kind: DOCUMENT_REQUEST
              body: Please confirm the date of birth of the beneficiary.
              requested_documents:
                - Proof of address
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/TravelRuleMessageCreateRequest'
      responses:
        '201':
          description: Сохранённое сообщение.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TravelRuleMessage'
        '400':
          description: >-
            Недопустимое тело запроса, неподдерживаемый тип или размер файла,
            более 100 сообщений в переводе или `reply_to`, не являющийся
            сообщением этого перевода.
          content:
            application/json:
              schema:
                type: object
              example:
                requested_documents:
                  - Name at least one document the counterparty should send.
        '404':
          description: >-
            Неизвестная транзакция или token, либо по транзакции отсутствует
            перевод Travel Rule.
        '409':
          description: >-
            Сообщение не может быть доставлено контрагенту. В `detail` указана
            причина: перевод выполняется через сетевой протокол (TRP, GTR,
            TRUST, VerifyVASP или Sygna), у него еще нет контрагента, данные
            перевода INTERNAL не совпали с владельцем кошелька, поэтому
            получателю ничего не поступило, либо ссылка для получения перевода
            EMAIL истекла или перевод закрыт.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: curl
          label: curl
          source: >-
            curl -X POST
            https://verification.didit.me/v3/transactions/{transaction_id}/travel-rule/messages/
            \
              -H 'x-api-key: YOUR_API_KEY' -H 'Content-Type: application/json' \
              -d '{"kind": "DOCUMENT_REQUEST", "body": "Please confirm the date of birth of the beneficiary.", "requested_documents": ["Proof of address"]}'
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            result = client.transactions.travel_rule.create_message(
                "11111111-2222-3333-4444-555555555555",
                kind="DOCUMENT_REQUEST",
                body="Please confirm the date of birth of the beneficiary.",
                requested_documents=["Proof of address"],
            )
            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.transactions.travelRule.createMessage("11111111-2222-3333-4444-555555555555",
            {
              kind: "DOCUMENT_REQUEST",
              body: "Please confirm the date of birth of the beneficiary.",
              requested_documents: ["Proof of address"],
            });

            console.log(result);
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Transactions.TravelRule.CreateMessage(ctx, \"11111111-2222-3333-4444-555555555555\", didit.TravelRuleMessageCreateRequest{\n\tKind:               didit.Some(didit.TravelRuleMessageCreateRequestKind(\"DOCUMENT_REQUEST\")),\n\tBody:               didit.String(\"Please confirm the date of birth of the beneficiary.\"),\n\tRequestedDocuments: didit.Some([]string{\"Proof of address\"}),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
        - lang: java
          label: Java
          source: >-
            import java.util.List;

            import me.didit.Didit;

            import me.didit.types.TravelRuleMessageCreateRequest;


            // Reads DIDIT_API_KEY.

            Didit client = new Didit();


            var result =
            client.transactions().travelRule().createMessage("11111111-2222-3333-4444-555555555555",
            TravelRuleMessageCreateRequest.builder()
                    .kind(TravelRuleMessageCreateRequest.Kind.of("DOCUMENT_REQUEST"))
                    .body("Please confirm the date of birth of the beneficiary.")
                    .requestedDocuments(List.of("Proof of address"))
                    .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->transactions->travelRule->createMessage('11111111-2222-3333-4444-555555555555',
            [
                'kind' => 'DOCUMENT_REQUEST',
                'body' => 'Please confirm the date of birth of the beneficiary.',
                'requested_documents' => ['Proof of address'],
            ]);

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

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

            result = didit.transactions.travel_rule.create_message(
              "11111111-2222-3333-4444-555555555555",
              kind: "DOCUMENT_REQUEST",
              body: "Please confirm the date of birth of the beneficiary.",
              requested_documents: ["Proof of address"]
            )
            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.Transactions.TravelRule.CreateMessageAsync("11111111-2222-3333-4444-555555555555",
            new TravelRuleMessageCreateRequest

            {
                Kind = new TravelRuleMessageCreateRequestKind("DOCUMENT_REQUEST"),
                Body = "Please confirm the date of birth of the beneficiary.",
                RequestedDocuments = new string[] { "Proof of address" },
            });

            Console.WriteLine(JsonSerializer.Serialize(result));
components:
  schemas:
    TravelRuleMessageCreateRequest:
      type: object
      description: >-
        Отправьте в формате JSON или как multipart/form-data со вложениями в
        `files`.
      properties:
        kind:
          type: string
          enum:
            - MESSAGE
            - DOCUMENT_REQUEST
          default: MESSAGE
        body:
          type: string
          maxLength: 5000
          description: Обязательно для MESSAGE, если не прикреплён файл.
        requested_documents:
          type: array
          items:
            type: string
            maxLength: 255
          maxItems: 10
          description: >-
            Обязательно (как минимум одно) для DOCUMENT_REQUEST и разрешено
            только там.
        reply_to:
          type: string
          format: uuid
          nullable: true
          description: >-
            Сообщение того же перевода. Ответ, содержащий документ,
            удовлетворяет запрос документа, на который отвечает.
        files:
          type: array
          items:
            type: string
            format: binary
          maxItems: 5
          description: Только multipart. До 5 файлов размером до 10 МБ каждый.
    TravelRuleMessage:
      type: object
      properties:
        id:
          type: string
          format: uuid
        kind:
          type: string
          enum:
            - MESSAGE
            - DOCUMENT_REQUEST
        direction:
          type: string
          enum:
            - INBOUND
            - OUTBOUND
          description: >-
            `OUTBOUND` означает то, что отправила сторона читателя. На портале
            получения направление указано со стороны контрагента.
        author:
          type: string
          description: >-
            Кто создал запись со своей стороны: email пользователя консоли,
            метка API-ключа или название другого VASP.
        body:
          type: string
        requested_documents:
          type: array
          items:
            type: string
          description: Что запрашивает DOCUMENT_REQUEST со слов автора запроса.
        reply_to:
          type: string
          format: uuid
          nullable: true
        fulfilled_at:
          type: string
          format: date-time
          nullable: true
          description: >-
            Устанавливается для DOCUMENT_REQUEST, как только ответ на него
            содержит документ.
        attachment:
          $ref: '#/components/schemas/TravelRuleMessageAttachment'
        created_at:
          type: string
          format: date-time
    TravelRuleMessageAttachment:
      type: object
      nullable: true
      description: >-
        Документ, прикреплённый к сообщению, хранящийся как любой другой
        документ транзакции.
      properties:
        uuid:
          type: string
          format: uuid
        label:
          type: string
          nullable: true
        note:
          type: string
          nullable: true
        uploaded_by:
          type: string
          nullable: true
          description: >-
            Кто прикрепил файл. На портале получения для отправленного вами
            файла отображается название вашего VASP, но ни в коем случае не
            пользователь или API-ключ, стоящие за ним.
        created_at:
          type: string
          format: date-time
        files:
          type: array
          items:
            type: object
            properties:
              uuid:
                type: string
                format: uuid
              file_url:
                type: string
                nullable: true
                description: URL для скачивания с ограниченным сроком действия.
              original_filename:
                type: string
              file_size:
                type: integer
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        API-ключ вашего приложения из раздела «Разработчикам» -> «API-ключи» в
        Business Console. Основной ключ имеет полный доступ. Именованный ключ
        может иметь ограниченную область действия: без доступа, чтение или
        запись для каждого ресурса, ограничение определенными сценариями или
        одобренными сессиями, списком IP-адресов и сроком действия. 401
        означает, что ключ неверен, отозван или его срок действия истек; 403
        означает, что ключ не был передан, у ключа нет доступа к этому ресурсу
        или действию, либо запрос поступил с адреса вне его списка IP-адресов;
        404 на маршруте сессии означает, что сессия не входит в сценарии или
        статусы ключа. Ключ без доступа к медиа получает URL изображений, видео
        и PDF как null, а ключ без прав на запись сессий получает ссылки на
        сессии и токены как null. См. https://docs.didit.me/console/api-keys.

````

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