curl -X POST "https://verification.didit.me/v3/database-validation/" \
-H "x-api-key: YOUR_API_KEY" \
-F "issuing_state=SGP" \
-F "services=sgp_utility" \
-F "vendor_data=user-1234" \
-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"}'
from didit import Didit
# Reads DIDIT_API_KEY.
client = Didit()
result = client.database_validation.validate(
issuing_state="SGP",
services=["sgp_utility"],
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"},
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: "SGP",
services: ["sgp_utility"],
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" },
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: "SGP",
Services: didit.Some([]string{"sgp_utility"}),
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"}),
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("SGP")
.services(List.of("sgp_utility"))
.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()))
.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' => 'SGP',
'services' => ['sgp_utility'],
'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'],
'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: "SGP",
services: ["sgp_utility"],
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" },
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 = "SGP",
Services = new string[] { "sgp_utility" },
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" },
VendorData = "user-1234",
});
Console.WriteLine(JsonSerializer.Serialize(result));
{
"request_id": "req_01H…",
"status": "Approved",
"issuing_state": "SGP",
"match_type": "full_match",
"validations": [
{
"outcome_code": "MATCH",
"service_id": "sgp_utility",
"service_name": "Singapore Utility",
"source_data": {
"address": "123 Sample Street",
"address_match_score": "1.000",
"city": "Sample City",
"date_of_birth": "1990-01-01",
"first_name": "John",
"full_name": "John Doe",
"last_name": "Doe",
"name_match_score": "1.000",
"postal_code": "10001",
"street": "sample_value",
"verifications": {
"address": true,
"full_name": true
}
},
"validation": {
"address": "full_match",
"full_name": "full_match"
}
}
]
}
{
"request_id": "req_01H…",
"status": "In Review",
"issuing_state": "SGP",
"match_type": "partial_match",
"validations": [
{
"outcome_code": "PARTIAL_MATCH",
"service_id": "sgp_utility",
"service_name": "Singapore Utility",
"source_data": {
"address": "123 Sample Street",
"address_match_score": "1.000",
"city": "Sample City",
"date_of_birth": "1990-01-01",
"first_name": "John",
"full_name": "John Doe",
"last_name": "Doe",
"name_match_score": "1.000",
"postal_code": "10001",
"street": "sample_value",
"verifications": {
"address": true,
"full_name": false
}
},
"validation": {
"address": "full_match",
"full_name": "no_match"
}
}
]
}
{
"request_id": "req_01H…",
"status": "Declined",
"issuing_state": "SGP",
"match_type": "no_match",
"validations": [
{
"outcome_code": "NO_MATCH",
"service_id": "sgp_utility",
"service_name": "Singapore Utility",
"source_data": {
"address": "NO_MATCH",
"full_name": "NO_MATCH"
},
"validation": {
"address": "no_match",
"full_name": "no_match"
}
}
]
}
🇸🇬 سنغافورة
واجهة API للتحقق من فواتير المرافق في سنغافورة
Didit: التحقق من قواعد البيانات الرسمية في سنغافورة عبر بنية الهوية الخاصة بها. الدفع لكل استدعاء بدءاً من $2.82، بلا عقود ولا حد أدنى.
POST
/
v3
/
database-validation
/
curl -X POST "https://verification.didit.me/v3/database-validation/" \
-H "x-api-key: YOUR_API_KEY" \
-F "issuing_state=SGP" \
-F "services=sgp_utility" \
-F "vendor_data=user-1234" \
-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"}'
from didit import Didit
# Reads DIDIT_API_KEY.
client = Didit()
result = client.database_validation.validate(
issuing_state="SGP",
services=["sgp_utility"],
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"},
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: "SGP",
services: ["sgp_utility"],
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" },
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: "SGP",
Services: didit.Some([]string{"sgp_utility"}),
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"}),
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("SGP")
.services(List.of("sgp_utility"))
.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()))
.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' => 'SGP',
'services' => ['sgp_utility'],
'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'],
'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: "SGP",
services: ["sgp_utility"],
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" },
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 = "SGP",
Services = new string[] { "sgp_utility" },
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" },
VendorData = "user-1234",
});
Console.WriteLine(JsonSerializer.Serialize(result));
{
"request_id": "req_01H…",
"status": "Approved",
"issuing_state": "SGP",
"match_type": "full_match",
"validations": [
{
"outcome_code": "MATCH",
"service_id": "sgp_utility",
"service_name": "Singapore Utility",
"source_data": {
"address": "123 Sample Street",
"address_match_score": "1.000",
"city": "Sample City",
"date_of_birth": "1990-01-01",
"first_name": "John",
"full_name": "John Doe",
"last_name": "Doe",
"name_match_score": "1.000",
"postal_code": "10001",
"street": "sample_value",
"verifications": {
"address": true,
"full_name": true
}
},
"validation": {
"address": "full_match",
"full_name": "full_match"
}
}
]
}
{
"request_id": "req_01H…",
"status": "In Review",
"issuing_state": "SGP",
"match_type": "partial_match",
"validations": [
{
"outcome_code": "PARTIAL_MATCH",
"service_id": "sgp_utility",
"service_name": "Singapore Utility",
"source_data": {
"address": "123 Sample Street",
"address_match_score": "1.000",
"city": "Sample City",
"date_of_birth": "1990-01-01",
"first_name": "John",
"full_name": "John Doe",
"last_name": "Doe",
"name_match_score": "1.000",
"postal_code": "10001",
"street": "sample_value",
"verifications": {
"address": true,
"full_name": false
}
},
"validation": {
"address": "full_match",
"full_name": "no_match"
}
}
]
}
{
"request_id": "req_01H…",
"status": "Declined",
"issuing_state": "SGP",
"match_type": "no_match",
"validations": [
{
"outcome_code": "NO_MATCH",
"service_id": "sgp_utility",
"service_name": "Singapore Utility",
"source_data": {
"address": "NO_MATCH",
"full_name": "NO_MATCH"
},
"validation": {
"address": "no_match",
"full_name": "no_match"
}
}
]
}
يتحقق من بيانات الإدخال مقابل سجلات فواتير الاتصالات وبيانات الهاتف. يتيح Didit هذه الخدمة عبر
POST /v3/database-validation/ لتتمكن من التحقق من البيانات المُرسلة مقابل المصدر الموثوق، وتحصل على نتائج تطابق موحّدة.
التغطية
- التغطية: > 80%
- الدولة: سنغافورة
- معرّف الخدمة:
sgp_utility - نطاق البيانات: العنوان
- الفئة: المرافق
المدخلات
| الحقل | مطلوب | مثال |
|---|---|---|
first_name | نعم | John |
last_name | نعم | Doe |
address.street_1 | نعم | 123 Sample Street |
address.postal_code | نعم | 10001 |
date_of_birth | لا | 1990-01-01 |
phone | لا | +15550101000 |
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 - الحقول الاختيارية:
date_of_birth،phone،address.street_2،address.city،address.region،vendor_data - الموافقة: غير مطلوبة
- إتاحة سير العمل: متاح في سير العمل
- التغطية: > 80%
- السعر: $2.82 لكل استعلام ناجح
معاملات الجسم
string
افتراضي:"SGP"
مطلوب
رمز الدولة وفق ISO 3166-1 alpha-3 لخدمة قاعدة البيانات هذه.مثال:
SGPstring
افتراضي:"sgp_utility"
مطلوب
مصفوفة تحتوي على معرّف هذه الخدمة. تثبيت الخدمة يُبقي الطلب مقتصرًا على قاعدة البيانات المحددة هذه بالضبط.مثال:
sgp_utilitystring
افتراضي:"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
تاريخ الميلاد بصيغة
YYYY-MM-DD.مثال: 1990-01-01string
رقم الهاتف بالصيغة الدولية.مثال:
+15550101000string
افتراضي:"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=SGP" \
-F "services=sgp_utility" \
-F "vendor_data=user-1234" \
-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"}'
from didit import Didit
# Reads DIDIT_API_KEY.
client = Didit()
result = client.database_validation.validate(
issuing_state="SGP",
services=["sgp_utility"],
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"},
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: "SGP",
services: ["sgp_utility"],
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" },
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: "SGP",
Services: didit.Some([]string{"sgp_utility"}),
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"}),
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("SGP")
.services(List.of("sgp_utility"))
.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()))
.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' => 'SGP',
'services' => ['sgp_utility'],
'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'],
'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: "SGP",
services: ["sgp_utility"],
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" },
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 = "SGP",
Services = new string[] { "sgp_utility" },
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" },
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": "SGP",
"match_type": "full_match",
"validations": [
{
"outcome_code": "MATCH",
"service_id": "sgp_utility",
"service_name": "Singapore Utility",
"source_data": {
"address": "123 Sample Street",
"address_match_score": "1.000",
"city": "Sample City",
"date_of_birth": "1990-01-01",
"first_name": "John",
"full_name": "John Doe",
"last_name": "Doe",
"name_match_score": "1.000",
"postal_code": "10001",
"street": "sample_value",
"verifications": {
"address": true,
"full_name": true
}
},
"validation": {
"address": "full_match",
"full_name": "full_match"
}
}
]
}
PARTIAL_MATCH: لم يتطابق حقل واحد أو أكثر من الحقول التي تقارنها هذه الخدمة تطابقًا كاملًا. في هذا المثال، لم يتطابق full_name، بينما تطابق address.{
"request_id": "req_01H…",
"status": "In Review",
"issuing_state": "SGP",
"match_type": "partial_match",
"validations": [
{
"outcome_code": "PARTIAL_MATCH",
"service_id": "sgp_utility",
"service_name": "Singapore Utility",
"source_data": {
"address": "123 Sample Street",
"address_match_score": "1.000",
"city": "Sample City",
"date_of_birth": "1990-01-01",
"first_name": "John",
"full_name": "John Doe",
"last_name": "Doe",
"name_match_score": "1.000",
"postal_code": "10001",
"street": "sample_value",
"verifications": {
"address": true,
"full_name": false
}
},
"validation": {
"address": "full_match",
"full_name": "no_match"
}
}
]
}
NO_MATCH: لم يُرجع السجل أي تطابق للبيانات المُرسلة.{
"request_id": "req_01H…",
"status": "Declined",
"issuing_state": "SGP",
"match_type": "no_match",
"validations": [
{
"outcome_code": "NO_MATCH",
"service_id": "sgp_utility",
"service_name": "Singapore Utility",
"source_data": {
"address": "NO_MATCH",
"full_name": "NO_MATCH"
},
"validation": {
"address": "no_match",
"full_name": "no_match"
}
}
]
}
البيانات المُرجعة
تعتمد الحقول الدقيقة الظاهرة فيsource_data على ما يُرجعه السجل. يوثّق المثال المُولَّد لـ sgp_utility حاليًا هذا الشكل الموحّد:
addressaddress_match_scorecitydate_of_birthfirst_namefull_namelast_namename_match_scorepostal_codestreet
الأسعار واتفاقيات مستوى الخدمة
تُحتسب استعلامات Singapore Utility فقط عندما تتلقى Didit نتيجة حاسمة من مصدر التحقق.- سعر كل استدعاء: $2.82 USD.
- الفوترة: لكل استعلام ناجح. لا تُحتسب رسوم عندما يكون السجل غير متاح، أو عندما تكون الحقول المطلوبة مفقودة، أو عندما يُرفض الطلب قبل وصوله إلى المصدر.
- زمن الاستجابة: المئين 95 (p95) النموذجي أقل من ثانيتين.
- التوفر: 99.9% لكل ربع سنة من جانب Didit؛ ويختلف توفر المصدر النهائي حسب الدولة ومجموعة البيانات.
مواصلة القراءة
آخر تعديل في ٧ نوفمبر ٢٠٢٦