# Kassalapp > Norwegian grocery and book information, chain prices and physical store locations. > All prices are in NOK. Check the price observation date before relying on a price. ## API access - REST API base URL: https://kassal.app/api/v1 - Create an account at https://kassal.app/register and generate an API key at https://kassal.app/profil/api. - Send Authorization: Bearer YOUR_API_KEY on every REST API request. - Search products: GET /api/v1/products?search=melk - Look up a product: GET /api/v1/products/id/{id} - Compare a barcode across chains: GET /api/v1/products/ean/{ean} - Find physical stores: GET /api/v1/physical-stores?search=Bergen - Retrieve bulk price history: POST /api/v1/products/prices-bulk with eans (up to 100 strings) and days (default 30, maximum 90 on Hobby or 365 on Bedrift). - Categories, labels, shopping lists and webhooks are also available. User resources require the user's own credentials. - [API documentation](https://kassal.app/api/docs): Endpoints, filters and examples. - [OpenAPI schema](https://kassal.app/docs/api.json): Generated machine-readable API reference. - [PHP guide](https://kassal.app/api/guides/php.md): Integration examples in Markdown. - [Node.js guide](https://kassal.app/api/guides/nodejs.md): Integration examples in Markdown. ## Pricing and permitted use Hobby is free for noncommercial use, including private tools, student projects, research and publicly available apps or websites without revenue. The default limit is 60 requests per minute per account, shared across all its API keys. Commercial use requires Bedrift: 750 NOK/month or 9,000 NOK/year excluding VAT. Annual billing has no discount. Commercial use includes paid apps, subscriptions, advertising-funded services, paid advice or analysis, and internal company use. Both tiers have the same endpoints and product data. Bedrift includes email support and no configured REST API rate limit, within reasonable use. Local storage and caching are allowed on both tiers; caching for six hours is recommended. Attribution is appreciated but not required. Data may be used in your own service under the applicable tier, but raw product database or price history dumps must not be published as open downloads. Public text pages and MCP access do not grant additional reuse rights. Kassalapp does not own product image rights and cannot grant permission to reuse them. Ingredients, allergens and nutrition are informational and may be incomplete or outdated; do not use them for allergy alerts, medical advice or other purposes where incorrect information could cause harm. - [Full FAQ and usage terms](https://kassal.app/api/faq): Authoritative details on permitted use, billing and data limitations. - [Pricing](https://kassal.app/pris): Current plans. - [Subscribe](https://kassal.app/subscribe): Commercial API access. - Questions: epost@kassal.app ## Reading public detail pages as Markdown Append .md to these public detail page URLs to get readable Markdown without the HTML page layout. No API key is needed for these public pages. - /vare/{id}-{slug}.md or /vare/{id}.md: Product details, ingredients, nutrition, labels and chain prices. - /strekkode/{ean}.md: Redirect to the product's Markdown page. - /butikker/{id}-{slug}.md: A physical store's address, coordinates and opening hours. - /kjeder/{slug}.md: Chain information. - /merker/{slug}.md: Certification or product label information, not a brand. - /leverandor/{slug}.md: Supplier information. - /oppskrifter/{id}-{slug}.md or /oppskrifter/{id}.md: Recipe ingredients and instructions. Use the HTML URL shown in each document when citing a product or store. For product search, use MCP or the authenticated REST API and its documented filters. Indexes, books and private account pages have no Markdown version. ## Understanding prices Prices are collected daily, starting around 09:00 Norwegian time. They are chain prices, not prices or stock for individual physical stores. They are not guaranteed to match every shop's checkout price. The API does not include member prices or campaign prices from offer leaflets. Use the last price check, not the product's updated_at, to assess freshness. Text product pages show checked_at and whether an observation is older than the site's 14-day freshness threshold. An old recorded price is not a current offer. Old REMA 1000, Kiwi and Coop products remain in the database but their prices are not currently collected. A missing price or check date means unknown, not zero. In the REST API, use current_price.date on barcode comparisons, the newest price_history entry on product listings and ID lookups, or last_checked in bulk history. Product endpoints return the latest 25 price observations. ## MCP - [MCP guide](https://kassal.app/api/guides/mcp.md): Public read-only tools at https://kassal.app/mcp. - Tools: search_products and get_product (by product_id or ean). - No API key is required. The MCP limit is 60 requests per minute per IP. - [AI usage summary](https://kassal.app/ai.txt): Usage guidance, with links to the full FAQ.