{
  "openapi": "3.1.0",
  "info": {
    "title": "Public drinking fountains, ACT query API",
    "version": "2026-09-30",
    "summary": "Filter, page and aggregate Public drinking fountains, ACT from City and Environment Directorate.",
    "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. City and Environment Directorate has not endorsed this site. The whole site is described in https://publicdata.au/openapi.json.",
    "license": {
      "name": "CC BY 4.0 with the ACTmapi terms of use",
      "url": "https://www.actmapi.act.gov.au/terms-and-conditions"
    }
  },
  "servers": [
    {
      "url": "https://publicdata.au"
    }
  ],
  "externalDocs": {
    "url": "https://publicdata.au/d/act-drinking-fountains/#query"
  },
  "tags": [
    {
      "name": "query"
    }
  ],
  "paths": {
    "/api/v1/datasets/act-drinking-fountains/rows": {
      "get": {
        "tags": [
          "query"
        ],
        "summary": "Query Public drinking fountains, ACT",
        "operationId": "queryRows_act_drinking_fountains",
        "description": "Rows of Public drinking fountains, ACT 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": "asset_type",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. Values: DRINKING FOUNTAIN.",
            "examples": [
              "eq.DRINKING FOUNTAIN"
            ]
          },
          {
            "name": "asset_sub_type",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. The publisher's type, `STANDARD DRINKING FOUNTAIN`, `REFILL STATION` or `DRINKING FOUNTAIN WITH DOG BOWL`. Values: DRINKING FOUNTAIN WITH DOG BOWL, REFILL STATION, STANDARD DRINKING FOUNTAIN.",
            "examples": [
              "eq.STANDARD DRINKING FOUNTAIN"
            ]
          },
          {
            "name": "asset_id",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "asset_name",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "location",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "operational_state",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. `ACTIVE` or `INACTIVE`, as the publisher records it. Values: ACTIVE, INACTIVE.",
            "examples": [
              "eq.INACTIVE"
            ]
          },
          {
            "name": "material",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. Values: CONCRETE, METAL, PLASTIC.",
            "examples": [
              "eq.PLASTIC"
            ]
          },
          {
            "name": "dog_bowl",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. `INCLUDES DOG BOWL` or `NO DOG BOWL`, as the publisher records it. Values: INCLUDES DOG BOWL, NO DOG BOWL.",
            "examples": [
              "eq.NO DOG BOWL"
            ]
          },
          {
            "name": "disabled_access",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. `DISABLED ACCESS` or `NO DISABLED ACCESS`, as the publisher records it. Values: DISABLED ACCESS, NO DISABLED ACCESS.",
            "examples": [
              "eq.NO DISABLED ACCESS"
            ]
          },
          {
            "name": "suburb",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string.",
            "examples": [
              "eq.YARRALUMLA"
            ]
          },
          {
            "name": "address",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string.",
            "examples": [
              "eq.YEEND AVENUE,CASEY,2913,ACT,AUSTRALIA"
            ]
          },
          {
            "name": "ownership",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. Values: CITY RENEWAL AUTHORITY, PARKS AND CONSERVATION SERVICE, PLACE MANAGEMENT, SPORTS AND RECREATION FACILITIES.",
            "examples": [
              "eq.SPORTS AND RECREATION FACILITIES"
            ]
          },
          {
            "name": "maintained_by",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. Values: PARKS AND CONSERVATION SERVICE, PM - BELCONNEN OPERATIONS, PM - GUNGAHLIN OPERATIONS, PM - INNER NORTH OPERATIONS, PM - INNER SOUTH OPERATIONS, PM - TUGGERANONG OPERATIONS, PM - WODEN WESTON MOLONGLO OPERATIONS, SPORTS AND RECREATION FACILITIES.",
            "examples": [
              "eq.SPORTS AND RECREATION FACILITIES"
            ]
          },
          {
            "name": "last_edited_date",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "date. The date the publisher last edited the asset's record. From 2019-06-20 to 2026-08-05.",
            "examples": [
              "eq.2026-08-05"
            ]
          },
          {
            "name": "globalid",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "longitude",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "number. From 148.942797626187 to 149.167351095471."
          },
          {
            "name": "latitude",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "number. From -35.4630841843292 to -35.1466863227846."
          },
          {
            "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/act-drinking-fountains/versions/{version}/rows": {
      "get": {
        "tags": [
          "query"
        ],
        "summary": "Query Public drinking fountains, ACT",
        "operationId": "queryRows_act_drinking_fountains_version",
        "description": "Rows of Public drinking fountains, ACT 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": "asset_type",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. Values: DRINKING FOUNTAIN.",
            "examples": [
              "eq.DRINKING FOUNTAIN"
            ]
          },
          {
            "name": "asset_sub_type",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. The publisher's type, `STANDARD DRINKING FOUNTAIN`, `REFILL STATION` or `DRINKING FOUNTAIN WITH DOG BOWL`. Values: DRINKING FOUNTAIN WITH DOG BOWL, REFILL STATION, STANDARD DRINKING FOUNTAIN.",
            "examples": [
              "eq.STANDARD DRINKING FOUNTAIN"
            ]
          },
          {
            "name": "asset_id",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "asset_name",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "location",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "operational_state",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. `ACTIVE` or `INACTIVE`, as the publisher records it. Values: ACTIVE, INACTIVE.",
            "examples": [
              "eq.INACTIVE"
            ]
          },
          {
            "name": "material",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. Values: CONCRETE, METAL, PLASTIC.",
            "examples": [
              "eq.PLASTIC"
            ]
          },
          {
            "name": "dog_bowl",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. `INCLUDES DOG BOWL` or `NO DOG BOWL`, as the publisher records it. Values: INCLUDES DOG BOWL, NO DOG BOWL.",
            "examples": [
              "eq.NO DOG BOWL"
            ]
          },
          {
            "name": "disabled_access",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. `DISABLED ACCESS` or `NO DISABLED ACCESS`, as the publisher records it. Values: DISABLED ACCESS, NO DISABLED ACCESS.",
            "examples": [
              "eq.NO DISABLED ACCESS"
            ]
          },
          {
            "name": "suburb",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string.",
            "examples": [
              "eq.YARRALUMLA"
            ]
          },
          {
            "name": "address",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string.",
            "examples": [
              "eq.YEEND AVENUE,CASEY,2913,ACT,AUSTRALIA"
            ]
          },
          {
            "name": "ownership",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. Values: CITY RENEWAL AUTHORITY, PARKS AND CONSERVATION SERVICE, PLACE MANAGEMENT, SPORTS AND RECREATION FACILITIES.",
            "examples": [
              "eq.SPORTS AND RECREATION FACILITIES"
            ]
          },
          {
            "name": "maintained_by",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. Values: PARKS AND CONSERVATION SERVICE, PM - BELCONNEN OPERATIONS, PM - GUNGAHLIN OPERATIONS, PM - INNER NORTH OPERATIONS, PM - INNER SOUTH OPERATIONS, PM - TUGGERANONG OPERATIONS, PM - WODEN WESTON MOLONGLO OPERATIONS, SPORTS AND RECREATION FACILITIES.",
            "examples": [
              "eq.SPORTS AND RECREATION FACILITIES"
            ]
          },
          {
            "name": "last_edited_date",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "date. The date the publisher last edited the asset's record. From 2019-06-20 to 2026-08-05.",
            "examples": [
              "eq.2026-08-05"
            ]
          },
          {
            "name": "globalid",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "longitude",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "number. From 148.942797626187 to 149.167351095471."
          },
          {
            "name": "latitude",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "number. From -35.4630841843292 to -35.1466863227846."
          },
          {
            "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": [
                "act-drinking-fountains"
              ]
            },
            "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": "asset_type",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. Values: DRINKING FOUNTAIN.",
            "examples": [
              "eq.DRINKING FOUNTAIN"
            ]
          },
          {
            "name": "asset_sub_type",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. The publisher's type, `STANDARD DRINKING FOUNTAIN`, `REFILL STATION` or `DRINKING FOUNTAIN WITH DOG BOWL`. Values: DRINKING FOUNTAIN WITH DOG BOWL, REFILL STATION, STANDARD DRINKING FOUNTAIN.",
            "examples": [
              "eq.STANDARD DRINKING FOUNTAIN"
            ]
          },
          {
            "name": "asset_id",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "asset_name",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "location",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "operational_state",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. `ACTIVE` or `INACTIVE`, as the publisher records it. Values: ACTIVE, INACTIVE.",
            "examples": [
              "eq.INACTIVE"
            ]
          },
          {
            "name": "material",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. Values: CONCRETE, METAL, PLASTIC.",
            "examples": [
              "eq.PLASTIC"
            ]
          },
          {
            "name": "dog_bowl",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. `INCLUDES DOG BOWL` or `NO DOG BOWL`, as the publisher records it. Values: INCLUDES DOG BOWL, NO DOG BOWL.",
            "examples": [
              "eq.NO DOG BOWL"
            ]
          },
          {
            "name": "disabled_access",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. `DISABLED ACCESS` or `NO DISABLED ACCESS`, as the publisher records it. Values: DISABLED ACCESS, NO DISABLED ACCESS.",
            "examples": [
              "eq.NO DISABLED ACCESS"
            ]
          },
          {
            "name": "suburb",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string.",
            "examples": [
              "eq.YARRALUMLA"
            ]
          },
          {
            "name": "address",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string.",
            "examples": [
              "eq.YEEND AVENUE,CASEY,2913,ACT,AUSTRALIA"
            ]
          },
          {
            "name": "ownership",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. Values: CITY RENEWAL AUTHORITY, PARKS AND CONSERVATION SERVICE, PLACE MANAGEMENT, SPORTS AND RECREATION FACILITIES.",
            "examples": [
              "eq.SPORTS AND RECREATION FACILITIES"
            ]
          },
          {
            "name": "maintained_by",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. Values: PARKS AND CONSERVATION SERVICE, PM - BELCONNEN OPERATIONS, PM - GUNGAHLIN OPERATIONS, PM - INNER NORTH OPERATIONS, PM - INNER SOUTH OPERATIONS, PM - TUGGERANONG OPERATIONS, PM - WODEN WESTON MOLONGLO OPERATIONS, SPORTS AND RECREATION FACILITIES.",
            "examples": [
              "eq.SPORTS AND RECREATION FACILITIES"
            ]
          },
          {
            "name": "last_edited_date",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "date. The date the publisher last edited the asset's record. From 2019-06-20 to 2026-08-05.",
            "examples": [
              "eq.2026-08-05"
            ]
          },
          {
            "name": "globalid",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "longitude",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "number. From 148.942797626187 to 149.167351095471."
          },
          {
            "name": "latitude",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "number. From -35.4630841843292 to -35.1466863227846."
          },
          {
            "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": [
                "act-drinking-fountains"
              ]
            },
            "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": "asset_type",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. Values: DRINKING FOUNTAIN.",
            "examples": [
              "eq.DRINKING FOUNTAIN"
            ]
          },
          {
            "name": "asset_sub_type",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. The publisher's type, `STANDARD DRINKING FOUNTAIN`, `REFILL STATION` or `DRINKING FOUNTAIN WITH DOG BOWL`. Values: DRINKING FOUNTAIN WITH DOG BOWL, REFILL STATION, STANDARD DRINKING FOUNTAIN.",
            "examples": [
              "eq.STANDARD DRINKING FOUNTAIN"
            ]
          },
          {
            "name": "asset_id",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "asset_name",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "location",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "operational_state",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. `ACTIVE` or `INACTIVE`, as the publisher records it. Values: ACTIVE, INACTIVE.",
            "examples": [
              "eq.INACTIVE"
            ]
          },
          {
            "name": "material",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. Values: CONCRETE, METAL, PLASTIC.",
            "examples": [
              "eq.PLASTIC"
            ]
          },
          {
            "name": "dog_bowl",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. `INCLUDES DOG BOWL` or `NO DOG BOWL`, as the publisher records it. Values: INCLUDES DOG BOWL, NO DOG BOWL.",
            "examples": [
              "eq.NO DOG BOWL"
            ]
          },
          {
            "name": "disabled_access",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. `DISABLED ACCESS` or `NO DISABLED ACCESS`, as the publisher records it. Values: DISABLED ACCESS, NO DISABLED ACCESS.",
            "examples": [
              "eq.NO DISABLED ACCESS"
            ]
          },
          {
            "name": "suburb",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string.",
            "examples": [
              "eq.YARRALUMLA"
            ]
          },
          {
            "name": "address",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string.",
            "examples": [
              "eq.YEEND AVENUE,CASEY,2913,ACT,AUSTRALIA"
            ]
          },
          {
            "name": "ownership",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. Values: CITY RENEWAL AUTHORITY, PARKS AND CONSERVATION SERVICE, PLACE MANAGEMENT, SPORTS AND RECREATION FACILITIES.",
            "examples": [
              "eq.SPORTS AND RECREATION FACILITIES"
            ]
          },
          {
            "name": "maintained_by",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. Values: PARKS AND CONSERVATION SERVICE, PM - BELCONNEN OPERATIONS, PM - GUNGAHLIN OPERATIONS, PM - INNER NORTH OPERATIONS, PM - INNER SOUTH OPERATIONS, PM - TUGGERANONG OPERATIONS, PM - WODEN WESTON MOLONGLO OPERATIONS, SPORTS AND RECREATION FACILITIES.",
            "examples": [
              "eq.SPORTS AND RECREATION FACILITIES"
            ]
          },
          {
            "name": "last_edited_date",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "date. The date the publisher last edited the asset's record. From 2019-06-20 to 2026-08-05.",
            "examples": [
              "eq.2026-08-05"
            ]
          },
          {
            "name": "globalid",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "longitude",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "number. From 148.942797626187 to 149.167351095471."
          },
          {
            "name": "latitude",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "number. From -35.4630841843292 to -35.1466863227846."
          },
          {
            "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": [
                "act-drinking-fountains"
              ]
            },
            "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"
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}
