{
  "openapi": "3.1.0",
  "info": {
    "title": "Picnic sites in Victoria, Vicmap Features of Interest query API",
    "version": "2026-10-27",
    "summary": "Filter, page and aggregate Picnic sites in Victoria, Vicmap Features of Interest from Department of Transport and Planning.",
    "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 of Transport and Planning 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/vic-picnic-sites/#query"
  },
  "tags": [
    {
      "name": "query"
    }
  ],
  "paths": {
    "/api/v1/datasets/vic-picnic-sites/rows": {
      "get": {
        "tags": [
          "query"
        ],
        "summary": "Query Picnic sites in Victoria, Vicmap Features of Interest",
        "operationId": "queryRows_vic_picnic_sites",
        "description": "Rows of Picnic sites in Victoria, Vicmap Features of Interest 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 that `like` and `ilike` ignore case in the ASCII letters A to Z. 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": "name_label",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. The site's name in mixed case, as Vicmap labels it. Blank where Vicmap gives no name."
          },
          {
            "name": "name",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. The site's name in Vicmap's capitals. Blank where Vicmap gives no name."
          },
          {
            "name": "feature_type",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. Values: recreational resource.",
            "examples": [
              "eq.recreational resource"
            ]
          },
          {
            "name": "feature_subtype",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. picnic site, as Vicmap types the feature. Values: picnic site.",
            "examples": [
              "eq.picnic site"
            ]
          },
          {
            "name": "feature_status",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "parent_name",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. The feature the site sits within, such as a park or reserve, where Vicmap records one."
          },
          {
            "name": "parent_feature_id",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "integer. From 70244 to 1349598."
          },
          {
            "name": "child_exists",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "state",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. Values: NSW, SA, VIC.",
            "examples": [
              "eq.VIC"
            ]
          },
          {
            "name": "auth_org_code",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. Values: 110, 111, 179, 194, 350.",
            "examples": [
              "eq.350"
            ]
          },
          {
            "name": "auth_org_id",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "pfi",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "integer. Vicmap's persistent identifier for the feature, kept across its record's versions. From 179 to 1349697."
          },
          {
            "name": "feature_id",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "integer. From 179 to 1349697."
          },
          {
            "name": "vmadd_pfi",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. The persistent identifier of the feature's Vicmap Address record, where it has one. Values: 453976095, 53168424, 53173387.",
            "examples": [
              "eq.53173387"
            ]
          },
          {
            "name": "vicnames_id",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "integer. From -2132244 to -427."
          },
          {
            "name": "vicnames_status_code",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. Values: 11.",
            "examples": [
              "eq.11"
            ]
          },
          {
            "name": "theme1",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "theme2",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "create_date_pfi",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. The timestamp the service gives, kept as its text.",
            "examples": [
              "eq.2026-10-21T11:22:45Z"
            ]
          },
          {
            "name": "superceded_pfi",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "integer."
          },
          {
            "name": "longitude",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "number. From 140.762505 to 149.981754."
          },
          {
            "name": "latitude",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "number. From -38.756149 to -33.701723."
          },
          {
            "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. When absent, rows come in the order of the file they are read from. For the newest versions that is the version's own data.parquet, which keeps the publisher's order unless the dataset sorted it. Any other version is read from the Parquet file the answer names in `file`, and when that file is sorted the answer names its sort in `order`, which ties follow too."
          },
          {
            "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. An answer read or counted from a Parquet file names it in `file`, or its period parts in `parts`, and a sorted file's sort in `order`."
          },
          "400": {
            "description": "The query names a field the dataset does not have, or a value of the wrong type."
          },
          "404": {
            "description": "The dataset does not exist here, or the version has no table to query."
          },
          "422": {
            "description": "The query would read more of the version's file than one answer may, or the file cannot be read in part. The error gives DuckDB SQL that answers it from the published file."
          },
          "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/vic-picnic-sites/versions/{version}/rows": {
      "get": {
        "tags": [
          "query"
        ],
        "summary": "Query Picnic sites in Victoria, Vicmap Features of Interest",
        "operationId": "queryRows_vic_picnic_sites_version",
        "description": "Rows of Picnic sites in Victoria, Vicmap Features of Interest 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 that `like` and `ilike` ignore case in the ASCII letters A to Z. 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, from the versions path. A dated version's answers stay the same unless a correction rebuilds the version, which its notes record."
          },
          {
            "name": "name_label",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. The site's name in mixed case, as Vicmap labels it. Blank where Vicmap gives no name."
          },
          {
            "name": "name",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. The site's name in Vicmap's capitals. Blank where Vicmap gives no name."
          },
          {
            "name": "feature_type",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. Values: recreational resource.",
            "examples": [
              "eq.recreational resource"
            ]
          },
          {
            "name": "feature_subtype",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. picnic site, as Vicmap types the feature. Values: picnic site.",
            "examples": [
              "eq.picnic site"
            ]
          },
          {
            "name": "feature_status",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "parent_name",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. The feature the site sits within, such as a park or reserve, where Vicmap records one."
          },
          {
            "name": "parent_feature_id",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "integer. From 70244 to 1349598."
          },
          {
            "name": "child_exists",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "state",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. Values: NSW, SA, VIC.",
            "examples": [
              "eq.VIC"
            ]
          },
          {
            "name": "auth_org_code",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. Values: 110, 111, 179, 194, 350.",
            "examples": [
              "eq.350"
            ]
          },
          {
            "name": "auth_org_id",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "pfi",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "integer. Vicmap's persistent identifier for the feature, kept across its record's versions. From 179 to 1349697."
          },
          {
            "name": "feature_id",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "integer. From 179 to 1349697."
          },
          {
            "name": "vmadd_pfi",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. The persistent identifier of the feature's Vicmap Address record, where it has one. Values: 453976095, 53168424, 53173387.",
            "examples": [
              "eq.53173387"
            ]
          },
          {
            "name": "vicnames_id",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "integer. From -2132244 to -427."
          },
          {
            "name": "vicnames_status_code",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. Values: 11.",
            "examples": [
              "eq.11"
            ]
          },
          {
            "name": "theme1",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "theme2",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "create_date_pfi",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. The timestamp the service gives, kept as its text.",
            "examples": [
              "eq.2026-10-21T11:22:45Z"
            ]
          },
          {
            "name": "superceded_pfi",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "integer."
          },
          {
            "name": "longitude",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "number. From 140.762505 to 149.981754."
          },
          {
            "name": "latitude",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "number. From -38.756149 to -33.701723."
          },
          {
            "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. When absent, rows come in the order of the file they are read from. For the newest versions that is the version's own data.parquet, which keeps the publisher's order unless the dataset sorted it. Any other version is read from the Parquet file the answer names in `file`, and when that file is sorted the answer names its sort in `order`, which ties follow too."
          },
          {
            "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. An answer read or counted from a Parquet file names it in `file`, or its period parts in `parts`, and a sorted file's sort in `order`."
          },
          "400": {
            "description": "The query names a field the dataset does not have, or a value of the wrong type."
          },
          "404": {
            "description": "The dataset does not exist here, or the version has no table to query."
          },
          "422": {
            "description": "The query would read more of the version's file than one answer may, or the file cannot be read in part. The error gives DuckDB SQL that answers it from the published file."
          },
          "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 that `like` and `ilike` ignore case in the ASCII letters A to Z. 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": [
                "vic-picnic-sites"
              ]
            },
            "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": "name_label",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. The site's name in mixed case, as Vicmap labels it. Blank where Vicmap gives no name."
          },
          {
            "name": "name",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. The site's name in Vicmap's capitals. Blank where Vicmap gives no name."
          },
          {
            "name": "feature_type",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. Values: recreational resource.",
            "examples": [
              "eq.recreational resource"
            ]
          },
          {
            "name": "feature_subtype",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. picnic site, as Vicmap types the feature. Values: picnic site.",
            "examples": [
              "eq.picnic site"
            ]
          },
          {
            "name": "feature_status",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "parent_name",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. The feature the site sits within, such as a park or reserve, where Vicmap records one."
          },
          {
            "name": "parent_feature_id",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "integer. From 70244 to 1349598."
          },
          {
            "name": "child_exists",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "state",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. Values: NSW, SA, VIC.",
            "examples": [
              "eq.VIC"
            ]
          },
          {
            "name": "auth_org_code",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. Values: 110, 111, 179, 194, 350.",
            "examples": [
              "eq.350"
            ]
          },
          {
            "name": "auth_org_id",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "pfi",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "integer. Vicmap's persistent identifier for the feature, kept across its record's versions. From 179 to 1349697."
          },
          {
            "name": "feature_id",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "integer. From 179 to 1349697."
          },
          {
            "name": "vmadd_pfi",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. The persistent identifier of the feature's Vicmap Address record, where it has one. Values: 453976095, 53168424, 53173387.",
            "examples": [
              "eq.53173387"
            ]
          },
          {
            "name": "vicnames_id",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "integer. From -2132244 to -427."
          },
          {
            "name": "vicnames_status_code",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. Values: 11.",
            "examples": [
              "eq.11"
            ]
          },
          {
            "name": "theme1",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "theme2",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "create_date_pfi",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. The timestamp the service gives, kept as its text.",
            "examples": [
              "eq.2026-10-21T11:22:45Z"
            ]
          },
          {
            "name": "superceded_pfi",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "integer."
          },
          {
            "name": "longitude",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "number. From 140.762505 to 149.981754."
          },
          {
            "name": "latitude",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "number. From -38.756149 to -33.701723."
          },
          {
            "name": "order",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "`field.asc` or `field.desc`, comma-separated. When absent, rows come in the order of the file they are read from. For the newest versions that is the version's own data.parquet, which keeps the publisher's order unless the dataset sorted it. Any other version is read from the Parquet file the answer names in `file`, and when that file is sorted the answer names its sort in `order`, which ties follow too."
          },
          {
            "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. An answer read or counted from a Parquet file names it in `file`, or its period parts in `parts`, and a sorted file's sort in `order`."
          },
          "400": {
            "description": "The query names a field the dataset does not have, or a value of the wrong type."
          },
          "404": {
            "description": "The dataset does not exist here, or the version has no table to query."
          },
          "422": {
            "description": "The query would read more of the version's file than one answer may, or the file cannot be read in part. The error gives DuckDB SQL that answers it from the published file."
          },
          "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 that `like` and `ilike` ignore case in the ASCII letters A to Z. 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": [
                "vic-picnic-sites"
              ]
            },
            "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, from the versions path. A dated version's answers stay the same unless a correction rebuilds the version, which its notes record."
          },
          {
            "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": "name_label",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. The site's name in mixed case, as Vicmap labels it. Blank where Vicmap gives no name."
          },
          {
            "name": "name",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. The site's name in Vicmap's capitals. Blank where Vicmap gives no name."
          },
          {
            "name": "feature_type",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. Values: recreational resource.",
            "examples": [
              "eq.recreational resource"
            ]
          },
          {
            "name": "feature_subtype",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. picnic site, as Vicmap types the feature. Values: picnic site.",
            "examples": [
              "eq.picnic site"
            ]
          },
          {
            "name": "feature_status",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "parent_name",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. The feature the site sits within, such as a park or reserve, where Vicmap records one."
          },
          {
            "name": "parent_feature_id",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "integer. From 70244 to 1349598."
          },
          {
            "name": "child_exists",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "state",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. Values: NSW, SA, VIC.",
            "examples": [
              "eq.VIC"
            ]
          },
          {
            "name": "auth_org_code",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. Values: 110, 111, 179, 194, 350.",
            "examples": [
              "eq.350"
            ]
          },
          {
            "name": "auth_org_id",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "pfi",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "integer. Vicmap's persistent identifier for the feature, kept across its record's versions. From 179 to 1349697."
          },
          {
            "name": "feature_id",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "integer. From 179 to 1349697."
          },
          {
            "name": "vmadd_pfi",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. The persistent identifier of the feature's Vicmap Address record, where it has one. Values: 453976095, 53168424, 53173387.",
            "examples": [
              "eq.53173387"
            ]
          },
          {
            "name": "vicnames_id",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "integer. From -2132244 to -427."
          },
          {
            "name": "vicnames_status_code",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. Values: 11.",
            "examples": [
              "eq.11"
            ]
          },
          {
            "name": "theme1",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "theme2",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "create_date_pfi",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. The timestamp the service gives, kept as its text.",
            "examples": [
              "eq.2026-10-21T11:22:45Z"
            ]
          },
          {
            "name": "superceded_pfi",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "integer."
          },
          {
            "name": "longitude",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "number. From 140.762505 to 149.981754."
          },
          {
            "name": "latitude",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "number. From -38.756149 to -33.701723."
          },
          {
            "name": "order",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "`field.asc` or `field.desc`, comma-separated. When absent, rows come in the order of the file they are read from. For the newest versions that is the version's own data.parquet, which keeps the publisher's order unless the dataset sorted it. Any other version is read from the Parquet file the answer names in `file`, and when that file is sorted the answer names its sort in `order`, which ties follow too."
          },
          {
            "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. An answer read or counted from a Parquet file names it in `file`, or its period parts in `parts`, and a sorted file's sort in `order`."
          },
          "400": {
            "description": "The query names a field the dataset does not have, or a value of the wrong type."
          },
          "404": {
            "description": "The dataset does not exist here, or the version has no table to query."
          },
          "422": {
            "description": "The query would read more of the version's file than one answer may, or the file cannot be read in part. The error gives DuckDB SQL that answers it from the published file."
          },
          "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 of a dataset with a table to query, newest first, with the URLs to query each",
        "operationId": "queryVersions",
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "vic-picnic-sites"
              ]
            },
            "description": "The dataset's slug, as in its page URL `/d/<slug>/`."
          }
        ],
        "responses": {
          "200": {
            "description": "Versions with row counts and URLs."
          },
          "404": {
            "description": "The dataset does not exist here, or the version has no table to query."
          },
          "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"
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}
