curl -X POST https://verification.didit.me/v3/travel-rule/widget/{token}/proofs/ \
-H 'Content-Type: application/json' \
-d '{"method": "MESSAGE_SIGNING"}'import requests
url = "https://verification.didit.me/v3/travel-rule/widget/{token}/proofs/"
payload = {
"wallet_address": "<string>",
"chain": "<string>"
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({wallet_address: '<string>', chain: '<string>'})
};
fetch('https://verification.didit.me/v3/travel-rule/widget/{token}/proofs/', 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/widget/{token}/proofs/",
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([
'wallet_address' => '<string>',
'chain' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"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://verification.didit.me/v3/travel-rule/widget/{token}/proofs/"
payload := strings.NewReader("{\n \"wallet_address\": \"<string>\",\n \"chain\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
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/widget/{token}/proofs/")
.header("Content-Type", "application/json")
.body("{\n \"wallet_address\": \"<string>\",\n \"chain\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://verification.didit.me/v3/travel-rule/widget/{token}/proofs/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"wallet_address\": \"<string>\",\n \"chain\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"proof_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"method": "MESSAGE_SIGNING",
"status": "PENDING",
"wallet_address": "<string>",
"chain": "<string>",
"deposit_address": "<string>",
"expected_amount": "<string>",
"expires_at": "2023-11-07T05:31:56Z",
"challenge": "<string>",
"rejection_reason": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"attempts": 123,
"failure_reason": ""
}{
"proof_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"method": "MESSAGE_SIGNING",
"status": "PENDING",
"wallet_address": "<string>",
"chain": "<string>",
"deposit_address": "<string>",
"expected_amount": "<string>",
"expires_at": "2023-11-07T05:31:56Z",
"challenge": "<string>",
"rejection_reason": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"attempts": 123,
"failure_reason": ""
}{
"detail": "<string>",
"code": "",
"status": "PENDING",
"proof_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"method": "MESSAGE_SIGNING",
"max_attempts": 123,
"attempts_used": 123,
"attempts_remaining": 123
}{
"detail": "<string>",
"code": "",
"status": "PENDING",
"proof_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"method": "MESSAGE_SIGNING",
"max_attempts": 123,
"attempts_used": 123,
"attempts_remaining": 123
}API de preuve de propriété de portefeuille - Travel Rule
Avec Didit, démarrez une preuve de propriété de portefeuille depuis un token de session widget : signature, test Satoshi, capture ou déclaration.
curl -X POST https://verification.didit.me/v3/travel-rule/widget/{token}/proofs/ \
-H 'Content-Type: application/json' \
-d '{"method": "MESSAGE_SIGNING"}'import requests
url = "https://verification.didit.me/v3/travel-rule/widget/{token}/proofs/"
payload = {
"wallet_address": "<string>",
"chain": "<string>"
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({wallet_address: '<string>', chain: '<string>'})
};
fetch('https://verification.didit.me/v3/travel-rule/widget/{token}/proofs/', 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/widget/{token}/proofs/",
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([
'wallet_address' => '<string>',
'chain' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"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://verification.didit.me/v3/travel-rule/widget/{token}/proofs/"
payload := strings.NewReader("{\n \"wallet_address\": \"<string>\",\n \"chain\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
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/widget/{token}/proofs/")
.header("Content-Type", "application/json")
.body("{\n \"wallet_address\": \"<string>\",\n \"chain\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://verification.didit.me/v3/travel-rule/widget/{token}/proofs/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"wallet_address\": \"<string>\",\n \"chain\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"proof_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"method": "MESSAGE_SIGNING",
"status": "PENDING",
"wallet_address": "<string>",
"chain": "<string>",
"deposit_address": "<string>",
"expected_amount": "<string>",
"expires_at": "2023-11-07T05:31:56Z",
"challenge": "<string>",
"rejection_reason": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"attempts": 123,
"failure_reason": ""
}{
"proof_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"method": "MESSAGE_SIGNING",
"status": "PENDING",
"wallet_address": "<string>",
"chain": "<string>",
"deposit_address": "<string>",
"expected_amount": "<string>",
"expires_at": "2023-11-07T05:31:56Z",
"challenge": "<string>",
"rejection_reason": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"attempts": 123,
"failure_reason": ""
}{
"detail": "<string>",
"code": "",
"status": "PENDING",
"proof_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"method": "MESSAGE_SIGNING",
"max_attempts": 123,
"attempts_used": 123,
"attempts_remaining": 123
}{
"detail": "<string>",
"code": "",
"status": "PENDING",
"proof_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"method": "MESSAGE_SIGNING",
"max_attempts": 123,
"attempts_used": 123,
"attempts_remaining": 123
}Paramètres de chemin
Token de session opaque renvoyé lors de la création de la session du widget.
Corps
La méthode de preuve choisie par l'utilisateur final. Elle doit faire partie des allowed_methods du contexte.
MESSAGE_SIGNING, SATOSHI_TEST, SCREENSHOT, SELF_DECLARATION Prend par défaut le wallet_address de la session. Doit correspondre au portefeuille du transfert lorsque la session est liée à un transfert.
128Prend par défaut la blockchain de la session.
32Réponse
La preuve déjà ouverte pour cette méthode, reprise.
MESSAGE_SIGNING, SATOSHI_TEST, SCREENSHOT, SELF_DECLARATION PENDING : l'utilisateur final a choisi cette méthode et la preuve n'est pas encore tranchée. Une signature échouée ou un dépôt test non lisible ou non encore confirmé maintient la preuve PENDING avec un failure_reason, afin que l'utilisateur final puisse réessayer ; un dépôt SATOSHI_TEST soumis est revérifié automatiquement jusqu'à la clôture de sa fenêtre, et une SCREENSHOT soumise attend votre examen. VERIFIED : la propriété est prouvée. REJECTED : le dépôt test est véritablement incorrect (autre expéditeur, montant vers l'adresse de dépôt différent de celui attendu, antérieur au défi, ou transaction ayant déjà prouvé un autre portefeuille) ou votre réviseur a refusé la capture d'écran ; failure_reason indique la cause. Une preuve rejetée est définitive et consomme l'une des tentatives de la session. EXPIRED : la preuve ne peut plus être tranchée (sa fenêtre s'est fermée, l'utilisateur final a changé de méthode, la session du widget a expiré ou le titulaire du portefeuille a changé) ; failure_reason indique la cause.
PENDING, VERIFIED, REJECTED, EXPIRED Identifiant canonique de la blockchain de l'entrée du carnet d'adresses à laquelle la preuve se rapporte, par ex. ETH, BTC, SOL, TRX.
Adresse de dépôt à laquelle le client doit envoyer le montant du test Satoshi. Présent uniquement sur une preuve SATOSHI_TEST.
Montant on-chain exact, dans la devise native du dépôt, auquel le dépôt de test Satoshi doit correspondre. Présent uniquement sur une preuve SATOSHI_TEST.
Date limite pour la fenêtre du test Satoshi propre à cette preuve. Présent uniquement sur une preuve SATOSHI_TEST ; l'expires_at propre à la session de widget est prolongé pour la couvrir lorsque SATOSHI_TEST est proposé.
Message émis par Didit que le client signe avec son portefeuille. Présent uniquement sur une preuve MESSAGE_SIGNING.
Raison pour laquelle la preuve a été refusée, sous forme de phrase en anglais pour l'utilisateur final. Présente uniquement lorsque status est REJECTED ; vide lorsque votre réviseur a refusé une capture d'écran (votre note reste chez vous).
Nombre de fois où des éléments probants ont été soumis pour ce justificatif (signatures, identifiants de transaction, téléversements).
Raison pour laquelle la dernière tentative a échoué, ou raison pour laquelle la preuve a été clôturée. Vide lorsque rien n'a échoué.
, SIGNATURE_INVALID, SIGNATURE_UNSUPPORTED_SCHEME, DEPOSIT_NOT_FOUND, DEPOSIT_UNCONFIRMED, DEPOSIT_LOOKUP_FAILED, DEPOSIT_MISMATCH, DEPOSIT_STALE, TXID_REUSED, CHAIN_UNSUPPORTED, WINDOW_EXPIRED, OWNERSHIP_CHANGED, METHOD_SWITCHED, REVIEW_REJECTED, ABANDONED