API referansı
Kimlik doğrulama API referansı.
Çağırabileceğiniz her uç nokta, geri göreceğiniz her alan ve bir webhook geldiğinde ne yapmanız gerektiği. Kesin alan türleri için, kendi API kaynağınızdaki /docs adresinde yer alan canlı OpenAPI belgesini esas kabul edin — bu sayfa, bunun sade dildeki sürümüdür.
Temel URL ve ortamlar
Tek temel URL. İki ortam.
Her istek aynı ana makineye gider. Hangi ortamda olduğunuzu tamamen hangi API anahtarını gönderdiğiniz belirler.
| Temel URL (bu dokümantasyon) | https://api.shieldid.ca — illustrative; your production API origin is published together with your API keys. |
|---|---|
| Kimlik doğrulama başlığı | X-Api-Key: <anahtarınız>, aşağıda belirtilen iki herkese açık uç nokta dışındaki her istekte. |
| Sandbox anahtar öneki | vk_sand_… — bu anahtarla oluşturulan oturumlar environment: "sandbox" olarak işaretlenir ve asla ücretlendirilmez. |
| Üretim anahtar öneki | vk_live_… — aynı istekler, planınıza göre ücretlendirilir. |
| İçerik türü | Her istek gövdesinde ve yanıtta application/json. |
Uç noktalar
v1'in tamamı.
Altı JSON uç noktası; ayrıca JSON olmayan, yalnızca bağlantı verdiğiniz barındırılan bir sayfa ve herkese açık bir kimlik bilgisi kontrolü.
| Endpoint | Auth | What it does |
|---|---|---|
| POST /v1/sessions | X-Api-Key | Bir doğrulama oturumu oluşturun. return_url ve webhook_url gerektirir. session_id, verification_url ve status: "PENDING" döndürür. |
| GET /v1/sessions/{id} | X-Api-Key | Bir oturumun durumu ve öne çıkan alanları: status, confidence, environment. |
| GET /v1/sessions/{id}/result | X-Api-Key | Bir oturum VERIFIED veya FAILED durumuna ulaştığında tam sonuç: person, kontrol bazında sonuçlar, confidence, verified_until. |
| DELETE /v1/sessions/{id} | X-Api-Key | Hâlâ PENDING veya IN_PROGRESS durumunda olan bir oturumu iptal edin. Zaten VERIFIED, FAILED veya EXPIRED durumundaki bir oturum iptal edilemez. |
| GET /v1/credentials/{token} | None — public | Doğrulanmış bir kimlik bilgisinin şu anda geçerli olup olmadığını kontrol edin. API anahtarı gerekmez, dolayısıyla tarayıcıdan çağrılabilir. Not: bugünkü yanıt yalnızca geçerli/geçersiz bilgisini değil, doğrulanan kişinin adını ve belge türünü/ülkesini de içerir — bu bağlantıyı bunu görmesini istemediğiniz üçüncü taraflarla paylaşmayın. |
| GET /v1/pricing/{country} | X-Api-Key | İki harfli ISO 3166-1 ülke kodu için ülke bazında fiyatlandırma. |
| /v/{session_id} | Barındırılan doğrulama sayfası — bir oturumun döndürdüğü verification_url. Masaüstünde bir QR kod gösterilir; kodu taramak, başvuru sahibinin telefonuna belgesini ve selfie'sini çekmesi için aynı bağlantıyı iletir. |
|---|---|
| /c/{session_id} | Doğrulanmış tek bir oturum için herkese açık, kimlik doğrulaması gerektirmeyen bir kimlik bilgisi kontrol sayfası. Not: bugünkü yanıt yalnızca geçerli/geçersiz bilgisini değil, doğrulanan kişinin adını ve belge türünü/ülkesini de içerir — bu bağlantıyı bunu görmesini istemediğiniz üçüncü taraflarla paylaşmayın. |
| /docs | Hesabınızın API kaynağı için canlı, etkileşimli OpenAPI referansı. |
Oturum oluşturma
POST /v1/sessions, baştan sona.
İstek ve geri dönen yanıtın tam olarak ne olduğu.
curl -X POST https://api.shieldid.ca/v1/sessions \
-H "X-Api-Key: vk_sand_your_key" \
-H "Content-Type: application/json" \
-d '{
"return_url": "https://yourapp.example/verified",
"webhook_url": "https://yourapp.example/hooks/shieldid",
"expected_name": "Jordan Smith",
"locale": "en",
"metadata": { "application_id": "app_9182" }
}'| return_url | string, zorunlu — Başvuru sahibinin işlemi bitirdikten sonra geri yönlendirileceği adres. http veya https olmalıdır. |
|---|---|
| webhook_url | string, zorunlu — İmzalı sonucun iletileceği adres. Aşağıdaki Webhook'lar bölümüne bakın. |
| expected_name | string, zorunlu — Belgede olmasını beklediğiniz ad; kimliğin gerçekte ne dediğiyle karşılaştırmak için kullanılır. |
| expected_dob / expected_address | string, isteğe bağlı — Sağlandığında belgeyle çapraz kontrol edilir; doğrulama yapmak için zorunlu değildir. |
| locale | string, isteğe bağlı — "en" veya "fr". Başvuru sahibinin gördüğü barındırılan sayfanın dilini belirler. |
| metadata | object, isteğe bağlı — Kendi referans verileriniz — bir başvuru kimliği, bir kiracı kimliği veya sonuçta ve webhook'ta değiştirilmeden geri döndürülmesini istediğiniz herhangi bir şey. |
Sonuç
GET /v1/sessions/{id}/result — yanıt yapısı.
Aynı yapı webhook yükünde de iletilir; bu nedenle bu uç noktayı yoklamanız (polling) nadiren gerekir.
| session_id | Oluşturduğunuz kimlik. |
|---|---|
| status | PENDING, IN_PROGRESS, VERIFIED, FAILED veya EXPIRED. |
| environment | "sandbox" veya "production"; oturumu oluşturan anahtarla eşleşir. |
| person | Belgeden okunan alanlar: ad, doğum tarihi, belge türü, belgenin ülkesi ve yetki alanı, adres. |
| checks | Her kontrol için tek bir karar — aşağıya bakın. Asla tek bir anlaşılmaz puan değil. |
| confidence | Doğrulama için tek bir genel değer. Yüz eşleşmesi dahil tekil kontroller, sabit bir karar çizgisine göre yine kendi başlarına raporlanır; bu alan onların yerini almaz. |
| verified_until | VERIFIED durumundaki bir oturumda sonucun ne kadar süre güncel kabul edildiği. |
| failure_reason | FAILED durumundaki bir oturumda ayarlanır — örneğin FACE_MATCH_BELOW_THRESHOLD veya CANCELLED_BY_API. Aksi halde null. |
| metadata | Oturumu oluştururken gönderdiğiniz her şey, değiştirilmeden. |
{
"session_id": "ses_9f2c1a",
"status": "VERIFIED",
"environment": "sandbox",
"person": {
"name": "Jordan Smith",
"dob": "1994-03-11",
"document_type": "drivers_licence",
"document_country": "CA",
"document_jurisdiction": "ON"
},
"checks": {
"document": "PASS",
"liveness": "PASS",
"antispoof": "PASS",
"face_match": "PASS"
},
"confidence": 88,
"verified_until": "2027-03-11T00:00:00Z",
"failure_reason": null,
"metadata": { "application_id": "app_9182" }
}Add-onchecks.document, checks.liveness, checks.antispoof ve checks.face_match her biri PASS, FAIL veya SKIPPED değerine çözümlenir. Gözetim listesi taraması (checks.sanctions — CLEAR, MATCH veya SKIPPED) ek bir üründür ve yalnızca etkinleştiren hesaplarda görünür.
Oturum yaşam döngüsü
Beş durum, tek yol.
Bir oturum kendi kendine ilerler; durum makinesini siz yönetmezsiniz, yalnızca okursunuz.
| PENDING | Oluşturuldu. Henüz kimse verification_url bağlantısını açmadı. |
|---|---|
| IN_PROGRESS | Başvuru sahibi bağlantıyı açtı ve yakalama akışının bir yerinde. |
| VERIFIED | Tüm kontroller çalıştı ve sonuç hazır. Son durum — sonuç uç noktasını çağırın veya webhook'u okuyun. |
| FAILED | En az bir kontrol geçilemedi. failure_reason hangisi olduğunu belirtir. Çok yakında: oturumu PENDING durumuna sıfırlayan bir yeniden deneme — o zamana kadar FAILED durumunu son durum olarak değerlendirin ve başvuru sahibi tekrar denemek isterse yeni bir oturum oluşturun. |
| EXPIRED | Kimse zamanında tamamlamadı. Oturumlar varsayılan bir sürenin (30 dakika) ardından otomatik olarak sona erer; tekrar denemek için yeni bir oturum oluşturun. |
DELETE /v1/sessions/{id}, PENDING veya IN_PROGRESS durumundaki bir oturumu erkenden iptal eder. Zaten VERIFIED, FAILED veya EXPIRED durumuna ulaşmış bir oturum iptal edilemez — zaten tamamlanmıştır.
Hatalar
Nelere hazırlıklı olmalısınız.
Bu, bugün için kodlamaya değer kısa listedir. Hata kodlarının ve yüklerin tam ve güncel kümesi, /docs adresindeki canlı OpenAPI'de belgelenmiştir.
| Status | Code | Meaning |
|---|---|---|
| 401 | UNAUTHORIZED | X-Api-Key başlığı eksik. |
| 401 | INVALID_KEY_FORMAT | Anahtar vk_sand_ veya vk_live_ ile başlamıyor ya da hesaptaki bir anahtarla eşleşmiyor. |
| 403 | FORBIDDEN | Anahtar geçerli, ancak istediğiniz oturuma veya kaynağa erişimi yok. |
| 404 | NOT_FOUND | Bu kimliğe sahip bir oturum, kimlik bilgisi veya kaynak yok. |
| 409 | CONFLICT | Oturum, bu eyleme izin veren bir durumda değildir — örneğin zaten VERIFIED olan bir oturumu iptal etmeye çalışmak. |
| 422 | VALIDATION_ERROR | Gerekli bir alan eksik veya hatalı biçimlendirilmiş — örneğin return_url geçerli bir http veya https URL'si değil. |
Webhook'lar
İmzalanır, iletilir, yeniden denenir.
Bir oturum VERIFIED veya FAILED durumuna ulaştığında ShieldID, yukarıda belgelenen yapıyı webhook_url adresinize POST eder.
- Yukarıdaki sonuç yapısıyla eşleşen bir JSON gövdesiyle POST olarak iletilir.
- Ham istek gövdesi üzerinde HMAC-SHA256 ile imzalanır ve X-Bio-Signature başlığında gönderilir. Yüke güvenmeden önce bunu webhook gizli anahtarınıza karşı doğrulayın.
- Uç noktanız 2xx durum koduyla yanıt vermezse, doğrusal geri çekilmeyle en fazla üç kez yeniden denenir.
- Çok yakında: çözümlendiğinde ikinci bir webhook ileten, FAILED oturumu için yeniden deneme. Bugün için oturum başına bir webhook kuralını esas alın.
- Buradaki alan adları bu referansla eşleşir. Gerçekte gelen veri farklı görünüyorsa, bu sayfa yerine canlı yüke güvenin ve bize bildirin — alan listesi API ile uyumlu tutulur, tersi geçerli değildir.
İmzayı doğrulayın
import crypto from "node:crypto";
function isValidShieldIdSignature(rawBody, signatureHeader, secret) {
const expected = crypto.createHmac("sha256", secret).update(rawBody).digest("hex");
const provided = signatureHeader || "";
const a = Buffer.from(expected, "hex");
const b = Buffer.from(provided, "hex");
return a.length === b.length && crypto.timingSafeEqual(a, b);
}
// rawBody must be the exact, unparsed request body
app.post("/hooks/shieldid", express.raw({ type: "application/json" }), (req, res) => {
const ok = isValidShieldIdSignature(req.body, req.headers["x-bio-signature"], process.env.SHIELDID_WEBHOOK_SECRET);
if (!ok) return res.status(401).send("invalid signature");
const result = JSON.parse(req.body);
// result.session_id, result.status, result.checks, …
res.status(200).send("ok");
});İdempotentlik ve yeniden denemeler
İki kez çalıştırılması güvenli olan işleyiciler oluşturun.
Henüz ne oturum oluşturmada ne de webhook iletiminde özel bir idempotentlik anahtarı bulunuyor.
- Yeniden denenen bir webhook iletimi aynı oturum için birden fazla kez gelebilir. İşleyicinizi session_id + status üzerinden anahtarlayın ve sonucun yazılmasını idempotent hale getirin.
- Zaman aşımında POST /v1/sessions isteğini körü körüne yeniden denemeyin — önce oturumun oluşturulup oluşturulmadığını kontrol edin, aksi halde bir başvuru sahibi için iki oturum oluşabilir.
- Oturum oluşturma için özel bir Idempotency-Key başlığı planlanmaktadır.
YakındaOturum oluşturmada Idempotency-Key desteği
Güncel kalın
Bu referans değişir. Değişiklik günlüğünü takip edin.
Alan eklemeleri, yeni hata kodları ve uç nokta değişiklikleri buraya yansımadan önce orada duyurulur.
Sorular
Başvuru kılavuzu SSS.
Sonraki
Bu referansı uygulamaya geçirin.
Sandbox anahtarından doğrulanmış bir oturuma ve imzalı bir webhook'a sırasıyla ulaşmak için hızlı başlangıç kılavuzunu izleyin.