Ugrás a tartalomhoz

Scanverion fejlesztőknek

Teljes integrációs útmutató

Kérésszerződések, SDK-példák és integrációs útmutatók dokumentumkinyeréshez, arc- és aláírás-összehasonlításhoz, kamerás élőségvizsgálathoz és újrafelhasználható arcsablonokhoz.

Élő API-szerződésOpenAPI 3.1.1 / v1

A futó .NET API-ból, valamint annak típusos kérés- és válaszmodelljeiből generálva.

OpenAPI JSON letöltése

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.

  1. Hozzon létre munkaterületet, és válasszon csomagot.
  2. 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.
  3. A SCANVERION_API_URL és SCANVERION_API_KEY változókat csak a szerver környezetében állítsa be.
  4. 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.
Kérésbash
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.

Szerveroldali hitelesítő adat. Küldje az Authorization: Bearer skv_... fejlécet. Kulcsot soha ne tegyen böngésző-JavaScriptbe, mobilalkalmazásba, analitikába vagy naplóba.
EllenőrzésA kulcsnak aktívnak, érvényesnek, vissza nem vontnak és munkaterülethez rendeltnek kell lennie.
JogosultságokA hozzáférést a kulcshoz mentett jogosultsági körök alapján értékeljük.
Titok átadásaA teljes titok csak létrehozáskor vagy kulcscserénél jelenik meg.
AuditnyomA sikeres használat frissíti az utolsó használat idejét és audit eseményt rögzít.
Nyilvános klienscsomagok: TypeScript SDK · Python SDK · .NET SDK · CLI · MCP server

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.

Korlátozás: A bemenet típusa image/jpeg, image/png, image/webp vagy application/pdf legyen, mérete pedig legfeljebb 10 MB.

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óriaTovábbi ScannerFields
Minden dokumentum*
rawTextdocumentType
Számlainvoice
invoiceNumberissueDatedueDatedeliveryDatepaymentReferencecurrencysupplierNamesupplierAddresssupplierStreetNamesupplierStreetNumbersupplierCitysupplierCityPartsupplierPostalCodesupplierCountryCodesupplierCompanyRegistrationNumbersupplierTaxNumbersupplierVatNumbersupplierIbansupplierBiccustomerNamecustomerAddresscustomerStreetNamecustomerStreetNumbercustomerCitycustomerCityPartcustomerPostalCodecustomerCountryCodecustomerCompanyRegistrationNumbercustomerTaxNumbercustomerVatNumbercustomerIbancustomerBicdeliveryNamedeliveryAddressdeliveryStreetNamedeliveryStreetNumberdeliveryCitydeliveryCityPartdeliveryPostalCodedeliveryCountryCodenetTotalvatTotalvatBreakdowngrossTotallineItemsbankAccounts
Útlevélpassport
documentNumberdateOfBirthsexnationalitynationalityNamepersonalNumberdateOfIssuedateOfExpiryissuedByplaceOfBirth
EU-s személyi igazolvány, előlapeuidfront
documentNumberdateOfBirthsexnationalitynationalityNamepersonalNumberdateOfIssuedateOfExpiryissuedByplaceOfBirth
EU-s személyi igazolvány, hátlapeuidback
addressstreetNamestreetNumbercitycityPartpostalCodecountryCodemaidenNameplaceOfBirthbloodTypepersonalNumbermaritalStatusissuedBydocumentNumbernationalitynationalityNamedateOfBirthsexdateOfExpiry
EU-s vezetői engedély, előlapeudriverlicensefront
dateOfBirthplaceOfBirthdateOfIssuedateOfExpiryissuedBydocumentNumberlicenseAllowedCategories
Forgalmi engedély, I. rész, előlapeutechnicallicensefront
vinlicensePlateaddressownerdocumentNumber
Forgalmi engedély, I. rész, hátlapeutechnicallicenseback
vinmanufacturervariantmodelvalidUntilvehicleCategoryengineVolumeenginePerformancefuelTypenumberOfSeatsmaximumSpeedlargestWeightKg
Forgalmi engedély, II. rész, előlapbigtechnicallicensefront
registrationCertificatePartdocumentNumberlicensePlatedateOfFirstRegistrationvinvehicleKindvehicleCategorymanufacturermodeltypeVariantVersionvehicleManufacturertypeApprovalNumbertypeApprovalDateengineManufacturerengineTypeengineVolumeCm3catalystenginePerformanceKwengineSpeedRpmfuelTypetransmission
Forgalmi engedély, II. rész, hátlapbigtechnicallicenseback
bodyTypecolorproductionNumbernumberOfSeatsnumberOfStandingPlacesnumberOfBedsroofLoadKgfuelTankVolumeLlengthMmwidthMmheightMmoperationalWeightKgmaximumWeightKgmaximumBrakedTrailerWeightKgmaximumUnbrakedTrailerWeightKgnumberOfAxleswheelbaseMmfrontTyresrearTyresfrontRimsrearRimsmaximumSpeedKphstationaryNoiseDbdriveByNoiseDbemissionStandardco2GKmfuelConsumptionL100Km
Tartózkodási engedély, előlapresidencepermitfront
documentNumbersexnationalitynationalityNamedateOfBirthpersonalNumbertypeOfPermitdateOfExpirynotescardAccessNumber
Tartózkodási engedély, hátlapresidencepermitback
documentNumbersexnationalitynationalityNamedateOfBirthdateOfExpirydateOfIssueissuedByplaceOfBirthaddresspersonalNumbercountryCode
Fogyatékossági igazolványdisabilitycard
dateOfBirthdateOfIssuedocumentNumberissuedByaddress
Teljes kép vagy fel nem ismert dokumentumfullimage / other
-
A strukturált számlamezők JSON-tömbként maradnak kompatibilisek a szöveges szótárral: vatBreakdown; a grossAmount mezőt is tartalmazó lineItems; valamint a szerepkörhöz kötött bankAccounts. A korábbi iban mező a supplierIban elavult álneve. A személynév adatai a scanner.fields.name objektumban jelennek meg keresztnévvel, középső névvel, vezetéknévvel, címekkel, valamint eredeti és latin írású változatokkal.

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.

Fiktív magyar üzleti számla

Számla

Elrendezésalapú

Elrendezésalapú számlakinyerés

Példamezők
API-kategória

Invoice

Példamezők
invoiceNumbersupplierNamecustomerNamepaymentReferencelineItemsgrossTotal
Elrendezési referencia: Original Scanverion Hungarian AI invoice specimen · Fictional demo

Az 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.

Fiktív magyar kérelem jelölőnégyzetekkel, aláírással és mintakódokkal

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 demo

Orszá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.

01

Útlevelek

Minden kibocsátó ország olvasható ICAO TD3 MRZ esetén
Tesztelt nyomtatott elrendezés
HU

A további nyomtatott mezők a nemzeti elrendezéstől függenek.

02

Személyazonosító igazolvány

Strukturált kinyerés a tesztelt magyar elő- és hátoldalhoz
Tesztelt ország
HU

A 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.

Kérésbash
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ÚtvonalFájlmezőSzerződés
POST/api/v1/ai/document-processingFileJPEG, PNG, WebP vagy PDF; legfeljebb 10 MB
POST/api/v1/ai/vehicle-processingFileJPEG, PNG vagy WebP; csak Detection és Blur
POST/api/v1/ai/document-processing/batchesFilesTöbb fájl; az eredmények fájlonként csoportosítva maradnak
POST/api/v1/ai/vehicle-processing/batchesFilesTöbb járműkép; csak Detection és Blur
POST/api/v1/signature-comparisonsCandidate + ReferencesEgy jelölt, 3-5 referencia; siker esetén pontosan 1 kredit
POST/api/v1/face-comparisonsReferenceImage / ReferenceArtifactId + CandidateImage / CandidateArtifactIdOldalanké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.

Korlátozás: API-kulccsal a POST /api/v1/signature-comparisons, hitelesített irányítópult-munkamenetből a POST /api/v1/signature-comparisons/previews útvonalat használja. Mindkettőhöz Idempotency-Key szükséges.
Rögzített ár. Minden sikeresen befejezett összehasonlítás pontosan 1 kreditet használ, módtól és referenciaszámtól függetlenül. Az ellenőrzési és szolgáltatói hibák nem kerülnek felszámításra.
Átmeneti feldolgozás. A forrásképeket és embeddingeket nem regisztráljuk és nem tároljuk. Csak feldolgozásra jogosult aláírásokat küldjön.
Kérésbash
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.

Válaszjson
{
  "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-comparisons
Korlátozás: Oldalanként pontosan egy JPEG/PNG kép vagy artefaktum; képenként legfeljebb 10 MB. Policy: balanced. Idempotency-Key szükséges.

Hasonló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.

Kérésbash
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"
Válaszjson
{
  "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
      }
    ]
  }
}
TypeScript · trusted backendtypescript
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(),
});
Python · trusted backendpython
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()),
)
.NET · trusted backendcsharp
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());
CLIbash
scanverion face compare reference.jpg candidate.png --idempotency-key face-comparison-001 --output json
MCP: compare_facesjson
{
  "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.

A munkaterületi kérésekhez bejelentkezés, adatkezelési felhatalmazás és elegendő kredit szükséges. Az elérhetőség a /api/v1/identity-templates/policy végponton ellenőrizhető. A névtelen próbák botellenőrzést is igényelnek. A sablonokat az ügyfél tárolja; a hasonlóság felülvizsgálatot igényel, és nem igazolja a személyazonosságot vagy az élő jelenlétet.

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.

Sablonkérésbash
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.

Válasz szerkezetejson
{
  "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.

Backend vektordekódolótypescript
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); }
}
Saját adatbázissql
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.

Paraméterezett koszinuszkereséssql
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ő.

Opcionális sablon-összehasonlításbash
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.

  1. 1
    Létrehozás a backenden

    Szerezzen engedélyt és hozzon létre egy rövid munkamenetet.

  2. 2
    Rögzítés Reactben

    Adja át a visszakapott munkamenetet a Scanverion komponensnek.

  3. 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.

React 18/19 + SDK 0.1.1bash
npm install react react-dom
  npm install @scanverion/sdk@0.1.1 @scanverion/liveness-react@0.1.0

Lé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.

Node.js / npmtypescript
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 });
}

Rögzítés Reactben

CameraStep.tsx · client componenttsx
"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.

Completed result · calibrated-deployment examplejson
{
  "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

RESTbash
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"

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űveletCélFüggőség vagy korlátozás
DetectionDokumentum- vagy járműobjektumokat keres és osztályoz.A legtöbb dokumentumfolyamathoz automatikusan hozzáadódik.
ScannerTípusos mezőket nyer ki támogatott dokumentumokból.A LostOrStolenCardCheck ezt igényli.
RotationJelzi a dokumentum tájolását.A FaceExtraction hozzáadja.
BlurKiértékeli a kép elmosódottságát.Dokumentumokhoz és járművekhez támogatott.
FaceDetectionArcokat keres az észlelt dokumentumban.A FaceExtraction hozzáadja.
FaceExtractionKinyert arcadatokat vagy képeket ad vissza.Hozzáadja a FaceDetection és Rotation műveletet.
BarcodeReadingTámogatott egy- és kétdimenziós kódokat olvas.Csak dokumentumfeldolgozásban érhető el.
CheckboxDetectionBeállított jelölőnégyzet-területeket értékel.A CheckboxDefinitions érvényes JSON legyen.
SignatureDetectionAláírásokat keres a dokumentumban.Csak dokumentumészlelés; a vizuális összehasonlítás külön végpontot használ.
Speciális esetek. A Detection és Scanner automatikusan teljes oldalas OCR-re vált, ha az oldal szintű bizonyíték számlát azonosít. A DisableObjectSegmentation továbbra is opcionális teljesképes felülbírálás; Scanner művelettel együtt ScannerFields szükséges. Az irányítószám-keresés külön validációs végpont, nem multipart AI-művelet.

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.

Válaszjson
{
  "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ÚtvonalBemenet
POST/api/v1/validation/id-cards/lost-or-stolenJSON törzs: cardNumber és cardType
GET/api/v1/validation/postal-codesLekérdezés: address és opcionális countryCode=SK vagy SVK
Kérésbash
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ÚtvonalVisszaadott adatok
GET/api/v1/usage/summaryHívások és súlyozott kreditek az időszakra
GET/api/v1/usage/dailyNapi hívás- és kredittotalok
GET/api/v1/usage/by-capabilityElszámolt képességenként csoportosított összegek
GET/api/v1/usage/price-previewFoglalt, túllépési és teljes ár előnézete EUR-ban
Elszámolási működés. A foglalt kreditek minden naptári hónapban újraindulnak. Túllépési díj csak engedélyezett újrahasználható fizetési móddal és pozitív kerettel számítható fel.

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.

ÁllapotJelentésKliensművelet
401 UnauthorizedA 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 RequiredA 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 ConflictAz 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 EntityA 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 GatewayEgy 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 UnavailableEgy 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.

Kapcsolat

Hosztolt HTTP

OAuth 2.0

A 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.

Kiszolgáló URL
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.

.vscode/mcp.json
{
  "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