curl --request POST \
--url https://api.cdp.coinbase.com/platform/v2/transfers/{transferId}/travel-rule \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"isSelf": false,
"originator": {
"name": "John Doe",
"address": {
"line1": "123 Main St",
"city": "San Francisco",
"state": "CA",
"postCode": "94105",
"countryCode": "US"
},
"virtualAssetServiceProvider": {
"identifier": "5493001KJTIIGC8Y1R17",
"name": "Fidelity Digital Asset Services, LLC"
},
"personalId": "123-45-6789",
"dateOfBirth": {
"day": "15",
"month": "08",
"year": "1990"
},
"walletType": "custodial"
},
"beneficiary": {
"name": "Jane Smith"
}
}
'import requests
url = "https://api.cdp.coinbase.com/platform/v2/transfers/{transferId}/travel-rule"
payload = {
"isSelf": False,
"originator": {
"name": "John Doe",
"address": {
"line1": "123 Main St",
"city": "San Francisco",
"state": "CA",
"postCode": "94105",
"countryCode": "US"
},
"virtualAssetServiceProvider": {
"identifier": "5493001KJTIIGC8Y1R17",
"name": "Fidelity Digital Asset Services, LLC"
},
"personalId": "123-45-6789",
"dateOfBirth": {
"day": "15",
"month": "08",
"year": "1990"
},
"walletType": "custodial"
},
"beneficiary": { "name": "Jane Smith" }
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
isSelf: false,
originator: {
name: 'John Doe',
address: {
line1: '123 Main St',
city: 'San Francisco',
state: 'CA',
postCode: '94105',
countryCode: 'US'
},
virtualAssetServiceProvider: {
identifier: '5493001KJTIIGC8Y1R17',
name: 'Fidelity Digital Asset Services, LLC'
},
personalId: '123-45-6789',
dateOfBirth: {day: '15', month: '08', year: '1990'},
walletType: 'custodial'
},
beneficiary: {name: 'Jane Smith'}
})
};
fetch('https://api.cdp.coinbase.com/platform/v2/transfers/{transferId}/travel-rule', 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://api.cdp.coinbase.com/platform/v2/transfers/{transferId}/travel-rule",
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([
'isSelf' => false,
'originator' => [
'name' => 'John Doe',
'address' => [
'line1' => '123 Main St',
'city' => 'San Francisco',
'state' => 'CA',
'postCode' => '94105',
'countryCode' => 'US'
],
'virtualAssetServiceProvider' => [
'identifier' => '5493001KJTIIGC8Y1R17',
'name' => 'Fidelity Digital Asset Services, LLC'
],
'personalId' => '123-45-6789',
'dateOfBirth' => [
'day' => '15',
'month' => '08',
'year' => '1990'
],
'walletType' => 'custodial'
],
'beneficiary' => [
'name' => 'Jane Smith'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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://api.cdp.coinbase.com/platform/v2/transfers/{transferId}/travel-rule"
payload := strings.NewReader("{\n \"isSelf\": false,\n \"originator\": {\n \"name\": \"John Doe\",\n \"address\": {\n \"line1\": \"123 Main St\",\n \"city\": \"San Francisco\",\n \"state\": \"CA\",\n \"postCode\": \"94105\",\n \"countryCode\": \"US\"\n },\n \"virtualAssetServiceProvider\": {\n \"identifier\": \"5493001KJTIIGC8Y1R17\",\n \"name\": \"Fidelity Digital Asset Services, LLC\"\n },\n \"personalId\": \"123-45-6789\",\n \"dateOfBirth\": {\n \"day\": \"15\",\n \"month\": \"08\",\n \"year\": \"1990\"\n },\n \"walletType\": \"custodial\"\n },\n \"beneficiary\": {\n \"name\": \"Jane Smith\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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://api.cdp.coinbase.com/platform/v2/transfers/{transferId}/travel-rule")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"isSelf\": false,\n \"originator\": {\n \"name\": \"John Doe\",\n \"address\": {\n \"line1\": \"123 Main St\",\n \"city\": \"San Francisco\",\n \"state\": \"CA\",\n \"postCode\": \"94105\",\n \"countryCode\": \"US\"\n },\n \"virtualAssetServiceProvider\": {\n \"identifier\": \"5493001KJTIIGC8Y1R17\",\n \"name\": \"Fidelity Digital Asset Services, LLC\"\n },\n \"personalId\": \"123-45-6789\",\n \"dateOfBirth\": {\n \"day\": \"15\",\n \"month\": \"08\",\n \"year\": \"1990\"\n },\n \"walletType\": \"custodial\"\n },\n \"beneficiary\": {\n \"name\": \"Jane Smith\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cdp.coinbase.com/platform/v2/transfers/{transferId}/travel-rule")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"isSelf\": false,\n \"originator\": {\n \"name\": \"John Doe\",\n \"address\": {\n \"line1\": \"123 Main St\",\n \"city\": \"San Francisco\",\n \"state\": \"CA\",\n \"postCode\": \"94105\",\n \"countryCode\": \"US\"\n },\n \"virtualAssetServiceProvider\": {\n \"identifier\": \"5493001KJTIIGC8Y1R17\",\n \"name\": \"Fidelity Digital Asset Services, LLC\"\n },\n \"personalId\": \"123-45-6789\",\n \"dateOfBirth\": {\n \"day\": \"15\",\n \"month\": \"08\",\n \"year\": \"1990\"\n },\n \"walletType\": \"custodial\"\n },\n \"beneficiary\": {\n \"name\": \"Jane Smith\"\n }\n}"
response = http.request(request)
puts response.read_bodySubmit deposit travel rule information
Submit travel rule information for a deposit transfer held pending compliance review.
Required fields vary by jurisdiction and may include originator name, address, date of birth, personal ID, and VASP information.
If the submitted information satisfies all jurisdictional requirements, status will be completed and the transfer will proceed. Otherwise, status will be incomplete and missingFields will indicate which fields still need to be provided.
curl --request POST \
--url https://api.cdp.coinbase.com/platform/v2/transfers/{transferId}/travel-rule \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"isSelf": false,
"originator": {
"name": "John Doe",
"address": {
"line1": "123 Main St",
"city": "San Francisco",
"state": "CA",
"postCode": "94105",
"countryCode": "US"
},
"virtualAssetServiceProvider": {
"identifier": "5493001KJTIIGC8Y1R17",
"name": "Fidelity Digital Asset Services, LLC"
},
"personalId": "123-45-6789",
"dateOfBirth": {
"day": "15",
"month": "08",
"year": "1990"
},
"walletType": "custodial"
},
"beneficiary": {
"name": "Jane Smith"
}
}
'import requests
url = "https://api.cdp.coinbase.com/platform/v2/transfers/{transferId}/travel-rule"
payload = {
"isSelf": False,
"originator": {
"name": "John Doe",
"address": {
"line1": "123 Main St",
"city": "San Francisco",
"state": "CA",
"postCode": "94105",
"countryCode": "US"
},
"virtualAssetServiceProvider": {
"identifier": "5493001KJTIIGC8Y1R17",
"name": "Fidelity Digital Asset Services, LLC"
},
"personalId": "123-45-6789",
"dateOfBirth": {
"day": "15",
"month": "08",
"year": "1990"
},
"walletType": "custodial"
},
"beneficiary": { "name": "Jane Smith" }
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
isSelf: false,
originator: {
name: 'John Doe',
address: {
line1: '123 Main St',
city: 'San Francisco',
state: 'CA',
postCode: '94105',
countryCode: 'US'
},
virtualAssetServiceProvider: {
identifier: '5493001KJTIIGC8Y1R17',
name: 'Fidelity Digital Asset Services, LLC'
},
personalId: '123-45-6789',
dateOfBirth: {day: '15', month: '08', year: '1990'},
walletType: 'custodial'
},
beneficiary: {name: 'Jane Smith'}
})
};
fetch('https://api.cdp.coinbase.com/platform/v2/transfers/{transferId}/travel-rule', 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://api.cdp.coinbase.com/platform/v2/transfers/{transferId}/travel-rule",
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([
'isSelf' => false,
'originator' => [
'name' => 'John Doe',
'address' => [
'line1' => '123 Main St',
'city' => 'San Francisco',
'state' => 'CA',
'postCode' => '94105',
'countryCode' => 'US'
],
'virtualAssetServiceProvider' => [
'identifier' => '5493001KJTIIGC8Y1R17',
'name' => 'Fidelity Digital Asset Services, LLC'
],
'personalId' => '123-45-6789',
'dateOfBirth' => [
'day' => '15',
'month' => '08',
'year' => '1990'
],
'walletType' => 'custodial'
],
'beneficiary' => [
'name' => 'Jane Smith'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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://api.cdp.coinbase.com/platform/v2/transfers/{transferId}/travel-rule"
payload := strings.NewReader("{\n \"isSelf\": false,\n \"originator\": {\n \"name\": \"John Doe\",\n \"address\": {\n \"line1\": \"123 Main St\",\n \"city\": \"San Francisco\",\n \"state\": \"CA\",\n \"postCode\": \"94105\",\n \"countryCode\": \"US\"\n },\n \"virtualAssetServiceProvider\": {\n \"identifier\": \"5493001KJTIIGC8Y1R17\",\n \"name\": \"Fidelity Digital Asset Services, LLC\"\n },\n \"personalId\": \"123-45-6789\",\n \"dateOfBirth\": {\n \"day\": \"15\",\n \"month\": \"08\",\n \"year\": \"1990\"\n },\n \"walletType\": \"custodial\"\n },\n \"beneficiary\": {\n \"name\": \"Jane Smith\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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://api.cdp.coinbase.com/platform/v2/transfers/{transferId}/travel-rule")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"isSelf\": false,\n \"originator\": {\n \"name\": \"John Doe\",\n \"address\": {\n \"line1\": \"123 Main St\",\n \"city\": \"San Francisco\",\n \"state\": \"CA\",\n \"postCode\": \"94105\",\n \"countryCode\": \"US\"\n },\n \"virtualAssetServiceProvider\": {\n \"identifier\": \"5493001KJTIIGC8Y1R17\",\n \"name\": \"Fidelity Digital Asset Services, LLC\"\n },\n \"personalId\": \"123-45-6789\",\n \"dateOfBirth\": {\n \"day\": \"15\",\n \"month\": \"08\",\n \"year\": \"1990\"\n },\n \"walletType\": \"custodial\"\n },\n \"beneficiary\": {\n \"name\": \"Jane Smith\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cdp.coinbase.com/platform/v2/transfers/{transferId}/travel-rule")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"isSelf\": false,\n \"originator\": {\n \"name\": \"John Doe\",\n \"address\": {\n \"line1\": \"123 Main St\",\n \"city\": \"San Francisco\",\n \"state\": \"CA\",\n \"postCode\": \"94105\",\n \"countryCode\": \"US\"\n },\n \"virtualAssetServiceProvider\": {\n \"identifier\": \"5493001KJTIIGC8Y1R17\",\n \"name\": \"Fidelity Digital Asset Services, LLC\"\n },\n \"personalId\": \"123-45-6789\",\n \"dateOfBirth\": {\n \"day\": \"15\",\n \"month\": \"08\",\n \"year\": \"1990\"\n },\n \"walletType\": \"custodial\"\n },\n \"beneficiary\": {\n \"name\": \"Jane Smith\"\n }\n}"
response = http.request(request)
puts response.read_bodyAuthorizations
A JWT signed using your CDP API Key Secret, encoded in base64. Refer to the Generate Bearer Token section of our Authentication docs for information on how to generate your Bearer Token.
Headers
An optional string request header for making requests safely retryable. When included, duplicate requests with the same key will return identical responses. Refer to our Idempotency docs for more information on using idempotency keys.
1 - 128Path Parameters
The unique identifier of the transfer.
^transfer_[a-f0-9\-]{36}$"transfer_af2937b0-9846-4fe7-bfe9-ccc22d935114"
Body
Request body for submitting travel rule information for a deposit transfer. Required fields vary by jurisdiction.
Indicates whether the user attests that the originating wallet belongs to them.
false
Originator information for the travel rule submission.
Show child attributes
Show child attributes
{ "name": "John Doe", "address": { "line1": "123 Main St", "city": "San Francisco", "state": "CA", "postCode": "94105", "countryCode": "US" }, "virtualAssetServiceProvider": { "identifier": "5493001KJTIIGC8Y1R17", "name": "Fidelity Digital Asset Services, LLC" }, "personalId": "123-45-6789", "dateOfBirth": { "day": "15", "month": "08", "year": "1990" }, "walletType": "custodial" }
Beneficiary information for the travel rule submission.
Show child attributes
Show child attributes
{ "name": "Jane Smith" }
Response
Successfully submitted travel rule information.
Response from submitting travel rule information for a deposit transfer.
The status of a travel rule submission.
incomplete, completed "incomplete"
List of field paths that are still required to complete travel rule compliance. Each entry is a dot-separated path (e.g., "originator.name", "originator.address.countryCode"). Empty when status is "completed".
["originator.address.countryCode"]
Additional context about the current status. Present when status is incomplete to explain what needs to be fixed before the transfer can proceed.
"Originator date of birth is required."
Was this page helpful?