Queensland University of Technology · API Governance Rules

Queensland University of Technology API Rules

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

9 Rules error 5 warn 4
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.