Queensland University of Technology · API Governance Rules

Queensland University of Technology — openapi rules

Spectral linting rules defining API design standards and conventions for Queensland University of Technology.

9 Rules error 5 warn 4
Derived by API Evangelist Measured from the API contracts Queensland University of Technology publishes — the conventions those documents already follow, written down as rules. Queensland University of Technology did not publish this file.
View Rules File View on GitHub

Rule Categories

qut

Rules

error
qut-operator-declared
Every contract in this repository must declare info.x-operator, so no artifact can be silently credited to the institution.
$.info
error
qut-operator-institution-only
Only an institution-operated contract belongs in this repository. A tenant, vendor, registry or federation relationship is recorded in apis.yml, never saved as a contract here.
$.info.x-operator
error
qut-provenance-method-set
Every contract must state how we came to hold it — searched, generated, derived, probed or none. An unmarked artifact reads as though the institution published it.
$.info
error
qut-provenance-source-set
Every derived or probed contract must name the live URL it was derived from.
$.info
error
qut-servers-absolute
servers[] must carry an absolute URL on a host whose operator has been settled. A relative or absent servers block is the `hostless` failure that let 36 Elsevier Pure contracts pass as Manchester's own.
$.servers[*].url
warn
qut-oai-pmh-error-in-200
Any operation on the OAI-PMH endpoint must document that a protocol error arrives as HTTP 200 carrying an element. A client that branches on status code alone will treat a badArgument as a successful harvest.
$.paths['/oai2'].get.description
warn
qut-no-implicit-or-password-grant
QUT ESOE still advertises the implicit and password grants. Both are removed in OAuth 2.1 and discouraged by the OAuth Security BCP. Flagged as a warning against QUT's own contract, not suppressed.
$.components.schemas.TokenRequest.properties.grant_type.enum
warn
qut-pkce-s256-only
code_challenge_method should be restricted to S256. QUT advertises `plain`, which provides no protection against authorization-code interception.
$.paths..parameters[?(@.name=='code_challenge_method')].schema.enum
warn
qut-document-observed-401
Where a probe returned 401, the contract must document the 401 rather than only the 200 it never observed. Documenting an unreachable success is how a profile overstates a footprint.
$.paths[*][*].responses

Spectral Ruleset

Raw ↑
# This file was generated by API Evangelist for the qut profile on 2026-09-01. It was NOT published
# by Queensland University of Technology. The `method:` key states how the content was obtained and
# `source:` names the live URLs it was read from.
specification: API Evangelist Rules
specificationVersion: '0.1'
provider: Queensland University of Technology
providerId: qut
generated: '2026-09-01'
method: derived
source: >-
  Authored from the observed behaviour of QUT's three institution-operated surfaces, probed
  2026-09-01. These are governance rules an integrator or a reviewer can apply to QUT's contracts;
  they are API Evangelist's rules about QUT's surfaces, not rules QUT publishes.
description: >-
  A Spectral-shaped ruleset for the contracts in this repository. It encodes the three things that
  actually bite when integrating with QUT — an OAI-PMH endpoint that returns 200 on failure, an
  authorization server advertising retired grants, and a REST index whose entries are all 401 —
  plus the operator discipline this repository is built on.
formats: [oas3]
rules:
  qut-operator-declared:
    description: Every contract in this repository must declare info.x-operator, so no artifact can be silently credited to the institution.
    severity: error
    given: $.info
    then:
      field: x-operator
      function: truthy
  qut-operator-institution-only:
    description: >-
      Only an institution-operated contract belongs in this repository. A tenant, vendor, registry
      or federation relationship is recorded in apis.yml, never saved as a contract here.
    severity: error
    given: $.info.x-operator
    then:
      function: pattern
      functionOptions:
        match: '^institution$'
  qut-provenance-method-set:
    description: Every contract must state how we came to hold it — searched, generated, derived, probed or none. An unmarked artifact reads as though the institution published it.
    severity: error
    given: $.info
    then:
      field: x-method
      function: pattern
      functionOptions:
        match: '^(searched|generated|derived|probed|none)$'
  qut-provenance-source-set:
    description: Every derived or probed contract must name the live URL it was derived from.
    severity: error
    given: $.info
    then:
      field: x-source
      function: truthy
  qut-servers-absolute:
    description: >-
      servers[] must carry an absolute URL on a host whose operator has been settled. A relative or
      absent servers block is the `hostless` failure that let 36 Elsevier Pure contracts pass as
      Manchester's own.
    severity: error
    given: $.servers[*].url
    then:
      function: pattern
      functionOptions:
        match: '^https://'
  qut-oai-pmh-error-in-200:
    description: >-
      Any operation on the OAI-PMH endpoint must document that a protocol error arrives as HTTP 200
      carrying an <error> element. A client that branches on status code alone will treat a
      badArgument as a successful harvest.
    severity: warn
    given: $.paths['/oai2'].get.description
    then:
      function: pattern
      functionOptions:
        match: 'error'
  qut-no-implicit-or-password-grant:
    description: >-
      QUT ESOE still advertises the implicit and password grants. Both are removed in OAuth 2.1 and
      discouraged by the OAuth Security BCP. Flagged as a warning against QUT's own contract, not
      suppressed.
    severity: warn
    given: $.components.schemas.TokenRequest.properties.grant_type.enum
    then:
      function: schema
      functionOptions:
        schema:
          type: array
          not:
            contains:
              enum: [implicit, password]
  qut-pkce-s256-only:
    description: >-
      code_challenge_method should be restricted to S256. QUT advertises `plain`, which provides no
      protection against authorization-code interception.
    severity: warn
    given: $.paths..parameters[?(@.name=='code_challenge_method')].schema.enum
    then:
      function: schema
      functionOptions:
        schema:
          type: array
          not:
            contains:
              const: plain
  qut-document-observed-401:
    description: >-
      Where a probe returned 401, the contract must document the 401 rather than only the 200 it
      never observed. Documenting an unreachable success is how a profile overstates a footprint.
    severity: warn
    given: $.paths[*][*].responses
    then:
      function: truthy

Work with this as data

Every ruleset here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for spectral rules

4 MCP tools reach this
  • find_rulesBrowse and filter every ruleset in the catalog.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This ruleset
curl "https://apis.io/api/v1/rules/qut-openapi-rules"
All spectral rules
curl "https://apis.io/api/v1/rules?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.