01 / Začíname
Rýchly štart
Vytvorte kľúč, nastavte dve premenné prostredia a odošlite prvú overenú požiadavku.
- Vytvorte účet pracovného priestoru a vyberte plán.
- Vytvorte API kľúč s najmenším rozsahom spracovania, ktorý služba potrebuje. Tajný údaj si skopírujte okamžite; neskôr sa už nezobrazí.
- Premenné SCANVERION_API_URL a SCANVERION_API_KEY nastavte iba v serverovom prostredí.
- Odošlite multipart požiadavku a uložte vrátené requestId spolu s vlastným identifikátorom trasovania.
curl --request POST "$SCANVERION_API_URL/api/v1/ai/document-processing" --header "Authorization: Bearer $SCANVERION_API_KEY" \
--header "Idempotency-Key: invoice-20260807-001" --form "File=@invoice.pdf;type=application/pdf" --form "Operations=Scanner" \
--form "Operations=Rotation" --form "ScannerFields=invoiceNumber" --form "ScannerFields=issueDate" --form "ScannerFields=dueDate" --form "ScannerFields=paymentReference" --form "ScannerFields=supplierIban" --form "ScannerFields=customerIban" --form "ScannerFields=supplierAddress" --form "ScannerFields=supplierStreetName" --form "ScannerFields=supplierStreetNumber" --form "ScannerFields=supplierPostalCode" --form "ScannerFields=supplierCity" --form "ScannerFields=customerAddress" --form "ScannerFields=supplierVatNumber" --form "ScannerFields=customerVatNumber" --form "ScannerFields=netTotal" --form "ScannerFields=vatTotal" --form "ScannerFields=vatBreakdown" --form "ScannerFields=lineItems" --form "ScannerFields=grossTotal"02 / Bezpečnosť
Autentifikácia a API kľúče
Bezpečne používajte strojové prihlasovacie údaje s rozsahmi z dôveryhodného backendu.
03 / Spoľahlivosť
Idempotencia a opakovanie
Každému pokusu o spracovanie priraďte stabilný kľúč a vedome riešte duplicity.
S každou požiadavkou na spracovanie odošlite Idempotency-Key. Rovnakú hodnotu použite iba pri opakovaní toho istého logického nahratia a rovnakých operácií. Duplicitná rezervácia vráti 409 Conflict; nový kľúč môže vytvoriť druhý účtovaný pokus.
04 / AI endpoint
Spracovanie dokumentov
Nahrajte JPEG, PNG, WebP alebo PDF na synchrónnu analýzu dokumentu.
Použite presné názvy multipart polí ASP.NET: jedno File, jedno alebo viac opakovaných Operations, voliteľné opakované ScannerFields, voliteľný JSON CheckboxDefinitions a voliteľné DisableObjectSegmentation.
Polia skenera podľa typu dokumentu
V opakovaných hodnotách ScannerFields používajte nižšie uvedené kanonické názvy polí. Porovnávanie nerozlišuje veľké a malé písmená, kanonický zápis však zachováva konzistentnosť integrácie. Každá kategória podporuje aj spoločné polia. Požadované pole môže byť null, ak OCR nemá dostatok podkladov.
| Typ dokumentu | Detegovaná kategória | Ďalšie ScannerFields |
|---|---|---|
| Každý dokument | * | rawTextdocumentType |
| Faktúra | invoice | invoiceNumberissueDatedueDatedeliveryDatepaymentReferencecurrencysupplierNamesupplierAddresssupplierStreetNamesupplierStreetNumbersupplierCitysupplierCityPartsupplierPostalCodesupplierCountryCodesupplierCompanyRegistrationNumbersupplierTaxNumbersupplierVatNumbersupplierIbansupplierBiccustomerNamecustomerAddresscustomerStreetNamecustomerStreetNumbercustomerCitycustomerCityPartcustomerPostalCodecustomerCountryCodecustomerCompanyRegistrationNumbercustomerTaxNumbercustomerVatNumbercustomerIbancustomerBicdeliveryNamedeliveryAddressdeliveryStreetNamedeliveryStreetNumberdeliveryCitydeliveryCityPartdeliveryPostalCodedeliveryCountryCodenetTotalvatTotalvatBreakdowngrossTotallineItemsbankAccounts |
| Cestovný pas | passport | documentNumberdateOfBirthsexnationalitynationalityNamepersonalNumberdateOfIssuedateOfExpiryissuedByplaceOfBirth |
| Občiansky preukaz EÚ, predná strana | euidfront | documentNumberdateOfBirthsexnationalitynationalityNamepersonalNumberdateOfIssuedateOfExpiryissuedByplaceOfBirth |
| Občiansky preukaz EÚ, zadná strana | euidback | addressstreetNamestreetNumbercitycityPartpostalCodecountryCodemaidenNameplaceOfBirthbloodTypepersonalNumbermaritalStatusissuedBydocumentNumbernationalitynationalityNamedateOfBirthsexdateOfExpiry |
| Vodičský preukaz EÚ, predná strana | eudriverlicensefront | dateOfBirthplaceOfBirthdateOfIssuedateOfExpiryissuedBydocumentNumberlicenseAllowedCategories |
| Osvedčenie o evidencii, časť I, predná strana | eutechnicallicensefront | vinlicensePlateaddressownerdocumentNumber |
| Osvedčenie o evidencii, časť I, zadná strana | eutechnicallicenseback | vinmanufacturervariantmodelvalidUntilvehicleCategoryengineVolumeenginePerformancefuelTypenumberOfSeatsmaximumSpeedlargestWeightKg |
| Osvedčenie o evidencii, časť II, predná strana | bigtechnicallicensefront | registrationCertificatePartdocumentNumberlicensePlatedateOfFirstRegistrationvinvehicleKindvehicleCategorymanufacturermodeltypeVariantVersionvehicleManufacturertypeApprovalNumbertypeApprovalDateengineManufacturerengineTypeengineVolumeCm3catalystenginePerformanceKwengineSpeedRpmfuelTypetransmission |
| Osvedčenie o evidencii, časť II, zadná strana | bigtechnicallicenseback | bodyTypecolorproductionNumbernumberOfSeatsnumberOfStandingPlacesnumberOfBedsroofLoadKgfuelTankVolumeLlengthMmwidthMmheightMmoperationalWeightKgmaximumWeightKgmaximumBrakedTrailerWeightKgmaximumUnbrakedTrailerWeightKgnumberOfAxleswheelbaseMmfrontTyresrearTyresfrontRimsrearRimsmaximumSpeedKphstationaryNoiseDbdriveByNoiseDbemissionStandardco2GKmfuelConsumptionL100Km |
| Povolenie na pobyt, predná strana | residencepermitfront | documentNumbersexnationalitynationalityNamedateOfBirthpersonalNumbertypeOfPermitdateOfExpirynotescardAccessNumber |
| Povolenie na pobyt, zadná strana | residencepermitback | documentNumbersexnationalitynationalityNamedateOfBirthdateOfExpirydateOfIssueissuedByplaceOfBirthaddresspersonalNumbercountryCode |
| Preukaz osoby so zdravotným postihnutím | disabilitycard | dateOfBirthdateOfIssuedocumentNumberissuedByaddress |
| Celý obrázok alebo nerozpoznaný dokument | fullimage / other | - |
Podporované dokumenty
Pozrite sa, čo Scanverion dokáže prečítať.
Jasne neplatné AI vzory vychádzajú z odkazovaných verejných rozložení dokladov. Karty odlišujú API kategóriu od implementovaného a testovaného štruktúrovaného výstupu skenera.

Cestovný pas
Univerzálna ICAO TD3 MRZ a vybrané tlačené rozloženia
Príklady polí
Passport
namedocumentNumbernationalityNamedateOfBirthdateOfExpiryplaceOfBirth
Občiansky preukaz
Extrakcia prednej a zadnej strany podľa krajiny
Príklady polí
EUIdFrontEUIdBack
namedocumentNumberpersonalNumbernationalityNameaddressdateOfExpiry
Povolenie na pobyt
Slovenské predné a zadné rozloženie
Príklady polí
ResidencePermitFrontResidencePermitBack
namedocumentNumbertypeOfPermitnationalityNameaddressissuedBy
Vodičský preukaz EÚ
Slovenské predné rozloženie
Príklady polí
EUDriverLicenseFront
namedocumentNumberdateOfIssuedateOfExpiryissuedBylicenseAllowedCategories
Malý technický preukaz · časť I
Slovenská plastová karta časť I spredu a zozadu
Príklady polí
EUTechnicalLicenseFrontEUTechnicalLicenseBack
documentNumbervinlicensePlatemanufacturermodelfuelType
Veľký technický preukaz · časť II
Slovenský skladací papierový doklad časť II spredu a zozadu
Príklady polí
BigTechnicalLicenseFrontBigTechnicalLicenseBackEUTechnicalLicensePartII
documentNumbervinlicensePlatevehicleCategoryenginePerformanceKwmaximumWeightKg
Preukaz ŤZP
Slovenské rozloženia preukazu
Príklady polí
DisabilityCard
namedocumentNumberdateOfBirthdateOfIssueissuedByaddress
Faktúra
Extrakcia faktúr podľa obsahu a rozloženia
Príklady polí
Invoice
invoiceNumbersupplierNamecustomerNamepaymentReferencelineItemsgrossTotalAI ukážky používajú fiktívne údaje, viditeľné označenie VZOR/SPECIMEN a neplatné strojovo čitateľné hodnoty. Nie sú to skutočné ani zákaznícke doklady.

Generické dokumenty
Vizuálne operácie fungujú aj mimo známych typov dokladov.
Checkboxy, čiarové kódy, podpisy, tváre, rozmazanie a otočenie možno analyzovať na formulároch, zmluvách, skenoch aj neznámych dokumentoch. Samostatný profil skenera nie je potrebný.
Detection: Nájde dokumenty a ďalšie objekty.Rotation: Zmeria otočenie dokumentu.Blur: Vyhodnotí ostrosť obrázka.BarcodeReading: Prečíta QR a čiarové kódy.CheckboxDetection: Vyhodnotí oblasti checkboxov z požiadavky.SignatureDetection: Nájde viditeľný podpis.FaceDetection: Nájde viditeľné tváre.FaceExtraction: Vráti výrezy nájdených tvárí.
Príklady polí
CheckboxDetection používa CheckboxDefinitions z požiadavky. Spracovanie celého obrázka môže vrátiť aj vyžiadané ScannerFields.
Predloha rozloženia: Original Scanverion AI application form · Fictional demoPodpora krajín
Pokrytie krajín závisí od typu dokumentu.
Pasy používajú globálny štandard strojovo čitateľnej zóny. Občianske a národné doklady potrebujú rozloženia podľa krajiny a generácie.
Cestovné pasy
Všetky vydávajúce krajiny s čitateľnou ICAO TD3 MRZMRZ poskytuje meno, číslo dokladu, dátumy, pohlavie a štátnu príslušnosť. Ďalšie tlačené polia závisia od národného rozloženia.
Národné občianske preukazy
Samostatná štruktúrovaná extrakcia pre implementované rozloženiaPokrytie prednej a zadnej strany sa líši podľa krajiny a generácie dokladu.
Slovenské národné doklady
Samostatná extrakcia pre slovenské rozloženiaŠtátna príslušnosť držiteľa nemení rozloženie vydávajúcej krajiny.
05 / AI endpoint
Spracovanie vozidiel
Spustite detekciu alebo kontrolu rozmazania snímky vozidla.
Štruktúra požiadavky zodpovedá spracovaniu dokumentov, ale požiadavky na vozidlá prijímajú iba Detection a Blur. Nepodporované kombinácie vracajú 422 Unprocessable Entity.
06 / Viac súborov
Dávkové spracovanie
Spracujte viac dokumentov alebo snímok vozidiel jednou synchrónnou požiadavkou.
Pole Files zopakujte pre každý súbor. Súbory sa spracúvajú postupne, každý výsledok zostáva identifikovateľný v dávkovej odpovedi a využitie sa sčíta za celú požiadavku.
curl --request POST "$SCANVERION_API_URL/api/v1/ai/document-processing/batches" \
--header "Authorization: Bearer $SCANVERION_API_KEY" \
--header "Idempotency-Key: onboarding-batch-42" \
--form "Files=@front.jpg;type=image/jpeg" \
--form "Files=@back.jpg;type=image/jpeg" \
--form "Operations=Scanner"Adresár endpointov spracovania
| Metóda | Cesta | Pole súboru | Kontrakt |
|---|---|---|---|
POST | /api/v1/ai/document-processing | File | JPEG, PNG, WebP alebo PDF; najviac 10 MB |
POST | /api/v1/ai/vehicle-processing | File | JPEG, PNG alebo WebP; iba Detection a Blur |
POST | /api/v1/ai/document-processing/batches | Files | Viac súborov; výsledky zostávajú zoskupené podľa súboru |
POST | /api/v1/ai/vehicle-processing/batches | Files | Viac snímok vozidiel; iba Detection a Blur |
POST | /api/v1/signature-comparisons | Candidate + References | Jeden kandidát, 3 až 5 referencií; pri úspechu presne 1 kredit |
POST | /api/v1/face-comparisons | ReferenceImage / ReferenceArtifactId + CandidateImage / CandidateArtifactId | Presne jeden JPEG/PNG obrázok alebo artefakt na každej strane; obrázky do 10 MB. Policy: balanced. Vyžaduje sa Idempotency-Key. |
GET | /api/v1/ai/capabilities | - | Podporované MIME typy, operácie a maximálna veľkosť súboru |
Porovnanie podpisov
Porovnajte jeden kandidátsky podpis s tromi až piatimi známymi referenciami. Výsledok meria vizuálnu podobnosť podľa zvolenej politiky; neoveruje pravosť, identitu ani autorstvo.
Pole Candidate odošlite raz, pole References zopakujte tri až päťkrát a Mode nastavte na strict, balanced alebo similarity. Každý obrázok musí byť JPEG, PNG alebo WebP a mať najviac 10 MB.
curl --request POST "$SCANVERION_API_URL/api/v1/signature-comparisons" \
--header "Authorization: Bearer $SCANVERION_API_KEY" \
--header "Idempotency-Key: signature-comparison-001" \
--form "Candidate=@candidate.png;type=image/png" \
--form "References=@reference-1.png;type=image/png" \
--form "References=@reference-2.png;type=image/png" \
--form "References=@reference-3.png;type=image/png" \
--form "Mode=balanced"Odpoveď obsahuje isSimilar, zvolený režim, vzdialenosť, prah, počet referencií, upozornenia a účtované kredity. Nezhoda je úspešný výsledok, nie chyba.
{
"requestId": "3be5d51e33d64c7699954e3e9f07ea54",
"isSimilar": true,
"result": "Similar",
"mode": "balanced",
"metric": "cosine-distance",
"rawDistance": 0.027,
"threshold": 0.045,
"referenceCount": 3,
"warnings": [],
"credits": 1.0
}Porovnanie tvárí
Porovnajte dva oprávnene spracované portréty bez operácií Detection alebo Scanner. Použite nahraté obrázky alebo portrétové artefakty z rovnakého pracovného priestoru.
POST /api/v1/face-comparisonsZískajte podobnosť, rozhodnutie, dôvody kontroly, normalizované hranice tvárí a orientačné body. Podobnosť nie je pravdepodobnosť identity ani dôkaz živosti.
Tváre musia mať aspoň 80 × 80 pixelov a zaberať 2 % obrázka. Porovnajú sa najviac štyri vhodné tváre na každej strane a vráti sa najlepší pár. Viac vhodných tvárí vyžaduje manuálnu kontrolu. Menšie tváre sa ignorujú.
Úspešné porovnania používajú nakonfigurovanú kreditovú cenu. Skontrolujte politiku a využitie v odpovedi; chyby validácie a poskytovateľa sa neúčtujú. Obrázky sa spracujú dočasne a neregistrujú sa.
curl --request POST "$SCANVERION_API_URL/api/v1/face-comparisons" \
--header "Authorization: Bearer $SCANVERION_API_KEY" \
--header "Idempotency-Key: face-comparison-001" \
--form "ReferenceImage=@reference.jpg;type=image/jpeg" \
--form "CandidateImage=@candidate.png;type=image/png" \
--form "Policy=balanced"{
"requestId": "face-comparison-001",
"decision": "ManualReview",
"similarity": 88.4,
"policy": "balanced",
"reviewRequired": true,
"reasons": [
"multiple_eligible_faces_best_pair"
],
"providerModel": "model-version",
"credits": 2,
"referenceFace": {
"bounds": {
"left": 0.12,
"top": 0.18,
"width": 0.4,
"height": 0.5
},
"landmarks": [
{
"type": "eyeLeft",
"x": 0.24,
"y": 0.33
}
]
},
"candidateFace": {
"bounds": {
"left": 0.2,
"top": 0.12,
"width": 0.38,
"height": 0.48
},
"landmarks": [
{
"type": "eyeLeft",
"x": 0.3,
"y": 0.27
}
]
}
}import { readFile } from "node:fs/promises";
import { randomUUID } from "node:crypto";
import { Scanverion } from "@scanverion/sdk";
const client = new Scanverion({
apiKey: process.env.SCANVERION_API_KEY ?? "",
baseUrl: "https://api.scanverion.com",
});
const result = await client.faces.compare({
reference: { image: await readFile("reference.jpg"), contentType: "image/jpeg" },
candidate: { artifactId: "workspace-portrait-id" },
idempotencyKey: randomUUID(),
});import os
from pathlib import Path
from uuid import uuid4
from scanverion import Scanverion, FaceComparisonInput
client = Scanverion(api_key=os.environ["SCANVERION_API_KEY"],
base_url="https://api.scanverion.com")
result = client.faces.compare(
FaceComparisonInput(image=Path("reference.jpg")),
FaceComparisonInput(artifact_id="workspace-portrait-id"),
idempotency_key=str(uuid4()),
)using Scanverion;
using var client = new ScanverionClient(
Environment.GetEnvironmentVariable("SCANVERION_API_KEY")!,
baseUri: new Uri("https://api.scanverion.com"));
await using var reference = File.OpenRead("reference.jpg");
var result = await client.Faces.CompareAsync(
new FaceComparisonInput(reference, "reference.jpg", "image/jpeg"),
new FaceComparisonInput(ArtifactId: "workspace-portrait-id"),
Guid.NewGuid().ToString());scanverion face compare reference.jpg candidate.png --idempotency-key face-comparison-001 --output json{
"reference": { "imageBase64": "<JPEG base64>", "fileName": "reference.jpg", "contentType": "image/jpeg" },
"candidate": { "imageBase64": "<PNG base64>", "fileName": "candidate.png", "contentType": "image/png" },
"policy": "balanced",
"idempotencyKey": "face-comparison-001"
}Šablóny tvárí a vyhľadávanie v databáze
Integrujte podpísané šablóny tvárí, uložte jeden vektor na osobu a vyhľadávajte vo vlastnej databáze pomocou pgvector.
1. Vytvorte opakovane použiteľnú šablónu
Odošlite jednu až osem oprávnene spracúvaných fotografií JPEG/PNG tej istej osoby v opakovaných častiach Images. Každý súbor môže mať 10 MiB, spolu najviac 40 MiB. Server overí konzistenciu a spojí vybrané použiteľné zábery do jedného normalizovaného 128-rozmerného vektora. Pre novú operáciu použite nový idempotentný kľúč; pre ten istý pokus zachovajte rovnaký kľúč.
export SCANVERION_TEMPLATE_URL="https://api.scanverion.com/api/v1/identity-templates"
curl --request POST "$SCANVERION_TEMPLATE_URL/workspace" \
--header "Authorization: Bearer $SCANVERION_WORKSPACE_TOKEN" \
--header "Idempotency-Key: template-enroll-person-001" \
--form "ProcessingAuthorized=true" \
--form "Images=@portrait.jpg;type=image/jpeg"Odpoveď obsahuje templateToken, expiresAt a searchIndex. Vektor je float32 v poradí little-endian zakódovaný v Base64, nie text na priame porovnávanie. Uchovajte celý podpísaný token, vektor a vrátené verzie spolu. Zástupné hodnoty v príklade nie sú použiteľné biometrické údaje.
{
"templateToken": "<signed template token>",
"expiresAt": "<ISO 8601 expiry>",
"searchIndex": {
"formatVersion": "identity-template-search-v2",
"compatibilityVersion": "<returned representation version>",
"dimensions": 128,
"encoding": "float32-le-base64",
"metric": "cosine",
"aggregationVersion": "normalized-weighted-centroid-cosine-v1",
"selectionVersion": "<returned selection version>",
"vector": "<Base64 float32 vector>"
}
}2. Uložte jeden vektor na osobu
Na backende dekódujte searchIndex.vector, overte podporovaný formát a vrátené verzie a atómovo ho uložte s vlastným ID osoby, tokenom a platnosťou. Príklad vlastnej databázy PostgreSQL používa pgvector a HNSW; nie je migráciou aplikácie. Oprávnenie k pracovnému priestoru overte samostatne, filtre nenahrádzajú riadenie prístupu.
function decodeSearchVector(index: {
formatVersion: string; dimensions: number; encoding: string;
metric: string; aggregationVersion: string; vector: string;
}): number[] {
if (index.formatVersion !== "identity-template-search-v2" ||
index.dimensions !== 128 || index.encoding !== "float32-le-base64" ||
index.metric !== "cosine" ||
index.aggregationVersion !== "normalized-weighted-centroid-cosine-v1")
throw new Error("Unsupported search index");
if (index.vector.length !== 684) throw new Error("Invalid vector size");
const bytes = Buffer.from(index.vector, "base64");
try {
if (bytes.length !== 512 || bytes.toString("base64") !== index.vector)
throw new Error("Invalid vector encoding");
const vector: number[] = [];
for (let position = 0; position < 128; position++)
vector.push(bytes.readFloatLE(position * 4));
const norm = vector.reduce((sum, value) => sum + value * value, 0);
if (!vector.every(Number.isFinite) || Math.abs(norm - 1) > 0.001)
throw new Error("Invalid normalized vector");
return vector;
} finally { bytes.fill(0); }
}CREATE EXTENSION IF NOT EXISTS vector;
CREATE TABLE person_face_template (
workspace_id uuid NOT NULL,
person_id uuid NOT NULL,
template_token text NOT NULL,
expires_at timestamptz NOT NULL,
compatibility_version text NOT NULL,
selection_version text NOT NULL,
aggregation_version text NOT NULL,
face_vector vector(128) NOT NULL,
PRIMARY KEY (workspace_id, person_id)
);
CREATE INDEX person_face_template_cosine
ON person_face_template USING hnsw (face_vector vector_cosine_ops);3. Vyhľadávajte pomocou nového portrétu
Cez rovnaký endpoint vytvorte vyhľadávaciu šablónu z jednej novej oprávnene spracúvanej fotografie s novým idempotentným kľúčom. Dekódujte jej vektor a priraďte parametre: $1 vektor, $2 UUID oprávneného pracovného priestoru, $3 compatibilityVersion, $4 selectionVersion, $5 aggregationVersion. Ovládač s podporou pgvector môže prijať dekódované pole. Jedno spracovanie stačí na celé vyhľadávanie bez API volania pre každú osobu. Vstup používateľa nikdy nevkladajte priamo do SQL.
SELECT person_id, 1 - (face_vector <=> $1::vector) AS similarity
FROM person_face_template
WHERE workspace_id = $2::uuid
AND compatibility_version = $3
AND selection_version = $4
AND aggregation_version = $5
AND expires_at > now()
ORDER BY face_vector <=> $1::vector
LIMIT 10;4. Voliteľne overte vybranú dvojicu
Uložený token odošlite ako ReferenceTemplate a vyhľadávací token ako CandidateTemplate. Namiesto CandidateTemplate možno odoslať jednu časť CandidateImage vo formáte JPEG/PNG. API overí podpisy, rozsah, platnosť a kompatibilitu. Obe šablóny musia patriť rovnakému pracovnému priestoru. Odpoveď obsahuje similarity, metric, reviewRequired, referenceViews a candidateViews. Pre databázové vyhľadávanie je tento samostatný chránený porovnávací dopyt voliteľný.
curl --request POST "$SCANVERION_TEMPLATE_URL/workspace/comparisons" \
--header "Authorization: Bearer $SCANVERION_WORKSPACE_TOKEN" \
--header "Idempotency-Key: template-compare-001" \
--form "ProcessingAuthorized=true" \
--form-string "ReferenceTemplate=$REFERENCE_TEMPLATE_TOKEN" \
--form-string "CandidateTemplate=$PROBE_TEMPLATE_TOKEN"5. Bezpečne spracujte výsledky a životný cyklus
Najbližší sused sa nájde aj bez skutočnej zhody. Na reprezentatívnych dátach stanovte posúdený prah nezhody a pravidlá ľudskej kontroly; podobnosť nie je pravdepodobnosť, overenie identity ani dôkaz živej prítomnosti. Približné HNSW vyhľadávanie nie je úplné a filtre môžu znížiť počet výsledkov. Oddeľte pracovné priestory aj verzie reprezentácie, agregácie a výberu. Desaťročná platnosť podpisu závisí od uchovaných overovacích kľúčov a kompatibilného spracovania, nie od zaručenej budúcej presnosti. Šablóny chráňte ako biometrické údaje, nezapisujte ich do logov a po skončení súhlasu alebo uchovávania vymažte token aj vektor. Podpis ani Base64 nie sú šifrovanie. Nedôveryhodné importy vyžadujú overenie podpisu dôveryhodným kľúčom a presnú zhodu projekcie.
Chyby riešte výslovne: 400 nesprávny vstup; 401/403 prihlásenie, oprávnenie alebo súhlas; 402 kredity; 404 nedostupná vývojová cesta; 409 duplicitný idempotentný kľúč; 422 neplatná či nekompatibilná šablóna, nepoužiteľná tvár alebo nekonzistentné fotografie; 429 limity; 503 nedostupné spracovanie alebo účtovanie. Rešpektujte Retry-After a fotografie automaticky neodosielajte znova. Anonymná cesta nemá /workspace, vyžaduje BotVerificationToken a používa samostatný rozsah šablón. Limity a účtované kredity oznamuje politika a hlavičky odpovede.
Živosť
Krátka relácia kamery posúdi prezentačné útoky. Porovnanie tvárí zostáva samostatným posúdením.
- 1Vytvorenie na backende
Získajte oprávnenie a vytvorte jednu krátkodobú reláciu.
- 2Snímanie v Reacte
Odovzdajte vrátenú reláciu komponentu Scanverion.
- 3Načítanie posúdenia
Posúdenie načítajte až po oznámení o dokončení.
Inštalácia
React komponent na snímanie 0.1.0 je dostupný na npm. Pre metódy živosti použite backendové SDK 0.1.1 alebo novšie.
npm install react react-dom
npm install @scanverion/sdk@0.1.1 @scanverion/liveness-react@0.1.0Vytvorenie na backende
Ide o serverové pomocné funkcie, nie verejné HTTP handlery. Aplikácia musí overiť účastníka a oprávnenie spracovania, priradiť reláciu vlastníkovi a chrániť vlastné routy pred CSRF. Pri backendovom sprostredkovaní uchovajte tokeny na serveri. React kroku odovzdajte reláciu a funkciu na načítanie výsledku.
Backendové SDK: @scanverion/sdk pre Node.js (npm, JavaScript/TypeScript), scanverion pre Python (synchrónne aj asynchrónne) a Scanverion.Sdk pre .NET (NuGet). Použite zostavu s metódami živosti. Java SDK/balík Maven zatiaľ nie je dostupný; Java backendy môžu použiť REST API uvedené v časti Ďalší klienti.
import { randomUUID } from "node:crypto";
import { Scanverion } from "@scanverion/sdk";
const client = new Scanverion({
apiKey: process.env.SCANVERION_API_KEY ?? "",
baseUrl: "https://api.scanverion.com",
});
export async function createAuthorizedCapture() {
return client.liveness.createSession({
processingAuthorized: true,
idempotencyKey: randomUUID(),
});
}
export async function readOwnedAssessment(sessionId: string, accessToken: string) {
return client.liveness.getResult({ sessionId, accessToken });
}import os
from uuid import uuid4
from scanverion import Scanverion
client = Scanverion(api_key=os.environ["SCANVERION_API_KEY"],
base_url="https://api.scanverion.com")
def create_authorized_capture():
return client.liveness.create_session(
processing_authorized=True, idempotency_key=str(uuid4()))
def read_owned_assessment(session_id, access_token):
return client.liveness.get_result(
session_id=session_id, access_token=access_token)import os
from uuid import uuid4
from scanverion import AsyncScanverion
def liveness_client():
return AsyncScanverion(api_key=os.environ["SCANVERION_API_KEY"],
base_url="https://api.scanverion.com")
async def create_authorized_capture():
async with liveness_client() as client:
return await client.liveness.create_session(
processing_authorized=True, idempotency_key=str(uuid4()))
async def read_owned_assessment(session_id, access_token):
async with liveness_client() as client:
return await client.liveness.get_result(
session_id=session_id, access_token=access_token)using Scanverion;
using var client = new ScanverionClient(
Environment.GetEnvironmentVariable("SCANVERION_API_KEY")!,
baseUri: new Uri("https://api.scanverion.com"));
Task<FaceLivenessSession?> CreateAuthorizedCapture() =>
client.Liveness.CreateSessionAsync(true, Guid.NewGuid().ToString());
Task<FaceLivenessResult?> ReadOwnedAssessment(string sessionId, string accessToken) =>
client.Liveness.GetResultAsync(sessionId, accessToken);Snímanie v Reacte
"use client";
import { useEffect, useState } from "react";
import { LivenessCapture, type LivenessCaptureSession } from "@scanverion/liveness-react";
import type { FaceLivenessResult } from "@scanverion/sdk";
import "@scanverion/liveness-react/styles.css";
export function CameraStep({ session, loadAssessment, onResult, onClose }: {
session: LivenessCaptureSession & { expiresAt: string };
loadAssessment: () => Promise<FaceLivenessResult>;
onResult: (result: FaceLivenessResult) => void;
onClose: () => void;
}) {
const [active, setActive] = useState(() => Date.parse(session.expiresAt) > Date.now());
const [error, setError] = useState<string | null>(null);
useEffect(() => {
if (!active) return;
const timer = setTimeout(() => {
setActive(false);
onClose();
}, Math.max(0, Date.parse(session.expiresAt) - Date.now()));
return () => clearTimeout(timer);
}, [active, session.expiresAt, onClose]);
if (error) return <p role="alert">{error}</p>;
if (!active) return null;
return <LivenessCapture session={session}
onComplete={async () => {
setActive(false);
try { onResult(await loadAssessment()); }
catch { setError("Check the existing assessment; do not create another capture."); }
}}
onCancel={() => { setActive(false); onClose(); }}
onError={() => { setActive(false); setError("Capture could not be completed."); }}
/>;
}Načítanie posúdenia
Vysoké skóre nie je pravdepodobnosť identity. Rešpektujte decision a reviewRequired. Režim manuálnej kontroly vracia review aj pri vysokom skóre. Úspešné dokončené posúdenie pracovného priestoru používa nastavenú cenu (6 kreditov); anonymná skúška kredity pracovného priestoru neodpočíta. Neúspešné a nejednoznačné posúdenia nie sú dokončenými účtovanými posúdeniami.
{
"sessionId": "00000000-0000-4000-8000-000000000001",
"status": "succeeded",
"decision": "live",
"confidence": 99.6,
"reviewRequired": false,
"expiresAt": "2026-10-16T12:10:00Z",
"credits": 6
}- status
created / in_progress / succeeded / failed / expired / inconclusive- decision
live / not_live / review / inconclusive- confidence
- Skóre živosti poskytovateľa: 0–100
- reviewRequired
- Posúdenie živosti nie je overením identity. Neisté výsledky vyžadujú kontrolu.
- credits
- kredity za dokončené posúdenie
Limit snímania je tri minúty; uchovanie výsledku je samostatné a obmedzené. Pri chybe, zrušení alebo vypršaní odpojte snímanie. Stav created/in_progress kontrolujte pre tú istú reláciu výslovne v intervale aspoň dvoch sekúnd. Po neistej požiadavke automaticky nevytvárajte novú reláciu.
Ďalší klienti
curl --request POST 'https://api.scanverion.com/api/v1/face-liveness/sessions' \
--header "Authorization: Bearer $SCANVERION_API_KEY" \
--header 'Content-Type: application/json' \
--header "Idempotency-Key: $(uuidgen)" \
--data '{"processingAuthorized":true}'
# After camera completion, using values retained by your backend:
curl "https://api.scanverion.com/api/v1/face-liveness/sessions/$SESSION_ID" \
--header "Authorization: Bearer $SCANVERION_API_KEY" \
--header "X-Liveness-Access-Token: $LIVENESS_ACCESS_TOKEN"{
"create": {
"name": "create_liveness_session",
"arguments": {
"processingAuthorized": true,
"idempotencyKey": "unique-per-intentional-capture"
}
},
"afterCapture": {
"name": "get_liveness_result",
"arguments": {
"sessionId": "00000000-0000-4000-8000-000000000001"
}
}
}MCP vyžaduje súhlas faces:liveness a nedokáže ovládať kameru. Webová skúška je samostatná relácia, nie dokončenie ľubovoľnej MCP relácie.
Dostupnosť a bezpečnosť
Scanverion neukladá záznam kamery ani vrátené referenčné obrázky.
Snímanie môže používať blikajúce farby. Nepokračujte, ak ste citliví na blikajúce svetlá.
Posúdenie živosti nie je overením identity. Neisté výsledky vyžadujú kontrolu.
07 / Funkcie
Operácie a závislosti
Vyberte podporované operácie a pochopte automaticky pridané závislosti.
| Operácia | Účel | Závislosť alebo obmedzenie |
|---|---|---|
| Detection | Vyhľadá a klasifikuje objekty dokumentu alebo vozidla. | Pri väčšine dokumentových postupov sa pridá automaticky. |
| Scanner | Extrahuje typované polia z podporovaných dokumentov. | Vyžaduje ho LostOrStolenCardCheck. |
| Rotation | Uvádza orientáciu dokumentu. | Pridá ho FaceExtraction. |
| Blur | Vyhodnotí rozmazanie obrázka. | Podporované pre dokumenty a vozidlá. |
| FaceDetection | Nájde tváre v detegovanom dokumente. | Pridá ho FaceExtraction. |
| FaceExtraction | Vráti extrahované údaje alebo obrázky tvárí. | Pridáva FaceDetection a Rotation. |
| BarcodeReading | Číta podporované jednodimenzionálne a dvojdimenzionálne kódy. | Iba spracovanie dokumentov. |
| CheckboxDetection | Vyhodnocuje nakonfigurované oblasti zaškrtávacích polí. | CheckboxDefinitions musí byť platný JSON. |
| SignatureDetection | Vyhľadá podpisy v dokumente. | Iba detekcia v dokumente; vizuálne porovnanie používa samostatný endpoint. |
08 / Schéma
Model odpovede
Čítajte výsledky objektov, stavy operácií, časovanie a účtované kredity.
objects zachováva vzťah medzi každým detegovaným objektom a výsledkami jeho operácií. operations uvádza požadovanú a automaticky pridanú prácu. usage je autoritatívna účtovaná hodnota odpovede.
{
"requestId": "7f6a7b7f0ad74729a4c4d13fa7dc6dd4",
"model": "Document",
"processingTimeMs": 412,
"objects": [{
"objectId": "document-1",
"category": "Invoice",
"confidence": 1,
"bounds": { "left": 0, "top": 0, "right": 1, "bottom": 1 },
"results": {
"scanner": {
"fields": {
"invoiceNumber": "2026-0007",
"issueDate": "2026-08-07",
"dueDate": "2026-08-21",
"paymentReference": "26000006",
"supplierIban": "SK5511000000002628210731",
"customerIban": null,
"supplierName": "Scanverion s. r. o.",
"supplierAddress": "Pribinova 10, 811 09 Bratislava",
"supplierStreetName": "Pribinova",
"supplierStreetNumber": "10",
"supplierPostalCode": "81109",
"supplierCity": "Bratislava",
"supplierVatNumber": "SK2120720041",
"customerName": "Example Customer s. r. o.",
"customerAddress": "Main Street 12, 040 01 Kosice",
"customerVatNumber": "SK2020123456",
"netTotal": "19.29",
"vatTotal": "4.44",
"vatBreakdown": "[{"rate":"23","amount":"4.44"}]",
"lineItems": "[{"description":"Monthly subscription","quantity":"1","unit":"pcs","unitPrice":"19.29","netAmount":"19.29","vatRate":"23","vatAmount":"4.44","grossAmount":"23.73"}]",
"grossTotal": "23.73",
"currency": "EUR"
},
"issuingCountry": null,
"detectedLanguages": [{ "code": "sk", "confidence": 0.97 }]
},
"rotation": { "degrees": 0 }
},
"pageNumber": 1
}],
"operations": [
{ "operation": "Detection", "status": "Completed", "message": null },
{ "operation": "Scanner", "status": "Completed", "message": null },
{ "operation": "Rotation", "status": "Completed", "message": null }
],
"usage": {
"units": 3,
"unitsByOperation": { "Detection": 1, "Scanner": 1, "Rotation": 1 }
}
}09 / Vyhradené zdroje
Validačné zdroje
Použite samostatné endpointy pre stratené doklady a poštové smerovacie čísla.
| Metóda | Cesta | Vstup |
|---|---|---|
POST | /api/v1/validation/id-cards/lost-or-stolen | JSON telo: cardNumber a cardType |
GET | /api/v1/validation/postal-codes | Query: address a voliteľný countryCode=SK alebo SVK |
curl --request POST "$SCANVERION_API_URL/api/v1/validation/id-cards/lost-or-stolen" \
--header "Authorization: Bearer $SCANVERION_API_KEY" \
--header "Content-Type: application/json" \
--data '{ "cardNumber": "AA123456", "cardType": "nationalId" }'10 / Účtovanie
Využitie a kredity
Získajte volania, vážené kredity, denné súčty, funkcie a cenový náhľad.
Kredity sú vážené podľa nastaveného násobiteľa produktu, preto sú volania a kredity samostatné metriky. Endpointy využitia prijímajú vrátane dátumy from a to; predvolene obdobie začína prvým dňom aktuálneho kalendárneho mesiaca a končí dnes.
| Metóda | Cesta | Vrátené údaje |
|---|---|---|
GET | /api/v1/usage/summary | Volania a vážené kredity za obdobie |
GET | /api/v1/usage/daily | Denné súčty volaní a kreditov |
GET | /api/v1/usage/by-capability | Súčty zoskupené podľa účtovanej funkcie |
GET | /api/v1/usage/price-preview | Náhľad zahrnutých kreditov, nadlimitnej ceny a celku v EUR |
11 / Obnova
Chyby a stratégia opakovania
Riešte chyby autentifikácie, oprávnení, validácie, duplicít a poskytovateľov.
| Stav | Význam | Akcia klienta |
|---|---|---|
401 Unauthorized | Kľúč chýba, je nesprávny, neaktívny, expirovaný, odvolaný alebo nie je priradený k pracovnému priestoru. | Neopakujte požiadavku, kým neopravíte prihlasovacie údaje. |
402 Payment Required | Oprávnenie pracovného priestoru alebo limit spracovania je vyčerpaný. | Zmeňte plán alebo nastavenie nadlimitného účtovania. |
409 Conflict | Idempotency key už rezervoval túto požiadavku na spracovanie. | Považujte ju za rovnaký pokus; nevytvárajte nový kľúč bez dôvodu. |
422 Unprocessable Entity | Súbor, kombinácia operácií, polia, rozsah dátumov alebo validačný vstup nie sú platné. | Pred opakovaním opravte požiadavku. |
502 Bad Gateway | Nadradený AI alebo validačný poskytovateľ zlyhal alebo vrátil nejednoznačný výsledok. | Ak je operácia bezpečná na opakovanie, skúste ju znova s odstupom. |
503 Service Unavailable | Potrebný poskytovateľ spracovania je dočasne nedostupný. | Opakujte s obmedzeným exponenciálnym odstupom. |
Zaznamenajte requestId odpovede, HTTP stav a idempotency key. Náhodné obmedzené exponenciálne opakovanie používajte iba pri dočasných chybách; validačné chyby a chyby prihlasovacích údajov vyžadujú zmenu požiadavky.
12 / Generovaný kontrakt
Referencia OpenAPI
Otvorte generovaný Scalar explorer alebo stiahnite strojovo čitateľný kontrakt.
Referencia Scanverion API
Spustený kontrakt je zdrojom pravdy pre schémy, hodnoty enumov, požiadavky autentifikácie a deklarované HTTP výsledky.
Integrácia MCP
Hostované OAuth pripojenia, registrácia klientov, rozsahy a lokálne stdio pre VS Code a Claude Desktop.
Hostované HTTP
OAuth 2.0Hostované OAuth je zapnuté. Pripojenie vyžaduje aktívneho, vopred registrovaného klienta; samotná adresa servera aplikáciu nezaregistruje. HTTP prístup s API kľúčom zostáva dostupný cez X-Scanverion-Api-Key.
https://mcp.scanverion.com/mcp
- Prenos
- Streamable HTTP / HTTPS
- Autentifikácia
- OAuth 2.0 autorizačný kód + S256 PKCE
- Vstupy
- Iba base64; bez ciest k lokálnym súborom
- Maximálny dekódovaný vstup
- 10 MiB · JPEG, PNG, WebP, PDF
Spracovanie dokumentov a vozidiel využíva kredity. Porovnanie podpisov stojí presne 1 kredit. Katalógy a využitie sa neúčtujú.
OAuth konfigurácia VS Code
Vytvorte a aktivujte verejnú natívnu aplikáciu s callback základom http://127.0.0.1/. VS Code automaticky doplní dočasný port. Zadajte ID aktivovaného klienta, spustite server vo VS Code a potvrďte prihlásenie a súhlas v prehliadači. API kľúč ani tajomstvo klienta nie sú potrebné.
{
"servers": {
"scanverion": {
"type": "http",
"url": "https://mcp.scanverion.com/mcp",
"oauth": {
"clientId": ""
}
}
}
}Rozsahy: capabilities:read pre katalóg, usage:read pre využitie, documents:analyze alebo vehicles:analyze pre spracovanie, signatures:compare pre podpisy a offline_access pre obnovovanie. Klient musí rozsahy vyžiadať a používateľ schváliť. Prístupové tokeny platia 10 minút; obnovovacie tokeny sa rotujú. Prístup odvolajte pri aplikácii alebo odpojte všetky MCP pripojenia v Profile. Tokeny nevkladajte do chatu.
Dostupné nástroje
analyze_document- Spoplatnené. Predvolene iba Detection; pre OCR a extrakciu polí výslovne zvoľte Scanner.
analyze_vehicle- Spoplatnené. Podporuje Detection a Blur.
compare_signatures- Spoplatnené presne 1 kreditom. Porovná jeden podpis s 3 až 5 referenciami; podobnosť nie je dôkazom identity ani pravosti.
compare_faces- Porovnajte dva oprávnene spracované portréty bez operácií Detection alebo Scanner. Použite nahraté obrázky alebo portrétové artefakty z rovnakého pracovného priestoru.
list_capabilities- Katalóg modelov AI a limitov bez poplatku za spracovanie; nejde o kontrolu oprávnení.
list_api_capabilities- Verejný katalóg API bez poplatku za spracovanie; neoveruje prístup konkrétneho účtu.
get_usage_summary- Volania a kredity bez poplatku za spracovanie, pre dátumy YYYY-MM-DD vrátane oboch hraníc. Odhad ceny nie je dostupný, nie je nulový.
faces:compare: Úspešné porovnania používajú nakonfigurovanú kreditovú cenu. Skontrolujte politiku a využitie v odpovedi; chyby validácie a poskytovateľa sa neúčtujú. Obrázky sa spracujú dočasne a neregistrujú sa.
create_liveness_session / get_liveness_result · faces:liveness: Krátka relácia kamery posúdi prezentačné útoky. Porovnanie tvárí zostáva samostatným posúdením. Posúdenie živosti nie je overením identity. Neisté výsledky vyžadujú kontrolu.
create_identity_template- Celý token aj jeho obsah sú citlivé biometrické údaje. Kopírujte alebo zdieľajte ich iba s oprávnenými systémami. 1–8 fotografií JPEG/PNG · 10 MiB na súbor · spolu 40 MiB 2 kredity za dokončenú požiadavku ·
processingAuthorized: true·templates:create compare_identity_templates- Podobnosť vyžaduje posúdenie. Nepotvrdzuje identitu ani živú prítomnosť. 2 kredity za dokončenú požiadavku ·
processingAuthorized: true·templates:compare
OAuth aplikácie
Vlastníci a administrátori registrujú klientov a aktivujú rozsahy s nedávnym MFA. API kľúče nevyžadujú OAuth registráciu. Dynamická registrácia nie je podporovaná.
OAuth aplikácie