curl -X POST "https://verification.didit.me/v3/database-validation/" \
-H "x-api-key: YOUR_API_KEY" \
-F "issuing_state=PAN" \
-F "services=pan_cedula_sib_plus" \
-F "vendor_data=user-1234" \
-F "personal_number=8-123-456" \
-F "selfie=@./selfie.jpg"
from didit import Didit
# Reads DIDIT_API_KEY.
client = Didit()
result = client.database_validation.validate(
issuing_state="PAN",
services=["pan_cedula_sib_plus"],
personal_number="8-123-456",
vendor_data="user-1234",
selfie=open("selfie.jpg", "rb"),
)
print(result)
import Didit, { fileFromPath } from "@didit-protocol/sdk-node";
// Reads DIDIT_API_KEY.
const didit = new Didit();
const result = await didit.databaseValidation.validate({
issuing_state: "PAN",
services: ["pan_cedula_sib_plus"],
personal_number: "8-123-456",
vendor_data: "user-1234",
selfie: await fileFromPath("selfie.jpg"),
});
console.log(result);
ctx := context.Background()
// Reads DIDIT_API_KEY.
client := didit.NewClient()
result, err := client.DatabaseValidation.Validate(ctx, didit.DatabaseValidationValidateParams{
IssuingState: "PAN",
Services: didit.Some([]string{"pan_cedula_sib_plus"}),
PersonalNumber: didit.String("8-123-456"),
VendorData: didit.String("user-1234"),
Selfie: didit.Some(didit.FileFromPath("selfie.jpg")),
})
if err != nil {
log.Fatal(err)
}
fmt.Printf("%+v\n", result)
import java.nio.file.Path;
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("PAN")
.services(List.of("pan_cedula_sib_plus"))
.personalNumber("8-123-456")
.vendorData("user-1234")
.selfie(Path.of("selfie.jpg"))
.build());
System.out.println(result);
<?php
require 'vendor/autoload.php';
use Didit\DiditClient;
use Didit\File;
// Reads DIDIT_API_KEY.
$didit = new DiditClient();
$result = $didit->databaseValidation->validate([
'issuing_state' => 'PAN',
'services' => ['pan_cedula_sib_plus'],
'personal_number' => '8-123-456',
'vendor_data' => 'user-1234',
'selfie' => File::fromPath('selfie.jpg'),
]);
print_r($result->toArray());
require "didit"
# Reads DIDIT_API_KEY.
didit = Didit::Client.new
result = didit.database_validation.validate(
issuing_state: "PAN",
services: ["pan_cedula_sib_plus"],
personal_number: "8-123-456",
vendor_data: "user-1234",
selfie: Pathname("selfie.jpg")
)
puts result.to_h
using System;
using System.Text.Json;
using Didit;
// Reads DIDIT_API_KEY.
using var client = new DiditClient();
var result = await client.DatabaseValidation.ValidateAsync(new DatabaseValidationValidateParams
{
IssuingState = "PAN",
Services = new string[] { "pan_cedula_sib_plus" },
PersonalNumber = "8-123-456",
VendorData = "user-1234",
Selfie = FileUpload.FromPath("selfie.jpg"),
});
Console.WriteLine(JsonSerializer.Serialize(result));
{
"request_id": "req_01H…",
"status": "Approved",
"issuing_state": "PAN",
"match_type": "full_match",
"validations": [
{
"outcome_code": "MATCH",
"service_id": "pan_cedula_sib_plus",
"service_name": "Panama - Cédula with biometric face-match (SIB Plus, elevated tier)",
"source_data": {
"date_of_birth": "1990-01-01",
"expiration_date": "1990-01-01",
"full_name": "John Doe",
"gender": "M",
"identification_number": "SAMPLE-ID-12345",
"issue_date": "1990-01-01",
"last_name": "Doe",
"place_of_birth": "sample_value",
"signature": "sample_value"
},
"validation": {
"identification_number": "full_match"
}
}
]
}
{
"request_id": "req_01H…",
"status": "Declined",
"issuing_state": "PAN",
"match_type": "no_match",
"validations": [
{
"outcome_code": "NO_MATCH",
"service_id": "pan_cedula_sib_plus",
"service_name": "Panama - Cédula with biometric face-match (SIB Plus, elevated tier)",
"source_data": {
"identification_number": "NO_MATCH"
},
"validation": {
"identification_number": "no_match"
}
}
]
}
{
"request_id": "req_01H…",
"status": "Declined",
"issuing_state": "PAN",
"match_type": "no_match",
"validations": [
{
"outcome_code": "BIOMETRIC_NO_MATCH",
"service_id": "pan_cedula_sib_plus",
"service_name": "Panama - Cédula with biometric face-match (SIB Plus, elevated tier)",
"source_data": {
"identification_number": "NO_MATCH"
},
"validation": {
"identification_number": "no_match"
}
}
]
}
{
"request_id": "req_01H…",
"status": "In Review",
"issuing_state": "PAN",
"match_type": "no_match",
"validations": [
{
"outcome_code": "BIOMETRIC_IMAGE_UNUSABLE",
"service_id": "pan_cedula_sib_plus",
"service_name": "Panama - Cédula with biometric face-match (SIB Plus, elevated tier)",
"source_data": {
"identification_number": "NO_MATCH"
},
"validation": {
"identification_number": "no_match"
}
}
]
}
{
"request_id": "req_01H…",
"status": "In Review",
"issuing_state": "PAN",
"match_type": "full_match",
"validations": [
{
"outcome_code": "DECEASED",
"service_id": "pan_cedula_sib_plus",
"service_name": "Panama - Cédula with biometric face-match (SIB Plus, elevated tier)",
"source_data": {
"date_of_birth": "1990-01-01",
"expiration_date": "1990-01-01",
"full_name": "John Doe",
"gender": "M",
"identification_number": "SAMPLE-ID-12345",
"issue_date": "1990-01-01",
"last_name": "Doe",
"place_of_birth": "sample_value",
"signature": "sample_value"
},
"validation": {
"identification_number": "full_match"
}
}
]
}
🇵🇦 Панама
Панама: проверка Cédula с сравнением лиц API
Didit: проверка Cédula Панамы по базе SIB Plus (повышенный уровень) с сравнением лиц. Оплата за вызов от $1.50, без контрактов.
POST
/
v3
/
database-validation
/
curl -X POST "https://verification.didit.me/v3/database-validation/" \
-H "x-api-key: YOUR_API_KEY" \
-F "issuing_state=PAN" \
-F "services=pan_cedula_sib_plus" \
-F "vendor_data=user-1234" \
-F "personal_number=8-123-456" \
-F "selfie=@./selfie.jpg"
from didit import Didit
# Reads DIDIT_API_KEY.
client = Didit()
result = client.database_validation.validate(
issuing_state="PAN",
services=["pan_cedula_sib_plus"],
personal_number="8-123-456",
vendor_data="user-1234",
selfie=open("selfie.jpg", "rb"),
)
print(result)
import Didit, { fileFromPath } from "@didit-protocol/sdk-node";
// Reads DIDIT_API_KEY.
const didit = new Didit();
const result = await didit.databaseValidation.validate({
issuing_state: "PAN",
services: ["pan_cedula_sib_plus"],
personal_number: "8-123-456",
vendor_data: "user-1234",
selfie: await fileFromPath("selfie.jpg"),
});
console.log(result);
ctx := context.Background()
// Reads DIDIT_API_KEY.
client := didit.NewClient()
result, err := client.DatabaseValidation.Validate(ctx, didit.DatabaseValidationValidateParams{
IssuingState: "PAN",
Services: didit.Some([]string{"pan_cedula_sib_plus"}),
PersonalNumber: didit.String("8-123-456"),
VendorData: didit.String("user-1234"),
Selfie: didit.Some(didit.FileFromPath("selfie.jpg")),
})
if err != nil {
log.Fatal(err)
}
fmt.Printf("%+v\n", result)
import java.nio.file.Path;
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("PAN")
.services(List.of("pan_cedula_sib_plus"))
.personalNumber("8-123-456")
.vendorData("user-1234")
.selfie(Path.of("selfie.jpg"))
.build());
System.out.println(result);
<?php
require 'vendor/autoload.php';
use Didit\DiditClient;
use Didit\File;
// Reads DIDIT_API_KEY.
$didit = new DiditClient();
$result = $didit->databaseValidation->validate([
'issuing_state' => 'PAN',
'services' => ['pan_cedula_sib_plus'],
'personal_number' => '8-123-456',
'vendor_data' => 'user-1234',
'selfie' => File::fromPath('selfie.jpg'),
]);
print_r($result->toArray());
require "didit"
# Reads DIDIT_API_KEY.
didit = Didit::Client.new
result = didit.database_validation.validate(
issuing_state: "PAN",
services: ["pan_cedula_sib_plus"],
personal_number: "8-123-456",
vendor_data: "user-1234",
selfie: Pathname("selfie.jpg")
)
puts result.to_h
using System;
using System.Text.Json;
using Didit;
// Reads DIDIT_API_KEY.
using var client = new DiditClient();
var result = await client.DatabaseValidation.ValidateAsync(new DatabaseValidationValidateParams
{
IssuingState = "PAN",
Services = new string[] { "pan_cedula_sib_plus" },
PersonalNumber = "8-123-456",
VendorData = "user-1234",
Selfie = FileUpload.FromPath("selfie.jpg"),
});
Console.WriteLine(JsonSerializer.Serialize(result));
{
"request_id": "req_01H…",
"status": "Approved",
"issuing_state": "PAN",
"match_type": "full_match",
"validations": [
{
"outcome_code": "MATCH",
"service_id": "pan_cedula_sib_plus",
"service_name": "Panama - Cédula with biometric face-match (SIB Plus, elevated tier)",
"source_data": {
"date_of_birth": "1990-01-01",
"expiration_date": "1990-01-01",
"full_name": "John Doe",
"gender": "M",
"identification_number": "SAMPLE-ID-12345",
"issue_date": "1990-01-01",
"last_name": "Doe",
"place_of_birth": "sample_value",
"signature": "sample_value"
},
"validation": {
"identification_number": "full_match"
}
}
]
}
{
"request_id": "req_01H…",
"status": "Declined",
"issuing_state": "PAN",
"match_type": "no_match",
"validations": [
{
"outcome_code": "NO_MATCH",
"service_id": "pan_cedula_sib_plus",
"service_name": "Panama - Cédula with biometric face-match (SIB Plus, elevated tier)",
"source_data": {
"identification_number": "NO_MATCH"
},
"validation": {
"identification_number": "no_match"
}
}
]
}
{
"request_id": "req_01H…",
"status": "Declined",
"issuing_state": "PAN",
"match_type": "no_match",
"validations": [
{
"outcome_code": "BIOMETRIC_NO_MATCH",
"service_id": "pan_cedula_sib_plus",
"service_name": "Panama - Cédula with biometric face-match (SIB Plus, elevated tier)",
"source_data": {
"identification_number": "NO_MATCH"
},
"validation": {
"identification_number": "no_match"
}
}
]
}
{
"request_id": "req_01H…",
"status": "In Review",
"issuing_state": "PAN",
"match_type": "no_match",
"validations": [
{
"outcome_code": "BIOMETRIC_IMAGE_UNUSABLE",
"service_id": "pan_cedula_sib_plus",
"service_name": "Panama - Cédula with biometric face-match (SIB Plus, elevated tier)",
"source_data": {
"identification_number": "NO_MATCH"
},
"validation": {
"identification_number": "no_match"
}
}
]
}
{
"request_id": "req_01H…",
"status": "In Review",
"issuing_state": "PAN",
"match_type": "full_match",
"validations": [
{
"outcome_code": "DECEASED",
"service_id": "pan_cedula_sib_plus",
"service_name": "Panama - Cédula with biometric face-match (SIB Plus, elevated tier)",
"source_data": {
"date_of_birth": "1990-01-01",
"expiration_date": "1990-01-01",
"full_name": "John Doe",
"gender": "M",
"identification_number": "SAMPLE-ID-12345",
"issue_date": "1990-01-01",
"last_name": "Doe",
"place_of_birth": "sample_value",
"signature": "sample_value"
},
"validation": {
"identification_number": "full_match"
}
}
]
}
Проверяет панамскую Cédula с помощью биометрического сравнения лиц: повышенный уровень SIB Plus. Источник данных тот же, что и у стандартного уровня SIB, но с более строгими биометрическими порогами и расширенными метаданными совпадения. Didit предоставляет эту службу через
POST /v3/database-validation/, чтобы вы могли сверить переданные данные с авторитетным источником и получить нормализованные результаты сопоставления.
Охват
- Охват: —
- Страна: Панама
- ID службы:
pan_cedula_sib_plus - Домен данных: Идентификация
- Категория: NationalIDRegistry
Входные данные
| Поле | Обязательное | Пример |
|---|---|---|
personal_number | Да | 8-123-456 |
selfie | Да | @./selfie.jpg |
vendor_data | Нет | user-1234 |
- Обязательные входные данные:
personal_number,selfie - Необязательные входные данные:
vendor_data - Согласие: не требуется
- Доступность в сценарии: доступна в сценарии
- Охват: —
- Цена: $1.50 за успешный запрос
Параметры тела запроса
string
по умолчанию:"PAN"
обязательно
Код страны ISO 3166-1 alpha-3 для этой службы проверки по базам данных.Пример:
PANstring
по умолчанию:"pan_cedula_sib_plus"
обязательно
Массив, содержащий ID этой службы. Закрепление службы ограничивает запрос этой конкретной базой данных.Пример:
pan_cedula_sib_plusstring
по умолчанию:"8-123-456"
обязательно
Персональный идентификационный номер, специфичный для данной страны.Пример:
8-123-456file
обязательно
Файл изображения селфи для биометрической проверки по базам данных. Допустимые форматы: JPEG, PNG или WebP.Пример:
@./selfie.jpgstring
по умолчанию:"user-1234"
Ваш стабильный идентификатор этого человека, например внутренний ID пользователя. Didit использует его, чтобы связать отдельные проверки с одним и тем же конечным пользователем и уменьшить шум при обнаружении дубликатов.Пример:
user-1234Правила для входных данных и примечания к валидации
- Панамская Cédula (минимум 5 символов)
personal_numberдолжен содержать от 5 до 20 символов.personal_numberдолжен использовать заглавные буквы.personal_numberдолжен соответствовать(?:\d{1,2}(?:-?(?:AV|PI))?|PE|E|N)[\d-]*.
Как вызвать
curl -X POST "https://verification.didit.me/v3/database-validation/" \
-H "x-api-key: YOUR_API_KEY" \
-F "issuing_state=PAN" \
-F "services=pan_cedula_sib_plus" \
-F "vendor_data=user-1234" \
-F "personal_number=8-123-456" \
-F "selfie=@./selfie.jpg"
from didit import Didit
# Reads DIDIT_API_KEY.
client = Didit()
result = client.database_validation.validate(
issuing_state="PAN",
services=["pan_cedula_sib_plus"],
personal_number="8-123-456",
vendor_data="user-1234",
selfie=open("selfie.jpg", "rb"),
)
print(result)
import Didit, { fileFromPath } from "@didit-protocol/sdk-node";
// Reads DIDIT_API_KEY.
const didit = new Didit();
const result = await didit.databaseValidation.validate({
issuing_state: "PAN",
services: ["pan_cedula_sib_plus"],
personal_number: "8-123-456",
vendor_data: "user-1234",
selfie: await fileFromPath("selfie.jpg"),
});
console.log(result);
ctx := context.Background()
// Reads DIDIT_API_KEY.
client := didit.NewClient()
result, err := client.DatabaseValidation.Validate(ctx, didit.DatabaseValidationValidateParams{
IssuingState: "PAN",
Services: didit.Some([]string{"pan_cedula_sib_plus"}),
PersonalNumber: didit.String("8-123-456"),
VendorData: didit.String("user-1234"),
Selfie: didit.Some(didit.FileFromPath("selfie.jpg")),
})
if err != nil {
log.Fatal(err)
}
fmt.Printf("%+v\n", result)
import java.nio.file.Path;
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("PAN")
.services(List.of("pan_cedula_sib_plus"))
.personalNumber("8-123-456")
.vendorData("user-1234")
.selfie(Path.of("selfie.jpg"))
.build());
System.out.println(result);
<?php
require 'vendor/autoload.php';
use Didit\DiditClient;
use Didit\File;
// Reads DIDIT_API_KEY.
$didit = new DiditClient();
$result = $didit->databaseValidation->validate([
'issuing_state' => 'PAN',
'services' => ['pan_cedula_sib_plus'],
'personal_number' => '8-123-456',
'vendor_data' => 'user-1234',
'selfie' => File::fromPath('selfie.jpg'),
]);
print_r($result->toArray());
require "didit"
# Reads DIDIT_API_KEY.
didit = Didit::Client.new
result = didit.database_validation.validate(
issuing_state: "PAN",
services: ["pan_cedula_sib_plus"],
personal_number: "8-123-456",
vendor_data: "user-1234",
selfie: Pathname("selfie.jpg")
)
puts result.to_h
using System;
using System.Text.Json;
using Didit;
// Reads DIDIT_API_KEY.
using var client = new DiditClient();
var result = await client.DatabaseValidation.ValidateAsync(new DatabaseValidationValidateParams
{
IssuingState = "PAN",
Services = new string[] { "pan_cedula_sib_plus" },
PersonalNumber = "8-123-456",
VendorData = "user-1234",
Selfie = FileUpload.FromPath("selfie.jpg"),
});
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": "PAN",
"match_type": "full_match",
"validations": [
{
"outcome_code": "MATCH",
"service_id": "pan_cedula_sib_plus",
"service_name": "Panama - Cédula with biometric face-match (SIB Plus, elevated tier)",
"source_data": {
"date_of_birth": "1990-01-01",
"expiration_date": "1990-01-01",
"full_name": "John Doe",
"gender": "M",
"identification_number": "SAMPLE-ID-12345",
"issue_date": "1990-01-01",
"last_name": "Doe",
"place_of_birth": "sample_value",
"signature": "sample_value"
},
"validation": {
"identification_number": "full_match"
}
}
]
}
NO_MATCH: реестр не нашёл совпадения для переданных данных.{
"request_id": "req_01H…",
"status": "Declined",
"issuing_state": "PAN",
"match_type": "no_match",
"validations": [
{
"outcome_code": "NO_MATCH",
"service_id": "pan_cedula_sib_plus",
"service_name": "Panama - Cédula with biometric face-match (SIB Plus, elevated tier)",
"source_data": {
"identification_number": "NO_MATCH"
},
"validation": {
"identification_number": "no_match"
}
}
]
}
BIOMETRIC_NO_MATCH: оценка совпадения лиц ниже порога принятия: на селфи изображён другой человек, чем на фотографии из реестра.{
"request_id": "req_01H…",
"status": "Declined",
"issuing_state": "PAN",
"match_type": "no_match",
"validations": [
{
"outcome_code": "BIOMETRIC_NO_MATCH",
"service_id": "pan_cedula_sib_plus",
"service_name": "Panama - Cédula with biometric face-match (SIB Plus, elevated tier)",
"source_data": {
"identification_number": "NO_MATCH"
},
"validation": {
"identification_number": "no_match"
}
}
]
}
BIOMETRIC_IMAGE_UNUSABLE: селфи не удалось обработать (оно пустое, на нём нет лица или оно имеет низкое качество, либо реестр не смог его прочитать). Попросите пользователя переснять селфи.{
"request_id": "req_01H…",
"status": "In Review",
"issuing_state": "PAN",
"match_type": "no_match",
"validations": [
{
"outcome_code": "BIOMETRIC_IMAGE_UNUSABLE",
"service_id": "pan_cedula_sib_plus",
"service_name": "Panama - Cédula with biometric face-match (SIB Plus, elevated tier)",
"source_data": {
"identification_number": "NO_MATCH"
},
"validation": {
"identification_number": "no_match"
}
}
]
}
DECEASED: личность подтверждена, но реестр отмечает этого человека как умершего.{
"request_id": "req_01H…",
"status": "In Review",
"issuing_state": "PAN",
"match_type": "full_match",
"validations": [
{
"outcome_code": "DECEASED",
"service_id": "pan_cedula_sib_plus",
"service_name": "Panama - Cédula with biometric face-match (SIB Plus, elevated tier)",
"source_data": {
"date_of_birth": "1990-01-01",
"expiration_date": "1990-01-01",
"full_name": "John Doe",
"gender": "M",
"identification_number": "SAMPLE-ID-12345",
"issue_date": "1990-01-01",
"last_name": "Doe",
"place_of_birth": "sample_value",
"signature": "sample_value"
},
"validation": {
"identification_number": "full_match"
}
}
]
}
Возвращаемые данные
Точный набор полей вsource_data зависит от того, что возвращает реестр. Сгенерированный пример для pan_cedula_sib_plus сейчас описывает такую нормализованную структуру:
date_of_birthexpiration_datefull_namegenderidentification_numberissue_datelast_nameplace_of_birthsignature
Цены и SLA
Для Панамы, Cédula с биометрическим сравнением лиц (SIB Plus, повышенный уровень): запросы оплачиваются только тогда, когда Didit получает окончательный результат от источника проверки.- Цена за вызов: $1.50 USD.
- Оплата: за успешный запрос. Плата не взимается, если реестр недоступен, если не заполнены обязательные поля или если запрос отклонён до обращения к источнику.
- Задержка: обычно p95 < 2 с.
- Доступность: 99.9% за квартал со стороны Didit; доступность источника данных зависит от страны и набора данных.
Что почитать дальше
Последнее изменение 7 ноября 2026 г.