University of Michigan-Ann Arbor · API Governance Rules
University of Michigan-Ann Arbor API Rules
Spectral linting rules defining API design standards and conventions for University of Michigan-Ann Arbor.
15 Rules
error 12
warn 3
Rule Categories
umich
Rules
error
umich-operator-declared
Every U-M contract must declare who operates the thing it describes.
$
error
umich-operator-is-institution
Only institution-operated contracts belong in this repo. A tenant relationship is recorded in apis.yml, not saved here; a vendor contract is not saved at all.
$.x-operator
error
umich-provenance-block-present
An unmarked artifact is credited to the institution as though they published it. Every contract must carry x-provenance with generated, method and source.
$
error
umich-provenance-method-vocabulary
Provenance method must come from the controlled vocabulary.
$.x-provenance.method
warn
umich-description-states-non-publication
Where API Evangelist wrote the contract rather than the institution, the description must say so in the document itself, not only in a sidecar.
$.info.description
error
umich-server-on-institution-domain
The whole point of the operator axis. A contract stored under this institution must have every server under umich.edu.
$.servers[*].url
error
umich-servers-https-only
Harvesting endpoints must be reachable over TLS.
$.servers[*].url
error
umich-contact-declared
A harvesting surface must name a contactable operator.
$.info
error
umich-error-transport-documented
This endpoint returns HTTP 200 for protocol errors. A client that branches on status code alone will treat every failure as a success, so the contract must warn about it in prose.
$.info.description
error
umich-metadata-prefix-enum-pinned
The metadataPrefix enum must stay pinned to the twelve prefixes ListMetadataFormats actually advertises. Drift here is how a probed contract quietly becomes a guessed one.
$.paths[*][*].parameters[?(@.name == 'metadataPrefix')]
error
umich-verb-enum-pinned
The verb enum must list only the OAI-PMH verbs proven live against this host.
$.paths[*][*].parameters[?(@.name == 'verb')]
warn
umich-operation-id-camel-case
Operation ids are consumed by generated clients and must be stable and camelCase.
$.paths[*][*].operationId
error
umich-no-placeholder-host
Placeholder and non-production hosts were 64 of the surfaces in the June 2026 university cohort. They are never a surface.
$.servers[*].url
warn
umich-response-example-is-real-capture
Examples on this contract must be externalValue references to the verbatim captures in examples/, never hand-written payloads.
$.paths[*][*].responses[*].content[*].examples[*]
error
umich-security-explicitly-empty-or-declared
Access posture must be stated. This endpoint is unauthenticated by protocol design, which must be declared as `security: []` rather than left absent.
$