GELİŞTİRİCİLER
Bir POST isteğiyle başlar, imzalı bir webhook ile biter.
Oturumu sunucu tarafında açarsınız, kullanıcıyı dönen adrese gönderirsiniz. Tenant API anahtarı hiçbir zaman tarayıcıya inmez; SDK 15 dakika geçerli kısa ömürlü bir JWT ile çalışır.
- → Sandbox sınırsız ve ücretsiz — entegrasyonda hiçbir ücret düşmez
- → Web (iframe + postMessage), Flutter ve React Native SDK
- → Oturum 60 dk, erişim jetonu 15 dk geçerli
- → Webhook HMAC-SHA256 imzalı; 30 sn → 1 sa aralıklarla 5 deneme
curl -X POST https://api.idotta.com/v1/sessions/ \
-H "X-Api-Key: $IDOTTA_KEY" \
-H "Content-Type: application/json" \
-d '{ "applicant_external_id": "user-42",
"modules": ["document", "liveness"] }'
# → 201
{ "session_id": "550e8400-…",
"access_token": "eyJ…",
"sdk_url": "https://verify.idotta.com/session/550e8400-…?token=eyJ…",
"status": "created",
"environment": "sandbox",
"expires_at": "2026-09-20T13:00:00Z" }const res = await fetch("https://api.idotta.com/v1/sessions/", {
method: "POST",
headers: {
"X-Api-Key": process.env.IDOTTA_KEY,
"Content-Type": "application/json",
},
body: JSON.stringify({
applicant_external_id: "user-42",
modules: ["document", "liveness"],
}),
});
const { sdk_url } = await res.json();
// Kullanıcıyı sdk_url'e gönderin — API anahtarı tarayıcıya inmez.import os, requests
r = requests.post(
"https://api.idotta.com/v1/sessions/",
headers={"X-Api-Key": os.environ["IDOTTA_KEY"]},
json={"applicant_external_id": "user-42",
"modules": ["document", "liveness"]},
timeout=10,
)
r.raise_for_status()
session = r.json() # session_id · access_token · sdk_urlimport 'package:idv_sdk/idv_sdk.dart';
// session_id + token backend'inizden gelir — API anahtarı uygulamaya gömülmez
final result = await IdvSdk.startVerification(
context,
baseUrl: 'https://api.idotta.com',
sessionId: sessionId,
token: accessToken, // 15 dk geçerli
);
switch (result?.status) {
case 'approved': // doğrulandı
case 'review': // manuel incelemede — webhook'u bekleyin
case 'rejected': // reddedildi
case 'expired': // oturum süresi doldu
case null: // kullanıcı akıştan çıktı
}# Başlıklar
X-Signature: sha256=<hex>
X-Event-Id: <uuid>
X-Event-Type: session.approved
# Python doğrulama
import hmac, hashlib
def verify(raw_body: bytes, header: str, secret: str) -> bool:
expected = hmac.new(secret.encode(), raw_body, hashlib.sha256).hexdigest()
return hmac.compare_digest(header.removeprefix("sha256="), expected)
# Teslim edilemeyen webhook artan aralıklarla (30 sn → 1 sa) 5 kez denenir.Nereden başlamalı?
- AKIŞAkış & kontroller18 belge kontrolü, ağırlıklar, eşikler ve karar kuralları — hepsi gerçek değerleriyle.
- FİYATModül fiyatlarıHangi modül ne kadar, ne zaman ücretlendirilir, hangi durumda ücretlendirilmez.
- GÜVENLİKGüvenlik & uyumKVKK m.12 ve GDPR Art.32 kapsamında fiilen uygulanan teknik ve idari tedbirler.
- SANDBOXAPI dokümanıTam API referansı ve sandbox anahtarları için bizimle iletişime geçin.
Doğrulama kararı kadar, kararın nasıl alındığının kanıtı da önemlidir.