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"]}'import requests
url = "https://verification.didit.me/v3/transactions/{transaction_id}/travel-rule/messages/"
payload = {
"kind": "DOCUMENT_REQUEST",
"body": "Please confirm the date of birth of the beneficiary.",
"requested_documents": ["Proof of address"]
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
kind: 'DOCUMENT_REQUEST',
body: JSON.stringify('Please confirm the date of birth of the beneficiary.'),
requested_documents: ['Proof of address']
})
};
fetch('https://verification.didit.me/v3/transactions/{transaction_id}/travel-rule/messages/', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://verification.didit.me/v3/transactions/{transaction_id}/travel-rule/messages/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'kind' => 'DOCUMENT_REQUEST',
'body' => 'Please confirm the date of birth of the beneficiary.',
'requested_documents' => [
'Proof of address'
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://verification.didit.me/v3/transactions/{transaction_id}/travel-rule/messages/"
payload := strings.NewReader("{\n \"kind\": \"DOCUMENT_REQUEST\",\n \"body\": \"Please confirm the date of birth of the beneficiary.\",\n \"requested_documents\": [\n \"Proof of address\"\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://verification.didit.me/v3/transactions/{transaction_id}/travel-rule/messages/")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"kind\": \"DOCUMENT_REQUEST\",\n \"body\": \"Please confirm the date of birth of the beneficiary.\",\n \"requested_documents\": [\n \"Proof of address\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://verification.didit.me/v3/transactions/{transaction_id}/travel-rule/messages/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"kind\": \"DOCUMENT_REQUEST\",\n \"body\": \"Please confirm the date of birth of the beneficiary.\",\n \"requested_documents\": [\n \"Proof of address\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"kind": "MESSAGE",
"direction": "INBOUND",
"author": "<string>",
"body": "<string>",
"requested_documents": [
"<string>"
],
"reply_to": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"fulfilled_at": "2023-11-07T05:31:56Z",
"attachment": {
"uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"label": "<string>",
"note": "<string>",
"uploaded_by": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"files": [
{
"uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"file_url": "<string>",
"original_filename": "<string>",
"file_size": 123
}
]
},
"created_at": "2023-11-07T05:31:56Z"
}{
"requested_documents": [
"Name at least one document the counterparty should send."
]
}{
"detail": "<string>"
}Send a Travel Rule Message
Sends a message or a document request to the counterparty VASP. Works on INTERNAL transfers (the other Didit customer sees it on its side of the pair) and EMAIL transfers (the counterparty is emailed and answers in the pickup portal). A transfer over TRP, GTR, TRUST, VerifyVASP or Sygna carries no messages, because those protocols have none. Limits: 100 messages per transfer, 5000 characters per body, 10 requested documents, 5 files of 10 MB each.
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"]}'import requests
url = "https://verification.didit.me/v3/transactions/{transaction_id}/travel-rule/messages/"
payload = {
"kind": "DOCUMENT_REQUEST",
"body": "Please confirm the date of birth of the beneficiary.",
"requested_documents": ["Proof of address"]
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
kind: 'DOCUMENT_REQUEST',
body: JSON.stringify('Please confirm the date of birth of the beneficiary.'),
requested_documents: ['Proof of address']
})
};
fetch('https://verification.didit.me/v3/transactions/{transaction_id}/travel-rule/messages/', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://verification.didit.me/v3/transactions/{transaction_id}/travel-rule/messages/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'kind' => 'DOCUMENT_REQUEST',
'body' => 'Please confirm the date of birth of the beneficiary.',
'requested_documents' => [
'Proof of address'
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://verification.didit.me/v3/transactions/{transaction_id}/travel-rule/messages/"
payload := strings.NewReader("{\n \"kind\": \"DOCUMENT_REQUEST\",\n \"body\": \"Please confirm the date of birth of the beneficiary.\",\n \"requested_documents\": [\n \"Proof of address\"\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://verification.didit.me/v3/transactions/{transaction_id}/travel-rule/messages/")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"kind\": \"DOCUMENT_REQUEST\",\n \"body\": \"Please confirm the date of birth of the beneficiary.\",\n \"requested_documents\": [\n \"Proof of address\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://verification.didit.me/v3/transactions/{transaction_id}/travel-rule/messages/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"kind\": \"DOCUMENT_REQUEST\",\n \"body\": \"Please confirm the date of birth of the beneficiary.\",\n \"requested_documents\": [\n \"Proof of address\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"kind": "MESSAGE",
"direction": "INBOUND",
"author": "<string>",
"body": "<string>",
"requested_documents": [
"<string>"
],
"reply_to": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"fulfilled_at": "2023-11-07T05:31:56Z",
"attachment": {
"uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"label": "<string>",
"note": "<string>",
"uploaded_by": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"files": [
{
"uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"file_url": "<string>",
"original_filename": "<string>",
"file_size": 123
}
]
},
"created_at": "2023-11-07T05:31:56Z"
}{
"requested_documents": [
"Name at least one document the counterparty should send."
]
}{
"detail": "<string>"
}Authorizations
Your application's API key, from Developers -> API keys in the Business Console. The primary key has full access. A named key can be scoped: none, read or write per resource, limited to some workflows or to approved sessions, to a list of IP addresses, and to an expiry date. 401 means the key is missing, wrong, revoked or expired; 403 means the key has no access to this resource or action, or the request came from an address outside its IP list; 404 on a session route means the session is outside the key's workflows or statuses. A key without media access receives image, video and PDF URLs as null, and a key without sessions write receives session links and tokens as null. See https://docs.didit.me/console/api-keys.
Path Parameters
Didit-stable transaction UUID that owns the transfer.
Body
Send as JSON, or as multipart/form-data with the attachments in files.
MESSAGE, DOCUMENT_REQUEST Required for a MESSAGE unless a file is attached.
5000Required (at least one) for a DOCUMENT_REQUEST, and only allowed there.
10255A message of the same transfer. A reply that carries a document fulfils the document request it answers.
Multipart only. Up to 5 files of 10 MB each.
5Response
The stored message.
MESSAGE, DOCUMENT_REQUEST OUTBOUND is what the reader's own side sent. In the pickup portal the direction is from the counterparty's side.
INBOUND, OUTBOUND Who wrote it on its own side: a console user's email or an API key label, or the other VASP's name.
What a DOCUMENT_REQUEST asks for, in the requester's words.
Set on a DOCUMENT_REQUEST once a reply to it carries a document.
The document attached to a message, stored like any other transaction document.
Show child attributes
Show child attributes