DEVELOPERS
It starts with one POST and ends with a signed webhook.
You open the session server-side and send the user to the returned URL. The tenant API key never reaches the browser; the SDK works with a short-lived JWT valid for 15 minutes.
- Sandbox is unlimited and free — nothing is charged during integration
- Web SDK (iframe + postMessage)
- Sessions live 60 min, access tokens 15 min
- Webhooks are HMAC-SHA256 signed; 5 retries from 30 s to 1 h
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": "not_started",
"status_label": "Not Started",
"step": "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();
// Send the user to sdk_url — the API key never reaches the browser.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_url# Headers
X-Signature: sha256=<hex>
X-Event-Id: <uuid>
X-Event-Type: session.approved
# Python verification
import hmac, hashlib
def verify(raw_body: bytes, header: str | None, secret: str) -> bool:
expected = hmac.new(secret.encode(), raw_body, hashlib.sha256).hexdigest()
return hmac.compare_digest((header or "").removeprefix("sha256="), expected)
# Undelivered webhooks are retried 5 times with growing delays (30 s → 1 h).Where to start
- FLOWFlow & checks18 document checks, weights, thresholds and decision rules — all at their real values.
- PRICINGModule pricingWhat each module costs, when it is billed and when it is not.
- SECURITYSecurity & complianceThe technical and administrative measures actually implemented under KVKK Art.12 and GDPR Art.32.
- APIAPI referenceEvery endpoint, status and webhook event — the full public reference.
The proof of how a decision was made matters as much as the decision itself.