{
  "openapi": "3.1.0",
  "info": {
    "title": "State and local heritage places, South Australia query API",
    "version": "2026-06-28",
    "summary": "Filter, page and aggregate State and local heritage places, South Australia from Department for Housing and Urban Development.",
    "description": "The query API returns only the rows you ask for, as JSON, NDJSON or CSV, from the same typed rows as the files. It needs no key. The API allows 60 requests in 10 seconds from one address. Above that it answers 429 for 10 seconds with a `Retry-After` header, a `RateLimit-Policy` header and a JSON body that gives the limit. Every API answer carries the same `RateLimit-Policy`. A client should wait the `Retry-After` seconds, or read the files, which have no limit. Every JSON answer carries the version, licence and attribution. CSV and NDJSON answers carry them in response headers. Department for Housing and Urban Development has not endorsed this site. The whole site is described in https://publicdata.au/openapi.json.",
    "license": {
      "name": "CC BY 4.0",
      "url": "https://creativecommons.org/licenses/by/4.0/"
    }
  },
  "servers": [
    {
      "url": "https://publicdata.au"
    }
  ],
  "externalDocs": {
    "url": "https://publicdata.au/d/sa-heritage-places/#query"
  },
  "tags": [
    {
      "name": "query"
    }
  ],
  "paths": {
    "/api/v1/datasets/sa-heritage-places/rows": {
      "get": {
        "tags": [
          "query"
        ],
        "summary": "Query State and local heritage places, South Australia",
        "operationId": "queryRows_sa_heritage_places",
        "description": "Rows of State and local heritage places, South Australia in the newest loaded version, filtered and paged. Each filter is `field=operator.value` in the query string, and every filter must match. A number or date field compares as a number or date, and a text field compares as text. Values are case-sensitive except with `ilike`. Prefix `not.` to negate a filter, as `not.eq.value`. Operators: `eq.value`, `neq.value`, `gt.value`, `gte.value`, `lt.value`, `lte.value`, `like.*text*`, `ilike.*text*`, `in.(a,b,c)`, `is.null`.",
        "parameters": [
          {
            "name": "heritage_number",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "integer. From 1 to 29263."
          },
          {
            "name": "heritage_id",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "location",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. The street address and suburb as the publisher writes them together."
          },
          {
            "name": "street_number",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "street_name",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "street_type",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string.",
            "examples": [
              "eq.Way"
            ]
          },
          {
            "name": "address_2",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "unit_number",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string.",
            "examples": [
              "eq.U3"
            ]
          },
          {
            "name": "suburb",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "locality",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. Values: FOX, LAURIE PARK, Onkaparinga Heights, ROSETOWN, SPENCE, STEWART RANGE, WILLOCHRA, YARRAH, and on or abutting the common allotment boundaries of CT5638/51, CT5620/51, CT555/183, CT5188/586 an, section 258 Hundred of Willunga.",
            "examples": [
              "eq.section 258 Hundred of Willunga"
            ]
          },
          {
            "name": "council",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string.",
            "examples": [
              "eq.Yorke Peninsula"
            ]
          },
          {
            "name": "development_plan",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string.",
            "examples": [
              "eq.Yorke Peninsula Council"
            ]
          },
          {
            "name": "details",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "heritage_class_code",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. S, L or C. Values: C, L, S.",
            "examples": [
              "eq.S"
            ]
          },
          {
            "name": "heritage_class",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. State, Local or Contributory. Values: Contributory, Local, State.",
            "examples": [
              "eq.State"
            ]
          },
          {
            "name": "second_class_code",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. Values: C, L, S.",
            "examples": [
              "eq.S"
            ]
          },
          {
            "name": "second_class",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. Values: Contributory, Local, State.",
            "examples": [
              "eq.State"
            ]
          },
          {
            "name": "local_class_type",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. The publisher's code for the kind of local listing, T or CS. Values: CS, T.",
            "examples": [
              "eq.T"
            ]
          },
          {
            "name": "state_register_code",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "integer. From 10002 to 26621."
          },
          {
            "name": "state_register_status",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. PRO for provisional or REG for registered. Values: PRO, REG.",
            "examples": [
              "eq.REG"
            ]
          },
          {
            "name": "state_register_date",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "date. From 1980-07-24 to 2026-04-30."
          },
          {
            "name": "council_reference",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "code",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "integer. The publisher's code for the listing, shared by places listed together. From 1 to 4305."
          },
          {
            "name": "land_use_code",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. The use code or codes, separated by semicolons."
          },
          {
            "name": "land_use",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "location_accuracy_code",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. H, L or U. Values: H, L, U.",
            "examples": [
              "eq.U"
            ]
          },
          {
            "name": "location_accuracy",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. Values: Unable to locate. No associated point or polygon, high level confidence, low level confidence.",
            "examples": [
              "eq.low level confidence"
            ]
          },
          {
            "name": "data_source",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. Values: C, DPLG, SHB.",
            "examples": [
              "eq.SHB"
            ]
          },
          {
            "name": "interim_date",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "date. From 1995-01-25 to 2024-10-24.",
            "examples": [
              "eq.2024-10-24"
            ]
          },
          {
            "name": "interim_reference",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string.",
            "examples": [
              "eq.PLN/99/0515"
            ]
          },
          {
            "name": "authorised_date",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "date. From 1985-06-06 to 2025-10-23.",
            "examples": [
              "eq.2025-10-23"
            ]
          },
          {
            "name": "authorisation_reference",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string.",
            "examples": [
              "eq.UNKNOWN3"
            ]
          },
          {
            "name": "polygon_type_code",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. Values: B, D, P, S.",
            "examples": [
              "eq.S"
            ]
          },
          {
            "name": "polygon_type",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. Values: Building footprint, item has been digitised (generally because it doesn't exist in a DCDB parcel, eg. bridge, parcel (from DCDB), parcel that has been split (because it has more than one heritage item on it.",
            "examples": [
              "eq.parcel that has been split (because it has more than one heritage item on it"
            ]
          },
          {
            "name": "section_23_criteria",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. The criteria letters under section 23 of the Heritage Places Act 1993 that the place meets.",
            "examples": [
              "eq.g"
            ]
          },
          {
            "name": "section_16_criteria",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. The criteria letters under section 16 of the Heritage Places Act 1993 that the place meets.",
            "examples": [
              "eq.G"
            ]
          },
          {
            "name": "plan_parcel",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "extent_of_listing",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "significance",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "select",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Fields to return, comma-separated. Every field when absent."
          },
          {
            "name": "order",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "`field.asc` or `field.desc`, comma-separated. The publisher's row order when absent."
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 10000,
              "default": 100
            },
            "description": "Rows per page, 1 to 10,000. 100 when absent."
          },
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 0
            },
            "description": "Rows to skip. The `next` URL in each answer sets it for you."
          },
          {
            "name": "format",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "json",
                "ndjson",
                "csv"
              ],
              "default": "json"
            },
            "description": "`json`, `ndjson` or `csv`. JSON carries the provenance header, and the others carry it in response headers."
          }
        ],
        "responses": {
          "200": {
            "description": "Rows with the version, licence and attribution. `next` is the URL of the following page, or null."
          },
          "400": {
            "description": "The query names a field the dataset does not have, or a value of the wrong type."
          },
          "404": {
            "description": "The dataset or version is not loaded for queries."
          },
          "429": {
            "description": "More than 60 requests in 10 seconds from one address. Blocked for 10 seconds. Wait `Retry-After` seconds.",
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer"
                },
                "description": "Seconds until the block lifts."
              },
              "RateLimit-Policy": {
                "schema": {
                  "type": "string"
                },
                "description": "The limit, as \"fair-use\";q=60;w=10."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string"
                    },
                    "status": {
                      "type": "integer",
                      "const": 429
                    },
                    "limit": {
                      "type": "integer"
                    },
                    "window_seconds": {
                      "type": "integer"
                    },
                    "block_seconds": {
                      "type": "integer"
                    },
                    "docs": {
                      "type": "string",
                      "format": "uri"
                    },
                    "files": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/datasets/sa-heritage-places/versions/{version}/rows": {
      "get": {
        "tags": [
          "query"
        ],
        "summary": "Query State and local heritage places, South Australia",
        "operationId": "queryRows_sa_heritage_places_version",
        "description": "Rows of State and local heritage places, South Australia in one dated version, filtered and paged. Each filter is `field=operator.value` in the query string, and every filter must match. A number or date field compares as a number or date, and a text field compares as text. Values are case-sensitive except with `ilike`. Prefix `not.` to negate a filter, as `not.eq.value`. Operators: `eq.value`, `neq.value`, `gt.value`, `gte.value`, `lt.value`, `lte.value`, `like.*text*`, `ilike.*text*`, `in.(a,b,c)`, `is.null`.",
        "parameters": [
          {
            "name": "version",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date"
            },
            "description": "A dated version loaded for queries, from the versions path. Answers for a dated version never change."
          },
          {
            "name": "heritage_number",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "integer. From 1 to 29263."
          },
          {
            "name": "heritage_id",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "location",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. The street address and suburb as the publisher writes them together."
          },
          {
            "name": "street_number",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "street_name",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "street_type",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string.",
            "examples": [
              "eq.Way"
            ]
          },
          {
            "name": "address_2",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "unit_number",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string.",
            "examples": [
              "eq.U3"
            ]
          },
          {
            "name": "suburb",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "locality",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. Values: FOX, LAURIE PARK, Onkaparinga Heights, ROSETOWN, SPENCE, STEWART RANGE, WILLOCHRA, YARRAH, and on or abutting the common allotment boundaries of CT5638/51, CT5620/51, CT555/183, CT5188/586 an, section 258 Hundred of Willunga.",
            "examples": [
              "eq.section 258 Hundred of Willunga"
            ]
          },
          {
            "name": "council",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string.",
            "examples": [
              "eq.Yorke Peninsula"
            ]
          },
          {
            "name": "development_plan",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string.",
            "examples": [
              "eq.Yorke Peninsula Council"
            ]
          },
          {
            "name": "details",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "heritage_class_code",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. S, L or C. Values: C, L, S.",
            "examples": [
              "eq.S"
            ]
          },
          {
            "name": "heritage_class",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. State, Local or Contributory. Values: Contributory, Local, State.",
            "examples": [
              "eq.State"
            ]
          },
          {
            "name": "second_class_code",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. Values: C, L, S.",
            "examples": [
              "eq.S"
            ]
          },
          {
            "name": "second_class",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. Values: Contributory, Local, State.",
            "examples": [
              "eq.State"
            ]
          },
          {
            "name": "local_class_type",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. The publisher's code for the kind of local listing, T or CS. Values: CS, T.",
            "examples": [
              "eq.T"
            ]
          },
          {
            "name": "state_register_code",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "integer. From 10002 to 26621."
          },
          {
            "name": "state_register_status",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. PRO for provisional or REG for registered. Values: PRO, REG.",
            "examples": [
              "eq.REG"
            ]
          },
          {
            "name": "state_register_date",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "date. From 1980-07-24 to 2026-04-30."
          },
          {
            "name": "council_reference",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "code",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "integer. The publisher's code for the listing, shared by places listed together. From 1 to 4305."
          },
          {
            "name": "land_use_code",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. The use code or codes, separated by semicolons."
          },
          {
            "name": "land_use",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "location_accuracy_code",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. H, L or U. Values: H, L, U.",
            "examples": [
              "eq.U"
            ]
          },
          {
            "name": "location_accuracy",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. Values: Unable to locate. No associated point or polygon, high level confidence, low level confidence.",
            "examples": [
              "eq.low level confidence"
            ]
          },
          {
            "name": "data_source",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. Values: C, DPLG, SHB.",
            "examples": [
              "eq.SHB"
            ]
          },
          {
            "name": "interim_date",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "date. From 1995-01-25 to 2024-10-24.",
            "examples": [
              "eq.2024-10-24"
            ]
          },
          {
            "name": "interim_reference",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string.",
            "examples": [
              "eq.PLN/99/0515"
            ]
          },
          {
            "name": "authorised_date",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "date. From 1985-06-06 to 2025-10-23.",
            "examples": [
              "eq.2025-10-23"
            ]
          },
          {
            "name": "authorisation_reference",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string.",
            "examples": [
              "eq.UNKNOWN3"
            ]
          },
          {
            "name": "polygon_type_code",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. Values: B, D, P, S.",
            "examples": [
              "eq.S"
            ]
          },
          {
            "name": "polygon_type",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. Values: Building footprint, item has been digitised (generally because it doesn't exist in a DCDB parcel, eg. bridge, parcel (from DCDB), parcel that has been split (because it has more than one heritage item on it.",
            "examples": [
              "eq.parcel that has been split (because it has more than one heritage item on it"
            ]
          },
          {
            "name": "section_23_criteria",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. The criteria letters under section 23 of the Heritage Places Act 1993 that the place meets.",
            "examples": [
              "eq.g"
            ]
          },
          {
            "name": "section_16_criteria",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. The criteria letters under section 16 of the Heritage Places Act 1993 that the place meets.",
            "examples": [
              "eq.G"
            ]
          },
          {
            "name": "plan_parcel",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "extent_of_listing",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "significance",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "select",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Fields to return, comma-separated. Every field when absent."
          },
          {
            "name": "order",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "`field.asc` or `field.desc`, comma-separated. The publisher's row order when absent."
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 10000,
              "default": 100
            },
            "description": "Rows per page, 1 to 10,000. 100 when absent."
          },
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 0
            },
            "description": "Rows to skip. The `next` URL in each answer sets it for you."
          },
          {
            "name": "format",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "json",
                "ndjson",
                "csv"
              ],
              "default": "json"
            },
            "description": "`json`, `ndjson` or `csv`. JSON carries the provenance header, and the others carry it in response headers."
          }
        ],
        "responses": {
          "200": {
            "description": "Rows with the version, licence and attribution. `next` is the URL of the following page, or null."
          },
          "400": {
            "description": "The query names a field the dataset does not have, or a value of the wrong type."
          },
          "404": {
            "description": "The dataset or version is not loaded for queries."
          },
          "429": {
            "description": "More than 60 requests in 10 seconds from one address. Blocked for 10 seconds. Wait `Retry-After` seconds.",
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer"
                },
                "description": "Seconds until the block lifts."
              },
              "RateLimit-Policy": {
                "schema": {
                  "type": "string"
                },
                "description": "The limit, as \"fair-use\";q=60;w=10."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string"
                    },
                    "status": {
                      "type": "integer",
                      "const": 429
                    },
                    "limit": {
                      "type": "integer"
                    },
                    "window_seconds": {
                      "type": "integer"
                    },
                    "block_seconds": {
                      "type": "integer"
                    },
                    "docs": {
                      "type": "string",
                      "format": "uri"
                    },
                    "files": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/datasets/{slug}/aggregate": {
      "get": {
        "tags": [
          "query"
        ],
        "summary": "Counts, sums, averages, minimums and maximums by group",
        "operationId": "aggregate",
        "description": "Groups and totals of any dataset in the newest loaded version. Filters work as they do on rows. Each filter is `field=operator.value` in the query string, and every filter must match. A number or date field compares as a number or date, and a text field compares as text. Values are case-sensitive except with `ilike`. Prefix `not.` to negate a filter, as `not.eq.value`. Operators: `eq.value`, `neq.value`, `gt.value`, `gte.value`, `lt.value`, `lte.value`, `like.*text*`, `ilike.*text*`, `in.(a,b,c)`, `is.null`.",
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "sa-heritage-places"
              ]
            },
            "description": "The dataset's slug, as in its page URL `/d/<slug>/`."
          },
          {
            "name": "group",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "On `aggregate`, fields to group by, comma-separated."
          },
          {
            "name": "metric",
            "in": "query",
            "schema": {
              "type": "string",
              "default": "count"
            },
            "description": "On `aggregate`, `count`, `sum.field`, `avg.field`, `min.field` or `max.field`, comma-separated. `count` when absent."
          },
          {
            "name": "heritage_number",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "integer. From 1 to 29263."
          },
          {
            "name": "heritage_id",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "location",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. The street address and suburb as the publisher writes them together."
          },
          {
            "name": "street_number",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "street_name",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "street_type",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string.",
            "examples": [
              "eq.Way"
            ]
          },
          {
            "name": "address_2",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "unit_number",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string.",
            "examples": [
              "eq.U3"
            ]
          },
          {
            "name": "suburb",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "locality",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. Values: FOX, LAURIE PARK, Onkaparinga Heights, ROSETOWN, SPENCE, STEWART RANGE, WILLOCHRA, YARRAH, and on or abutting the common allotment boundaries of CT5638/51, CT5620/51, CT555/183, CT5188/586 an, section 258 Hundred of Willunga.",
            "examples": [
              "eq.section 258 Hundred of Willunga"
            ]
          },
          {
            "name": "council",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string.",
            "examples": [
              "eq.Yorke Peninsula"
            ]
          },
          {
            "name": "development_plan",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string.",
            "examples": [
              "eq.Yorke Peninsula Council"
            ]
          },
          {
            "name": "details",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "heritage_class_code",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. S, L or C. Values: C, L, S.",
            "examples": [
              "eq.S"
            ]
          },
          {
            "name": "heritage_class",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. State, Local or Contributory. Values: Contributory, Local, State.",
            "examples": [
              "eq.State"
            ]
          },
          {
            "name": "second_class_code",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. Values: C, L, S.",
            "examples": [
              "eq.S"
            ]
          },
          {
            "name": "second_class",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. Values: Contributory, Local, State.",
            "examples": [
              "eq.State"
            ]
          },
          {
            "name": "local_class_type",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. The publisher's code for the kind of local listing, T or CS. Values: CS, T.",
            "examples": [
              "eq.T"
            ]
          },
          {
            "name": "state_register_code",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "integer. From 10002 to 26621."
          },
          {
            "name": "state_register_status",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. PRO for provisional or REG for registered. Values: PRO, REG.",
            "examples": [
              "eq.REG"
            ]
          },
          {
            "name": "state_register_date",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "date. From 1980-07-24 to 2026-04-30."
          },
          {
            "name": "council_reference",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "code",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "integer. The publisher's code for the listing, shared by places listed together. From 1 to 4305."
          },
          {
            "name": "land_use_code",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. The use code or codes, separated by semicolons."
          },
          {
            "name": "land_use",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "location_accuracy_code",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. H, L or U. Values: H, L, U.",
            "examples": [
              "eq.U"
            ]
          },
          {
            "name": "location_accuracy",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. Values: Unable to locate. No associated point or polygon, high level confidence, low level confidence.",
            "examples": [
              "eq.low level confidence"
            ]
          },
          {
            "name": "data_source",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. Values: C, DPLG, SHB.",
            "examples": [
              "eq.SHB"
            ]
          },
          {
            "name": "interim_date",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "date. From 1995-01-25 to 2024-10-24.",
            "examples": [
              "eq.2024-10-24"
            ]
          },
          {
            "name": "interim_reference",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string.",
            "examples": [
              "eq.PLN/99/0515"
            ]
          },
          {
            "name": "authorised_date",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "date. From 1985-06-06 to 2025-10-23.",
            "examples": [
              "eq.2025-10-23"
            ]
          },
          {
            "name": "authorisation_reference",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string.",
            "examples": [
              "eq.UNKNOWN3"
            ]
          },
          {
            "name": "polygon_type_code",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. Values: B, D, P, S.",
            "examples": [
              "eq.S"
            ]
          },
          {
            "name": "polygon_type",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. Values: Building footprint, item has been digitised (generally because it doesn't exist in a DCDB parcel, eg. bridge, parcel (from DCDB), parcel that has been split (because it has more than one heritage item on it.",
            "examples": [
              "eq.parcel that has been split (because it has more than one heritage item on it"
            ]
          },
          {
            "name": "section_23_criteria",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. The criteria letters under section 23 of the Heritage Places Act 1993 that the place meets.",
            "examples": [
              "eq.g"
            ]
          },
          {
            "name": "section_16_criteria",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. The criteria letters under section 16 of the Heritage Places Act 1993 that the place meets.",
            "examples": [
              "eq.G"
            ]
          },
          {
            "name": "plan_parcel",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "extent_of_listing",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "significance",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "order",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "`field.asc` or `field.desc`, comma-separated. The publisher's row order when absent."
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 10000,
              "default": 100
            },
            "description": "Rows per page, 1 to 10,000. 100 when absent."
          },
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 0
            },
            "description": "Rows to skip. The `next` URL in each answer sets it for you."
          },
          {
            "name": "format",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "json",
                "ndjson",
                "csv"
              ],
              "default": "json"
            },
            "description": "`json`, `ndjson` or `csv`. JSON carries the provenance header, and the others carry it in response headers."
          }
        ],
        "responses": {
          "200": {
            "description": "Rows with the version, licence and attribution. `next` is the URL of the following page, or null."
          },
          "400": {
            "description": "The query names a field the dataset does not have, or a value of the wrong type."
          },
          "404": {
            "description": "The dataset or version is not loaded for queries."
          },
          "429": {
            "description": "More than 60 requests in 10 seconds from one address. Blocked for 10 seconds. Wait `Retry-After` seconds.",
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer"
                },
                "description": "Seconds until the block lifts."
              },
              "RateLimit-Policy": {
                "schema": {
                  "type": "string"
                },
                "description": "The limit, as \"fair-use\";q=60;w=10."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string"
                    },
                    "status": {
                      "type": "integer",
                      "const": 429
                    },
                    "limit": {
                      "type": "integer"
                    },
                    "window_seconds": {
                      "type": "integer"
                    },
                    "block_seconds": {
                      "type": "integer"
                    },
                    "docs": {
                      "type": "string",
                      "format": "uri"
                    },
                    "files": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/datasets/{slug}/versions/{version}/aggregate": {
      "get": {
        "tags": [
          "query"
        ],
        "summary": "Counts, sums, averages, minimums and maximums by group",
        "operationId": "aggregateVersion",
        "description": "Groups and totals of any dataset in one dated version. Filters work as they do on rows. Each filter is `field=operator.value` in the query string, and every filter must match. A number or date field compares as a number or date, and a text field compares as text. Values are case-sensitive except with `ilike`. Prefix `not.` to negate a filter, as `not.eq.value`. Operators: `eq.value`, `neq.value`, `gt.value`, `gte.value`, `lt.value`, `lte.value`, `like.*text*`, `ilike.*text*`, `in.(a,b,c)`, `is.null`.",
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "sa-heritage-places"
              ]
            },
            "description": "The dataset's slug, as in its page URL `/d/<slug>/`."
          },
          {
            "name": "version",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date"
            },
            "description": "A dated version loaded for queries, from the versions path. Answers for a dated version never change."
          },
          {
            "name": "group",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "On `aggregate`, fields to group by, comma-separated."
          },
          {
            "name": "metric",
            "in": "query",
            "schema": {
              "type": "string",
              "default": "count"
            },
            "description": "On `aggregate`, `count`, `sum.field`, `avg.field`, `min.field` or `max.field`, comma-separated. `count` when absent."
          },
          {
            "name": "heritage_number",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "integer. From 1 to 29263."
          },
          {
            "name": "heritage_id",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "location",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. The street address and suburb as the publisher writes them together."
          },
          {
            "name": "street_number",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "street_name",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "street_type",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string.",
            "examples": [
              "eq.Way"
            ]
          },
          {
            "name": "address_2",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "unit_number",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string.",
            "examples": [
              "eq.U3"
            ]
          },
          {
            "name": "suburb",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "locality",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. Values: FOX, LAURIE PARK, Onkaparinga Heights, ROSETOWN, SPENCE, STEWART RANGE, WILLOCHRA, YARRAH, and on or abutting the common allotment boundaries of CT5638/51, CT5620/51, CT555/183, CT5188/586 an, section 258 Hundred of Willunga.",
            "examples": [
              "eq.section 258 Hundred of Willunga"
            ]
          },
          {
            "name": "council",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string.",
            "examples": [
              "eq.Yorke Peninsula"
            ]
          },
          {
            "name": "development_plan",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string.",
            "examples": [
              "eq.Yorke Peninsula Council"
            ]
          },
          {
            "name": "details",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "heritage_class_code",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. S, L or C. Values: C, L, S.",
            "examples": [
              "eq.S"
            ]
          },
          {
            "name": "heritage_class",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. State, Local or Contributory. Values: Contributory, Local, State.",
            "examples": [
              "eq.State"
            ]
          },
          {
            "name": "second_class_code",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. Values: C, L, S.",
            "examples": [
              "eq.S"
            ]
          },
          {
            "name": "second_class",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. Values: Contributory, Local, State.",
            "examples": [
              "eq.State"
            ]
          },
          {
            "name": "local_class_type",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. The publisher's code for the kind of local listing, T or CS. Values: CS, T.",
            "examples": [
              "eq.T"
            ]
          },
          {
            "name": "state_register_code",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "integer. From 10002 to 26621."
          },
          {
            "name": "state_register_status",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. PRO for provisional or REG for registered. Values: PRO, REG.",
            "examples": [
              "eq.REG"
            ]
          },
          {
            "name": "state_register_date",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "date. From 1980-07-24 to 2026-04-30."
          },
          {
            "name": "council_reference",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "code",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "integer. The publisher's code for the listing, shared by places listed together. From 1 to 4305."
          },
          {
            "name": "land_use_code",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. The use code or codes, separated by semicolons."
          },
          {
            "name": "land_use",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "location_accuracy_code",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. H, L or U. Values: H, L, U.",
            "examples": [
              "eq.U"
            ]
          },
          {
            "name": "location_accuracy",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. Values: Unable to locate. No associated point or polygon, high level confidence, low level confidence.",
            "examples": [
              "eq.low level confidence"
            ]
          },
          {
            "name": "data_source",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. Values: C, DPLG, SHB.",
            "examples": [
              "eq.SHB"
            ]
          },
          {
            "name": "interim_date",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "date. From 1995-01-25 to 2024-10-24.",
            "examples": [
              "eq.2024-10-24"
            ]
          },
          {
            "name": "interim_reference",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string.",
            "examples": [
              "eq.PLN/99/0515"
            ]
          },
          {
            "name": "authorised_date",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "date. From 1985-06-06 to 2025-10-23.",
            "examples": [
              "eq.2025-10-23"
            ]
          },
          {
            "name": "authorisation_reference",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string.",
            "examples": [
              "eq.UNKNOWN3"
            ]
          },
          {
            "name": "polygon_type_code",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. Values: B, D, P, S.",
            "examples": [
              "eq.S"
            ]
          },
          {
            "name": "polygon_type",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. Values: Building footprint, item has been digitised (generally because it doesn't exist in a DCDB parcel, eg. bridge, parcel (from DCDB), parcel that has been split (because it has more than one heritage item on it.",
            "examples": [
              "eq.parcel that has been split (because it has more than one heritage item on it"
            ]
          },
          {
            "name": "section_23_criteria",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. The criteria letters under section 23 of the Heritage Places Act 1993 that the place meets.",
            "examples": [
              "eq.g"
            ]
          },
          {
            "name": "section_16_criteria",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. The criteria letters under section 16 of the Heritage Places Act 1993 that the place meets.",
            "examples": [
              "eq.G"
            ]
          },
          {
            "name": "plan_parcel",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "extent_of_listing",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "significance",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "order",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "`field.asc` or `field.desc`, comma-separated. The publisher's row order when absent."
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 10000,
              "default": 100
            },
            "description": "Rows per page, 1 to 10,000. 100 when absent."
          },
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 0
            },
            "description": "Rows to skip. The `next` URL in each answer sets it for you."
          },
          {
            "name": "format",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "json",
                "ndjson",
                "csv"
              ],
              "default": "json"
            },
            "description": "`json`, `ndjson` or `csv`. JSON carries the provenance header, and the others carry it in response headers."
          }
        ],
        "responses": {
          "200": {
            "description": "Rows with the version, licence and attribution. `next` is the URL of the following page, or null."
          },
          "400": {
            "description": "The query names a field the dataset does not have, or a value of the wrong type."
          },
          "404": {
            "description": "The dataset or version is not loaded for queries."
          },
          "429": {
            "description": "More than 60 requests in 10 seconds from one address. Blocked for 10 seconds. Wait `Retry-After` seconds.",
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer"
                },
                "description": "Seconds until the block lifts."
              },
              "RateLimit-Policy": {
                "schema": {
                  "type": "string"
                },
                "description": "The limit, as \"fair-use\";q=60;w=10."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string"
                    },
                    "status": {
                      "type": "integer",
                      "const": 429
                    },
                    "limit": {
                      "type": "integer"
                    },
                    "window_seconds": {
                      "type": "integer"
                    },
                    "block_seconds": {
                      "type": "integer"
                    },
                    "docs": {
                      "type": "string",
                      "format": "uri"
                    },
                    "files": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/datasets/{slug}/versions": {
      "get": {
        "tags": [
          "query"
        ],
        "summary": "The versions loaded for queries, newest first, with the URLs to query each",
        "operationId": "queryVersions",
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "sa-heritage-places"
              ]
            },
            "description": "The dataset's slug, as in its page URL `/d/<slug>/`."
          }
        ],
        "responses": {
          "200": {
            "description": "Loaded versions with row counts and URLs."
          },
          "404": {
            "description": "The dataset or version is not loaded for queries."
          },
          "429": {
            "description": "More than 60 requests in 10 seconds from one address. Blocked for 10 seconds. Wait `Retry-After` seconds.",
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer"
                },
                "description": "Seconds until the block lifts."
              },
              "RateLimit-Policy": {
                "schema": {
                  "type": "string"
                },
                "description": "The limit, as \"fair-use\";q=60;w=10."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string"
                    },
                    "status": {
                      "type": "integer",
                      "const": 429
                    },
                    "limit": {
                      "type": "integer"
                    },
                    "window_seconds": {
                      "type": "integer"
                    },
                    "block_seconds": {
                      "type": "integer"
                    },
                    "docs": {
                      "type": "string",
                      "format": "uri"
                    },
                    "files": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}
