01 / Start
Quickstart
Create a key, set two environment variables, and send a verified first request.
- Create a workspace account and choose a plan.
- Create an API key with the smallest processing scope your service needs. Copy the secret immediately; it is not shown again.
- Set SCANVERION_API_URL and SCANVERION_API_KEY only in your server environment.
- Send a multipart request and persist the returned requestId with your own trace identifier.
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 / Security
Authentication and API keys
Use scoped machine credentials safely from a trusted backend.
03 / Reliability
Idempotency and retries
Give every processing attempt a stable key and handle duplicates deliberately.
Send an Idempotency-Key with each processing request. Reuse the same value only when retrying the same logical upload and requested operations. A duplicate reservation returns 409 Conflict; switching to a new key can create a second billable attempt.
04 / AI endpoint
Document processing
Upload JPEG, PNG, WebP, or PDF input for synchronous document analysis.
Use the exact ASP.NET multipart field names: one File, one or more repeated Operations, optional repeated ScannerFields, optional CheckboxDefinitions JSON, and optional DisableObjectSegmentation.
Scanner fields by document type
Use the canonical field keys below in repeated ScannerFields values. Matching is case-insensitive, but canonical spelling keeps integrations consistent. Every category also supports the common fields. A requested field can be null when OCR evidence is insufficient.
| Document type | Detected category | Additional ScannerFields |
|---|---|---|
| Every document | * | rawTextdocumentType |
| Invoice | invoice | invoiceNumberissueDatedueDatedeliveryDatepaymentReferencecurrencysupplierNamesupplierAddresssupplierStreetNamesupplierStreetNumbersupplierCitysupplierCityPartsupplierPostalCodesupplierCountryCodesupplierCompanyRegistrationNumbersupplierTaxNumbersupplierVatNumbersupplierIbansupplierBiccustomerNamecustomerAddresscustomerStreetNamecustomerStreetNumbercustomerCitycustomerCityPartcustomerPostalCodecustomerCountryCodecustomerCompanyRegistrationNumbercustomerTaxNumbercustomerVatNumbercustomerIbancustomerBicdeliveryNamedeliveryAddressdeliveryStreetNamedeliveryStreetNumberdeliveryCitydeliveryCityPartdeliveryPostalCodedeliveryCountryCodenetTotalvatTotalvatBreakdowngrossTotallineItemsbankAccounts |
| Passport | passport | documentNumberdateOfBirthsexnationalitynationalityNamepersonalNumberdateOfIssuedateOfExpiryissuedByplaceOfBirth |
| EU identity card, front | euidfront | documentNumberdateOfBirthsexnationalitynationalityNamepersonalNumberdateOfIssuedateOfExpiryissuedByplaceOfBirth |
| EU identity card, back | euidback | addressstreetNamestreetNumbercitycityPartpostalCodecountryCodemaidenNameplaceOfBirthbloodTypepersonalNumbermaritalStatusissuedBydocumentNumbernationalitynationalityNamedateOfBirthsexdateOfExpiry |
| EU driving licence, front | eudriverlicensefront | dateOfBirthplaceOfBirthdateOfIssuedateOfExpiryissuedBydocumentNumberlicenseAllowedCategories |
| Vehicle registration certificate, part I, front | eutechnicallicensefront | vinlicensePlateaddressownerdocumentNumber |
| Vehicle registration certificate, part I, back | eutechnicallicenseback | vinmanufacturervariantmodelvalidUntilvehicleCategoryengineVolumeenginePerformancefuelTypenumberOfSeatsmaximumSpeedlargestWeightKg |
| Vehicle registration certificate, part II, front | bigtechnicallicensefront | registrationCertificatePartdocumentNumberlicensePlatedateOfFirstRegistrationvinvehicleKindvehicleCategorymanufacturermodeltypeVariantVersionvehicleManufacturertypeApprovalNumbertypeApprovalDateengineManufacturerengineTypeengineVolumeCm3catalystenginePerformanceKwengineSpeedRpmfuelTypetransmission |
| Vehicle registration certificate, part II, back | bigtechnicallicenseback | bodyTypecolorproductionNumbernumberOfSeatsnumberOfStandingPlacesnumberOfBedsroofLoadKgfuelTankVolumeLlengthMmwidthMmheightMmoperationalWeightKgmaximumWeightKgmaximumBrakedTrailerWeightKgmaximumUnbrakedTrailerWeightKgnumberOfAxleswheelbaseMmfrontTyresrearTyresfrontRimsrearRimsmaximumSpeedKphstationaryNoiseDbdriveByNoiseDbemissionStandardco2GKmfuelConsumptionL100Km |
| Residence permit, front | residencepermitfront | documentNumbersexnationalitynationalityNamedateOfBirthpersonalNumbertypeOfPermitdateOfExpirynotescardAccessNumber |
| Residence permit, back | residencepermitback | documentNumbersexnationalitynationalityNamedateOfBirthdateOfExpirydateOfIssueissuedByplaceOfBirthaddresspersonalNumbercountryCode |
| Disability card | disabilitycard | dateOfBirthdateOfIssuedocumentNumberissuedByaddress |
| Full image or unrecognized document | fullimage / other | - |
Supported documents
See what Scanverion can read.
Clearly invalid AI specimens are based on linked public document layouts. The cards distinguish an API category from the structured Scanner output that has been implemented and tested.

Passport
Universal ICAO TD3 MRZ plus selected printed layouts
Example fields
Passport
namedocumentNumbernationalityNamedateOfBirthdateOfExpiryplaceOfBirth
EU identity card
Country-specific front and back extraction
Example fields
EUIdFrontEUIdBack
namedocumentNumberpersonalNumbernationalityNameaddressdateOfExpiry
Residence permit
Slovak front and back layouts
Example fields
ResidencePermitFrontResidencePermitBack
namedocumentNumbertypeOfPermitnationalityNameaddressissuedBy
EU driving licence
Slovak front layout
Example fields
EUDriverLicenseFront
namedocumentNumberdateOfIssuedateOfExpiryissuedBylicenseAllowedCategories
Small technical certificate · Part I
Slovak plastic-card Part I, front and back
Example fields
EUTechnicalLicenseFrontEUTechnicalLicenseBack
documentNumbervinlicensePlatemanufacturermodelfuelType
Large technical certificate · Part II
Slovak folded-paper Part II, front and back
Example fields
BigTechnicalLicenseFrontBigTechnicalLicenseBackEUTechnicalLicensePartII
documentNumbervinlicensePlatevehicleCategoryenginePerformanceKwmaximumWeightKg
Disability card
Slovak card layouts
Example fields
DisabilityCard
namedocumentNumberdateOfBirthdateOfIssueissuedByaddress
Invoice
Layout-based invoice extraction
Example fields
Invoice
invoiceNumbersupplierNamecustomerNamepaymentReferencelineItemsgrossTotalAI-generated demo images use fictional data, visible SPECIMEN markings and invalid machine-readable values. They are not real or customer documents.

Generic documents
Visual operations work beyond known document types.
Checkboxes, barcodes, signatures, faces, blur and rotation can be analysed on forms, contracts, scans and unknown documents. A dedicated Scanner profile is not required.
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.
Example fields
CheckboxDetection uses CheckboxDefinitions supplied with the request. Full-image scanning can also return requested ScannerFields.
Layout reference: Original Scanverion AI application form · Fictional demoCountry support
Coverage follows the document standard and issuing layout.
Passport MRZ data is standardized globally. Identity cards and other national documents require a tested layout for that country and document generation.
Passports
MRZ fields from any passport with a readable ICAO TD3 MRZNational identity cards
Structured fields for supported front and back layoutsSlovak national documents
Structured fields for the supported Slovak document types05 / AI endpoint
Vehicle processing
Run detection or blur analysis against a vehicle image.
The request shape matches document processing, but vehicle requests accept only Detection and Blur. Unsupported operation combinations return 422 Unprocessable Entity.
06 / Multiple files
Batch processing
Process multiple document or vehicle files in one synchronous request.
Repeat the Files field for every upload. Files are processed sequentially, each result remains identifiable in the batch response, and usage is combined for the full request.
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"Processing endpoint directory
| Method | Path | File field | Contract |
|---|---|---|---|
POST | /api/v1/ai/document-processing | File | JPEG, PNG, WebP, or PDF; maximum 10 MB |
POST | /api/v1/ai/vehicle-processing | File | JPEG, PNG, or WebP; Detection and Blur only |
POST | /api/v1/ai/document-processing/batches | Files | Multiple files; results remain grouped by file |
POST | /api/v1/ai/vehicle-processing/batches | Files | Multiple vehicle images; Detection and Blur only |
GET | /api/v1/ai/capabilities | - | Supported MIME types, operations, and maximum file size |
07 / Capabilities
Operations and dependencies
Choose supported operations and understand automatically added dependencies.
| Operation | Purpose | Dependency or constraint |
|---|---|---|
| Detection | Locates and classifies document or vehicle objects. | Added automatically by most document workflows. |
| Scanner | Extracts typed fields from supported documents. | Required by LostOrStolenCardCheck. |
| Rotation | Reports document orientation. | Added by FaceExtraction. |
| Blur | Evaluates whether an image is blurred. | Supported for documents and vehicles. |
| FaceDetection | Finds faces within a detected document. | Added by FaceExtraction. |
| FaceExtraction | Returns extracted face imagery or data. | Adds FaceDetection and Rotation. |
| BarcodeReading | Reads supported one- and two-dimensional codes. | Document processing only. |
| CheckboxDetection | Evaluates configured checkbox regions. | CheckboxDefinitions must be valid JSON. |
| SignatureDetection | Locates signatures in a document. | Detection only; signature comparison is not exposed. |
08 / Schema
Response model
Read per-object results, operation outcomes, timing, and charged credits.
objects preserves the relationship between each detected object and its operation results. operations reports requested and automatically added work. usage is the authoritative charge for that response.
{
"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 / Dedicated resources
Validation resources
Call dedicated lost-card and postal-code validation endpoints.
| Method | Path | Input |
|---|---|---|
POST | /api/v1/validation/id-cards/lost-or-stolen | JSON body: cardNumber and cardType |
GET | /api/v1/validation/postal-codes | Query: address and optional countryCode=SK or 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 / Accounting
Usage and credits
Query calls, weighted credits, daily totals, capability totals, and price previews.
Credits are weighted by each product's configured credit multiplier, so calls and credits are separate measures. Usage routes accept inclusive from and to dates; by default, the period runs from the first day of the current calendar month through today.
| Method | Path | Returns |
|---|---|---|
GET | /api/v1/usage/summary | Calls and weighted credits for the period |
GET | /api/v1/usage/daily | Daily call and credit totals |
GET | /api/v1/usage/by-capability | Totals grouped by charged capability |
GET | /api/v1/usage/price-preview | Included, overage, and total price preview in EUR |
11 / Recovery
Errors and retry strategy
Handle authentication, entitlement, validation, duplicate, and provider failures.
| Status | Meaning | Client action |
|---|---|---|
401 Unauthorized | The key is missing, malformed, inactive, expired, revoked, or not attached to a workspace. | Do not retry until credentials are corrected. |
402 Payment Required | The workspace entitlement or processing allowance is exhausted. | Change the plan or authorized overage settings. |
409 Conflict | The idempotency key has already reserved this processing request. | Treat it as the same attempt; do not invent a new key blindly. |
422 Unprocessable Entity | The file, operation combination, fields, date range, or validation input is invalid. | Correct the request before retrying. |
502 Bad Gateway | An upstream AI or validation provider failed or returned an inconclusive result. | Retry with backoff when the operation is safe to repeat. |
503 Service Unavailable | A required processing provider is temporarily unavailable. | Retry with bounded exponential backoff. |
Log the response requestId, HTTP status, and your idempotency key. Apply jittered, bounded exponential backoff only to transient failures; validation and credential errors require a changed request.
12 / Generated contract
OpenAPI reference
Open the generated Scalar explorer or download the machine-readable contract.
Scanverion API Reference
The running contract is the source of truth for schemas, enum values, authentication requirements, and declared HTTP outcomes.
MCP integration
Local stdio setup for VS Code and Claude Desktop, tool inputs, security, and diagnostics.
Local stdio / public npm package
Give your VS Code or Claude Desktop agent Scanverion tools. The public npm package runs locally over stdio and uploads approved inputs to the API; OCR is not local. Hosted HTTP MCP is a restricted API-key developer preview, not general availability or MCP OAuth. This guide covers local stdio setup.
1. Install the package
Use Node.js 22 or newer and npm. Install the public package into a dedicated installation directory and run the command there. npm installs the Scanverion SDK dependency. No repository access is required.
Open MCP packagenpm install @scanverion/mcp-server@0.1.12. Configure your client
Merge this into .vscode/mcp.json, or your user MCP configuration. VS Code prompts for the key in a masked input. Do not put the key in a chat.
No key is entered or stored on this page. An empty directory disables local file access; base64 still requires explicit upload approval.
{
"inputs": [
{
"id": "scanverion-api-key",
"type": "promptString",
"description": "Scanverion API key",
"password": true
}
],
"servers": {
"scanverion": {
"type": "stdio",
"command": "node",
"args": [
"C:/path/to/mcp/node_modules/@scanverion/mcp-server/dist/index.js"
],
"env": {
"SCANVERION_API_URL": "https://api.scanverion.com",
"SCANVERION_ALLOWED_DIRECTORIES": "[]",
"SCANVERION_TIMEOUT_MS": "120000",
"SCANVERION_API_KEY": "${input:scanverion-api-key}"
}
}
}
}3. Verify without processing
With the key set in your terminal environment, run the doctor command. It checks directories and authenticated capabilities, but does not upload files or prove processing entitlement.
node ./node_modules/@scanverion/mcp-server/dist/index.js --doctorIn the MCP client, call list_capabilities and read scanverion://guide. That separate packaged guide is in English and includes MCP Inspector instructions and a synthetic-sample walkthrough.
Tools and billing
- analyze_document
- Billable. Detection by default; request Scanner explicitly for OCR and field extraction.
- analyze_vehicle
- Billable. Supports Detection and Blur.
- list_capabilities
- Unbilled AI model and limit catalog, not an entitlement check.
- list_api_capabilities
- Unbilled public API catalog, not account-specific access.
- get_usage_summary
- Unbilled calls and credits for inclusive YYYY-MM-DD dates. Estimated cost is unavailable, not zero.
First document call
Use a synthetic or approved sample in the allowed directory. This call uploads the file and may consume credits.
{
"filePath": "C:/approved-samples/sample.png",
"operations": [
"Scanner"
],
"scannerFields": [
"documentNumber"
],
"idempotencyKey": "sample-document-001"
}Supply exactly one of filePath or imageBase64. Base64 needs a supported filename or MIME type. JPEG, PNG, WebP and PDF inputs must be non-empty and at most 10 MiB. Results retain JSON text and add structuredContent.data.
Troubleshooting and safe retries
CONFIGURATION_ERROR: Check the key, absolute directory array, HTTPS API origin and timeout (1,000 to 300,000 ms).INVALID_INPUT: Check file access, format, base64, operations and date range.401 / 403: Check key validity, workspace access and the process:write scope.402 / 429: Check credits or rate limits. Inspect the error code, request ID and retryability.- Timeouts and cancellation do not guarantee a refund or that backend work stopped. Automatic retries are disabled. Reuse the same idempotency key only for the same logical request; a duplicate can return 409.
Do not allow entire home directories. Resolved-path checks block traversal and symlink escapes but are not an OS sandbox. Do not expose this process to untrusted clients or allow other users to mutate its approved directories. Treat extracted document text as untrusted data, not instructions.