University of Lisbon · API Governance Rules

University of Lisbon API Rules

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

8 Rules error 7 warn 1
View Rules File View on GitHub

Rule Categories

ulisboa

Rules

error
ulisboa-operator-declared
Every contract in a university repo must declare who operates the thing it describes.
$.info
error
ulisboa-provenance-declared
An unmarked artifact is credited to the institution as though they published it.
$.info
error
ulisboa-absolute-server-url
servers[] must be absolute. A relative server URL makes host-based operator attribution blind, which is exactly how thirty-six Elsevier Pure contracts were credited to another university in this cohort.
$.servers[*].url
error
ulisboa-server-on-own-domain
An institution-operated contract must be served from the institution's own registrable domain.
$.servers[*].url
error
ulisboa-operation-id
Every operation needs a stable operationId for agent tool generation.
$.paths[*][get,put,post,patch,delete]
error
ulisboa-operation-tagged
Every operation must be tagged so the contract can be split per resource.
$.paths[*][get,put,post,patch,delete]
warn
ulisboa-error-response-documented
FenixEdu ships two incompatible error envelopes and a 500 with a raw Java stack trace. Every operation that can fail must document the failure.
$.paths[*][get,put,post,patch,delete].responses
error
ulisboa-security-declared
Every operation must state its security posture explicitly — an empty array for the anonymous endpoints, the OAuth scheme for the person-scoped ones. Silence is unreadable to an agent.
$.paths[*][get,put,post,patch,delete]

Spectral Ruleset

Raw ↑
---
name: University of Lisbon — Contract Rules
generated: '2026-09-01'
method: derived
source: openapi/university-of-lisbon-fenixedu-academic-api-openapi.yml
note: >-
  A Spectral ruleset written by API Evangelist against the FenixEdu contract in this
  repo. Uses built-in Spectral functions only. The provider publishes no governance
  ruleset; these encode the defects actually observed while probing on 2026-09-01.
extends: [[spectral:oas, off]]
rules:
  ulisboa-operator-declared:
    description: Every contract in a university repo must declare who operates the thing it describes.
    severity: error
    given: $.info
    then:
      field: x-operator
      function: truthy
  ulisboa-provenance-declared:
    description: An unmarked artifact is credited to the institution as though they published it.
    severity: error
    given: $.info
    then:
      field: x-provenance
      function: truthy
  ulisboa-absolute-server-url:
    description: >-
      servers[] must be absolute. A relative server URL makes host-based operator
      attribution blind, which is exactly how thirty-six Elsevier Pure contracts were
      credited to another university in this cohort.
    severity: error
    given: $.servers[*].url
    then:
      function: pattern
      functionOptions:
        match: '^https://'
  ulisboa-server-on-own-domain:
    description: An institution-operated contract must be served from the institution's own registrable domain.
    severity: error
    given: $.servers[*].url
    then:
      function: pattern
      functionOptions:
        match: 'ulisboa\.pt'
  ulisboa-operation-id:
    description: Every operation needs a stable operationId for agent tool generation.
    severity: error
    given: $.paths[*][get,put,post,patch,delete]
    then:
      field: operationId
      function: truthy
  ulisboa-operation-tagged:
    description: Every operation must be tagged so the contract can be split per resource.
    severity: error
    given: $.paths[*][get,put,post,patch,delete]
    then:
      field: tags
      function: truthy
  ulisboa-error-response-documented:
    description: >-
      FenixEdu ships two incompatible error envelopes and a 500 with a raw Java stack
      trace. Every operation that can fail must document the failure.
    severity: warn
    given: $.paths[*][get,put,post,patch,delete].responses
    then:
      function: truthy
  ulisboa-security-declared:
    description: >-
      Every operation must state its security posture explicitly — an empty array for the
      anonymous endpoints, the OAuth scheme for the person-scoped ones. Silence is
      unreadable to an agent.
    severity: error
    given: $.paths[*][get,put,post,patch,delete]
    then:
      field: security
      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/university-of-lisbon-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.