API-referens
API-referensen för identitetsverifiering.
Varje endpoint du kan anropa, varje fält du får tillbaka och vad du ska göra med en webhook när den kommer. För exakta fälttyper, betrakta det levande OpenAPI-dokumentet på /docs på din egen API-origin som sanningskälla – den här sidan är versionen på vanlig svenska.
Bas-URL och miljöer
En bas-URL. Två miljöer.
Alla anrop går till samma värd. Vilken miljö du befinner dig i avgörs helt av vilken API-nyckel du skickar.
| Bas-URL (denna dokumentation) | https://api.shieldid.ca — illustrative; your production API origin is published together with your API keys. |
|---|---|
| Auth-header | X-Api-Key: <din nyckel>, på varje förfrågan utom de två publika endpoints som anges nedan. |
| Prefix för sandbox-nyckel | vk_sand_… – sessioner som skapas med denna nyckel stämplas environment: "sandbox" och faktureras aldrig. |
| Prefix för produktionsnyckel | vk_live_… – samma förfrågningar, men debiteras enligt din plan. |
| Innehållstyp | application/json på varje förfrågningskropp och svar. |
Endpoints
Hela v1-ytan.
Sex JSON-endpoints, plus en värdbaserad sida och en publik kontroll av behörighetsbevis som inte alls är JSON – du länkar bara till dem.
| Endpoint | Auth | What it does |
|---|---|---|
| POST /v1/sessions | X-Api-Key | Skapa en verifieringssession. Kräver en return_url och en webhook_url. Returnerar session_id, verification_url och status: "PENDING". |
| GET /v1/sessions/{id} | X-Api-Key | Status och övergripande fält för en session: status, confidence, environment. |
| GET /v1/sessions/{id}/result | X-Api-Key | Det fullständiga resultatet när en session når VERIFIED eller FAILED: person, verdikt per kontroll, confidence, verified_until. |
| DELETE /v1/sessions/{id} | X-Api-Key | Avbryt en session som fortfarande är PENDING eller IN_PROGRESS. En session som redan är VERIFIED, FAILED eller EXPIRED kan inte avbrytas. |
| GET /v1/credentials/{token} | None — public | Kontrollera om ett verifierat behörighetsbevis är giltigt just nu. Ingen API-nyckel krävs, så den kan anropas från en webbläsare. Obs: dagens svar innehåller även den verifierade personens namn samt dokumenttyp och land, inte bara en flagga för giltig/ogiltig – ge inte den här länken till en tredje part som du inte vill ska se det. |
| GET /v1/pricing/{country} | X-Api-Key | Prissättning per land för en tvåbokstavs ISO 3166-1-landskod. |
| /v/{session_id} | Den värdbaserade verifieringssidan – den verification_url som en session returnerar. På dator visas en QR-kod; när den skannas får den sökandes telefon samma länk för att fotografera sitt dokument och ta en selfie. |
|---|---|
| /c/{session_id} | En publik kontrollsida utan autentisering för behörighetsbevis för en verifierad session. Obs: dagens svar innehåller även den verifierade personens namn samt dokumenttyp och land, inte bara en flagga för giltig/ogiltig – ge inte den här länken till en tredje part som du inte vill ska se det. |
| /docs | Den levande, interaktiva OpenAPI-referensen för ditt kontos API-ursprung. |
Skapa en session
POST /v1/sessions, från början till slut.
Anropet och exakt vad som returneras.
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, obligatoriskt — Dit den sökande skickas tillbaka när hen är klar. Måste vara http eller https. |
|---|---|
| webhook_url | string, obligatoriskt — Dit det signerade resultatet levereras. Se Webhooks nedan. |
| expected_name | string, obligatoriskt — Namnet du förväntar dig på dokumentet, som används för att korskontrollera vad ID-handlingen faktiskt anger. |
| expected_dob / expected_address | string, valfritt — Korskontrolleras mot dokumentet om det anges; krävs inte för att köra en verifiering. |
| locale | string, valfritt — "en" eller "fr". Anger språket på den värdbaserade sidan som den sökande ser. |
| metadata | object, valfritt — Dina egna referensdata – ett ansöknings-id, ett tenant-id, vad du vill ha tillbaka oförändrat i resultatet och i webhooken. |
Resultatet
GET /v1/sessions/{id}/result – svarets struktur.
Samma struktur levereras i webhook-payloaden, så du behöver sällan polla den här endpointen alls.
| session_id | Det id du skapade. |
|---|---|
| status | PENDING, IN_PROGRESS, VERIFIED, FAILED eller EXPIRED. |
| environment | "sandbox" eller "production", i enlighet med nyckeln som skapade sessionen. |
| person | Fälten som lästs från dokumentet: namn, födelsedatum, dokumenttyp, dokumentets land och jurisdiktion, adress. |
| checks | Ett utlåtande per kontroll – se nedan. Aldrig ett enda ogenomskinligt poäng. |
| confidence | Ett enda sammanfattande värde för verifieringen. Enskilda kontroller, inklusive ansiktsmatchning, rapporteras fortfarande var för sig mot en fast beslutsgräns – det här fältet ersätter dem inte. |
| verified_until | Hur länge resultatet anses aktuellt, för en session med VERIFIED. |
| failure_reason | Sätts på en session med FAILED – till exempel FACE_MATCH_BELOW_THRESHOLD eller CANCELLED_BY_API. Annars null. |
| metadata | Det du skickade när du skapade sessionen, oförändrat. |
{
"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 och checks.face_match får vart och ett värdet PASS, FAIL eller SKIPPED. Bevakningslistkontroll (checks.sanctions – CLEAR, MATCH eller SKIPPED) är ett tillägg och visas bara för konton som har aktiverat det.
Sessionens livscykel
Fem tillstånd, en väg.
En session går framåt av sig själv; du styr inte tillståndsmaskinen, du bara läser den.
| PENDING | Skapad. Ingen har öppnat verification_url ännu. |
|---|---|
| IN_PROGRESS | Den sökande har öppnat länken och befinner sig någonstans i inhämtningsflödet. |
| VERIFIED | Alla kontroller har körts och resultatet är klart. Slutligt – anropa resultatets endpoint eller läs webhooken. |
| FAILED | Minst en kontroll godkändes inte. failure_reason anger vilken. Kommer snart: ett nytt försök som återställer sessionen till PENDING – tills dess, behandla FAILED som slutligt och skapa en ny session om den sökande vill försöka igen. |
| EXPIRED | Ingen blev klar i tid. Sessioner går ut automatiskt efter en standardtid (30 minuter); skapa en ny för att försöka igen. |
DELETE /v1/sessions/{id} avbryter en PENDING- eller IN_PROGRESS-session i förtid. En session som redan har nått VERIFIED, FAILED eller EXPIRED kan inte avbrytas – den är redan klar.
Fel
Vad du bör planera för.
Det här är den kortlista som är värd att koda mot idag. Den fullständiga, aktuella uppsättningen felkoder och svarsdata finns dokumenterad i den levande OpenAPI-specifikationen på /docs.
| Status | Code | Meaning |
|---|---|---|
| 401 | UNAUTHORIZED | Headern X-Api-Key saknas. |
| 401 | INVALID_KEY_FORMAT | Nyckeln börjar inte med vk_sand_ eller vk_live_, eller matchar ingen nyckel på kontot. |
| 403 | FORBIDDEN | Nyckeln är giltig men har inte åtkomst till den session eller resurs du begärde. |
| 404 | NOT_FOUND | Det finns ingen session, inget autentiseringsbevis eller ingen resurs med det id:t. |
| 409 | CONFLICT | Sessionen har ett tillstånd som inte tillåter åtgärden – till exempel att avbryta en som redan är VERIFIED. |
| 422 | VALIDATION_ERROR | Ett obligatoriskt fält saknas eller är felformaterat – till exempel är return_url inte en giltig http- eller https-URL. |
Webhooks
Signerad, levererad, skickad på nytt.
När en session når VERIFIED eller FAILED skickar ShieldID en POST med strukturen som beskrivs ovan till din webhook_url.
- Levereras som en POST med en JSON-body som motsvarar resultatstrukturen ovan.
- Signerad med HMAC-SHA256 över den råa request-bodyn och skickad i en X-Bio-Signature-header. Verifiera den mot din webhook-hemlighet innan du litar på innehållet.
- Skickas på nytt upp till tre gånger med linjär backoff om din endpoint inte svarar med en 2xx-status.
- Kommer snart: ett nytt försök för en FAILED-session som levererar en andra webhook när den har avgjorts. Idag gäller en webhook per session som regel.
- Fältnamnen här motsvarar den här referensen. Om det som faktiskt kommer in ser annorlunda ut, lita på den levande payloaden framför den här sidan och berätta för oss – fältlistan hålls i takt med API:t, inte tvärtom.
Verifiera signaturen
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");
});Idempotens och nya försök
Bygg hanterare som är säkra att köra två gånger.
Det finns ännu ingen dedikerad idempotensnyckel, varken vid skapande av session eller vid webhook-leverans.
- En webhook-leverans som skickas på nytt kan komma fram mer än en gång för samma session. Nyckla din hanterare på session_id + status och gör skrivningen av resultatet idempotent.
- Försök inte om POST /v1/sessions blint vid en timeout – kontrollera först om sessionen skapades, annars kan du få två sessioner för en sökande.
- En dedikerad Idempotency-Key-header för skapande av session är planerad.
Kommer snartStöd för Idempotency-Key vid skapande av session
Håll dig uppdaterad
Den här referensen ändras. Följ ändringsloggen.
Nya fält, nya felkoder och ändrade endpoints aviseras där innan de dyker upp här.
Frågor
Vanliga frågor om referensen.
Nästa
Sätt den här referensen i arbete.
Följ snabbstarten för att gå från en sandbox-nyckel till en verifierad session och en signerad webhook, steg för steg.