shelfatlas-com · Schema

TermHistorySummary

CompanyGroceryAPIDenmarkRetail

Properties

Name Type Description
weeks_total integer Number of weeks in the requested window.
weeks_with_offers integer Of weeks_total, how many had at least one matching offer.
typical_price numbernull Median of the weekly min_price over weeks with offers, 2 decimals. Shelf prices across pack sizes — prefer typical_unit_price for a "typical price" claim.
lowest_price numbernull The smallest weekly min_price in the window.
lowest_price_week_start stringnull
lowest_price_chain_name stringnull
weeks_on_offer_last_8 integer Of the LAST 8 weeks, how many had at least one campaign offer.
unit stringnull SA-0230: the unit the window compares on — the one most offers carry (ties l > kg > stk). Null when no offer has a usable unit price; every *_unit_price field is then null.
weeks_with_unit_price integer Weeks with a cheapest_unit_price.
typical_unit_price numbernull Median of the weekly cheapest_unit_price (DKK per unit), 2 decimals. The like-for-like "typical price".
lowest_unit_price numbernull The smallest weekly cheapest_unit_price (DKK per unit).
lowest_unit_price_week_start stringnull
lowest_unit_price_chain_name stringnull
offer_pattern objectnull How often, how long and how far apart the offers come, from our own CAMPAIGN history (a regular shelf price never counts as an offer). null unless there are at least 3 offer periods in a window of at
View JSON Schema on GitHub

JSON Schema

shelfatlas-com-term-history-summary-schema.json Raw ↑
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/shelfatlas-com/json-schema/shelfatlas-com-term-history-summary-schema.json",
  "title": "TermHistorySummary",
  "x-generated": "2026-10-31",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/shelfatlas-com-openapi.json#/components/schemas/TermHistorySummary",
  "type": "object",
  "additionalProperties": false,
  "required": [
    "weeks_total",
    "weeks_with_offers",
    "typical_price",
    "lowest_price",
    "lowest_price_week_start",
    "lowest_price_chain_name",
    "weeks_on_offer_last_8",
    "unit",
    "weeks_with_unit_price",
    "typical_unit_price",
    "lowest_unit_price",
    "lowest_unit_price_week_start",
    "lowest_unit_price_chain_name",
    "offer_pattern"
  ],
  "properties": {
    "weeks_total": {
      "type": "integer",
      "description": "Number of weeks in the requested window."
    },
    "weeks_with_offers": {
      "type": "integer",
      "description": "Of weeks_total, how many had at least one matching offer."
    },
    "typical_price": {
      "type": [
        "number",
        "null"
      ],
      "description": "Median of the weekly min_price over weeks with offers, 2 decimals. Shelf prices across pack sizes — prefer typical_unit_price for a \"typical price\" claim."
    },
    "lowest_price": {
      "type": [
        "number",
        "null"
      ],
      "description": "The smallest weekly min_price in the window."
    },
    "lowest_price_week_start": {
      "type": [
        "string",
        "null"
      ],
      "format": "date"
    },
    "lowest_price_chain_name": {
      "type": [
        "string",
        "null"
      ]
    },
    "weeks_on_offer_last_8": {
      "type": "integer",
      "description": "Of the LAST 8 weeks, how many had at least one campaign offer."
    },
    "unit": {
      "type": [
        "string",
        "null"
      ],
      "enum": [
        "l",
        "kg",
        "stk",
        null
      ],
      "description": "SA-0230: the unit the window compares on — the one most offers carry (ties l > kg > stk). Null when no offer has a usable unit price; every *_unit_price field is then null."
    },
    "weeks_with_unit_price": {
      "type": "integer",
      "description": "Weeks with a cheapest_unit_price."
    },
    "typical_unit_price": {
      "type": [
        "number",
        "null"
      ],
      "description": "Median of the weekly cheapest_unit_price (DKK per unit), 2 decimals. The like-for-like \"typical price\"."
    },
    "lowest_unit_price": {
      "type": [
        "number",
        "null"
      ],
      "description": "The smallest weekly cheapest_unit_price (DKK per unit)."
    },
    "lowest_unit_price_week_start": {
      "type": [
        "string",
        "null"
      ],
      "format": "date"
    },
    "lowest_unit_price_chain_name": {
      "type": [
        "string",
        "null"
      ]
    },
    "offer_pattern": {
      "type": [
        "object",
        "null"
      ],
      "additionalProperties": false,
      "required": [
        "share_of_weeks_on_offer",
        "weeks_on_offer",
        "weeks_total",
        "periods",
        "typical_duration_weeks",
        "typical_gap_weeks",
        "on_offer_now",
        "weeks_since_last_offer",
        "next_expected_in_weeks"
      ],
      "description": "How often, how long and how far apart the offers come, from our own CAMPAIGN history (a regular shelf price never counts as an offer). null unless there are at least 3 offer periods in a window of at least 12 weeks. A weeks=8 request therefore always returns null. The figures are medians of the past, not a forecast.",
      "properties": {
        "share_of_weeks_on_offer": {
          "type": "number",
          "description": "Share of the window's weeks on offer (0–1, 2 decimals)."
        },
        "weeks_on_offer": {
          "type": "integer",
          "description": "Weeks inside an offer period."
        },
        "weeks_total": {
          "type": "integer",
          "description": "Length of the window asked for (not of the data we hold)."
        },
        "periods": {
          "type": "integer",
          "description": "Distinct offer periods. Periods that overlap or touch are one; a single week without an offer separates two."
        },
        "typical_duration_weeks": {
          "type": "number",
          "description": "Median length of an offer period, in weeks (1 decimal)."
        },
        "typical_gap_weeks": {
          "type": "number",
          "description": "Median weeks WITHOUT an offer between two consecutive periods (1 decimal)."
        },
        "on_offer_now": {
          "type": "boolean",
          "description": "True when the window's last week is inside an offer period."
        },
        "weeks_since_last_offer": {
          "type": [
            "integer",
            "null"
          ],
          "description": "Weeks since the last offer period ended; null while on_offer_now."
        },
        "next_expected_in_weeks": {
          "type": [
            "integer",
            "null"
          ],
          "description": "If the pattern holds: typical gap minus weeks since the last offer, floored at 0 (0 = due now). Null while on_offer_now."
        }
      }
    }
  }
}

Work with this as data

Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for schemas

4 MCP tools reach this
  • find_json_schemasBrowse and filter every JSON Schema in the catalog.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/shelfatlas-com-term-history-summary"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.