Skip to content

Product Types

Manual categorization of expenses is one of the most repetitive tasks in accounting. Product Types is an AI-powered classification service for categorizing transactions into 74 standardized categories/product types.

Given free-text descriptions, the service returns ranked candidates with confidence scores.

Why use Product Types?

Whether you are processing a bank statement or a complex invoice, the Product Types feature reads the free-text descriptions and maps it to a label.

Product Types dives into the line items

  • Standardized data: Map messy descriptions like "Printer paper A4" to standardized identifiers like OFFICE_SUPPLIES.
  • Confidence scores: Every suggestion comes with a confidence score (VERY_HIGH to VERY_LOW)

How to use Product Types

The service can be used with input from multiple sources:

  • Purchase Lines: Simply request the PRODUCT_TYPES feature inside Smartscan. We'll automatically extract your purchase lines and categorize each one for you in a single request.

  • Autosuggest models — text from Autosuggest input data such as bank (bank statement transactions), scanned-invoice (OCR text from scanned invoices), or electronic-invoice-line (e-invoice line items). See more here on the input data.

Getting Started

Access to the API

  1. Demo Access Token

    For development purposes, you can use the demo access token demo for access to staging. Use the staging endpoints indicated in the endpoints section. Please note that this token is rate-limited and should only be used for testing.

  2. Staging Access Token (Recommended)

    For more extensive testing and integration purposes, we recommend generating a staging access token through our Staging portal. Follow the steps in the Quick Start Guide for generating a staging or production access tokens. Refer to the Authentication for more information on the server-to-server token method.

Example Request


POST v2/product-types:batchSuggest

https://api.stag.ssn.visma.ai/v2/product-types:batchSuggest

Authorization - Bearer Token

Token: demo


Body - raw (json)

Body
{
    "texts": [
        "Office supplies and printer paper",
        "Diesel fuel for company vehicles"
    ]
}


The request body contains a single field:

Field Type Required Description
texts string[] Yes List of text descriptions to classify. Each text is classified independently.

Example Response


Body - raw (json)

Body
{
    "suggestions": [
        {
            "candidates": [
                {
                    "type": "OFFICE_SUPPLIES",
                    "label": "Office supplies",
                    "confidence": 0.9942,
                    "confidenceLevel": "VERY_HIGH"
                },
                {
                    "type": "ELECTRONICS",
                    "label": "Computer and consumer electronics",
                    "confidence": 0.0005,
                    "confidenceLevel": "VERY_LOW"
                },
                {
                    "type": "PACKAGING",
                    "label": "Packaging",
                    "confidence": 0.0004,
                    "confidenceLevel": "VERY_LOW"
                },
                {
                    "type": "PERSONAL_CARE",
                    "label": "Personal care products",
                    "confidence": 0.0004,
                    "confidenceLevel": "VERY_LOW"
                },
                {
                    "type": "DECORATIONS_ART",
                    "label": "Decorations and art supplies",
                    "confidence": 0.0003,
                    "confidenceLevel": "VERY_LOW"
                }
            ]
        },
        {
            "candidates": [
                {
                    "type": "FUEL_LUBRICANTS",
                    "label": "Fuel, fuel additives, lubricants and anti corrosives",
                    "confidence": 0.9958,
                    "confidenceLevel": "VERY_HIGH"
                },
                {
                    "type": "VEHICLES",
                    "label": "Vehicles and related accessories and components",
                    "confidence": 0.0003,
                    "confidenceLevel": "VERY_LOW"
                },
                {
                    "type": "RESEARCH_TECH_CONSULTING",
                    "label": "Research and technological consultation services",
                    "confidence": 0.0003,
                    "confidenceLevel": "VERY_LOW"
                },
                {
                    "type": "CHEMICALS",
                    "label": "Chemicals and chemical products",
                    "confidence": 0.0002,
                    "confidenceLevel": "VERY_LOW"
                },
                {
                    "type": "ENERGY",
                    "label": "Energy utilities",
                    "confidence": 0.0002,
                    "confidenceLevel": "VERY_LOW"
                }
            ]
        }
    ]
}


The response contains one suggestion per input text, in the same order. Each suggestion includes up to 5 ranked candidates.

Response Structure

Suggestion

Each element in the suggestions array corresponds to one input text.

Field Type Description
candidates candidate[] Ranked list of product type candidates, most confident first.

Candidate

Field Type Description Example
type string Machine-readable product type identifier OFFICE_SUPPLIES
label string Human-readable product type name Office supplies
confidence number Confidence score between 0 and 1 0.9942
confidenceLevel string Discretized confidence level VERY_HIGH

Confidence Levels

Product Types uses the same confidence levels as Smartscan:

VERY_HIGH, HIGH, MID, LOW, VERY_LOW

Results are sorted by confidence, from most to least confident.

Supported Product Types

The service classifies text into one of 74 product type categories:

ACCOUNTING_AUDIT          ACCOUNTING_SOFTWARE       ADVERTISING
AGRICULTURE               ALCOHOL_TOBACCO           BANKING_INVESTMENT
BOOKS                     BUSINESS_CONSULTING       CHEMICALS
CLEANING_SERVICES         CLEANING_SUPPLIES         CLOTHING
CONSTRUCTION_MATERIALS    DECORATIONS_ART           DEFENSE_SECURITY
DEPOSITS                  DOMESTIC_APPLIANCES       EDUCATION_TRAINING
ELECTRONICS               ENERGY                    FACILITY_MAINTENANCE
FEES                      FINES                     FITNESS_CLUBS
FOOD_BEVERAGES            FUEL_LUBRICANTS           FURNITURE
GIFTS                     GLASS_CERAMICS            GOVERNMENT_SERVICES
GRAPHIC_DESIGN            HEALTHCARE                HOTELS
INDUSTRIAL_MACHINERY      INSURANCE                 INTERNET_MEDIA
JEWELRY                   LEGAL                     LOGISTICS
MACHINERY_LEASING         MANUFACTURING             MARKETING
MEDIA_SERVICES            MEDICAL_LAB_EQUIPMENT     MEETINGS
MUSIC                     OFFICE_SUPPLIES           PACKAGING
PARKING                   PASSENGER_TRANSPORT       PAYMENTS
PAYROLL                   PERSONAL_CARE             PERSONAL_SERVICES
PHARMACEUTICALS           PLANTS_ANIMALS            PROPERTY_RENTAL
RECREATIONAL_SERVICES     RESEARCH_TECH_CONSULTING  RESTAURANTS
RETIREMENT                SOFTWARE                  SPORTS_EQUIPMENT
STORAGE                   TAXATION                  TELEPHONY
TEXTILES                  TOLLS                     TOYS
TRADE_REPAIR              VEHICLE_RENTALS           VEHICLES
WATER_WASTE               WEBSITE

Feedback

The Feedback endpoint allows you to submit ground-truth labels for model evaluation and improvement.


POST v2/product-types:feedback

https://api.stag.ssn.visma.ai/v2/product-types:feedback

Body - raw (json)

Body
{
    "texts": [
        "Office supplies and printer paper",
        "Diesel fuel for company vehicles"
    ],
    "trueCategories": [
        "OFFICE_SUPPLIES",
        "FUEL_LUBRICANTS"
    ]
}


Field Type Required Description
texts string[] Yes The same text descriptions that were classified.
trueCategories string[] Yes The correct product type for each text. Must be valid values from the supported types. Must have the same length as texts.

Error Handling

gRPC Code HTTP Code Description
InvalidArgument 400 texts is empty, or texts and trueCategories length mismatch, or invalid category in feedback.
Internal 500 Internal server error during prediction or storage.

Integration with Smartscan

Product Types is also available as a Smartscan feature. When requesting the PRODUCT_TYPES feature in a Smartscan request, product type predictions are automatically added to each purchase line in the response.

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.

Example Smartscan Request

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