curl --request POST \
--url https://verification.didit.me/v3/fraud/checks/ \
--header 'Content-Type: application/x-www-form-urlencoded' \
--header 'x-api-key: <api-key>' \
--data 'subject={
"identifiers": [
{
"value": "<string>",
"country": "<string>",
"issuer": "<string>"
}
],
"selfie": "<string>",
"attributes": {
"first_name": "<string>",
"last_name": "<string>",
"full_name": "<string>",
"date_of_birth": "2023-12-25",
"nationality": "<string>",
"gender": "<string>",
"address": "<string>",
"city": "<string>",
"state": "<string>",
"postal_code": "<string>"
}
}' \
--data 'client_reference=<string>' \
--data profile=standard \
--data 'profile_version=<string>' \
--data 'context={
"ip_address": "<string>",
"user_agent": "<string>",
"country": "<string>",
"purpose": "<string>",
"consent_obtained": true
}' \
--data 'checks={
"include": [],
"exclude": []
}' \
--data 'vendor_data=<string>' \
--data 'metadata=<unknown>'import requests
url = "https://verification.didit.me/v3/fraud/checks/"
payload = {
"subject": "{
\"identifiers\": [
{
\"value\": \"<string>\",
\"country\": \"<string>\",
\"issuer\": \"<string>\"
}
],
\"selfie\": \"<string>\",
\"attributes\": {
\"first_name\": \"<string>\",
\"last_name\": \"<string>\",
\"full_name\": \"<string>\",
\"date_of_birth\": \"2023-12-25\",
\"nationality\": \"<string>\",
\"gender\": \"<string>\",
\"address\": \"<string>\",
\"city\": \"<string>\",
\"state\": \"<string>\",
\"postal_code\": \"<string>\"
}
}",
"client_reference": "<string>",
"profile": "standard",
"profile_version": "<string>",
"context": "{
\"ip_address\": \"<string>\",
\"user_agent\": \"<string>\",
\"country\": \"<string>\",
\"purpose\": \"<string>\",
\"consent_obtained\": true
}",
"checks": "{
\"include\": [],
\"exclude\": []
}",
"vendor_data": "<string>",
"metadata": "<unknown>"
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/x-www-form-urlencoded"
}
response = requests.post(url, data=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/x-www-form-urlencoded'},
body: new URLSearchParams({
subject: '{\n "identifiers": [\n {\n "value": "<string>",\n "country": "<string>",\n "issuer": "<string>"\n }\n ],\n "selfie": "<string>",\n "attributes": {\n "first_name": "<string>",\n "last_name": "<string>",\n "full_name": "<string>",\n "date_of_birth": "2023-12-25",\n "nationality": "<string>",\n "gender": "<string>",\n "address": "<string>",\n "city": "<string>",\n "state": "<string>",\n "postal_code": "<string>"\n }\n}',
client_reference: '<string>',
profile: 'standard',
profile_version: '<string>',
context: '{\n "ip_address": "<string>",\n "user_agent": "<string>",\n "country": "<string>",\n "purpose": "<string>",\n "consent_obtained": true\n}',
checks: '{\n "include": [],\n "exclude": []\n}',
vendor_data: '<string>',
metadata: '<unknown>'
})
};
fetch('https://verification.didit.me/v3/fraud/checks/', 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/fraud/checks/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "subject=%7B%0A%20%20%22identifiers%22%3A%20%5B%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%22value%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%20%20%20%20%22country%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%20%20%20%20%22issuer%22%3A%20%22%3Cstring%3E%22%0A%20%20%20%20%7D%0A%20%20%5D%2C%0A%20%20%22selfie%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%22attributes%22%3A%20%7B%0A%20%20%20%20%22first_name%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%20%20%22last_name%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%20%20%22full_name%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%20%20%22date_of_birth%22%3A%20%222023-12-25%22%2C%0A%20%20%20%20%22nationality%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%20%20%22gender%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%20%20%22address%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%20%20%22city%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%20%20%22state%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%20%20%22postal_code%22%3A%20%22%3Cstring%3E%22%0A%20%20%7D%0A%7D&client_reference=%3Cstring%3E&profile=standard&profile_version=%3Cstring%3E&context=%7B%0A%20%20%22ip_address%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%22user_agent%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%22country%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%22purpose%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%22consent_obtained%22%3A%20true%0A%7D&checks=%7B%0A%20%20%22include%22%3A%20%5B%5D%2C%0A%20%20%22exclude%22%3A%20%5B%5D%0A%7D&vendor_data=%3Cstring%3E&metadata=%3Cunknown%3E",
CURLOPT_HTTPHEADER => [
"Content-Type: application/x-www-form-urlencoded",
"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/fraud/checks/"
payload := strings.NewReader("subject=%7B%0A%20%20%22identifiers%22%3A%20%5B%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%22value%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%20%20%20%20%22country%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%20%20%20%20%22issuer%22%3A%20%22%3Cstring%3E%22%0A%20%20%20%20%7D%0A%20%20%5D%2C%0A%20%20%22selfie%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%22attributes%22%3A%20%7B%0A%20%20%20%20%22first_name%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%20%20%22last_name%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%20%20%22full_name%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%20%20%22date_of_birth%22%3A%20%222023-12-25%22%2C%0A%20%20%20%20%22nationality%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%20%20%22gender%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%20%20%22address%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%20%20%22city%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%20%20%22state%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%20%20%22postal_code%22%3A%20%22%3Cstring%3E%22%0A%20%20%7D%0A%7D&client_reference=%3Cstring%3E&profile=standard&profile_version=%3Cstring%3E&context=%7B%0A%20%20%22ip_address%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%22user_agent%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%22country%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%22purpose%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%22consent_obtained%22%3A%20true%0A%7D&checks=%7B%0A%20%20%22include%22%3A%20%5B%5D%2C%0A%20%20%22exclude%22%3A%20%5B%5D%0A%7D&vendor_data=%3Cstring%3E&metadata=%3Cunknown%3E")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
req.Header.Add("Content-Type", "application/x-www-form-urlencoded")
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/fraud/checks/")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/x-www-form-urlencoded")
.body("subject=%7B%0A%20%20%22identifiers%22%3A%20%5B%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%22value%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%20%20%20%20%22country%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%20%20%20%20%22issuer%22%3A%20%22%3Cstring%3E%22%0A%20%20%20%20%7D%0A%20%20%5D%2C%0A%20%20%22selfie%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%22attributes%22%3A%20%7B%0A%20%20%20%20%22first_name%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%20%20%22last_name%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%20%20%22full_name%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%20%20%22date_of_birth%22%3A%20%222023-12-25%22%2C%0A%20%20%20%20%22nationality%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%20%20%22gender%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%20%20%22address%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%20%20%22city%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%20%20%22state%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%20%20%22postal_code%22%3A%20%22%3Cstring%3E%22%0A%20%20%7D%0A%7D&client_reference=%3Cstring%3E&profile=standard&profile_version=%3Cstring%3E&context=%7B%0A%20%20%22ip_address%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%22user_agent%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%22country%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%22purpose%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%22consent_obtained%22%3A%20true%0A%7D&checks=%7B%0A%20%20%22include%22%3A%20%5B%5D%2C%0A%20%20%22exclude%22%3A%20%5B%5D%0A%7D&vendor_data=%3Cstring%3E&metadata=%3Cunknown%3E")
.asString();require 'uri'
require 'net/http'
url = URI("https://verification.didit.me/v3/fraud/checks/")
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/x-www-form-urlencoded'
request.body = "subject=%7B%0A%20%20%22identifiers%22%3A%20%5B%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%22value%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%20%20%20%20%22country%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%20%20%20%20%22issuer%22%3A%20%22%3Cstring%3E%22%0A%20%20%20%20%7D%0A%20%20%5D%2C%0A%20%20%22selfie%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%22attributes%22%3A%20%7B%0A%20%20%20%20%22first_name%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%20%20%22last_name%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%20%20%22full_name%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%20%20%22date_of_birth%22%3A%20%222023-12-25%22%2C%0A%20%20%20%20%22nationality%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%20%20%22gender%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%20%20%22address%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%20%20%22city%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%20%20%22state%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%20%20%22postal_code%22%3A%20%22%3Cstring%3E%22%0A%20%20%7D%0A%7D&client_reference=%3Cstring%3E&profile=standard&profile_version=%3Cstring%3E&context=%7B%0A%20%20%22ip_address%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%22user_agent%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%22country%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%22purpose%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%22consent_obtained%22%3A%20true%0A%7D&checks=%7B%0A%20%20%22include%22%3A%20%5B%5D%2C%0A%20%20%22exclude%22%3A%20%5B%5D%0A%7D&vendor_data=%3Cstring%3E&metadata=%3Cunknown%3E"
response = http.request(request)
puts response.read_body{
"check_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"client_reference": "<string>",
"processing_status": "pending",
"profile_id": "<string>",
"profile_version": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"completed_at": "2023-11-07T05:31:56Z",
"inputs": [
{
"reference": "<string>",
"type": "email",
"namespace": {},
"quality": "<string>",
"normalization": {},
"availability": "available"
}
],
"modules": [
{
"module": "normalization",
"status": "planned",
"reason": "<string>",
"latency_ms": 123,
"freshness": "<string>",
"billable_units": 123
}
],
"attribute_evidence": [
{}
],
"compound_evidence": [
{}
],
"risk": [
{
"dimension": "identity",
"score": 123,
"band": "low",
"availability": "available",
"requested_but_unavailable": true,
"reason_codes": [
"<string>"
],
"evidence_indexes": [
123
]
}
],
"network": {},
"recommendation": "approve",
"next_action": "none",
"decision_reasons": [
"<string>"
],
"coverage": {},
"usage": [
{}
],
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"enrichment": {},
"identity_relationship": {
"result": "match",
"reference_type": "<string>",
"country": "<string>",
"availability": "available",
"reason_codes": [
"<string>"
]
},
"vendor_data": "<string>",
"metadata": null
}Fraud Check API
Plan and run selected identity, contact risk, enrichment, and network checks in one request.
curl --request POST \
--url https://verification.didit.me/v3/fraud/checks/ \
--header 'Content-Type: application/x-www-form-urlencoded' \
--header 'x-api-key: <api-key>' \
--data 'subject={
"identifiers": [
{
"value": "<string>",
"country": "<string>",
"issuer": "<string>"
}
],
"selfie": "<string>",
"attributes": {
"first_name": "<string>",
"last_name": "<string>",
"full_name": "<string>",
"date_of_birth": "2023-12-25",
"nationality": "<string>",
"gender": "<string>",
"address": "<string>",
"city": "<string>",
"state": "<string>",
"postal_code": "<string>"
}
}' \
--data 'client_reference=<string>' \
--data profile=standard \
--data 'profile_version=<string>' \
--data 'context={
"ip_address": "<string>",
"user_agent": "<string>",
"country": "<string>",
"purpose": "<string>",
"consent_obtained": true
}' \
--data 'checks={
"include": [],
"exclude": []
}' \
--data 'vendor_data=<string>' \
--data 'metadata=<unknown>'import requests
url = "https://verification.didit.me/v3/fraud/checks/"
payload = {
"subject": "{
\"identifiers\": [
{
\"value\": \"<string>\",
\"country\": \"<string>\",
\"issuer\": \"<string>\"
}
],
\"selfie\": \"<string>\",
\"attributes\": {
\"first_name\": \"<string>\",
\"last_name\": \"<string>\",
\"full_name\": \"<string>\",
\"date_of_birth\": \"2023-12-25\",
\"nationality\": \"<string>\",
\"gender\": \"<string>\",
\"address\": \"<string>\",
\"city\": \"<string>\",
\"state\": \"<string>\",
\"postal_code\": \"<string>\"
}
}",
"client_reference": "<string>",
"profile": "standard",
"profile_version": "<string>",
"context": "{
\"ip_address\": \"<string>\",
\"user_agent\": \"<string>\",
\"country\": \"<string>\",
\"purpose\": \"<string>\",
\"consent_obtained\": true
}",
"checks": "{
\"include\": [],
\"exclude\": []
}",
"vendor_data": "<string>",
"metadata": "<unknown>"
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/x-www-form-urlencoded"
}
response = requests.post(url, data=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/x-www-form-urlencoded'},
body: new URLSearchParams({
subject: '{\n "identifiers": [\n {\n "value": "<string>",\n "country": "<string>",\n "issuer": "<string>"\n }\n ],\n "selfie": "<string>",\n "attributes": {\n "first_name": "<string>",\n "last_name": "<string>",\n "full_name": "<string>",\n "date_of_birth": "2023-12-25",\n "nationality": "<string>",\n "gender": "<string>",\n "address": "<string>",\n "city": "<string>",\n "state": "<string>",\n "postal_code": "<string>"\n }\n}',
client_reference: '<string>',
profile: 'standard',
profile_version: '<string>',
context: '{\n "ip_address": "<string>",\n "user_agent": "<string>",\n "country": "<string>",\n "purpose": "<string>",\n "consent_obtained": true\n}',
checks: '{\n "include": [],\n "exclude": []\n}',
vendor_data: '<string>',
metadata: '<unknown>'
})
};
fetch('https://verification.didit.me/v3/fraud/checks/', 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/fraud/checks/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "subject=%7B%0A%20%20%22identifiers%22%3A%20%5B%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%22value%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%20%20%20%20%22country%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%20%20%20%20%22issuer%22%3A%20%22%3Cstring%3E%22%0A%20%20%20%20%7D%0A%20%20%5D%2C%0A%20%20%22selfie%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%22attributes%22%3A%20%7B%0A%20%20%20%20%22first_name%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%20%20%22last_name%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%20%20%22full_name%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%20%20%22date_of_birth%22%3A%20%222023-12-25%22%2C%0A%20%20%20%20%22nationality%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%20%20%22gender%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%20%20%22address%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%20%20%22city%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%20%20%22state%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%20%20%22postal_code%22%3A%20%22%3Cstring%3E%22%0A%20%20%7D%0A%7D&client_reference=%3Cstring%3E&profile=standard&profile_version=%3Cstring%3E&context=%7B%0A%20%20%22ip_address%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%22user_agent%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%22country%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%22purpose%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%22consent_obtained%22%3A%20true%0A%7D&checks=%7B%0A%20%20%22include%22%3A%20%5B%5D%2C%0A%20%20%22exclude%22%3A%20%5B%5D%0A%7D&vendor_data=%3Cstring%3E&metadata=%3Cunknown%3E",
CURLOPT_HTTPHEADER => [
"Content-Type: application/x-www-form-urlencoded",
"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/fraud/checks/"
payload := strings.NewReader("subject=%7B%0A%20%20%22identifiers%22%3A%20%5B%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%22value%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%20%20%20%20%22country%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%20%20%20%20%22issuer%22%3A%20%22%3Cstring%3E%22%0A%20%20%20%20%7D%0A%20%20%5D%2C%0A%20%20%22selfie%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%22attributes%22%3A%20%7B%0A%20%20%20%20%22first_name%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%20%20%22last_name%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%20%20%22full_name%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%20%20%22date_of_birth%22%3A%20%222023-12-25%22%2C%0A%20%20%20%20%22nationality%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%20%20%22gender%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%20%20%22address%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%20%20%22city%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%20%20%22state%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%20%20%22postal_code%22%3A%20%22%3Cstring%3E%22%0A%20%20%7D%0A%7D&client_reference=%3Cstring%3E&profile=standard&profile_version=%3Cstring%3E&context=%7B%0A%20%20%22ip_address%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%22user_agent%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%22country%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%22purpose%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%22consent_obtained%22%3A%20true%0A%7D&checks=%7B%0A%20%20%22include%22%3A%20%5B%5D%2C%0A%20%20%22exclude%22%3A%20%5B%5D%0A%7D&vendor_data=%3Cstring%3E&metadata=%3Cunknown%3E")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
req.Header.Add("Content-Type", "application/x-www-form-urlencoded")
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/fraud/checks/")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/x-www-form-urlencoded")
.body("subject=%7B%0A%20%20%22identifiers%22%3A%20%5B%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%22value%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%20%20%20%20%22country%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%20%20%20%20%22issuer%22%3A%20%22%3Cstring%3E%22%0A%20%20%20%20%7D%0A%20%20%5D%2C%0A%20%20%22selfie%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%22attributes%22%3A%20%7B%0A%20%20%20%20%22first_name%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%20%20%22last_name%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%20%20%22full_name%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%20%20%22date_of_birth%22%3A%20%222023-12-25%22%2C%0A%20%20%20%20%22nationality%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%20%20%22gender%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%20%20%22address%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%20%20%22city%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%20%20%22state%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%20%20%22postal_code%22%3A%20%22%3Cstring%3E%22%0A%20%20%7D%0A%7D&client_reference=%3Cstring%3E&profile=standard&profile_version=%3Cstring%3E&context=%7B%0A%20%20%22ip_address%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%22user_agent%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%22country%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%22purpose%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%22consent_obtained%22%3A%20true%0A%7D&checks=%7B%0A%20%20%22include%22%3A%20%5B%5D%2C%0A%20%20%22exclude%22%3A%20%5B%5D%0A%7D&vendor_data=%3Cstring%3E&metadata=%3Cunknown%3E")
.asString();require 'uri'
require 'net/http'
url = URI("https://verification.didit.me/v3/fraud/checks/")
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/x-www-form-urlencoded'
request.body = "subject=%7B%0A%20%20%22identifiers%22%3A%20%5B%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%22value%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%20%20%20%20%22country%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%20%20%20%20%22issuer%22%3A%20%22%3Cstring%3E%22%0A%20%20%20%20%7D%0A%20%20%5D%2C%0A%20%20%22selfie%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%22attributes%22%3A%20%7B%0A%20%20%20%20%22first_name%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%20%20%22last_name%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%20%20%22full_name%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%20%20%22date_of_birth%22%3A%20%222023-12-25%22%2C%0A%20%20%20%20%22nationality%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%20%20%22gender%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%20%20%22address%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%20%20%22city%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%20%20%22state%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%20%20%22postal_code%22%3A%20%22%3Cstring%3E%22%0A%20%20%7D%0A%7D&client_reference=%3Cstring%3E&profile=standard&profile_version=%3Cstring%3E&context=%7B%0A%20%20%22ip_address%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%22user_agent%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%22country%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%22purpose%22%3A%20%22%3Cstring%3E%22%2C%0A%20%20%22consent_obtained%22%3A%20true%0A%7D&checks=%7B%0A%20%20%22include%22%3A%20%5B%5D%2C%0A%20%20%22exclude%22%3A%20%5B%5D%0A%7D&vendor_data=%3Cstring%3E&metadata=%3Cunknown%3E"
response = http.request(request)
puts response.read_body{
"check_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"client_reference": "<string>",
"processing_status": "pending",
"profile_id": "<string>",
"profile_version": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"completed_at": "2023-11-07T05:31:56Z",
"inputs": [
{
"reference": "<string>",
"type": "email",
"namespace": {},
"quality": "<string>",
"normalization": {},
"availability": "available"
}
],
"modules": [
{
"module": "normalization",
"status": "planned",
"reason": "<string>",
"latency_ms": 123,
"freshness": "<string>",
"billable_units": 123
}
],
"attribute_evidence": [
{}
],
"compound_evidence": [
{}
],
"risk": [
{
"dimension": "identity",
"score": 123,
"band": "low",
"availability": "available",
"requested_but_unavailable": true,
"reason_codes": [
"<string>"
],
"evidence_indexes": [
123
]
}
],
"network": {},
"recommendation": "approve",
"next_action": "none",
"decision_reasons": [
"<string>"
],
"coverage": {},
"usage": [
{}
],
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"enrichment": {},
"identity_relationship": {
"result": "match",
"reference_type": "<string>",
"country": "<string>",
"availability": "available",
"reason_codes": [
"<string>"
]
},
"vendor_data": "<string>",
"metadata": null
}Choose a profile
Pinprofile_version so the selected defaults and decision policy are explicit.
The default profile is standard, version 2026-08-27.
Version 2026-09-14 adds optional email and phone social enrichment and records every completed check as a native User Verification session.
In that version, paid add-ons are opt-in.
Version 2026-09-14.1 also enables global fraud network identifier lookups for participating, entitled organizations.
Version 2026-09-14.2 adds an optional selfie-to-CPF reference check for Brazil.
Earlier versions keep their original behavior.
The current profiles support email risk, phone risk, IP risk, eligible database validation, and your application’s private network history.
Selfie-based identity binding requires version 2026-09-14.2.
Selecting it in earlier versions returns not_available_in_profile_version.
Claimed identity and context
Put email, phone, and government identifiers insubject.identifiers.
Government identifiers require their issuing country; an issuer may also be needed where numbers are only unique within a region.
Put names, birth date, nationality, and address in subject.attributes.
These are claims to compare where a selected source supports them, not verified facts just because they were submitted.
Use context for the attempt’s IP address, user agent, purpose, country, and any required consent assertion.
This separates information about the verification attempt from information about the person.
For supported biometric checks, supply subject.selfie as base64-encoded JPEG, PNG, or WebP, up to 6 MB.
A matching image data URI is also accepted.
Do not send a reference image, remote URL, or storage key.
Selfie and claimed identifier
Selectbiometric_identity, submit a Brazilian tax_number identifier and selfie, and confirm context.consent_obtained.
The reference checks whether that selfie belongs to the claimed CPF holder.
Missing consent returns consent_required, and unsupported countries return unsupported_region.
The module has a per-check price based on your organization’s database-validation rate; inspect the plan before running it.
When the reference answers, identity_relationship.result is match, mismatch, or inconclusive.
An inconclusive answer requires review and is never treated as a mismatch.
The result only establishes the selfie-to-CPF relationship.
It does not validate a submitted name or birth date, prove liveness, or search for a face across the internet or global fraud network.
Names and birth date remain claims unless another selected source supplies evidence for those fields.
Timeouts and source errors are unavailable results and are not billed.
Completed inconclusive answers are billed at the same reference-check rate.
The selfie is not included in the result or stored as session media by this check.
Select checks
checks.include selects modules, and checks.exclude takes precedence.
An explicit empty include list disables all optional work; normalization still runs.
Omitting include uses the pinned profile’s defaults.
Email and phone social enrichment are separately selected with email_social and phone_social.
They require a valid matching identifier and do not send an OTP.
{
"profile_version": "2026-09-14.1",
"client_reference": "review-attempt-001",
"subject": {
"identifiers": [
{ "type": "email", "value": "applicant@example.com" }
],
"attributes": { "first_name": "Alex", "last_name": "Example" }
},
"checks": { "include": ["networks_same_org", "networks_cross_org", "email_risk"] }
}
Read results without conflating them
Each module reports its execution status, reason, and billable units.not_requested, excluded_by_caller, missing_required_input, and source_unavailable describe different outcomes.
A missing source is not an identity mismatch or a zero-risk result.
attribute_evidence describes field-level evidence, while risk keeps identity, contact, device, behavioral, and fraud-network dimensions separate.
A shared email, device, or other identifier is an observed connection, not proof that two accounts belong to the same person or committed fraud.
recommendation is the check’s recommendation; it does not change another record’s status.
Social enrichment results appear under enrichment, with unavailable results distinct from completed results.
Global fraud network
Selectnetworks_cross_org to query supported email, phone, and properly namespaced document identifiers against the shared network.
The lookup requires organization participation and entitlement, uses the existing organization read budget, and records an audit of the read.
It has no per-lookup charge.
Planning a check does not query the shared index or consume its read budget.
network.cross_organization contains signals_checked and disclosed aggregate insights when the check completes.
Each insight contains the signal type, outcome classes, contributor count, recency bucket, and industry categories only when disclosure is enabled.
It never identifies another organization, account, person, or verification.
Results below the disclosure threshold are omitted; an empty list does not prove the absence of fraud history.
A disclosed shared signal triggers a review recommendation, never an automatic rejection or an identity match.
An unavailable lookup reports its reason separately from an empty completed lookup.
If sharing access is later revoked, result retrieval, retries, and session details hide the shared aggregates and their derived risk evidence.
The original recommendation remains a historical decision; reads do not change verification status.
Sessions, retries, and charges
check_id retrieves the stored result through Get a Fraud Check.
When present, request_id identifies its native verification session.
Versions 2026-09-14, 2026-09-14.1, and 2026-09-14.2 always create that session, including when only private network history is selected.
Reusing client_reference with the same request body returns the original result without another execution or charge while that check exists.
A different body with the same reference returns 409.
If execution is still running, retry the same request after the response’s Retry-After interval.
Deleting the associated verification also deletes the Fraud Check result; retrieval then returns 404.
A check deleted during execution cannot publish a completed result.
Prices come from your organization’s current prepaid or contract rates.
Unavailable and skipped modules are not billed, and private network history has no per-check charge.
Sandbox checks use sample responses without paid supplier calls or charges.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
Show child attributes
Show child attributes
Your own reference for this check. Doubles as the idempotency key: reusing it with the same body returns the original check without running or billing the modules again; reusing it with a different body returns 409.
1 - 255Orchestration profile id. Defaults to the Didit standard profile.
1 - 64Pin a frozen profile version. Defaults to the current version of the profile.
1 - 32Show child attributes
Show child attributes
Show child attributes
Show child attributes
1000Response
pending- Pendingrunning- Runningcompleted- Completedfailed- Failed
pending, running, completed, failed Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
approve- Approvereview- Reviewreject- Reject
approve, review, reject none- Nonemanual_review- Manual Reviewstep_up- Step Upresubmit_capture- Resubmit Capture
none, manual_review, step_up, resubmit_capture Show child attributes
Show child attributes
Show child attributes
Show child attributes
Native verification session created for this check.
Show child attributes
Show child attributes
Show child attributes
Show child attributes