01 / Kezdés
Gyors kezdés
Hozzon létre kulcsot, állítson be két környezeti változót, majd küldje el első kérését.
- Hozzon létre munkaterületet, és válasszon csomagot.
- Hozzon létre kulcsot a szolgáltatás által szükséges legkisebb feldolgozási jogosultsággal. Azonnal másolja ki a titkot, később nem jelenik meg újra.
- A SCANVERION_API_URL és SCANVERION_API_KEY változókat csak a szerver környezetében állítsa be.
- Küldjön multipart kérést, és mentse a visszaadott requestId értéket saját nyomkövetési azonosítójával együtt.
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 / Biztonság
Hitelesítés és API-kulcsok
Használjon jogosultságokkal korlátozott gépi kulcsokat megbízható backendről.
03 / Megbízhatóság
Idempotencia és újrapróbálkozás
Minden feldolgozási kísérlethez használjon stabil kulcsot, a duplikációkat pedig kezelje tudatosan.
Minden feldolgozási kéréshez küldjön Idempotency-Key értéket. Ugyanazt csak ugyanazon logikai feltöltés és műveletkészlet újrapróbálásakor használja. Duplikált foglalás esetén 409 Conflict érkezik; új kulccsal második számlázható kísérlet jöhet létre.
04 / AI-végpont
Dokumentumfeldolgozás
Töltsön fel JPEG, PNG, WebP vagy PDF fájlt szinkron dokumentumelemzéshez.
Használja a pontos ASP.NET multipart mezőneveket: egy File, egy vagy több ismételt Operations, opcionális ismételt ScannerFields, opcionális CheckboxDefinitions JSON és opcionális DisableObjectSegmentation.
Szkennermezők dokumentumtípusonként
Az ismételt ScannerFields értékekben az alábbi kanonikus mezőkulcsokat használja. Az egyezés nem kis- és nagybetűérzékeny, de a kanonikus írásmód következetessé teszi az integrációt. Minden kategória támogatja a közös mezőket is. A kért mező null lehet, ha az OCR-bizonyíték nem elegendő.
| Dokumentumtípus | Észlelt kategória | További ScannerFields |
|---|---|---|
| Minden dokumentum | * | rawTextdocumentType |
| Számla | invoice | invoiceNumberissueDatedueDatedeliveryDatepaymentReferencecurrencysupplierNamesupplierAddresssupplierStreetNamesupplierStreetNumbersupplierCitysupplierCityPartsupplierPostalCodesupplierCountryCodesupplierCompanyRegistrationNumbersupplierTaxNumbersupplierVatNumbersupplierIbansupplierBiccustomerNamecustomerAddresscustomerStreetNamecustomerStreetNumbercustomerCitycustomerCityPartcustomerPostalCodecustomerCountryCodecustomerCompanyRegistrationNumbercustomerTaxNumbercustomerVatNumbercustomerIbancustomerBicdeliveryNamedeliveryAddressdeliveryStreetNamedeliveryStreetNumberdeliveryCitydeliveryCityPartdeliveryPostalCodedeliveryCountryCodenetTotalvatTotalvatBreakdowngrossTotallineItemsbankAccounts |
| Útlevél | passport | documentNumberdateOfBirthsexnationalitynationalityNamepersonalNumberdateOfIssuedateOfExpiryissuedByplaceOfBirth |
| EU-s személyi igazolvány, előlap | euidfront | documentNumberdateOfBirthsexnationalitynationalityNamepersonalNumberdateOfIssuedateOfExpiryissuedByplaceOfBirth |
| EU-s személyi igazolvány, hátlap | euidback | addressstreetNamestreetNumbercitycityPartpostalCodecountryCodemaidenNameplaceOfBirthbloodTypepersonalNumbermaritalStatusissuedBydocumentNumbernationalitynationalityNamedateOfBirthsexdateOfExpiry |
| EU-s vezetői engedély, előlap | eudriverlicensefront | dateOfBirthplaceOfBirthdateOfIssuedateOfExpiryissuedBydocumentNumberlicenseAllowedCategories |
| Forgalmi engedély, I. rész, előlap | eutechnicallicensefront | vinlicensePlateaddressownerdocumentNumber |
| Forgalmi engedély, I. rész, hátlap | eutechnicallicenseback | vinmanufacturervariantmodelvalidUntilvehicleCategoryengineVolumeenginePerformancefuelTypenumberOfSeatsmaximumSpeedlargestWeightKg |
| Forgalmi engedély, II. rész, előlap | bigtechnicallicensefront | registrationCertificatePartdocumentNumberlicensePlatedateOfFirstRegistrationvinvehicleKindvehicleCategorymanufacturermodeltypeVariantVersionvehicleManufacturertypeApprovalNumbertypeApprovalDateengineManufacturerengineTypeengineVolumeCm3catalystenginePerformanceKwengineSpeedRpmfuelTypetransmission |
| Forgalmi engedély, II. rész, hátlap | bigtechnicallicenseback | bodyTypecolorproductionNumbernumberOfSeatsnumberOfStandingPlacesnumberOfBedsroofLoadKgfuelTankVolumeLlengthMmwidthMmheightMmoperationalWeightKgmaximumWeightKgmaximumBrakedTrailerWeightKgmaximumUnbrakedTrailerWeightKgnumberOfAxleswheelbaseMmfrontTyresrearTyresfrontRimsrearRimsmaximumSpeedKphstationaryNoiseDbdriveByNoiseDbemissionStandardco2GKmfuelConsumptionL100Km |
| Tartózkodási engedély, előlap | residencepermitfront | documentNumbersexnationalitynationalityNamedateOfBirthpersonalNumbertypeOfPermitdateOfExpirynotescardAccessNumber |
| Tartózkodási engedély, hátlap | residencepermitback | documentNumbersexnationalitynationalityNamedateOfBirthdateOfExpirydateOfIssueissuedByplaceOfBirthaddresspersonalNumbercountryCode |
| Fogyatékossági igazolvány | disabilitycard | dateOfBirthdateOfIssuedocumentNumberissuedByaddress |
| Teljes kép vagy fel nem ismert dokumentum | fullimage / other | - |
Támogatott dokumentumok
Nézze meg, mit tud olvasni a Scanverion.
A jól láthatóan érvénytelen AI-minták hivatkozott nyilvános dokumentumelrendezéseken alapulnak. Az API-kategória és a tesztelt strukturált kinyerés külön jelenik meg.

Útlevél
Univerzális ICAO TD3 MRZ és tesztelt magyar nyomtatott elrendezés
Példamezők
Passport
namedocumentNumbernationalityNamedateOfBirthdateOfExpiryplaceOfBirth
Személyi igazolvány
Tesztelt magyar elő- és hátoldali elrendezés
Példamezők
EUIdFrontEUIdBack
namedocumentNumberpersonalNumbernationalityNameaddressdateOfExpiry
Számla
Elrendezésalapú számlakinyerés
Példamezők
Invoice
invoiceNumbersupplierNamecustomerNamepaymentReferencelineItemsgrossTotalAz AI-minták fiktív adatokat, látható VZOR/SPECIMEN jelölést és érvénytelen gépi kódokat használnak; nem valódi ügyféldokumentumok.

Generikus dokumentumok
A vizuális műveletek ismert dokumentumtípus nélkül is működnek.
Jelölőnégyzetek, vonalkódok, aláírások, arcok, elmosódás és elfordulás űrlapokon, szerződéseken és ismeretlen dokumentumokon is elemezhető.
Detection: Locate documents and other objects.Rotation: Measure document orientation.Blur: Evaluate image sharpness.BarcodeReading: Read QR and linear barcodes.CheckboxDetection: Evaluate checkbox regions supplied in the request.SignatureDetection: Detect a visible signature.FaceDetection: Locate visible faces.FaceExtraction: Return detected face regions.
Példamezők
A CheckboxDetection a kérés CheckboxDefinitions értékeit használja. A teljes képes feldolgozás kért ScannerFields mezőket is visszaadhat.
Elrendezési referencia: Original Scanverion Hungarian AI application form · Fictional demoOrszágtámogatás
Ezek a magyar dokumentumelrendezések ellenőrzöttek.
Az útlevelek globális MRZ-szabványt használnak. A megjelenített nemzeti okmányok köre csak a magyar elrendezéssel tesztelt kategóriákat tartalmazza.
Útlevelek
Minden kibocsátó ország olvasható ICAO TD3 MRZ eseténA további nyomtatott mezők a nemzeti elrendezéstől függenek.
Személyazonosító igazolvány
Strukturált kinyerés a tesztelt magyar elő- és hátoldalhozA megjelenített minta a HUN-BO-06001 elrendezésen alapul.
05 / AI-végpont
Járműfeldolgozás
Futtasson észlelést vagy elmosódásvizsgálatot járműképen.
A kérés szerkezete megegyezik a dokumentumfeldolgozáséval, de járműveknél csak a Detection és Blur engedélyezett. A nem támogatott kombinációk 422 Unprocessable Entity hibát adnak.
06 / Több fájl
Kötegelt feldolgozás
Dolgozzon fel több dokumentumot vagy járműképet egy szinkron kérésben.
Minden feltöltéshez ismételje a Files mezőt. A fájlok sorban készülnek el, az eredmények fájlonként azonosíthatók, a használat pedig a teljes kérésre összeadódik.
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"Feldolgozási végpontok jegyzéke
| Módszer | Útvonal | Fájlmező | Szerződés |
|---|---|---|---|
POST | /api/v1/ai/document-processing | File | JPEG, PNG, WebP vagy PDF; legfeljebb 10 MB |
POST | /api/v1/ai/vehicle-processing | File | JPEG, PNG vagy WebP; csak Detection és Blur |
POST | /api/v1/ai/document-processing/batches | Files | Több fájl; az eredmények fájlonként csoportosítva maradnak |
POST | /api/v1/ai/vehicle-processing/batches | Files | Több járműkép; csak Detection és Blur |
POST | /api/v1/signature-comparisons | Candidate + References | Egy jelölt, 3-5 referencia; siker esetén pontosan 1 kredit |
POST | /api/v1/face-comparisons | ReferenceImage / ReferenceArtifactId + CandidateImage / CandidateArtifactId | Oldalanként pontosan egy JPEG/PNG kép vagy artefaktum; képenként legfeljebb 10 MB. Policy: balanced. Idempotency-Key szükséges. |
GET | /api/v1/ai/capabilities | - | Támogatott MIME-típusok, műveletek és maximális fájlméret |
Aláírás-összehasonlítás
Hasonlítson össze egy jelölt aláírást három-öt ismert referenciával. Az eredmény a kiválasztott szabályzat szerinti vizuális hasonlóságot méri; nem igazolja a hitelességet, a személyazonosságot vagy a szerzőséget.
A Candidate mezőt egyszer küldje, a References mezőt három-öt alkalommal ismételje, a Mode pedig strict, balanced vagy similarity legyen. Minden kép JPEG, PNG vagy WebP, legfeljebb 10 MB méretben.
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"A válasz tartalmazza az isSimilar értéket, a módot, a távolságot, a küszöböt, a referenciaszámot, a figyelmeztetéseket és a felszámított kreditet. A nem egyezés sikeres eredmény, nem hiba.
{
"requestId": "3be5d51e33d64c7699954e3e9f07ea54",
"isSimilar": true,
"result": "Similar",
"mode": "balanced",
"metric": "cosine-distance",
"rawDistance": 0.027,
"threshold": 0.045,
"referenceCount": 3,
"warnings": [],
"credits": 1.0
}Arc-összehasonlítás
Hasonlítson össze két engedélyezett portrét Detection vagy Scanner nélkül. Használjon feltöltött képeket vagy ugyanazon munkaterület portréartefaktumait.
POST /api/v1/face-comparisonsHasonlóság, döntés, felülvizsgálati okok, normalizált archatárok és tájékozódási pontok. A hasonlóság nem személyazonossági valószínűség vagy élőségbizonyíték.
Az arc legalább 80 × 80 pixel és a kép 2%-a legyen. Oldalanként legfeljebb négy megfelelő arcot hasonlítunk össze, és a legjobb párt adjuk vissza. Több megfelelő arc kézi felülvizsgálatot igényel. A kisebb arcokat figyelmen kívül hagyjuk.
A sikeres összehasonlítás a beállított kreditárat használja. Ellenőrizze a szabályzatot és a válasz használati adatait; a validációs és szolgáltatói hibák díjmentesek. A képeket átmenetileg dolgozzuk fel, regisztráció nélkül.
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"
}Arcsablonok és adatbázisos keresés
Integráljon aláírt arcsablonokat, tároljon személyenként egy vektort, és keressen a saját adatbázisában pgvector használatával.
1. Újra felhasználható sablon létrehozása
Küldjön egy-nyolc, jogszerűen feldolgozható JPEG/PNG fényképet ugyanarról a személyről ismételt Images részekben. Fájlonként 10 MiB, összesen 40 MiB engedélyezett. A kiszolgáló ellenőrzi a konzisztenciát, és a kiválasztott használható nézeteket egy normalizált, 128 dimenziós vektorrá egyesíti. Új művelethez új idempotenciakulcsot használjon; ugyanahhoz a kísérlethez tartsa meg a kulcsot.
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"A válasz templateToken, expiresAt és searchIndex mezőket tartalmaz. A vektor Base64-kódolt little-endian float32, nem közvetlenül összehasonlítandó szöveg. Az aláírt tokent, a vektort és a visszaadott verziókat együtt őrizze meg. A példák helyőrzői nem használható biometrikus adatok.
{
"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. Személyenként egy vektor tárolása
A backendben dekódolja a searchIndex.vector mezőt, ellenőrizze a támogatott formátumot és verziókat, majd atomikusan mentse a saját személyazonosítóval, tokennel és lejárattal. A saját PostgreSQL-adatbázishoz készült példa pgvector és HNSW használatát mutatja, nem alkalmazásmigráció. A munkaterület-hozzáférést külön ellenőrizze; a lekérdezési szűrő nem jogosultságkezelés.
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. Keresés új portréval
Ugyanazon a létrehozási végponton készítsen keresési sablont egy új, engedélyezett fényképből új idempotenciakulccsal. A paraméterek: $1 keresési vektor, $2 engedélyezett munkaterület UUID, $3 compatibilityVersion, $4 selectionVersion, $5 aggregationVersion. A pgvector-kompatibilis illesztőprogram a dekódolt tömböt is kötheti. Egyetlen feldolgozás elegendő a teljes kereséshez, személyenkénti API-hívás nélkül. Felhasználói adatot soha ne fűzzön közvetlenül SQL-be.
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. Kiválasztott pár opcionális ellenőrzése
A tárolt tokent ReferenceTemplate, a keresési tokent CandidateTemplate néven küldje. Utóbbi helyett egy CandidateImage JPEG/PNG rész is használható. Az API ellenőrzi az aláírást, a hatókört, a lejáratot és a kompatibilitást. Mindkét sablon ugyanahhoz a munkaterülethez tartozzon. A válasz: similarity, metric, reviewRequired, referenceViews és candidateViews. Ez az önálló védett összehasonlítás az adatbázisos koszinuszkereséshez nem kötelező.
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. Eredmények és életciklus biztonságos kezelése
A legközelebbi szomszéd keresése akkor is ad jelöltet, ha nincs egyezés. Reprezentatív adatokon határozzon meg felülvizsgált nincs-találat küszöböt és emberi ellenőrzést; a hasonlóság nem valószínűség, személyazonosítás vagy élő jelenlét igazolása. A közelítő HNSW nem teljes keresés, és a szűrők csökkenthetik a találatok számát. Válassza külön a munkaterületeket és a reprezentáció, összesítés és kiválasztás verzióit. A tízéves aláírási lejárat megőrzött ellenőrzőkulcsoktól és kompatibilis feldolgozástól függ, nem garantál jövőbeli pontosságot. A sablonokat biometrikus adatként védje, ne naplózza, és a hozzájárulás vagy megőrzés végén a tokent és a vektort is törölje. Az aláírás és a Base64 nem titkosítás. Nem megbízható importnál megbízható kulcsos aláírás-ellenőrzés és pontos vetületegyezés szükséges.
Kezelje külön a hibákat: 400 hibás bemenet; 401/403 hitelesítés, jogosultság vagy hozzájárulás; 402 kreditek; 404 nem elérhető fejlesztői útvonal; 409 ismételt idempotenciakulcs; 422 hibás vagy inkompatibilis sablon, használhatatlan arc vagy nem konzisztens képek; 429 korlátok; 503 feldolgozás vagy elszámolás nem elérhető. Tartsa be a Retry-After értéket, és ne küldjön automatikusan újra képeket. A névtelen útvonal /workspace nélkül, BotVerificationToken mezővel, külön sablonhatókörrel működik. A szabályzat és a válaszfejlécek jelzik a korlátokat és a krediteket.
Élőség
Egy rövid kameramenet vizsgálja a bemutatásos támadásokat. Az arcok összehasonlítása külön értékelés marad.
- 1Létrehozás a backenden
Szerezzen engedélyt és hozzon létre egy rövid munkamenetet.
- 2Rögzítés Reactben
Adja át a visszakapott munkamenetet a Scanverion komponensnek.
- 3Értékelés lekérése
Az értékelést csak a befejezési visszahívás után kérje le.
Telepítés
A React-rögzítő 0.1.0 elérhető az npm-en. Az élőségi metódusokhoz a backend SDK 0.1.1 vagy újabb verzióját használja.
npm install react react-dom
npm install @scanverion/sdk@0.1.1 @scanverion/liveness-react@0.1.0Létrehozás a backenden
Ezek megbízható szerveroldali segédfüggvények, nem nyilvános HTTP-kezelők. Az alkalmazás hitelesítse a résztvevőt, ellenőrizze a feldolgozási engedélyt, kösse tulajdonoshoz a munkamenetet, és használjon CSRF-védett útvonalakat. Backendközvetítésnél tartsa a tokeneket a szerveren. A React-lépésnek adja át a munkamenetet és az eredményt betöltő függvényt.
Backend SDK-k: @scanverion/sdk Node.js-hez (npm, JavaScript/TypeScript), scanverion Pythonhoz (szinkron és aszinkron), valamint Scanverion.Sdk .NET-hez (NuGet). Élőségi metódusokat tartalmazó verziót használjon. Java SDK/Maven-csomag még nincs; Java backendek a További kliensek alatti REST API-t használhatják.
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);Rögzítés Reactben
"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."); }}
/>;
}Értékelés lekérése
A magas pontszám nem személyazonossági valószínűség. Mindig vegye figyelembe a decision és reviewRequired mezőt. A felülvizsgálati mód magas pontszámnál is review eredményt ad. A sikeres befejezett munkaterületi értékelés a beállított árat használja (6 kredit); az anonim próba nem von le munkaterületi kreditet. A sikertelen és bizonytalan értékelés nem befejezett számlázható értékelés.
{
"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
- Szolgáltatói élőségi pontszám: 0–100
- reviewRequired
- Az élőségvizsgálat nem személyazonosság-ellenőrzés. A bizonytalan eredmények felülvizsgálatot igényelnek.
- credits
- kredit befejezett értékelésenként
A rögzítési határidő három perc; az eredmény megőrzése külön és korlátozott. Hiba, megszakítás vagy lejárat esetén távolítsa el a rögzítést. A created/in_progress állapotot ugyanarra a munkamenetre, legalább két másodpercenként ellenőrizze. Bizonytalan kérés után ne indítson automatikusan új munkamenetet.
További kliensek
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"
}
}
}Az MCP faces:liveness hozzájárulást igényel, és nem kezel webkamerát. A webes próba külön munkamenet, nem tetszőleges MCP-munkamenet befejezése.
Elérhetőség és biztonság
A Scanverion nem tárolja a kameraképet vagy a visszakapott referenciaképeket.
A felvétel villogó színeket használhat. Ne folytassa, ha érzékeny a villogó fényekre.
Az élőségvizsgálat nem személyazonosság-ellenőrzés. A bizonytalan eredmények felülvizsgálatot igényelnek.
07 / Képességek
Műveletek és függőségek
Válasszon támogatott műveleteket, és ismerje meg az automatikus függőségeket.
| Művelet | Cél | Függőség vagy korlátozás |
|---|---|---|
| Detection | Dokumentum- vagy járműobjektumokat keres és osztályoz. | A legtöbb dokumentumfolyamathoz automatikusan hozzáadódik. |
| Scanner | Típusos mezőket nyer ki támogatott dokumentumokból. | A LostOrStolenCardCheck ezt igényli. |
| Rotation | Jelzi a dokumentum tájolását. | A FaceExtraction hozzáadja. |
| Blur | Kiértékeli a kép elmosódottságát. | Dokumentumokhoz és járművekhez támogatott. |
| FaceDetection | Arcokat keres az észlelt dokumentumban. | A FaceExtraction hozzáadja. |
| FaceExtraction | Kinyert arcadatokat vagy képeket ad vissza. | Hozzáadja a FaceDetection és Rotation műveletet. |
| BarcodeReading | Támogatott egy- és kétdimenziós kódokat olvas. | Csak dokumentumfeldolgozásban érhető el. |
| CheckboxDetection | Beállított jelölőnégyzet-területeket értékel. | A CheckboxDefinitions érvényes JSON legyen. |
| SignatureDetection | Aláírásokat keres a dokumentumban. | Csak dokumentumészlelés; a vizuális összehasonlítás külön végpontot használ. |
08 / Séma
Válaszmodell
Olvassa az objektumeredményeket, műveleti állapotokat, időzítést és krediteket.
Az objects megtartja a kapcsolatot az egyes észlelt objektumok és műveleti eredményeik között. Az operations a kért és automatikusan hozzáadott munkát jelenti. A usage a válasz hiteles elszámolása.
{
"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 / Külön erőforrások
Ellenőrzési erőforrások
Használja az elveszett okmány és irányítószám ellenőrző végpontokat.
| Módszer | Útvonal | Bemenet |
|---|---|---|
POST | /api/v1/validation/id-cards/lost-or-stolen | JSON törzs: cardNumber és cardType |
GET | /api/v1/validation/postal-codes | Lekérdezés: address és opcionális countryCode=SK vagy 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 / Elszámolás
Használat és kreditek
Kérje le a hívásokat, súlyozott krediteket, napi és funkciónkénti összesítést.
A krediteket a termék beállított szorzója súlyozza, ezért a hívások és kreditek külön mérőszámok. A használati végpontok inkluzív from és to dátumokat fogadnak; alapértelmezetten az időszak az aktuális hónap első napjától a mai napig tart.
| Módszer | Útvonal | Visszaadott adatok |
|---|---|---|
GET | /api/v1/usage/summary | Hívások és súlyozott kreditek az időszakra |
GET | /api/v1/usage/daily | Napi hívás- és kredittotalok |
GET | /api/v1/usage/by-capability | Elszámolt képességenként csoportosított összegek |
GET | /api/v1/usage/price-preview | Foglalt, túllépési és teljes ár előnézete EUR-ban |
11 / Helyreállítás
Hibák és újrapróbálkozás
Kezelje a hitelesítési, jogosultsági, validációs, duplikációs és szolgáltatói hibákat.
| Állapot | Jelentés | Kliensművelet |
|---|---|---|
401 Unauthorized | A kulcs hiányzik, hibás, inaktív, lejárt, visszavont vagy nincs munkaterülethez rendelve. | A hitelesítő adatok javításáig ne próbálja újra. |
402 Payment Required | A munkaterület jogosultsága vagy feldolgozási kerete kimerült. | Módosítsa a csomagot vagy a túllépési beállításokat. |
409 Conflict | Az idempotency key már lefoglalta ezt a feldolgozási kérést. | Ugyanazon kísérletként kezelje; ne hozzon létre vakon új kulcsot. |
422 Unprocessable Entity | A fájl, a műveletkombináció, a mezők, a dátumtartomány vagy az ellenőrzési bemenet érvénytelen. | Javítsa a kérést újrapróbálkozás előtt. |
502 Bad Gateway | Egy AI- vagy ellenőrzési szolgáltató hibázott vagy bizonytalan eredményt adott. | Biztonságos ismétlés esetén próbálja újra várakozással. |
503 Service Unavailable | Egy szükséges feldolgozási szolgáltató átmenetileg nem érhető el. | Korlátozott exponenciális várakozással próbálja újra. |
Naplózza a válasz requestId értékét, a HTTP-státuszt és az idempotency key értéket. Véletlenszerű, korlátozott exponenciális várakozást csak átmeneti hibáknál használjon; validációs és hitelesítési hibához módosított kérés kell.
12 / Generált szerződés
OpenAPI-referencia
Nyissa meg a Scalar böngészőt, vagy töltse le a géppel olvasható szerződést.
Scanverion API-referencia
A futó szerződés a sémák, enumértékek, hitelesítési követelmények és deklarált HTTP-kimenetek forrása.
MCP-integráció
Hosztolt OAuth-kapcsolatok, kliensregisztráció, hatókörök és helyi stdio a VS Code és Claude Desktop számára.
Hosztolt HTTP
OAuth 2.0A hosztolt OAuth engedélyezve van. Aktív, előre regisztrált kliens szükséges; az URL önmagában nem regisztrál alkalmazást. Az API-kulcsos HTTP-hozzáférés továbbra is elérhető az X-Scanverion-Api-Key fejléccel.
https://mcp.scanverion.com/mcp
- Átvitel
- Streamable HTTP / HTTPS
- Hitelesítés
- OAuth 2.0 engedélyezési kód + S256 PKCE
- Bemenetek
- Csak base64; helyi fájlútvonalak nélkül
- Legnagyobb dekódolt bemenet
- 10 MiB · JPEG, PNG, WebP, PDF
A dokumentum- és járműfeldolgozás krediteket használ. Az aláírás-összehasonlítás pontosan 1 kredit. A katalógus és használat díjmentes.
VS Code OAuth-konfiguráció
Hozzon létre és aktiváljon nyilvános natív alkalmazást a http://127.0.0.1/ callback alappal. A VS Code automatikusan megadja az ideiglenes portot. Adja meg az aktivált kliensazonosítót, indítsa el a kiszolgálót a VS Code-ban, majd hagyja jóvá a böngészős bejelentkezést és hozzájárulást. API-kulcs és kliens-titok nem szükséges.
{
"servers": {
"scanverion": {
"type": "http",
"url": "https://mcp.scanverion.com/mcp",
"oauth": {
"clientId": ""
}
}
}
}Hatókörök: capabilities:read a katalógushoz, usage:read a használathoz, documents:analyze vagy vehicles:analyze a feldolgozáshoz, signatures:compare az aláírásokhoz, offline_access a megújításhoz. A kliensnek kérnie, a felhasználónak jóváhagynia kell ezeket. A hozzáférési token 10 percig érvényes; a megújítási tokenek cserélődnek. Az alkalmazásnál vonja vissza a hozzáférést, vagy a Profilban bontson minden MCP-kapcsolatot. Tokent ne illesszen csevegésbe.
Elérhető eszközök
analyze_document- Díjköteles. Alapértelmezésben csak Detection; OCR-hez és mezőkinyeréshez külön kérje a Scanner műveletet.
analyze_vehicle- Díjköteles. A Detection és Blur műveleteket támogatja.
compare_signatures- Pontosan 1 kreditbe kerül. Egy aláírást 3-5 referenciával hasonlít össze; a hasonlóság nem igazolja a személyazonosságot vagy a hitelességet.
compare_faces- Hasonlítson össze két engedélyezett portrét Detection vagy Scanner nélkül. Használjon feltöltött képeket vagy ugyanazon munkaterület portréartefaktumait.
list_capabilities- AI-modellek és korlátok katalógusa feldolgozási díj nélkül; nem jogosultság-ellenőrzés.
list_api_capabilities- Nyilvános API-katalógus feldolgozási díj nélkül; nem ellenőrzi az adott fiók hozzáférését.
get_usage_summary- Hívások és kreditek feldolgozási díj nélkül, YYYY-MM-DD dátumokkal, mindkét határnapot beleértve. A költségbecslés nem érhető el, nem nulla.
faces:compare: A sikeres összehasonlítás a beállított kreditárat használja. Ellenőrizze a szabályzatot és a válasz használati adatait; a validációs és szolgáltatói hibák díjmentesek. A képeket átmenetileg dolgozzuk fel, regisztráció nélkül.
create_liveness_session / get_liveness_result · faces:liveness: Egy rövid kameramenet vizsgálja a bemutatásos támadásokat. Az arcok összehasonlítása külön értékelés marad. Az élőségvizsgálat nem személyazonosság-ellenőrzés. A bizonytalan eredmények felülvizsgálatot igényelnek.
create_identity_template- A teljes token és tartalma érzékeny biometrikus adat. Csak jogosult rendszerekbe másolja vagy ossza meg. 1–8 JPEG/PNG kép · képenként 10 MiB · összesen 40 MiB 2 kredit sikeresen befejezett kérésenként ·
processingAuthorized: true·templates:create compare_identity_templates- A hasonlóság felülvizsgálatot igényel. Nem igazolja a személyazonosságot vagy az élő jelenlétet. 2 kredit sikeresen befejezett kérésenként ·
processingAuthorized: true·templates:compare
OAuth-alkalmazások
A tulajdonosok és adminisztrátorok friss MFA-val regisztrálnak és aktiválnak klienseket és hatóköröket. Az API-kulcshoz nem kell OAuth-regisztráció. Dinamikus regisztráció nem támogatott.
OAuth-alkalmazások