Skip to content

Feature List

Which Data Fields can asynchronous processing of Smartscan extract?

Below is an overview of all the features we support.

  • The caller has to specify which fields they want processed by the API.
  • We continuously work with our integrations to expand our feature and language support. Please contact us if you would like us to look into new features.

Feature items

Information

Note that we do not infer implicit columns, meaning we do not infer information that is not stated explicitly in the line items table. Similarly, we won't return prices including and excluding VAT, unless they are listed explicitly in the document.

Information

Which pages are read depends on the feature. The field level predictions - totals, dates, supplier and receiver details, payment IDs and the other single value features - together with VAT_DISTRIBUTION are read from the first and last page of the document. PURCHASE_LINES, PAGE_TEXTS, QR_CODES, SWISS_QR_BILLS and question answering are processed across all pages, whatever the length of the document.

Information

When a requested feature finds nothing on the document, it is left out of the annotations array altogether rather than returned as an empty entry - for example, requesting QR_CODES for a document that contains no QR code produces no QR_CODES annotation at all. Always look a feature up by its feature name rather than assuming it is present.

Feature name Premium Description Example
BANK_ACCOUNT_NUMBER * Bank account number 0002012345
BANK_REGISTRATION_NUMBER * Bank registration number (in countries where relevant - eg. Denmark) 0007
BIC * BIC code DABADKKK
CREDIT_CARD_LAST_FOUR Last four digits of the credit card that was used for payment 2345
CURRENCY Three-letter currency code EUR
CUSTOMER_NUMBER * Number that identifies the customer 12345
DOCUMENT_DATE * The date that the document was issued 2022-10-24
DOCUMENT_NUMBER * A number that identifies the document (invoice number for invoices etc.) 012782-04
DOCUMENT_TYPE Support for Invoice, Receipt, Credit Note and Debit Note Invoice
IBAN IBAN code DK50 0007 0007 1112 22
KSEF Polish KSeF invoice identifier. The extracted number is checksum validated, and is only returned when a valid KSeF number is found on the document. 1111111111-20250801-A1B2C3D4E5F6-3C
OCR_LINE_BE_PAYMENT_ID * Belgian Payment ID: OGM +++123/1234/12345+++
OCR_LINE_DK_CREDITOR_ID Danish creditor ID: FIK Account number 12345678
OCR_LINE_DK_PAYMENT_ID Danish Payment ID: FIK Debitor or payment reference 000000001010123
OCR_LINE_DK_TYPE Danish Payment info: FIK Type field +71
OCR_LINE_FI_PAYMENT_ID Finnish Payment ID: Viitenumero 123456789
OCR_LINE_NL_PAYMENT_ID Dutch Payment ID: Betalingskenmerk 123456789
OCR_LINE_NO_PAYMENT_ID Norwegian Payment ID: Kundeidentifikasjon (KID) 123456789
OCR_LINE_SE_BANKGIRO_CREDITOR_ID Swedish Payment info: BankGiro 0070070
OCR_LINE_SE_PAYMENT_ID Swedish Payment ID :Märkning 123456789
OCR_LINE_SE_PLUSGIRO_CREDITOR_ID Swedish Payment info: PlusGiro 41
ORDER_NUMBER * (experimental). Order number if present on e.g. an invoice 20220201-1234
PAGE_TEXTS The text content of the document per page.
PAYMENT_DUE_DATE The last day that the payment has to be made 2022-10-24
PAYMENT_METHOD Cash, CreditCard or BankTransfer BankTransfer
PRODUCT_TYPES Product type classification for purchase lines. See Product Types below. RESTAURANTS
PURCHASE_LINES * Line items information; description, quantity and prices. See all the supported fields listed below.
QR_CODES Extract QR codes found in document images. Returns the decoded content of any QR codes detected. See QR Codes. {"content": "https://example.com"}
RECEIVER_ADDRESS * (experimental). Also returns a structured address with parsed components.
RECEIVER_COUNTRY_CODE * (experimental)
RECEIVER_NAME * (experimental)
RECEIVER_ORDER_NUMBER * (experimental)
RECEIVER_VAT_NUMBER * (experimental)
SUPPLIER_ADDRESS * Address of the supplier's company. Also returns a structured address with parsed components. Gærtorvet 3, 1799 København
SUPPLIER_COUNTRY_CODE Two-letter country code of the supplier's origin DK
SUPPLIER_NAME * Name of the supplier's company Visma
SUPPLIER_ORGANISATION_NUMBER * National company ID (e.g. CVR in DK or KvK in the NL) 11122007
SUPPLIER_VAT_NUMBER * VAT number for the supplier's company (relevant in the EU) DK11122007
SWISS_QR_BILLS Extract and parse Swiss QR bill payment information from QR codes. Returns structured payment data including amounts, accounts, and parties. See Swiss QR Bills
TEXT_ANNOTATION The full OCR output for the document
TOTAL_EXCL_VAT The total of the document excluding VAT. Will always be returned as absolute value. 20.21
TOTAL_INCL_VAT The total of the document including VAT. Will always be returned as absolute value. 21.50
TOTAL_VAT The total VAT of the document. Will always be returned as absolute value. 1.29
VAT_DISTRIBUTION * VAT levels; percentages and amount they represent. See the details here.
VERIFIED * Cross-checks amounts, VAT levels and purchase lines against each other, then flags or corrects the affected values. Automatically enables the features the cross-validation needs - see VERIFIED results.

Upcoming features

Smartscan currently cannot predict the Order Reference, but you can provide it as ORDER_REFERENCE in the Update Transaction Results call, which we can then use in the future to train Smartscan.

Default Feature Set

Unlike the synchronous Smartscan, the asynchronous Smartscan does not have a default feature set. The caller must specify which features they want to extract from the document.

Purchase Lines

Leverage Smartscan’s functionality for extracting invoice line item extraction. With the asynchronous processing of Smartscan, you can extract line items from invoices and receipts from documents with any number of pages.

Feature Name Type Description Example Value
itemNumber string This is the row number, position, index, or ID for this line item (if it is stated on the document). 1
code string Product code, product number, or SKU associated with the line item. It is an ID that the supplier assigns to each specific product. A25006
description string The text description for the line item. It will typically be the name of a product or a text describing the delivered service. Sport socks long 3-pack black 43-46
quantity string The quantity for this line item. 12
unit string The unit of the line item, e.g. ‘pieces’, ‘kg’, or ‘lb’. kg
unitPriceInclVat string The net or gross price of one unit of this item including vat. 12.5
unitPriceExclVat string The net or gross price of one unit of this item excluding vat. 12.5
unitPrice string The net or gross price of one unit of this item. The unit price is typically referred to as the “Price” or “unit price”, and it is not always stated if it is incl or excl the vat amount. 12.5
totalInclVat string The total amount including vat. 150.00
totalExclVat string The total amount excluding vat. 120.00
total string The total amount is typically present for every line item, and is usually found as the rightmost value on the line. This is the value we return as total. This general total amount of this line item often does not distinguish between including VAT (totalInclVat) or excluding VAT (totalExclVat). 150.00
totalVat string The total vat amount for the specific line item. 30.0
percentageVat string The tax/vat rate associated with the line item. 25.0
pageRef number Page number on which the line was found. Starts at 1. 1
totalDiscount string The total discount for this line item, when it is stated on the document. 5.00
percentageDiscount string The discount percentage for this line item, when it is stated on the document. 10.0

Simple and detailed response forms

The PURCHASE_LINES annotation carries the line items in two parallel forms:

  • purchaseLineCandidates deprecated - the simple form. Every field listed above holds a single string, the most likely value.
  • purchaseLinesDetails - the detailed form. Every field listed above instead holds an array of candidates, each with its own value, confidence and pageRef. This is the form that carries productType and the VERIFIED confidence level.

pageRef stays a single number on both forms. purchaseLineCandidates is deprecated for purchase lines: it stays in place for backwards compatibility, but new fields (such as productType) are added only to purchaseLinesDetails. Use purchaseLinesDetails for new integrations.

Example (truncated):

{
    "id": "<transaction-id>",
    "annotations": [
        {
            "feature": "PURCHASE_LINES",
            "purchaseLineCandidates": [
                {
                    "pageRef": 1,
                    "description": "Sport socks long 3-pack black 43-46",
                    "quantity": "12",
                    "total": "150.00"
                }
            ],
            "purchaseLinesDetails": [
                {
                    "pageRef": 1,
                    "description": [
                        { "value": "Sport socks long 3-pack black 43-46", "confidence": { "level": "VERY_HIGH" } }
                    ],
                    "quantity": [
                        { "value": "12", "confidence": { "level": "HIGH" } }
                    ],
                    "total": [
                        { "value": "150.00", "confidence": { "level": "VERY_HIGH" } }
                    ]
                }
            ]
        }
    ]
}

Product Types

The PRODUCT_TYPES feature adds product type classification to each purchase line. When requested, the purchaseLinesDetails response includes a productType array on each line item with up to 5 ranked candidates.

Information

Requesting PRODUCT_TYPES automatically enables PURCHASE_LINES - there is no need to request it separately. It classifies based on the description field of each line item.

Field Type Description Example
type string Machine-readable product type identifier RESTAURANTS
label string Human-readable product type name Restaurants
confidence number Confidence score between 0 and 1 0.9835
confidenceLevel string Discretized confidence level HIGH

For the full list of supported product types and the standalone Product Types API, see the Product Types documentation.

Example Request:

{
    "document": {
        "source": {
            "httpUri": "https://example.com/invoice.pdf"
        }
    },
    "features": ["PRODUCT_TYPES"],
    "tier": "PREMIUM"
}

Example Response (truncated):

{
    "id": "<transaction-id>",
    "annotations": [
        {
            "feature": "PURCHASE_LINES",
            "purchaseLinesDetails": [
                {
                    "pageRef": 1,
                    "description": [
                        { "value": "Latte 12oz", "confidence": { "level": "VERY_HIGH" } }
                    ],
                    "quantity": [
                        { "value": "2", "confidence": { "level": "HIGH" } }
                    ],
                    "totalInclVat": [
                        { "value": "7.18", "confidence": { "level": "HIGH" } }
                    ],
                    "unitPriceInclVat": [
                        { "value": "3.59", "confidence": { "level": "HIGH" } }
                    ],
                    "productType": [
                        {
                            "type": "RESTAURANTS",
                            "label": "Restaurants",
                            "confidence": 0.9835,
                            "confidenceLevel": "HIGH"
                        },
                        {
                            "type": "FOOD_BEVERAGES",
                            "label": "Food and non-alcoholic beverages",
                            "confidence": 0.0111,
                            "confidenceLevel": "VERY_LOW"
                        }
                    ]
                }
            ]
        }
    ],
    "customId": "my-first-transaction"
}

Multiple VAT levels

Leverage Smartscan's functionality for extracting multiple VAT levels present on a document. This feature is executed only on the first and last page of the document.

To begin using and access the feature, simply include VAT_DISTRIBUTION as a requested feature from Smartscan, as shown in Smartscan's feature list. This will add VAT outputs wherever our system identifies them. Please note that if Smartscan determines the relevant VAT information is not present on the document, no VAT output will be generated. This also means that we do not attempt to compute VAT, base amount or amount including VAT based on the other features. We simply return what is stated on the document.

Information

The feature is now supported in almost all our markets. We have limited output to at most two distinct percentages based on the output quality. Romania (RO), Norway (NO), Sweden (SE), Germany (DE), Finland (FI), Spain (ES).

Feature Name Type Description Example Value
percentage string VAT level percentage. The decimal delimiter is always a dot. "percentage": "25.0"
amount string The amount the percentage represents rounded to two decimal points. "amount": "585.45"
inclVat string Amount incl vat for this vat percentage. "inclVat": "2926.25"
exclVat string The base amount vat is based on. "exclVat": "2341.80"
pageRef number Page number on which the distribution was found. "pageRef": 1
Example
Example json

(In this example there is no explicit inclVat or exclVat amount - to these elements are not returned.)

VAT distribution response forms

As with purchase lines, the VAT_DISTRIBUTION annotation carries the results in two parallel forms:

  • vatDistributionCandidates deprecated - the simple form documented above, where every field holds a single string.
  • vatDistributionDetails - the detailed form, where every field holds an array of candidates. The detailed form names the amounts totalVat, totalInclVat and totalExclVat in place of amount, inclVat and exclVat.

vatDistributionCandidates is deprecated: it stays in place for backwards compatibility, but new fields are added only to vatDistributionDetails. Use vatDistributionDetails for new integrations.

Structured Addresses

When you request SUPPLIER_ADDRESS or RECEIVER_ADDRESS, Smartscan automatically returns a structured version of the address in addition to the raw text. The raw address is parsed and validated using a geocoding service, breaking it down into individual components such as street, postal code, city, and country.

The structured address is returned in the structuredAddress field on the annotation. Entries follow the order in which the addresses were predicted, so the first entry belongs to the first predicted address.

Information

structuredAddress can contain more entries than candidates. The structured addresses are resolved before the confidence filtering is applied, so with the default max_results of 1 you may receive a single candidate alongside several structured addresses.

Information

The structured address is only populated when the geocoding service can successfully parse and validate the raw address. If the address cannot be resolved, an empty structured address object is returned for that candidate.

Field Name Type Description Example Value
street string Street name "Gærtorvet"
postalCode string Postal or ZIP code "1799"
city string City or town name "København"
country string Full country name, in the local language of the address "Danmark"
countryCode string Two-letter country code (ISO 3166-1 alpha-2) "DK"

Example Response (truncated):

{
    "id": "<transaction-id>",
    "annotations": [
        {
            "feature": "SUPPLIER_ADDRESS",
            "candidates": [
                {
                    "value": "Gærtorvet 3, 1799 København",
                    "confidence": { "level": "HIGH" }
                }
            ],
            "structuredAddress": [
                {
                    "street": "Gærtorvet",
                    "postalCode": "1799",
                    "city": "København",
                    "country": "Danmark",
                    "countryCode": "DK"
                }
            ]
        },
        {
            "feature": "RECEIVER_ADDRESS",
            "candidates": [
                {
                    "value": "Bernstorffsgade 1570 København",
                    "confidence": { "level": "HIGH" }
                }
            ],
            "structuredAddress": [
                {
                    "street": "Bernstorffsgade",
                    "postalCode": "1570",
                    "city": "København",
                    "country": "Danmark",
                    "countryCode": "DK"
                }
            ]
        }
    ]
}

Question Answering (QA)

Questions for Smartscan is a powerful API feature designed to revolutionise the way businesses interact with their documents. It is a general-purpose question-answering system tailored specifically for business documents, serving as a supplementary tool to the standard feature extraction capabilities.

Information

With asynchronous processing, the QA feature can process documents of any length, making it ideal for comprehensive document analysis. Unlike the synchronous version which is limited to 5 questions on 5 pages, the async QA feature can handle larger documents and more complex question sets.

Questions

Our focus is on returning readable information directly from documents. While Questions for Smartscan is not a chatbot, users can ask human language questions about the content present in the document, like "what is the order number" or "what is the VAT amount". You cannot ask questions like "What is not on the document" or "What is the weather?"

How to Use QA

To use the QA functionality in asynchronous processing, simply provide one or more questions in the questions field of your request. The QA feature will be automatically added to your feature list when questions are present:

{
  "document": {
    "source": {
      "httpUri": "https://example.com/document.pdf"
    }
  },
  "features": ["TOTAL_INCL_VAT", "PURCHASE_LINES"],
  "questions": [
    "How much is the VAT amount?",
    "What is the order reference?",
    "What services were provided?",
    "What are the payment terms?"
  ]
}

Note

When you include questions in your request, the QA feature is automatically added to your feature list, so you don't need to explicitly specify it.

QA Response Format

The QA feature returns results within the standard async response structure. Each QA annotation contains a list of Answer Candidates:

Field Name Type Description Example Value
question string The original question that was asked "How much is the VAT amount?"
answer string The extracted answer from the document. See the note below on questions the document does not answer. "1.250,00"
pageRef number Page number where the answer was found 1

Example QA Response

{
  "id": "transaction-id-123",
  "customId": "custom-id-456",
  "annotations": [
    {
      "feature": "QA",
      "answerCandidates": [
        {
          "question": "How much is the VAT amount?",
          "answer": "1.250,00",
          "pageRef": 1
        },
        {
          "question": "What is the order reference?",
          "answer": "No answer.",
          "pageRef": 1
        },
        {
          "question": "What services were provided?",
          "answer": "Consulting services for system integration and software development",
          "pageRef": 2
        }
      ]
    }
  ]
}

Information

When the information is not present in the document, the answer field does not necessarily come back as an empty string - it may instead contain sentinel text such as No answer., as shown in the second example above. Do not test for an empty string alone when deciding whether a question was answered.

The QA feature does not report a confidence for answers. The confidence field is omitted entirely from each answer candidate, so do not expect a confidence value or level for QA results.

QR Code Features

QR Codes

The QR_CODES feature extracts and decodes any QR codes found in document images. With asynchronous processing, this feature can scan all pages of any document length to identify QR codes and returns their decoded text content.

Information

Unlike the synchronous version which is limited to the first 5 pages, the async QR_CODES feature can process documents of any length, making it ideal for comprehensive QR code extraction from large documents.

Common use cases include: - Extracting URLs for digital receipts or additional information - Reading contact information or business details - Capturing payment references or transaction IDs - Processing multi-page documents with QR codes throughout

The decoded QR codes are returned in the qrCodes field of the QR_CODES annotation. Each entry is an object with a single content field holding the decoded text of one QR code:

{
    "id": "<transaction-id>",
    "annotations": [
        {
            "feature": "QR_CODES",
            "qrCodes": [
                { "content": "https://example.com" },
                { "content": "Supplier: Max Muster & Co" }
            ]
        }
    ]
}

Swiss QR Bills

The SWISS_QR_BILLS feature is specifically designed to extract and parse Swiss QR bill payment information. Swiss QR bills are standardized payment slips used in Switzerland that contain structured payment data encoded in QR codes.

Information

This feature automatically validates the QR bill format according to Swiss payment standards and only returns data from valid Swiss QR bills. Invalid or malformed QR bills are ignored. With async processing, it can handle documents of any length containing multiple Swiss QR bills.

When a valid Swiss QR bill is detected, the following structured information is extracted:

Field Name Type Description Example Value
qrType string Swiss QR Code identifier, always "SPC" "SPC"
version string Swiss QR bill specification version "0200"
codingType string Character encoding type, always "1" "1"
account string IBAN or QR-IBAN of the creditor "CH4431999123000889012"
creditorAddressType string Address format: "S" for structured, "K" for combined "S"
creditorName string Name of the creditor or company "Max Muster & Co"
creditorAddressLine1 string Street/P.O. Box or first address line of the creditor "Musterstrasse"
creditorAddressLine2 string Building number or second address line of the creditor "123"
creditorAddressPostalCode string Postal code of the creditor "8000"
creditorAddressCity string City or town of the creditor "Seldwyla"
creditorAddressCountry string Country code of the creditor "CH"
ultimateCreditorAddressType string Address format of the ultimate creditor "S"
ultimateCreditorName string Name of the ultimate creditor "Sara Ultimate Creditor"
ultimateCreditorAddressLine1 string Street/P.O. Box or first address line of the ultimate creditor "Ultimate Street"
ultimateCreditorAddressLine2 string Building number or second address line of the ultimate creditor "456"
ultimateCreditorAddressPostalCode string Postal code of the ultimate creditor "9000"
ultimateCreditorAddressCity string City or town of the ultimate creditor "Ultimate City"
ultimateCreditorAddressCountry string Country code of the ultimate creditor "CH"
amount string Payment amount "1949.75"
currency string Payment currency (CHF or EUR) "CHF"
ultimateDebtorAddressType string Address format of the ultimate debtor "S"
ultimateDebtorName string Name of the ultimate debtor "Sara Beispiel"
ultimateDebtorAddressLine1 string Street/P.O. Box or first address line of the ultimate debtor "Musterstrasse"
ultimateDebtorAddressLine2 string Building number or second address line of the ultimate debtor "1"
ultimateDebtorAddressPostalCode string Postal code of the ultimate debtor "8000"
ultimateDebtorAddressCity string City or town of the ultimate debtor "Seldwyla"
ultimateDebtorAddressCountry string Country code of the ultimate debtor "CH"
paymentReferenceType string Reference type: "QRR", "SCOR", or "NON" "QRR"
paymentReference string Payment reference number "210000000003139471430009017"
unstructuredMessage string Additional payment information or message "Order from 15.10.2020"
trailer string End of payment data indicator, always "EPD" "EPD"
billingInformation string Structured billing information for automated booking "//S1/10/1234/11/201021"
av1Parameters string Parameters of the first alternative payment scheme "eBill/B/john@example.com"
av2Parameters string Parameters of the second alternative payment scheme "eBill/B/jane@example.com"

Example Response:

{
  "id": "<transaction-id>",
  "annotations": [
    {
      "feature": "SWISS_QR_BILLS",
      "swissQrBills": [
        {
        "qrType": "SPC",
        "version": "0200",
        "codingType": "1",
        "account": "CH4431999123000889012",
        "creditorAddressType": "S",
        "creditorName": "Max Muster & Co",
        "creditorAddressLine1": "Musterstrasse",
        "creditorAddressLine2": "123",
        "creditorAddressPostalCode": "8000",
        "creditorAddressCity": "Seldwyla",
        "creditorAddressCountry": "CH",
        "ultimateCreditorAddressType": "S",
        "ultimateCreditorName": "Sara Ultimate Creditor",
        "ultimateCreditorAddressLine1": "Ultimate Street",
        "ultimateCreditorAddressLine2": "456",
        "ultimateCreditorAddressPostalCode": "9000",
        "ultimateCreditorAddressCity": "Ultimate City",
        "ultimateCreditorAddressCountry": "CH",
        "amount": "1949.75",
        "currency": "CHF",
        "ultimateDebtorAddressType": "S",
        "ultimateDebtorName": "Sara Beispiel",
        "ultimateDebtorAddressLine1": "Musterstrasse",
        "ultimateDebtorAddressLine2": "1",
        "ultimateDebtorAddressPostalCode": "8000",
        "ultimateDebtorAddressCity": "Seldwyla",
        "ultimateDebtorAddressCountry": "CH",
        "paymentReferenceType": "QRR",
        "paymentReference": "210000000003139471430009017",
        "unstructuredMessage": "Order from 15.10.2020",
        "trailer": "EPD"
        }
      ]
    }
  ]
}