Brown University · API Governance Rules
Brown University API Rules
Spectral linting rules defining API design standards and conventions for Brown University.
10 Rules
error 6
warn 3
info 1
Rule Categories
bdr
Rules
error
bdr-operator-declared
Every contract in a university repo must declare who operates the thing it describes. This is the rule the June 2026 university cohort lacked, and its absence is how one vendor contract came to be attributed to twenty-five institutions.
$.info
error
bdr-operator-basis-stated
An operator verdict without a stated basis is an assertion, not a finding.
$.info
error
bdr-provenance-stamped
An unmarked artifact is credited to the institution as though they published it. Brown published no OpenAPI; this document must say so.
$.info.x-provenance
error
bdr-server-is-brown-owned
Guards the specific failure this pipeline exists to prevent — a vendor host appearing in a contract saved under a university's slug.
$.servers[*].url
error
bdr-no-vendor-identity
A spec whose title names a repository or research-information vendor is that vendor's contract, wherever it was fetched from.
$.info.title
error
bdr-pagination-cap-documented
The search API silently clamps rows to 500. A contract that lets a caller ask for more without saying what happens will produce silently truncated harvests.
$.paths['/api/search/'].get.parameters[?(@.name == 'rows')].schema
warn
bdr-error-responses-declared
Every GET must declare at least one non-2xx response. The BDR returns nine-byte text/html bodies on failure; a contract that omits them lets a client assume JSON always parses.
$.paths[*].get.responses
warn
bdr-operation-has-description
$.paths[*][get,post,put,patch,delete]
warn
bdr-parameter-has-description
$.paths[*][*].parameters[*]
info
bdr-observed-divergence-flagged
Informational. Brown documents 400 and 403 responses that no probe reproduced, and the contract records the divergence rather than repeating the claim. Kept as a rule so a future re-probe that removes the divergence also has to remove the note deliberately.
$.paths['/api/search/'].get.description
Spectral Ruleset
Work with this as data
Every ruleset here is available over the APIs.io API and to AI agents over MCP.