curl -X POST https://verification.didit.me/v3/travel-rule/inbound/ \
-H 'x-api-key: YOUR_API_KEY' -H 'Content-Type: application/json' \
-d '{"chain":"ethereum","txid":"0xdeposit-hash","wallet_address":"0xYourDepositWallet","amount":"500.00","currency":"USDC"}'import requests
url = "https://verification.didit.me/v3/travel-rule/inbound/"
payload = {
"chain": "ethereum",
"txid": "0xdeposit-hash",
"wallet_address": "0xYourDepositWallet",
"amount": "500.00",
"currency": "USDC",
"originator_data": { "name": "Origin CASP SL" },
"beneficiary_data": { "name": "Ana Diaz" },
"originating_vasp": {
"name": "Origin CASP SL",
"lei": "",
"travel_address": "ta..."
}
}
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({
chain: 'ethereum',
txid: '0xdeposit-hash',
wallet_address: '0xYourDepositWallet',
amount: '500.00',
currency: 'USDC',
originator_data: {name: 'Origin CASP SL'},
beneficiary_data: {name: 'Ana Diaz'},
originating_vasp: {name: 'Origin CASP SL', lei: '', travel_address: 'ta...'}
})
};
fetch('https://verification.didit.me/v3/travel-rule/inbound/', 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/travel-rule/inbound/",
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([
'chain' => 'ethereum',
'txid' => '0xdeposit-hash',
'wallet_address' => '0xYourDepositWallet',
'amount' => '500.00',
'currency' => 'USDC',
'originator_data' => [
'name' => 'Origin CASP SL'
],
'beneficiary_data' => [
'name' => 'Ana Diaz'
],
'originating_vasp' => [
'name' => 'Origin CASP SL',
'lei' => '',
'travel_address' => 'ta...'
]
]),
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/travel-rule/inbound/"
payload := strings.NewReader("{\n \"chain\": \"ethereum\",\n \"txid\": \"0xdeposit-hash\",\n \"wallet_address\": \"0xYourDepositWallet\",\n \"amount\": \"500.00\",\n \"currency\": \"USDC\",\n \"originator_data\": {\n \"name\": \"Origin CASP SL\"\n },\n \"beneficiary_data\": {\n \"name\": \"Ana Diaz\"\n },\n \"originating_vasp\": {\n \"name\": \"Origin CASP SL\",\n \"lei\": \"\",\n \"travel_address\": \"ta...\"\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/travel-rule/inbound/")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"chain\": \"ethereum\",\n \"txid\": \"0xdeposit-hash\",\n \"wallet_address\": \"0xYourDepositWallet\",\n \"amount\": \"500.00\",\n \"currency\": \"USDC\",\n \"originator_data\": {\n \"name\": \"Origin CASP SL\"\n },\n \"beneficiary_data\": {\n \"name\": \"Ana Diaz\"\n },\n \"originating_vasp\": {\n \"name\": \"Origin CASP SL\",\n \"lei\": \"\",\n \"travel_address\": \"ta...\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://verification.didit.me/v3/travel-rule/inbound/")
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 \"chain\": \"ethereum\",\n \"txid\": \"0xdeposit-hash\",\n \"wallet_address\": \"0xYourDepositWallet\",\n \"amount\": \"500.00\",\n \"currency\": \"USDC\",\n \"originator_data\": {\n \"name\": \"Origin CASP SL\"\n },\n \"beneficiary_data\": {\n \"name\": \"Ana Diaz\"\n },\n \"originating_vasp\": {\n \"name\": \"Origin CASP SL\",\n \"lei\": \"\",\n \"travel_address\": \"ta...\"\n }\n}"
response = http.request(request)
puts response.read_body{
"transaction_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"txn_id": "<string>",
"created": true,
"travel_rule": {
"uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "AWAITING_COUNTERPARTY",
"direction": "INBOUND",
"rail": "INTERNAL",
"protocol": "<string>",
"ivms_version": "ivms101.2023",
"required": true,
"ownership_confirmed": true,
"deadline_at": "2023-11-07T05:31:56Z",
"timeline": [
{
"status": "<string>",
"at": "2023-11-07T05:31:56Z",
"detail": "<string>"
}
],
"counterparty_vasp": {
"name": "<string>",
"lei": "<string>",
"dd_score": 123
},
"originator_data": {},
"beneficiary_data": {},
"created_at": "2023-11-07T05:31:56Z"
}
}{
"transaction_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"txn_id": "<string>",
"created": true,
"travel_rule": {
"uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "AWAITING_COUNTERPARTY",
"direction": "INBOUND",
"rail": "INTERNAL",
"protocol": "<string>",
"ivms_version": "ivms101.2023",
"required": true,
"ownership_confirmed": true,
"deadline_at": "2023-11-07T05:31:56Z",
"timeline": [
{
"status": "<string>",
"at": "2023-11-07T05:31:56Z",
"detail": "<string>"
}
],
"counterparty_vasp": {
"name": "<string>",
"lei": "<string>",
"dd_score": 123
},
"originator_data": {},
"beneficiary_data": {},
"created_at": "2023-11-07T05:31:56Z"
}
}Register Inbound (Sunrise) Transfer
Register Travel Rule data for a crypto deposit that already settled on-chain before any exchange took place. Creates an inbound travelRule transaction (or reuses an unclaimed deposit) and resolves the transfer against your wallet address book. A transaction.created webhook fires for newly-created transactions.
curl -X POST https://verification.didit.me/v3/travel-rule/inbound/ \
-H 'x-api-key: YOUR_API_KEY' -H 'Content-Type: application/json' \
-d '{"chain":"ethereum","txid":"0xdeposit-hash","wallet_address":"0xYourDepositWallet","amount":"500.00","currency":"USDC"}'import requests
url = "https://verification.didit.me/v3/travel-rule/inbound/"
payload = {
"chain": "ethereum",
"txid": "0xdeposit-hash",
"wallet_address": "0xYourDepositWallet",
"amount": "500.00",
"currency": "USDC",
"originator_data": { "name": "Origin CASP SL" },
"beneficiary_data": { "name": "Ana Diaz" },
"originating_vasp": {
"name": "Origin CASP SL",
"lei": "",
"travel_address": "ta..."
}
}
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({
chain: 'ethereum',
txid: '0xdeposit-hash',
wallet_address: '0xYourDepositWallet',
amount: '500.00',
currency: 'USDC',
originator_data: {name: 'Origin CASP SL'},
beneficiary_data: {name: 'Ana Diaz'},
originating_vasp: {name: 'Origin CASP SL', lei: '', travel_address: 'ta...'}
})
};
fetch('https://verification.didit.me/v3/travel-rule/inbound/', 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/travel-rule/inbound/",
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([
'chain' => 'ethereum',
'txid' => '0xdeposit-hash',
'wallet_address' => '0xYourDepositWallet',
'amount' => '500.00',
'currency' => 'USDC',
'originator_data' => [
'name' => 'Origin CASP SL'
],
'beneficiary_data' => [
'name' => 'Ana Diaz'
],
'originating_vasp' => [
'name' => 'Origin CASP SL',
'lei' => '',
'travel_address' => 'ta...'
]
]),
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/travel-rule/inbound/"
payload := strings.NewReader("{\n \"chain\": \"ethereum\",\n \"txid\": \"0xdeposit-hash\",\n \"wallet_address\": \"0xYourDepositWallet\",\n \"amount\": \"500.00\",\n \"currency\": \"USDC\",\n \"originator_data\": {\n \"name\": \"Origin CASP SL\"\n },\n \"beneficiary_data\": {\n \"name\": \"Ana Diaz\"\n },\n \"originating_vasp\": {\n \"name\": \"Origin CASP SL\",\n \"lei\": \"\",\n \"travel_address\": \"ta...\"\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/travel-rule/inbound/")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"chain\": \"ethereum\",\n \"txid\": \"0xdeposit-hash\",\n \"wallet_address\": \"0xYourDepositWallet\",\n \"amount\": \"500.00\",\n \"currency\": \"USDC\",\n \"originator_data\": {\n \"name\": \"Origin CASP SL\"\n },\n \"beneficiary_data\": {\n \"name\": \"Ana Diaz\"\n },\n \"originating_vasp\": {\n \"name\": \"Origin CASP SL\",\n \"lei\": \"\",\n \"travel_address\": \"ta...\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://verification.didit.me/v3/travel-rule/inbound/")
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 \"chain\": \"ethereum\",\n \"txid\": \"0xdeposit-hash\",\n \"wallet_address\": \"0xYourDepositWallet\",\n \"amount\": \"500.00\",\n \"currency\": \"USDC\",\n \"originator_data\": {\n \"name\": \"Origin CASP SL\"\n },\n \"beneficiary_data\": {\n \"name\": \"Ana Diaz\"\n },\n \"originating_vasp\": {\n \"name\": \"Origin CASP SL\",\n \"lei\": \"\",\n \"travel_address\": \"ta...\"\n }\n}"
response = http.request(request)
puts response.read_body{
"transaction_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"txn_id": "<string>",
"created": true,
"travel_rule": {
"uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "AWAITING_COUNTERPARTY",
"direction": "INBOUND",
"rail": "INTERNAL",
"protocol": "<string>",
"ivms_version": "ivms101.2023",
"required": true,
"ownership_confirmed": true,
"deadline_at": "2023-11-07T05:31:56Z",
"timeline": [
{
"status": "<string>",
"at": "2023-11-07T05:31:56Z",
"detail": "<string>"
}
],
"counterparty_vasp": {
"name": "<string>",
"lei": "<string>",
"dd_score": 123
},
"originator_data": {},
"beneficiary_data": {},
"created_at": "2023-11-07T05:31:56Z"
}
}{
"transaction_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"txn_id": "<string>",
"created": true,
"travel_rule": {
"uuid": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "AWAITING_COUNTERPARTY",
"direction": "INBOUND",
"rail": "INTERNAL",
"protocol": "<string>",
"ivms_version": "ivms101.2023",
"required": true,
"ownership_confirmed": true,
"deadline_at": "2023-11-07T05:31:56Z",
"timeline": [
{
"status": "<string>",
"at": "2023-11-07T05:31:56Z",
"detail": "<string>"
}
],
"counterparty_vasp": {
"name": "<string>",
"lei": "<string>",
"dd_score": 123
},
"originator_data": {},
"beneficiary_data": {},
"created_at": "2023-11-07T05:31:56Z"
}
}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.
Body
Chain the deposit settled on, e.g. "ethereum".
On-chain transaction hash. Deduped together with wallet_address.
The destination wallet you received the deposit on.
Deposit amount as a decimal string.
Deposit asset, e.g. "USDC".
IVMS-101 originator payload from the sending VASP, if known.
IVMS-101 beneficiary payload (your customer).
Optional description of the sending VASP.
Show child attributes
Show child attributes
Response
An existing unclaimed deposit was reused (created is false).
Didit transaction UUID for the inbound deposit.
Didit-generated txn_id for the sunrise transaction.
true when a new transaction was minted (HTTP 201); false when an existing unclaimed deposit was reused (HTTP 200).
Full transfer object returned by the ownership-confirmation and finish/cancel endpoints. originator_data/beneficiary_data are omitted while PII is masked (see description).
Show child attributes
Show child attributes