K-Stra developers

API changelog

Every change to the public surface of the actions, with its date, version and kind (doc 17 §6). The version is the one in backend/tests/KStra.Tests/Contracts/v1/_contract.json: the contract test does not accept a new snapshot without its section here.

1.42 — 16/10/2026 — additive

People & Economy: ten topics instead of fifteen, and housing. Several topics added one or two columns or repeated figures of another, so they are merged; each topic still costs 2 credits and returns more tables than before.

Topic Tables Replaces
residents sociodemo (population, sex, families and residents born overseas by band), by_locality, foreigners_by_postcode main, families, foreigners
postcodes postcodes postcodes
age_classes age_classes, age_indicators, age_classes_5y, age_groups age_classes
education_marital education, marital_status education, marital_status
trend trend trend
employment occupation, employment_rates occupation, employment_rates
income wealth_indices, income_by_band wealth_indices, income_by_band
spending consumption_categories, potential_market_by_band consumption_categories, potential_market_by_band
housing housing_tenure, dwelling_type, cars_per_dwelling (new) —
territorial_comparison territorial_comparison territorial_comparison

16/10/2026 — MCP tools return the real validation message, no version change

1.41 — 16/10/2026 — additive

The category mix opens to the API and MCP.

1.40 — 16/10/2026 — additive (internal)

analysis.markets_sector can count the category mix in the same run, for the web and the assistant only.

15/10/2026 — clearer error for analysis.people_economy without topics, no version change

15/10/2026 — sales.territories accepts SA1 blocks, no version change

sales.territories (internal) divides into SA1 blocks.

1.39 — 15/10/2026 — additive (internal)

sales.territories (internal) joins separate parts of the area.

15/10/2026 — sales.territories crosses areas without measure, no version change

1.38 — 15/10/2026 — additive (internal)

sales.territories (internal) accepts units fixed by hand.

15/10/2026 — descriptions of the territory inputs, no version change

1.37 — 15/10/2026 — additive (internal)

sales.territories (internal) can balance on the sum of a column.

1.36 — 14/10/2026 — additive (internal)

sales.territories (internal) gains the minimum per territory and the proposed sites.

1.35 — 14/10/2026 — additive (internal)

New internal action sales.territories (not exposed in /api/v1 nor in MCP): the Balanced territories view of Sales. It divides the area of a Sales run among its sellers, so that every territory holds a similar share of the chosen measure.

14/10/2026 — search.addresses reads the locality, no version change

search.addresses now uses the locality written after the street, and the results rank by it:

A street whose name exists is no longer searched by similarity when the house number is rare: 120 Moorabool Street, Geelong answers in about 0.3 s instead of 9. Similarity is kept for misspelt streets (Powel Street). The schema changes only in the description of query.

14/10/2026 — People & Economy on any administrative area, no version change

analysis.people_economy on administrative areas no longer has a size limit: a state or the whole country can be analysed, and answers in about a second. The figures of an area come from the area's own statistics, which add up to the same residents as before. For states and the country, the breakdowns by municipality and postcode list the municipalities and postcodes that belong to the area, each counted whole; below the state, a postcode or municipality that crosses the border still counts only for the part inside. Isochrones, drawn polygons and the other actions keep the 1,000,000-pole limit. Schemas do not change.

12/10/2026 — plainer source notes, no version change

Source notes (sourceNote of the tables) say what a figure is and where it comes from in plain words, without formulas or model names: they end up under the tables of the reports people hand to their clients. Table keys, titles, column names and values do not change. The method behind each figure is the same as before.

11/10/2026 — plainer table titles, no version change

Table titles say the same thing in plain words; table keys and column names do not change.

11/10/2026 — money and counts in text, no version change

1.34 — 11/10/2026 — additive

Addresses are written the way the country of the address writes them. In Australia: house number first, then the street in normal case, then suburb, state code and postcode — 64 Shirley Road, Crows Nest NSW 2065. One house number: an address pole groups several entrances, and its first number is the one written.

11/10/2026 — the listings table is always there, no version change

1.33 — 10/10/2026 — additive

analysis.markets_sector: commercial properties on the market near the best locations, included in the price.

10/10/2026 — the local government area is always "… LGA", no version change

1.32 — 9/10/2026 — additive (internal)

New internal action analysis.category_mix (not exposed in /api/v1 nor in MCP): how many stores of several categories stand inside the territory, by band, area or polygon, and how many for every 10,000 residents next to the local government area, the state and Australia.

9/10/2026 — sector stores with minutes, and stores per 10,000 residents, no version change

On analysis.markets_sector, with no new fields:

9/10/2026 — site comparison wider than the sector's catchment, no version change

9/10/2026 — site comparison figures in millions, no version change

1.31 — 9/10/2026 — additive

The site estimate as a range, and where the spend comes from. In analysis.site_comparison (and so in site.rank, which runs it) the spend a candidate would capture is also given as a range.

9/10/2026 — "Born overseas" instead of "Foreigners", no version change

1.30 — 9/10/2026 — additive

Comparison columns. The socio-demographic tables of People & Economy now compare the catchment with the areas around it: catchment, suburb, local government area (LGA), state and Australia, for the same indicators, as shares or indices (never totals).

7 Oct 2026 — descriptions of the charged actions, no version change

7 Oct 2026 — analysis.isochrone pricing, no version change

7/10/2026 — analysis.loyalty price in the description, no version change

7/10/2026 — descriptions in English, no version change

1.29 — 6/10/2026 — additive

Shopping centres, outlets and food halls.

5/10/2026 — families depend on the country, no version change

1.28 — 4/10/2026 — additive

Families are called by their name. The figure is census families: couples, with or without children, and one-parent families. People living alone and group households are not included, so families are fewer than "households" (in Sydney 46,705 against 97,743 occupied dwellings) and must not be read as such.

3/10/2026 — Oceania only, no version change

2/10/2026 — network.coverage pricing, no version change

2/10/2026 — dataset storage fee, no version change

2/10/2026 — Real estate pricing, no version change

2/10/2026 — Markets pricing, no version change

You pay for what you ask, not for how large the territory is:

2/10/2026 — pricing, no version change

1.27 — 2/10/2026 — additive

analysis.brand_coverage (Coverage): closure and opening plans for your own points, the same calculation as network.coverage.

1.26 — 2/10/2026 — additive

network.coverage: closure and opening plans (fix 11 of the case evaluation) and larger networks.

Areas, ages, reasons and search — 2/10/2026 — behaviour, no schema version change

Second round of fixes from the case evaluation (P5-P8). The schemas do not change: the new tables are extra elements of the tables array.

Messages and positions — 1/10/2026 — behaviour, no schema version change

Fixes arising from the second evaluation of the geomarketing cases (docs/VALUTAZIONE_KSTRA_CASI_GEOMARKETING_2026-10.md, P1-P4). The schemas do not change.

1.25 — 1/10/2026 — additive (internal)

analysis.loyalty (internal action, not exposed in /api/v1): network analysis.

1.24 — 1/10/2026 — additive (internal)

analysis.loyalty (internal action, not exposed in /api/v1): the opening simulation becomes a network scenario.

1.23 — 1/10/2026 — internal and behaviour

analysis.brand_coverage: includeSectorStores now defaults to false (it was true since 1.21). Without the field the run covers the listed points, i.e. the stores of the chosen brands and the user's points; with true it adds, as before, the other stores of the sector within the area, not charged.

search.brands with sector: the main brands, not all of them.

1.22 — 1/10/2026 — additive and behaviour

search.brands also searches by sector.

1.21 — 28/9/2026 — additive and behaviour

analysis.brand_coverage reads the territory with all its players.

1.20 — 27/9/2026 — behaviour

No field changes shape; the tables of analysis.brand_coverage change.

1.19 — 26/9/2026 — additive

1.18 — 26/9/2026 — additive

1.17 — 26/9/2026 — additive

In the same version, with no new fields, on analysis.markets_sector:

1.16 — 25/9/2026 — behaviour

No field changes shape: WHAT is inside topLocations changes, and which tables come out of analysis.markets_sector. A caller that reads the fields keeps working; one that expects five addresses for demand or for competition will no longer find them.

1.15 — 25/9/2026 — additive

1.14 — 25/9/2026 — additive

1.13 — 24/9/2026 — additive

1.12 — 24/9/2026 — additive

1.11 — 24/9/2026 — additive

1.10 — 24/9/2026 — additive

Public perimeter — 24/9/2026 — no version change

Webhook — 23/9/2026 — no version change

MCP surface — 23/9/2026 — no version change

Behaviour — 24/9/2026 — no version change

Behaviour — 23/9/2026 — no version change

Behaviour — 23/9/2026 — no version change (brands)

1.9 — 23/9/2026 — additive

1.8 — 23/9/2026 — additive

1.7 — 23/9/2026 — additive

1.6 — 23/9/2026 — additive

No version change — 23/9/2026 — Sales behaviour and pricing

1.5 — 24/9/2026 — additive

1.4 — 24/9/2026 — additive

1.3 — 24/9/2026 — additive

1.2 — 23/9/2026 — additive

1.1 — 23/9/2026 — additive

1.0 — 23/9/2026 — initial

First snapshot of the contracts: the 25 actions of the registry, with the input schema and, for the first time, the output schema.

Public surface /api/v1 — 23/9/2026 — no schema version change

Phase 1 of doc 17. The action schemas do not change; the public door is born: