curl -X POST "https://verification.didit.me/v3/database-validation/" \
-H "x-api-key: YOUR_API_KEY" \
-F "issuing_state=CAN" \
-F "services=can_residential" \
-F "vendor_data=user-1234" \
-F "consent=true" \
-F "first_name=John" \
-F "last_name=Doe" \
-F 'address={"street_1":"123 Sample Street","street_2":"Unit 4","city":"Sample City","region":"Sample State","postal_code":"10001","country":"US"}' \
-F "phone=+15550101000"
from didit import Didit
# Reads DIDIT_API_KEY.
client = Didit()
result = client.database_validation.validate(
issuing_state="CAN",
services=["can_residential"],
consent=True,
first_name="John",
last_name="Doe",
address={"street_1": "123 Sample Street", "street_2": "Unit 4", "city": "Sample City", "region": "Sample State", "postal_code": "10001", "country": "US"},
phone="+15550101000",
vendor_data="user-1234",
)
print(result)
import Didit from "@didit-protocol/sdk-node";
// Reads DIDIT_API_KEY.
const didit = new Didit();
const result = await didit.databaseValidation.validate({
issuing_state: "CAN",
services: ["can_residential"],
consent: true,
first_name: "John",
last_name: "Doe",
address: { street_1: "123 Sample Street", street_2: "Unit 4", city: "Sample City", region: "Sample State", postal_code: "10001", country: "US" },
phone: "+15550101000",
vendor_data: "user-1234",
});
console.log(result);
ctx := context.Background()
// Reads DIDIT_API_KEY.
client := didit.NewClient()
result, err := client.DatabaseValidation.Validate(ctx, didit.DatabaseValidationValidateParams{
IssuingState: "CAN",
Services: didit.Some([]string{"can_residential"}),
Consent: didit.Bool(true),
FirstName: didit.String("John"),
LastName: didit.String("Doe"),
Address: didit.Some[any](map[string]any{"street_1": "123 Sample Street", "street_2": "Unit 4", "city": "Sample City", "region": "Sample State", "postal_code": "10001", "country": "US"}),
Phone: didit.String("+15550101000"),
VendorData: didit.String("user-1234"),
})
if err != nil {
log.Fatal(err)
}
fmt.Printf("%+v\n", result)
import java.util.List;
import me.didit.Didit;
import me.didit.types.DatabaseValidationValidateParams;
// Reads DIDIT_API_KEY.
Didit client = new Didit();
var result = client.databaseValidation().validate(DatabaseValidationValidateParams.builder()
.issuingState("CAN")
.services(List.of("can_residential"))
.consent(true)
.firstName("John")
.lastName("Doe")
.address(DatabaseValidationValidateParams.Address.ofVariant1(DatabaseValidationValidateParams.Address.Variant1.builder()
.street1("123 Sample Street")
.street2("Unit 4")
.city("Sample City")
.region("Sample State")
.postalCode("10001")
.country("US")
.build()))
.phone("+15550101000")
.vendorData("user-1234")
.build());
System.out.println(result);
<?php
require 'vendor/autoload.php';
use Didit\DiditClient;
// Reads DIDIT_API_KEY.
$didit = new DiditClient();
$result = $didit->databaseValidation->validate([
'issuing_state' => 'CAN',
'services' => ['can_residential'],
'consent' => true,
'first_name' => 'John',
'last_name' => 'Doe',
'address' => ['street_1' => '123 Sample Street', 'street_2' => 'Unit 4', 'city' => 'Sample City', 'region' => 'Sample State', 'postal_code' => '10001', 'country' => 'US'],
'phone' => '+15550101000',
'vendor_data' => 'user-1234',
]);
print_r($result->toArray());
require "didit"
# Reads DIDIT_API_KEY.
didit = Didit::Client.new
result = didit.database_validation.validate(
issuing_state: "CAN",
services: ["can_residential"],
consent: true,
first_name: "John",
last_name: "Doe",
address: { street_1: "123 Sample Street", street_2: "Unit 4", city: "Sample City", region: "Sample State", postal_code: "10001", country: "US" },
phone: "+15550101000",
vendor_data: "user-1234"
)
puts result.to_h
using System;
using System.Collections.Generic;
using System.Text.Json;
using Didit;
// Reads DIDIT_API_KEY.
using var client = new DiditClient();
var result = await client.DatabaseValidation.ValidateAsync(new DatabaseValidationValidateParams
{
IssuingState = "CAN",
Services = new string[] { "can_residential" },
Consent = true,
FirstName = "John",
LastName = "Doe",
Address = new Dictionary<string, object> { ["street_1"] = "123 Sample Street", ["street_2"] = "Unit 4", ["city"] = "Sample City", ["region"] = "Sample State", ["postal_code"] = "10001", ["country"] = "US" },
Phone = "+15550101000",
VendorData = "user-1234",
});
Console.WriteLine(JsonSerializer.Serialize(result));
{
"request_id": "req_01H…",
"status": "Approved",
"issuing_state": "CAN",
"match_type": "full_match",
"validations": [
{
"outcome_code": "MATCH",
"service_id": "can_residential",
"service_name": "Canada Residential",
"source_data": {
"address": "123 Sample Street",
"date_of_birth": "1990-01-01",
"first_name": "John",
"last_name": "Doe"
},
"validation": {
"address": "full_match",
"full_name": "full_match"
}
}
]
}
{
"request_id": "req_01H…",
"status": "In Review",
"issuing_state": "CAN",
"match_type": "partial_match",
"validations": [
{
"outcome_code": "PARTIAL_MATCH",
"service_id": "can_residential",
"service_name": "Canada Residential",
"source_data": {
"address": "123 Sample Street",
"date_of_birth": "1990-01-01",
"first_name": "John",
"last_name": "Doe"
},
"validation": {
"address": "full_match",
"full_name": "no_match"
}
}
]
}
{
"request_id": "req_01H…",
"status": "Declined",
"issuing_state": "CAN",
"match_type": "no_match",
"validations": [
{
"outcome_code": "NO_MATCH",
"service_id": "can_residential",
"service_name": "Canada Residential",
"source_data": {
"address": "NO_MATCH",
"full_name": "NO_MATCH"
},
"validation": {
"address": "no_match",
"full_name": "no_match"
}
}
]
}
🇨🇦 كندا
التحقق من العناوين السكنية في كندا: مطابقة الهوية
التحقق من قاعدة بيانات كندا الموثوقة عبر البنية التحتية للهوية من Didit. الدفع لكل استدعاء من $0.42، بدون عقود أو حد أدنى.
POST
/
v3
/
database-validation
/
curl -X POST "https://verification.didit.me/v3/database-validation/" \
-H "x-api-key: YOUR_API_KEY" \
-F "issuing_state=CAN" \
-F "services=can_residential" \
-F "vendor_data=user-1234" \
-F "consent=true" \
-F "first_name=John" \
-F "last_name=Doe" \
-F 'address={"street_1":"123 Sample Street","street_2":"Unit 4","city":"Sample City","region":"Sample State","postal_code":"10001","country":"US"}' \
-F "phone=+15550101000"
from didit import Didit
# Reads DIDIT_API_KEY.
client = Didit()
result = client.database_validation.validate(
issuing_state="CAN",
services=["can_residential"],
consent=True,
first_name="John",
last_name="Doe",
address={"street_1": "123 Sample Street", "street_2": "Unit 4", "city": "Sample City", "region": "Sample State", "postal_code": "10001", "country": "US"},
phone="+15550101000",
vendor_data="user-1234",
)
print(result)
import Didit from "@didit-protocol/sdk-node";
// Reads DIDIT_API_KEY.
const didit = new Didit();
const result = await didit.databaseValidation.validate({
issuing_state: "CAN",
services: ["can_residential"],
consent: true,
first_name: "John",
last_name: "Doe",
address: { street_1: "123 Sample Street", street_2: "Unit 4", city: "Sample City", region: "Sample State", postal_code: "10001", country: "US" },
phone: "+15550101000",
vendor_data: "user-1234",
});
console.log(result);
ctx := context.Background()
// Reads DIDIT_API_KEY.
client := didit.NewClient()
result, err := client.DatabaseValidation.Validate(ctx, didit.DatabaseValidationValidateParams{
IssuingState: "CAN",
Services: didit.Some([]string{"can_residential"}),
Consent: didit.Bool(true),
FirstName: didit.String("John"),
LastName: didit.String("Doe"),
Address: didit.Some[any](map[string]any{"street_1": "123 Sample Street", "street_2": "Unit 4", "city": "Sample City", "region": "Sample State", "postal_code": "10001", "country": "US"}),
Phone: didit.String("+15550101000"),
VendorData: didit.String("user-1234"),
})
if err != nil {
log.Fatal(err)
}
fmt.Printf("%+v\n", result)
import java.util.List;
import me.didit.Didit;
import me.didit.types.DatabaseValidationValidateParams;
// Reads DIDIT_API_KEY.
Didit client = new Didit();
var result = client.databaseValidation().validate(DatabaseValidationValidateParams.builder()
.issuingState("CAN")
.services(List.of("can_residential"))
.consent(true)
.firstName("John")
.lastName("Doe")
.address(DatabaseValidationValidateParams.Address.ofVariant1(DatabaseValidationValidateParams.Address.Variant1.builder()
.street1("123 Sample Street")
.street2("Unit 4")
.city("Sample City")
.region("Sample State")
.postalCode("10001")
.country("US")
.build()))
.phone("+15550101000")
.vendorData("user-1234")
.build());
System.out.println(result);
<?php
require 'vendor/autoload.php';
use Didit\DiditClient;
// Reads DIDIT_API_KEY.
$didit = new DiditClient();
$result = $didit->databaseValidation->validate([
'issuing_state' => 'CAN',
'services' => ['can_residential'],
'consent' => true,
'first_name' => 'John',
'last_name' => 'Doe',
'address' => ['street_1' => '123 Sample Street', 'street_2' => 'Unit 4', 'city' => 'Sample City', 'region' => 'Sample State', 'postal_code' => '10001', 'country' => 'US'],
'phone' => '+15550101000',
'vendor_data' => 'user-1234',
]);
print_r($result->toArray());
require "didit"
# Reads DIDIT_API_KEY.
didit = Didit::Client.new
result = didit.database_validation.validate(
issuing_state: "CAN",
services: ["can_residential"],
consent: true,
first_name: "John",
last_name: "Doe",
address: { street_1: "123 Sample Street", street_2: "Unit 4", city: "Sample City", region: "Sample State", postal_code: "10001", country: "US" },
phone: "+15550101000",
vendor_data: "user-1234"
)
puts result.to_h
using System;
using System.Collections.Generic;
using System.Text.Json;
using Didit;
// Reads DIDIT_API_KEY.
using var client = new DiditClient();
var result = await client.DatabaseValidation.ValidateAsync(new DatabaseValidationValidateParams
{
IssuingState = "CAN",
Services = new string[] { "can_residential" },
Consent = true,
FirstName = "John",
LastName = "Doe",
Address = new Dictionary<string, object> { ["street_1"] = "123 Sample Street", ["street_2"] = "Unit 4", ["city"] = "Sample City", ["region"] = "Sample State", ["postal_code"] = "10001", ["country"] = "US" },
Phone = "+15550101000",
VendorData = "user-1234",
});
Console.WriteLine(JsonSerializer.Serialize(result));
{
"request_id": "req_01H…",
"status": "Approved",
"issuing_state": "CAN",
"match_type": "full_match",
"validations": [
{
"outcome_code": "MATCH",
"service_id": "can_residential",
"service_name": "Canada Residential",
"source_data": {
"address": "123 Sample Street",
"date_of_birth": "1990-01-01",
"first_name": "John",
"last_name": "Doe"
},
"validation": {
"address": "full_match",
"full_name": "full_match"
}
}
]
}
{
"request_id": "req_01H…",
"status": "In Review",
"issuing_state": "CAN",
"match_type": "partial_match",
"validations": [
{
"outcome_code": "PARTIAL_MATCH",
"service_id": "can_residential",
"service_name": "Canada Residential",
"source_data": {
"address": "123 Sample Street",
"date_of_birth": "1990-01-01",
"first_name": "John",
"last_name": "Doe"
},
"validation": {
"address": "full_match",
"full_name": "no_match"
}
}
]
}
{
"request_id": "req_01H…",
"status": "Declined",
"issuing_state": "CAN",
"match_type": "no_match",
"validations": [
{
"outcome_code": "NO_MATCH",
"service_id": "can_residential",
"service_name": "Canada Residential",
"source_data": {
"address": "NO_MATCH",
"full_name": "NO_MATCH"
},
"validation": {
"address": "no_match",
"full_name": "no_match"
}
}
]
}
يتحقق من البيانات المُدخلة مقارنةً ببيانات الهاتف لدى مشغّلي شبكات الهاتف المحمول. يتطلب ذلك تطبيقًا تابعًا لوكالة. يتيح لك Didit الوصول إلى هذه الخدمة عبر
POST /v3/database-validation/ للتحقق من البيانات المُرسلة مقابل المصدر الموثوق، والحصول على نتائج تطابق موحّدة.
التغطية
- التغطية: ~ 90%
- الدولة: كندا
- معرّف الخدمة:
can_residential - نطاق البيانات: العنوان
- الفئة: سكني
المدخلات
| الحقل | مطلوب | مثال |
|---|---|---|
first_name | نعم | John |
last_name | نعم | Doe |
address.street_1 | نعم | 123 Sample Street |
address.postal_code | نعم | 10001 |
phone | نعم | +15550101000 |
date_of_birth | لا | 1990-01-01 |
address.street_2 | لا | Unit 4 |
address.city | لا | Sample City |
address.region | لا | Sample State |
vendor_data | لا | user-1234 |
- الحقول المطلوبة:
first_name،last_name،address.street_1،address.postal_code،phone - الحقول الاختيارية:
date_of_birth،address.street_2،address.city،address.region،vendor_data - الموافقة: مطلوبة
- إتاحته في سير العمل: متاح في سير العمل
- التغطية: ~ 90%
- السعر: $0.42 لكل استعلام ناجح
معاملات الجسم
string
افتراضي:"CAN"
مطلوب
رمز الدولة ISO 3166-1 alpha-3 لقاعدة بيانات الخدمة هذه.مثال:
CANstring
افتراضي:"can_residential"
مطلوب
مصفوفة تحتوي على معرّف هذه الخدمة. يُبقي تثبيت الخدمة الطلب مقتصراً على قاعدة البيانات هذه بالتحديد.مثال:
can_residentialboolean
افتراضي:"true"
مطلوب
موافقة صريحة من المستخدم النهائي على هذه الخدمة.مثال:
truestring
افتراضي:"John"
مطلوب
الاسم الأول المراد التحقق منه.مثال:
Johnstring
افتراضي:"Doe"
مطلوب
اسم العائلة المراد التحقق منه.مثال:
Doeobject
مطلوب
كائن عنوان سكني منظَّم. استخدم
street_1 وstreet_2 وcity وregion وpostal_code وcountry. ما زال يُقبل سلسلة عنوان كاملة بالصيغة القديمة، لكنها غير موصى بها.مثال: {"street_1":"123 Sample Street","street_2":"Unit 4","city":"Sample City","region":"Sample State","postal_code":"10001","country":"US"}string
افتراضي:"+15550101000"
مطلوب
رقم الهاتف بالتنسيق الدولي.مثال:
+15550101000string
تاريخ الميلاد بصيغة
YYYY-MM-DD.مثال: 1990-01-01string
افتراضي:"user-1234"
مرجعك الثابت لهذا الشخص، مثل معرّف المستخدم الداخلي لديك. يستخدمه Didit لربط عمليات التحقق المستقلة بالمستخدم النهائي نفسه، وتقليل الضوضاء في اكتشاف التكرار.مثال:
user-1234قواعد الإدخال وملاحظات التحقق
- بالنسبة إلى خدمات العناوين، أرسل حقول العنوان المنظَّمة بدلاً من سلسلة
addressواحدة كلما أمكن ذلك. address.street_1هو عنوان الشارع، بما في ذلك رقم المبنى ونوع الشارع.address.street_2هو الشقة أو الوحدة أو المبنى أو الطابق أو أي سطر إضافي للعنوان. أرسله فقط عندما تتوفر لديك هذه المعلومة.address.cityهي المدينة أو الضاحية أو الحي أو البلدة أو المنطقة السكنية.address.regionهي الولاية أو المقاطعة أو الإقليم أو البلدة.address.postal_codeهو الرمز البريدي.- تتطلب خدمات قواعد البيانات القائمة على العناوين على الأقل عنوان الشارع والرمز البريدي؛ والطلبات المرفوضة قبل البحث في المصدر لا تُفرض عليها رسوم.
كيفية الاستدعاء
curl -X POST "https://verification.didit.me/v3/database-validation/" \
-H "x-api-key: YOUR_API_KEY" \
-F "issuing_state=CAN" \
-F "services=can_residential" \
-F "vendor_data=user-1234" \
-F "consent=true" \
-F "first_name=John" \
-F "last_name=Doe" \
-F 'address={"street_1":"123 Sample Street","street_2":"Unit 4","city":"Sample City","region":"Sample State","postal_code":"10001","country":"US"}' \
-F "phone=+15550101000"
from didit import Didit
# Reads DIDIT_API_KEY.
client = Didit()
result = client.database_validation.validate(
issuing_state="CAN",
services=["can_residential"],
consent=True,
first_name="John",
last_name="Doe",
address={"street_1": "123 Sample Street", "street_2": "Unit 4", "city": "Sample City", "region": "Sample State", "postal_code": "10001", "country": "US"},
phone="+15550101000",
vendor_data="user-1234",
)
print(result)
import Didit from "@didit-protocol/sdk-node";
// Reads DIDIT_API_KEY.
const didit = new Didit();
const result = await didit.databaseValidation.validate({
issuing_state: "CAN",
services: ["can_residential"],
consent: true,
first_name: "John",
last_name: "Doe",
address: { street_1: "123 Sample Street", street_2: "Unit 4", city: "Sample City", region: "Sample State", postal_code: "10001", country: "US" },
phone: "+15550101000",
vendor_data: "user-1234",
});
console.log(result);
ctx := context.Background()
// Reads DIDIT_API_KEY.
client := didit.NewClient()
result, err := client.DatabaseValidation.Validate(ctx, didit.DatabaseValidationValidateParams{
IssuingState: "CAN",
Services: didit.Some([]string{"can_residential"}),
Consent: didit.Bool(true),
FirstName: didit.String("John"),
LastName: didit.String("Doe"),
Address: didit.Some[any](map[string]any{"street_1": "123 Sample Street", "street_2": "Unit 4", "city": "Sample City", "region": "Sample State", "postal_code": "10001", "country": "US"}),
Phone: didit.String("+15550101000"),
VendorData: didit.String("user-1234"),
})
if err != nil {
log.Fatal(err)
}
fmt.Printf("%+v\n", result)
import java.util.List;
import me.didit.Didit;
import me.didit.types.DatabaseValidationValidateParams;
// Reads DIDIT_API_KEY.
Didit client = new Didit();
var result = client.databaseValidation().validate(DatabaseValidationValidateParams.builder()
.issuingState("CAN")
.services(List.of("can_residential"))
.consent(true)
.firstName("John")
.lastName("Doe")
.address(DatabaseValidationValidateParams.Address.ofVariant1(DatabaseValidationValidateParams.Address.Variant1.builder()
.street1("123 Sample Street")
.street2("Unit 4")
.city("Sample City")
.region("Sample State")
.postalCode("10001")
.country("US")
.build()))
.phone("+15550101000")
.vendorData("user-1234")
.build());
System.out.println(result);
<?php
require 'vendor/autoload.php';
use Didit\DiditClient;
// Reads DIDIT_API_KEY.
$didit = new DiditClient();
$result = $didit->databaseValidation->validate([
'issuing_state' => 'CAN',
'services' => ['can_residential'],
'consent' => true,
'first_name' => 'John',
'last_name' => 'Doe',
'address' => ['street_1' => '123 Sample Street', 'street_2' => 'Unit 4', 'city' => 'Sample City', 'region' => 'Sample State', 'postal_code' => '10001', 'country' => 'US'],
'phone' => '+15550101000',
'vendor_data' => 'user-1234',
]);
print_r($result->toArray());
require "didit"
# Reads DIDIT_API_KEY.
didit = Didit::Client.new
result = didit.database_validation.validate(
issuing_state: "CAN",
services: ["can_residential"],
consent: true,
first_name: "John",
last_name: "Doe",
address: { street_1: "123 Sample Street", street_2: "Unit 4", city: "Sample City", region: "Sample State", postal_code: "10001", country: "US" },
phone: "+15550101000",
vendor_data: "user-1234"
)
puts result.to_h
using System;
using System.Collections.Generic;
using System.Text.Json;
using Didit;
// Reads DIDIT_API_KEY.
using var client = new DiditClient();
var result = await client.DatabaseValidation.ValidateAsync(new DatabaseValidationValidateParams
{
IssuingState = "CAN",
Services = new string[] { "can_residential" },
Consent = true,
FirstName = "John",
LastName = "Doe",
Address = new Dictionary<string, object> { ["street_1"] = "123 Sample Street", ["street_2"] = "Unit 4", ["city"] = "Sample City", ["region"] = "Sample State", ["postal_code"] = "10001", ["country"] = "US" },
Phone = "+15550101000",
VendorData = "user-1234",
});
Console.WriteLine(JsonSerializer.Serialize(result));
يُرجع كل استدعاء ناجح رمز HTTP 200. يخبرك الحقل outcome_code بما حدث فعلاً، فيميّز مثلاً بين عدم تطابق بيومتري حقيقي (BIOMETRIC_NO_MATCH) وصورة سيلفي تعذّرت قراءتها (BIOMETRIC_IMAGE_UNUSABLE). الحالة status المعروضة هي حالة الميزة الافتراضية، ويمكن لإجراءات التطابق الجزئي / عدم التطابق التي أعددتها أن تتجاوزها.MATCH — أكّد السجل المرجعي الهوية، وتطابق كل حقل تم فحصه.{
"request_id": "req_01H…",
"status": "Approved",
"issuing_state": "CAN",
"match_type": "full_match",
"validations": [
{
"outcome_code": "MATCH",
"service_id": "can_residential",
"service_name": "Canada Residential",
"source_data": {
"address": "123 Sample Street",
"date_of_birth": "1990-01-01",
"first_name": "John",
"last_name": "Doe"
},
"validation": {
"address": "full_match",
"full_name": "full_match"
}
}
]
}
PARTIAL_MATCH — لم يتطابق حقل واحد أو أكثر من الحقول التي تقارنها هذه الخدمة تطابقاً كاملاً. في هذا المثال، لم يتطابق full_name، بينما تطابق address.{
"request_id": "req_01H…",
"status": "In Review",
"issuing_state": "CAN",
"match_type": "partial_match",
"validations": [
{
"outcome_code": "PARTIAL_MATCH",
"service_id": "can_residential",
"service_name": "Canada Residential",
"source_data": {
"address": "123 Sample Street",
"date_of_birth": "1990-01-01",
"first_name": "John",
"last_name": "Doe"
},
"validation": {
"address": "full_match",
"full_name": "no_match"
}
}
]
}
NO_MATCH — لم يُرجع السجل المرجعي أي تطابق للبيانات المُرسلة.{
"request_id": "req_01H…",
"status": "Declined",
"issuing_state": "CAN",
"match_type": "no_match",
"validations": [
{
"outcome_code": "NO_MATCH",
"service_id": "can_residential",
"service_name": "Canada Residential",
"source_data": {
"address": "NO_MATCH",
"full_name": "NO_MATCH"
},
"validation": {
"address": "no_match",
"full_name": "no_match"
}
}
]
}
البيانات المُعادة
تعتمد الحقول الدقيقة التي تظهر فيsource_data على ما يعيده السجل. يوثّق المثال المُولّد لـ can_residential حاليًا الشكل الموحّد التالي:
addressdate_of_birthfirst_namelast_name
الأسعار واتفاقيات مستوى الخدمة
تُحتسب رسوم استعلامات Canada Residential فقط عندما يتلقى Didit نتيجة حاسمة من مصدر التحقق.- السعر لكل استدعاء: $0.42 USD.
- الفوترة: لكل استعلام ناجح. لا تُحتسب أي رسوم عند تعذّر الوصول إلى السجل، أو عند نقص الحقول المطلوبة، أو عند رفض الطلب قبل وصوله إلى المصدر.
- زمن الاستجابة المعتاد: p95 أقل من ثانيتين.
- التوفر: 99.9% لكل ربع سنة من جهة Didit؛ ويختلف توفر المصدر اللاحق حسب الدولة ومجموعة البيانات.
للاستزادة
آخر تعديل في ٧ نوفمبر ٢٠٢٦