---
title: "Get one province's profile"
method: GET
path: "/province/{code}"
---

# Get one province's profile

`GET /province/{code}`

## Request

- Base URL: `https://www.expatliving.it/api/v1`
- URL: `https://www.expatliving.it/api/v1/province/{code}`
- Auth: none declared

Population, OMI prices, foreign residents by citizenship, ALL of ISTAT's BES well-being indicators (polarity-aware percentiles among provinces, no composite score), every province- and region-grain map layer, and how much of the province meets each verified tax regime. Sources use different province lists (Sardinia was reorganized in 2026): a section a source lacks is returned null with a reason and listed in `missingSections`, never filled in from another province. Places, not people.

## Path parameters

- `code` string, required

## Response `200`

The province's profile.

- object
  - `province` object, required
    - `code` string, required
    - `slug` string, required
    - `name` string, required
    - `region` string, required
    - `regionSlug` string, required
    - `comuni` integer, required: How many comuni the province has in the comune list this site uses.
    - `page` string, required: This province's page on expatliving.it — link it when you quote any figure below.
    - `comuniQuery` string, required: Path to list its comuni with their figures: GET /comuni?province=.
  - `population` object, required: Sum of the province's comuni.
    - `value` integer, nullable, required
    - `unit` string, required
    - `source` string, required
    - `vintage` string, required: The period the value describes, e.g. "2025H2" or "2025" — not when it was fetched.
    - `extractedOn` string, required: ISO date this value was extracted from the source.
    - `coverage` object: How many of Italy's places this dataset covers at all, e.g. 7587 of 7894 comuni.
      - `in` integer, required
      - `of` integer, required
    - `method` string, required: URL to the methodology page for this dataset.
    - `license` string, required
    - `reason` string: Present only when value is null: why this place has no figure.
  - `prices` object, required
    - `purchasePriceEurM2` object, required
      - `value` number, nullable, required
      - `unit` string, required
      - `source` string, required
      - `vintage` string, required: The period the value describes, e.g. "2025H2" or "2025" — not when it was fetched.
      - `extractedOn` string, required: ISO date this value was extracted from the source.
      - `coverage` object: How many of Italy's places this dataset covers at all, e.g. 7587 of 7894 comuni.
        - `in` integer, required
        - `of` integer, required
      - `method` string, required: URL to the methodology page for this dataset.
      - `license` string, required
      - `reason` string: Present only when value is null: why this place has no figure.
    - `rentPriceEurM2Month` object, required
      - `value` number, nullable, required
      - `unit` string, required
      - `source` string, required
      - `vintage` string, required: The period the value describes, e.g. "2025H2" or "2025" — not when it was fetched.
      - `extractedOn` string, required: ISO date this value was extracted from the source.
      - `coverage` object: How many of Italy's places this dataset covers at all, e.g. 7587 of 7894 comuni.
        - `in` integer, required
        - `of` integer, required
      - `method` string, required: URL to the methodology page for this dataset.
      - `license` string, required
      - `reason` string: Present only when value is null: why this place has no figure.
    - `comuniPriced` object, nullable, required: How many of the province's comuni OMI priced; the province figure is population-weighted across them.
      - `in` integer, required
      - `of` integer, required
  - `foreignResidentsByCitizenship` object, required: Citizenship, not birthplace — excludes foreign-born Italian citizens — and only the citizenships this site tracks, so a floor on foreign residents. Summed over the comuni ISTAT has a row for: `coverage` says how many that is, and a comune with no row adds nothing rather than a zero.
    - `value` object[], nullable, required
      - `code` string, required: ISO-2 citizenship code.
      - `count` integer, required
      - `shareOfPopulation` number, required
    - `unit` string, required
    - `source` string, required
    - `vintage` string, required: The period the value describes, e.g. "2025H2" or "2025" — not when it was fetched.
    - `extractedOn` string, required: ISO date this value was extracted from the source.
    - `coverage` object: How many of Italy's places this dataset covers at all, e.g. 7587 of 7894 comuni.
      - `in` integer, required
      - `of` integer, required
    - `method` string, required: URL to the methodology page for this dataset.
    - `license` string, required
    - `reason` string: Present only when value is null: why this place has no figure.
  - `foreignResidentsAllCitizenships` object, required: Residents holding any foreign citizenship: ISTAT's own total, not limited to the citizenships tracked in foreignResidentsByCitizenship. Citizenship, not birthplace. Summed over the comuni ISTAT has a total for: `coverage` says how many that is, and a comune with no total adds nothing rather than a zero.
    - `value` integer, nullable, required
    - `unit` string, required
    - `source` string, required
    - `vintage` string, required: The period the value describes, e.g. "2025H2" or "2025" — not when it was fetched.
    - `extractedOn` string, required: ISO date this value was extracted from the source.
    - `coverage` object: How many of Italy's places this dataset covers at all, e.g. 7587 of 7894 comuni.
      - `in` integer, required
      - `of` integer, required
    - `method` string, required: URL to the methodology page for this dataset.
    - `license` string, required
    - `reason` string: Present only when value is null: why this place has no figure.
  - `wellbeing` object, required
    - `value` object[], nullable, required
      - `code` string, required
      - `domain` string, required
      - `label` string, required
      - `unit` string, required
      - `polarity` 'high' | 'low', required: "high": a higher raw value is better; "low": a lower one is.
      - `value` number, required: The raw indicator value.
      - `year` integer, required: The year this observation describes — indicators update on different cycles.
      - `percentile` number, required: 0–100 rank among Italy's provinces, polarity-aware: higher is always better, whichever way the raw value runs.
      - `curated` boolean, required: True for the ~15 indicators shown by default on the site.
    - `unit` string, required
    - `source` string, required
    - `vintage` string, required: The period the value describes, e.g. "2025H2" or "2025" — not when it was fetched.
    - `extractedOn` string, required: ISO date this value was extracted from the source.
    - `coverage` object: How many of Italy's places this dataset covers at all, e.g. 7587 of 7894 comuni.
      - `in` integer, required
      - `of` integer, required
    - `method` string, required: URL to the methodology page for this dataset.
    - `license` string, required
    - `reason` string: Present only when value is null: why this place has no figure.
    - `grain` 'province', required
    - `measuredFor` string, required
    - `page` string, required
  - `seismicZones` object, required: How this province's comuni are spread across the official seismic zones: a count per zone, never an average. A province has no zone of its own.
    - `value` object, nullable, required
      - `comuniByOfficialZone` object, required: Comuni in each official zone (zone1 is the highest hazard). Split comuni are not counted here.
        - `zone1` integer, required
        - `zone2` integer, required
        - `zone3` integer, required
        - `zone4` integer, required
      - `straddlingZones` object[], required: Comuni that straddle zones and so have no single zone; named, not rounded to one.
        - `name` string, required
        - `label` string, required
      - `comuniWithoutClassification` integer, required
      - `totalComuni` integer, required
      - `reading` string, required
    - `unit` string, required
    - `source` string, required
    - `vintage` string, required: The period the value describes, e.g. "2025H2" or "2025" — not when it was fetched.
    - `extractedOn` string, required: ISO date this value was extracted from the source.
    - `coverage` object: How many of Italy's places this dataset covers at all, e.g. 7587 of 7894 comuni.
      - `in` integer, required
      - `of` integer, required
    - `method` string, required: URL to the methodology page for this dataset.
    - `license` string, required
    - `reason` string: Present only when value is null: why this place has no figure.
  - `layers` object[], required: Every province- and region-grain map layer for this province, each saying whose number it is.
    - `value` number, nullable, required
    - `unit` string, required
    - `source` string, required
    - `vintage` string, required: The period the value describes, e.g. "2025H2" or "2025" — not when it was fetched.
    - `extractedOn` string, required: ISO date this value was extracted from the source.
    - `coverage` object: How many of Italy's places this dataset covers at all, e.g. 7587 of 7894 comuni.
      - `in` integer, required
      - `of` integer, required
    - `method` string, required: URL to the methodology page for this dataset.
    - `license` string, required
    - `reason` string: Present only when value is null: why this place has no figure.
    - `slug` string, required: The dataset slug, as in GET /datasets.
    - `label` string, required
    - `grain` 'comune' | 'province' | 'region', required: The level this value is measured at. Only "comune" is a measurement of this comune itself.
    - `measuredFor` string, required: The place the value describes, e.g. "L'Aquila (province)".
    - `page` string, required: The map page for this layer on expatliving.it — link readers here.
    - `download` string, required: The whole dataset, as published JSON (every place, with its meta block).
    - `note` string: The source's own coverage caveat, where it has one.
  - `taxRegimes` object[], required: Verified regimes with at least one qualifying comune here: how much of the province meets the geographic criteria. Places, not people; a regime absent here is not a no.
    - `slug` string, required
    - `label` string, required
    - `href` string, required
    - `qualifyingComuni` integer, required
    - `totalComuni` integer, required
    - `qualifyingPopulation` integer, required
    - `totalPopulation` integer, required
    - `ruleIsIncomplete` boolean, required
  - `missingSections` object[], required: Every part of this profile a source has no figure for, with why. Sources use different province lists (Sardinia was reorganized in 2026): a section a source lacks is listed here as missing, never filled in from another province.
    - `section` string, required: Which part of the profile is absent, e.g. "wellbeing" or "layers.crime-rate-province-2024".
    - `source` string, required
    - `reason` string, required
  - `placesNotPeople` true, required
  - `attribution` object, required
    - `publisher` string, required
    - `url` string, required
    - `page` string: The expatliving.it page these figures come from — link it when you quote them.
    - `citeAs` string, required: A ready-made citation line.
    - `request` string, required

## Other responses

- `400`: Malformed code.
- `404`: No such province.

---

[API](https://skmtc.dev/expatliving/apis/expat-living-italy-data-api.md) · [All operations](https://skmtc.dev/expatliving/apis/expat-living-italy-data-api/llms.txt) · [OpenAPI document](https://skmtc.dev/expatliving/apis/expat-living-italy-data-api/revisions/c72799dee52c?raw)
