Snabbstart
Snabbstarten för identitetsverifiering.
Från sandbox-nyckel till första signerade webhook, steg för steg. Varje steg har ett fungerande exempel – kopiera det, byt in din egen nyckel och dina egna URL:er och kör det.
Steg för steg
Sju steg, en eftermiddag.
Skaffa en sandbox-nyckel
Sandbox-nycklar (prefix vk_sand_) utfärdas på begäran medan självbetjäningsregistrering byggs. Fråga via kontaktformuläret – de flesta förfrågningar hanteras samma arbetsdag. Sandbox-sessioner faktureras aldrig, så det finns ingen anledning att vänta med att komma igång.
Skapa din första session
Ett enda anrop. Skicka en return_url (dit den sökande hamnar när verifieringen är klar) och en webhook_url (dit det signerade resultatet skickas). Tillbaka får du ett session_id och en verification_url.
bashcurl -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" } }'Ge den sökande länken
Öppna verification_url så visas den hostade sidan. I en webbläsare på dator visas en QR-kod – när den skannas förs exakt samma länk över till en mobil, där själva dokumentfotot, liveness-kontrollen och selfien görs. Testa med din egen mobil direkt.
Sätt upp en webhook-endpoint
Peka webhook_url mot en route som tar emot POST, läser den råa request-bodyn (den måste vara oparsad för att signaturen ska kunna kontrolleras) och returnerar statuskod 2xx. Annars försöker ShieldID leverera igen upp till tre gånger.
javascriptimport express from "express"; const app = express(); app.post("/hooks/shieldid", express.raw({ type: "application/json" }), (req, res) => { // Verify the signature before you trust this body — see the next step. console.log("Received a webhook:", req.body.toString()); res.status(200).send("ok"); }); app.listen(3000);Verifiera signaturen
Agera inte på en webhook-body förrän det är kontrollerat att den verkligen kommer från ShieldID. Beräkna en HMAC-SHA256 över den råa bodyn med din webhook-hemlighet och jämför med headern X-Bio-Signature.
javascriptimport 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"); });Läs resultatet
Webhook-payloaden innehåller redan allt som behövs. Vill du hellre hämta resultatet själv – till exempel efter en omdirigering – anropa result-endpointen direkt.
bashcurl https://api.shieldid.ca/v1/sessions/ses_9f2c1a/result \ -H "X-Api-Key: vk_sand_your_key" # → { "session_id": "ses_9f2c1a", "status": "VERIFIED", "checks": { "document": "PASS", … }, … }Hantera FAILED och nytt försök
En session som hamnar i FAILED har en failure_reason. Visa något användbart för den sökande. Kommer snart: nytt försök för en FAILED-session, som återställer den till PENDING. Än så länge gäller FAILED som slutgiltigt tillstånd – skapa en ny session om den sökande vill försöka igen.
Innan du slår på strömmen
Gå över till produktion.
Requestens form ändras aldrig mellan sandbox och produktion – bara nyckeln. Bekräfta följande innan en riktig sökande skickas genom en vk_live_-session.
- Byt ut vk_sand_ mot en vk_live_-nyckel. Inget annat i requesten ändras.
- Peka webhook_url mot en riktig endpoint som alltid är igång och som verifierar signaturen – inte en request-bin eller en laptop.
- Hantera alla tre slutgiltiga tillstånd i appen: VERIFIED, FAILED och EXPIRED, inte bara det lyckade flödet.
- Kontrollera att din return_url läser parametrarna session_id och status som ShieldID lägger till vid omdirigeringen.
- Kontrollera aktuell prissättning med GET /v1/pricing/{country} eller prissidan, så att kostnaderna i produktion inte kommer som en överraskning.
- Håll sandbox-nycklar borta från allt som en riktig sökande kan nå – en sandbox-session är gratis eftersom den inte är på riktigt.
Frågor
Vanliga frågor om snabbstarten.
Kom igång
Kör det första steget direkt.
Begär en sandbox-nyckel, klistra in det första cURL-kommandot i en terminal, så ligger du redan före de flesta integrationer.