{
  "openapi": "3.1.0",
  "info": {
    "title": "Traffic infringements and charges issued by police district, Queensland, from 2013-14 query API",
    "version": "2025-10-14",
    "summary": "Filter, page and aggregate Traffic infringements and charges issued by police district, Queensland, from 2013-14 from Department of Transport and Main Roads.",
    "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 Main Roads 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/qld-traffic-infringements-issued/#query"
  },
  "tags": [
    {
      "name": "query"
    }
  ],
  "paths": {
    "/api/v1/datasets/qld-traffic-infringements-issued/rows": {
      "get": {
        "tags": [
          "query"
        ],
        "summary": "Query Traffic infringements and charges issued by police district, Queensland, from 2013-14",
        "operationId": "queryRows_qld_traffic_infringements_issued",
        "description": "Rows of Traffic infringements and charges issued by police district, Queensland, from 2013-14 in the newest loaded version, filtered and paged. Each filter is `field=operator.value` in the query string, and every filter must match. A number or date field compares as a number or date, and a text field compares as text. Values are case-sensitive except with `ilike`. Prefix `not.` to negate a filter, as `not.eq.value`. Operators: `eq.value`, `neq.value`, `gt.value`, `gte.value`, `lt.value`, `lte.value`, `like.*text*`, `ilike.*text*`, `in.(a,b,c)`, `is.null`.",
        "parameters": [
          {
            "name": "fiscal_year",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. A financial year such as 2013-14. The last three rows hold the publisher's notes in this column. Values: 2013-14, 2014-15, 2015-16, 2016-17, 2017-18, 2018-19, 2019-20, 2020-21, 2021-22, 2022-23, 2023-24, 2024-25, Data extracted on 1 October 2025 from Transport Registration and Integrated Licensing System (TRAILS) and is subject to change due to continuous finalisation of offences and data cleansing., Please note:, Road Use Intelligence (RUI) allows a three month lag for extracting and providing offence data. This allows for completeness of data and time for the offence notice to be entered into TRAILS. The three month lag includes the 28 day period for the alleged offender to pay or respond to the offence notice. Some offence categories will still be understated due to the prolonged time it takes for these matters to be finalised (e.g. Drink Driving offences, Camera detected offences)..",
            "examples": [
              "eq.Road Use Intelligence (RUI) allows a three month lag for extracting and providing offence data. This allows for completeness of data and time for the offence notice to be entered into TRAILS. The three month lag includes the 28 day period for the alleged offender to pay or respond to the offence notice. Some offence categories will still be understated due to the prolonged time it takes for these matters to be finalised (e.g. Drink Driving offences, Camera detected offences)."
            ]
          },
          {
            "name": "police_region",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. Values: BRISBANE, CENTRAL, FAR NORTHERN, NORTH COAST, NORTHERN, SOUTH EASTERN, SOUTHERN, UNKNOWN.",
            "examples": [
              "eq.UNKNOWN"
            ]
          },
          {
            "name": "police_district",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. Values: CAPRICORNIA, DARLING DOWNS, FAR NORTH, GOLD COAST, IPSWICH, LOGAN, MACKAY WHITSUNDAY, MORETON, MOUNT ISA, NORTH BRISBANE, SOUTH BRISBANE, SOUTH WEST, SUNSHINE COAST, TOWNSVILLE, UNKNOWN, WIDE BAY BURNETT.",
            "examples": [
              "eq.WIDE BAY BURNETT"
            ]
          },
          {
            "name": "offence_type",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "breach_or_ticket",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. T for an infringement notice (ticket) and B for a charge (breach). Values: B, T.",
            "examples": [
              "eq.T"
            ]
          },
          {
            "name": "offence_code",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. Kept as text because some codes carry letters."
          },
          {
            "name": "offence_description",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "offences",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "integer. From 1 to 548184."
          },
          {
            "name": "select",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Fields to return, comma-separated. Every field when absent."
          },
          {
            "name": "order",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "`field.asc` or `field.desc`, comma-separated. The publisher's row order when absent."
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 10000,
              "default": 100
            },
            "description": "Rows per page, 1 to 10,000. 100 when absent."
          },
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 0
            },
            "description": "Rows to skip. The `next` URL in each answer sets it for you."
          },
          {
            "name": "format",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "json",
                "ndjson",
                "csv"
              ],
              "default": "json"
            },
            "description": "`json`, `ndjson` or `csv`. JSON carries the provenance header, and the others carry it in response headers."
          }
        ],
        "responses": {
          "200": {
            "description": "Rows with the version, licence and attribution. `next` is the URL of the following page, or null."
          },
          "400": {
            "description": "The query names a field the dataset does not have, or a value of the wrong type."
          },
          "404": {
            "description": "The dataset or version is not loaded for queries."
          },
          "429": {
            "description": "More than 60 requests in 10 seconds from one address. Blocked for 10 seconds. Wait `Retry-After` seconds.",
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer"
                },
                "description": "Seconds until the block lifts."
              },
              "RateLimit-Policy": {
                "schema": {
                  "type": "string"
                },
                "description": "The limit, as \"fair-use\";q=60;w=10."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string"
                    },
                    "status": {
                      "type": "integer",
                      "const": 429
                    },
                    "limit": {
                      "type": "integer"
                    },
                    "window_seconds": {
                      "type": "integer"
                    },
                    "block_seconds": {
                      "type": "integer"
                    },
                    "docs": {
                      "type": "string",
                      "format": "uri"
                    },
                    "files": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/datasets/qld-traffic-infringements-issued/versions/{version}/rows": {
      "get": {
        "tags": [
          "query"
        ],
        "summary": "Query Traffic infringements and charges issued by police district, Queensland, from 2013-14",
        "operationId": "queryRows_qld_traffic_infringements_issued_version",
        "description": "Rows of Traffic infringements and charges issued by police district, Queensland, from 2013-14 in one dated version, filtered and paged. Each filter is `field=operator.value` in the query string, and every filter must match. A number or date field compares as a number or date, and a text field compares as text. Values are case-sensitive except with `ilike`. Prefix `not.` to negate a filter, as `not.eq.value`. Operators: `eq.value`, `neq.value`, `gt.value`, `gte.value`, `lt.value`, `lte.value`, `like.*text*`, `ilike.*text*`, `in.(a,b,c)`, `is.null`.",
        "parameters": [
          {
            "name": "version",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date"
            },
            "description": "A dated version loaded for queries, from the versions path. Answers for a dated version never change."
          },
          {
            "name": "fiscal_year",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. A financial year such as 2013-14. The last three rows hold the publisher's notes in this column. Values: 2013-14, 2014-15, 2015-16, 2016-17, 2017-18, 2018-19, 2019-20, 2020-21, 2021-22, 2022-23, 2023-24, 2024-25, Data extracted on 1 October 2025 from Transport Registration and Integrated Licensing System (TRAILS) and is subject to change due to continuous finalisation of offences and data cleansing., Please note:, Road Use Intelligence (RUI) allows a three month lag for extracting and providing offence data. This allows for completeness of data and time for the offence notice to be entered into TRAILS. The three month lag includes the 28 day period for the alleged offender to pay or respond to the offence notice. Some offence categories will still be understated due to the prolonged time it takes for these matters to be finalised (e.g. Drink Driving offences, Camera detected offences)..",
            "examples": [
              "eq.Road Use Intelligence (RUI) allows a three month lag for extracting and providing offence data. This allows for completeness of data and time for the offence notice to be entered into TRAILS. The three month lag includes the 28 day period for the alleged offender to pay or respond to the offence notice. Some offence categories will still be understated due to the prolonged time it takes for these matters to be finalised (e.g. Drink Driving offences, Camera detected offences)."
            ]
          },
          {
            "name": "police_region",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. Values: BRISBANE, CENTRAL, FAR NORTHERN, NORTH COAST, NORTHERN, SOUTH EASTERN, SOUTHERN, UNKNOWN.",
            "examples": [
              "eq.UNKNOWN"
            ]
          },
          {
            "name": "police_district",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. Values: CAPRICORNIA, DARLING DOWNS, FAR NORTH, GOLD COAST, IPSWICH, LOGAN, MACKAY WHITSUNDAY, MORETON, MOUNT ISA, NORTH BRISBANE, SOUTH BRISBANE, SOUTH WEST, SUNSHINE COAST, TOWNSVILLE, UNKNOWN, WIDE BAY BURNETT.",
            "examples": [
              "eq.WIDE BAY BURNETT"
            ]
          },
          {
            "name": "offence_type",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "breach_or_ticket",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. T for an infringement notice (ticket) and B for a charge (breach). Values: B, T.",
            "examples": [
              "eq.T"
            ]
          },
          {
            "name": "offence_code",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. Kept as text because some codes carry letters."
          },
          {
            "name": "offence_description",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "offences",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "integer. From 1 to 548184."
          },
          {
            "name": "select",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Fields to return, comma-separated. Every field when absent."
          },
          {
            "name": "order",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "`field.asc` or `field.desc`, comma-separated. The publisher's row order when absent."
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 10000,
              "default": 100
            },
            "description": "Rows per page, 1 to 10,000. 100 when absent."
          },
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 0
            },
            "description": "Rows to skip. The `next` URL in each answer sets it for you."
          },
          {
            "name": "format",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "json",
                "ndjson",
                "csv"
              ],
              "default": "json"
            },
            "description": "`json`, `ndjson` or `csv`. JSON carries the provenance header, and the others carry it in response headers."
          }
        ],
        "responses": {
          "200": {
            "description": "Rows with the version, licence and attribution. `next` is the URL of the following page, or null."
          },
          "400": {
            "description": "The query names a field the dataset does not have, or a value of the wrong type."
          },
          "404": {
            "description": "The dataset or version is not loaded for queries."
          },
          "429": {
            "description": "More than 60 requests in 10 seconds from one address. Blocked for 10 seconds. Wait `Retry-After` seconds.",
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer"
                },
                "description": "Seconds until the block lifts."
              },
              "RateLimit-Policy": {
                "schema": {
                  "type": "string"
                },
                "description": "The limit, as \"fair-use\";q=60;w=10."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string"
                    },
                    "status": {
                      "type": "integer",
                      "const": 429
                    },
                    "limit": {
                      "type": "integer"
                    },
                    "window_seconds": {
                      "type": "integer"
                    },
                    "block_seconds": {
                      "type": "integer"
                    },
                    "docs": {
                      "type": "string",
                      "format": "uri"
                    },
                    "files": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/datasets/{slug}/aggregate": {
      "get": {
        "tags": [
          "query"
        ],
        "summary": "Counts, sums, averages, minimums and maximums by group",
        "operationId": "aggregate",
        "description": "Groups and totals of any dataset in the newest loaded version. Filters work as they do on rows. Each filter is `field=operator.value` in the query string, and every filter must match. A number or date field compares as a number or date, and a text field compares as text. Values are case-sensitive except with `ilike`. Prefix `not.` to negate a filter, as `not.eq.value`. Operators: `eq.value`, `neq.value`, `gt.value`, `gte.value`, `lt.value`, `lte.value`, `like.*text*`, `ilike.*text*`, `in.(a,b,c)`, `is.null`.",
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "qld-traffic-infringements-issued"
              ]
            },
            "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": "fiscal_year",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. A financial year such as 2013-14. The last three rows hold the publisher's notes in this column. Values: 2013-14, 2014-15, 2015-16, 2016-17, 2017-18, 2018-19, 2019-20, 2020-21, 2021-22, 2022-23, 2023-24, 2024-25, Data extracted on 1 October 2025 from Transport Registration and Integrated Licensing System (TRAILS) and is subject to change due to continuous finalisation of offences and data cleansing., Please note:, Road Use Intelligence (RUI) allows a three month lag for extracting and providing offence data. This allows for completeness of data and time for the offence notice to be entered into TRAILS. The three month lag includes the 28 day period for the alleged offender to pay or respond to the offence notice. Some offence categories will still be understated due to the prolonged time it takes for these matters to be finalised (e.g. Drink Driving offences, Camera detected offences)..",
            "examples": [
              "eq.Road Use Intelligence (RUI) allows a three month lag for extracting and providing offence data. This allows for completeness of data and time for the offence notice to be entered into TRAILS. The three month lag includes the 28 day period for the alleged offender to pay or respond to the offence notice. Some offence categories will still be understated due to the prolonged time it takes for these matters to be finalised (e.g. Drink Driving offences, Camera detected offences)."
            ]
          },
          {
            "name": "police_region",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. Values: BRISBANE, CENTRAL, FAR NORTHERN, NORTH COAST, NORTHERN, SOUTH EASTERN, SOUTHERN, UNKNOWN.",
            "examples": [
              "eq.UNKNOWN"
            ]
          },
          {
            "name": "police_district",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. Values: CAPRICORNIA, DARLING DOWNS, FAR NORTH, GOLD COAST, IPSWICH, LOGAN, MACKAY WHITSUNDAY, MORETON, MOUNT ISA, NORTH BRISBANE, SOUTH BRISBANE, SOUTH WEST, SUNSHINE COAST, TOWNSVILLE, UNKNOWN, WIDE BAY BURNETT.",
            "examples": [
              "eq.WIDE BAY BURNETT"
            ]
          },
          {
            "name": "offence_type",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "breach_or_ticket",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. T for an infringement notice (ticket) and B for a charge (breach). Values: B, T.",
            "examples": [
              "eq.T"
            ]
          },
          {
            "name": "offence_code",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. Kept as text because some codes carry letters."
          },
          {
            "name": "offence_description",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "offences",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "integer. From 1 to 548184."
          },
          {
            "name": "order",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "`field.asc` or `field.desc`, comma-separated. The publisher's row order when absent."
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 10000,
              "default": 100
            },
            "description": "Rows per page, 1 to 10,000. 100 when absent."
          },
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 0
            },
            "description": "Rows to skip. The `next` URL in each answer sets it for you."
          },
          {
            "name": "format",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "json",
                "ndjson",
                "csv"
              ],
              "default": "json"
            },
            "description": "`json`, `ndjson` or `csv`. JSON carries the provenance header, and the others carry it in response headers."
          }
        ],
        "responses": {
          "200": {
            "description": "Rows with the version, licence and attribution. `next` is the URL of the following page, or null."
          },
          "400": {
            "description": "The query names a field the dataset does not have, or a value of the wrong type."
          },
          "404": {
            "description": "The dataset or version is not loaded for queries."
          },
          "429": {
            "description": "More than 60 requests in 10 seconds from one address. Blocked for 10 seconds. Wait `Retry-After` seconds.",
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer"
                },
                "description": "Seconds until the block lifts."
              },
              "RateLimit-Policy": {
                "schema": {
                  "type": "string"
                },
                "description": "The limit, as \"fair-use\";q=60;w=10."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string"
                    },
                    "status": {
                      "type": "integer",
                      "const": 429
                    },
                    "limit": {
                      "type": "integer"
                    },
                    "window_seconds": {
                      "type": "integer"
                    },
                    "block_seconds": {
                      "type": "integer"
                    },
                    "docs": {
                      "type": "string",
                      "format": "uri"
                    },
                    "files": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/datasets/{slug}/versions/{version}/aggregate": {
      "get": {
        "tags": [
          "query"
        ],
        "summary": "Counts, sums, averages, minimums and maximums by group",
        "operationId": "aggregateVersion",
        "description": "Groups and totals of any dataset in one dated version. Filters work as they do on rows. Each filter is `field=operator.value` in the query string, and every filter must match. A number or date field compares as a number or date, and a text field compares as text. Values are case-sensitive except with `ilike`. Prefix `not.` to negate a filter, as `not.eq.value`. Operators: `eq.value`, `neq.value`, `gt.value`, `gte.value`, `lt.value`, `lte.value`, `like.*text*`, `ilike.*text*`, `in.(a,b,c)`, `is.null`.",
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "qld-traffic-infringements-issued"
              ]
            },
            "description": "The dataset's slug, as in its page URL `/d/<slug>/`."
          },
          {
            "name": "version",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date"
            },
            "description": "A dated version loaded for queries, from the versions path. Answers for a dated version never change."
          },
          {
            "name": "group",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "On `aggregate`, fields to group by, comma-separated."
          },
          {
            "name": "metric",
            "in": "query",
            "schema": {
              "type": "string",
              "default": "count"
            },
            "description": "On `aggregate`, `count`, `sum.field`, `avg.field`, `min.field` or `max.field`, comma-separated. `count` when absent."
          },
          {
            "name": "fiscal_year",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. A financial year such as 2013-14. The last three rows hold the publisher's notes in this column. Values: 2013-14, 2014-15, 2015-16, 2016-17, 2017-18, 2018-19, 2019-20, 2020-21, 2021-22, 2022-23, 2023-24, 2024-25, Data extracted on 1 October 2025 from Transport Registration and Integrated Licensing System (TRAILS) and is subject to change due to continuous finalisation of offences and data cleansing., Please note:, Road Use Intelligence (RUI) allows a three month lag for extracting and providing offence data. This allows for completeness of data and time for the offence notice to be entered into TRAILS. The three month lag includes the 28 day period for the alleged offender to pay or respond to the offence notice. Some offence categories will still be understated due to the prolonged time it takes for these matters to be finalised (e.g. Drink Driving offences, Camera detected offences)..",
            "examples": [
              "eq.Road Use Intelligence (RUI) allows a three month lag for extracting and providing offence data. This allows for completeness of data and time for the offence notice to be entered into TRAILS. The three month lag includes the 28 day period for the alleged offender to pay or respond to the offence notice. Some offence categories will still be understated due to the prolonged time it takes for these matters to be finalised (e.g. Drink Driving offences, Camera detected offences)."
            ]
          },
          {
            "name": "police_region",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. Values: BRISBANE, CENTRAL, FAR NORTHERN, NORTH COAST, NORTHERN, SOUTH EASTERN, SOUTHERN, UNKNOWN.",
            "examples": [
              "eq.UNKNOWN"
            ]
          },
          {
            "name": "police_district",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. Values: CAPRICORNIA, DARLING DOWNS, FAR NORTH, GOLD COAST, IPSWICH, LOGAN, MACKAY WHITSUNDAY, MORETON, MOUNT ISA, NORTH BRISBANE, SOUTH BRISBANE, SOUTH WEST, SUNSHINE COAST, TOWNSVILLE, UNKNOWN, WIDE BAY BURNETT.",
            "examples": [
              "eq.WIDE BAY BURNETT"
            ]
          },
          {
            "name": "offence_type",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "breach_or_ticket",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. T for an infringement notice (ticket) and B for a charge (breach). Values: B, T.",
            "examples": [
              "eq.T"
            ]
          },
          {
            "name": "offence_code",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string. Kept as text because some codes carry letters."
          },
          {
            "name": "offence_description",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "string."
          },
          {
            "name": "offences",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "integer. From 1 to 548184."
          },
          {
            "name": "order",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "`field.asc` or `field.desc`, comma-separated. The publisher's row order when absent."
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 10000,
              "default": 100
            },
            "description": "Rows per page, 1 to 10,000. 100 when absent."
          },
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 0
            },
            "description": "Rows to skip. The `next` URL in each answer sets it for you."
          },
          {
            "name": "format",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "json",
                "ndjson",
                "csv"
              ],
              "default": "json"
            },
            "description": "`json`, `ndjson` or `csv`. JSON carries the provenance header, and the others carry it in response headers."
          }
        ],
        "responses": {
          "200": {
            "description": "Rows with the version, licence and attribution. `next` is the URL of the following page, or null."
          },
          "400": {
            "description": "The query names a field the dataset does not have, or a value of the wrong type."
          },
          "404": {
            "description": "The dataset or version is not loaded for queries."
          },
          "429": {
            "description": "More than 60 requests in 10 seconds from one address. Blocked for 10 seconds. Wait `Retry-After` seconds.",
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer"
                },
                "description": "Seconds until the block lifts."
              },
              "RateLimit-Policy": {
                "schema": {
                  "type": "string"
                },
                "description": "The limit, as \"fair-use\";q=60;w=10."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string"
                    },
                    "status": {
                      "type": "integer",
                      "const": 429
                    },
                    "limit": {
                      "type": "integer"
                    },
                    "window_seconds": {
                      "type": "integer"
                    },
                    "block_seconds": {
                      "type": "integer"
                    },
                    "docs": {
                      "type": "string",
                      "format": "uri"
                    },
                    "files": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/datasets/{slug}/versions": {
      "get": {
        "tags": [
          "query"
        ],
        "summary": "The versions loaded for queries, newest first, with the URLs to query each",
        "operationId": "queryVersions",
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "qld-traffic-infringements-issued"
              ]
            },
            "description": "The dataset's slug, as in its page URL `/d/<slug>/`."
          }
        ],
        "responses": {
          "200": {
            "description": "Loaded versions with row counts and URLs."
          },
          "404": {
            "description": "The dataset or version is not loaded for queries."
          },
          "429": {
            "description": "More than 60 requests in 10 seconds from one address. Blocked for 10 seconds. Wait `Retry-After` seconds.",
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer"
                },
                "description": "Seconds until the block lifts."
              },
              "RateLimit-Policy": {
                "schema": {
                  "type": "string"
                },
                "description": "The limit, as \"fair-use\";q=60;w=10."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": {
                      "type": "string"
                    },
                    "status": {
                      "type": "integer",
                      "const": 429
                    },
                    "limit": {
                      "type": "integer"
                    },
                    "window_seconds": {
                      "type": "integer"
                    },
                    "block_seconds": {
                      "type": "integer"
                    },
                    "docs": {
                      "type": "string",
                      "format": "uri"
                    },
                    "files": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}
