University of Minnesota · API Governance Rules
University of Minnesota API Rules
Spectral linting rules defining API design standards and conventions for University of Minnesota.
0 Rules
Spectral Ruleset
---
name: University of Minnesota — contract governance findings
description: >-
A lint of the ten machine-readable contracts this repository holds for the University of
Minnesota, computed against the ten documents themselves rather than against a claim. Nine are
first-party GEMS Informatics OpenAPI 3.1 documents fetched live; the tenth is our derived UMedia
contract, held to the same rules and failing some of them for the same reason.
generated: '2026-09-01'
method: derived
source: >-
Computed on 2026-09-01 over openapi/_original/university-of-minnesota-gems-exchange-*.json
(fetched live, HTTP 200) and openapi/university-of-minnesota-umedia-openapi.yml.
scope:
contracts_linted: 10
operations_linted: 181
findings:
- id: security-scheme-undeclared
severity: error
affects: all nine GEMS Exchange contracts
finding: >-
Not one contract declares components.securitySchemes or a top-level security[], yet every
data path returns 401 {"message":"Missing API key in request"} without an `apikey` header.
The single most consequential fact about calling these APIs is absent from their contracts.
evidence:
- url: https://exchange-1.gems.msi.umn.edu/soil/v2/datasets
status: 401
remedy: >-
Declare an apiKey securityScheme in header named `apikey` and reference it from security[].
FastAPI expresses this with an APIKeyHeader dependency.
- id: error-responses-undeclared
severity: error
affects: all nine GEMS Exchange contracts
finding: >-
422 is the only 4xx declared on any operation. The 401 that every unauthenticated call
actually returns, and the gateway's 404 {"error_msg":"404 Route Not Found"}, appear in no
contract.
remedy: Declare 401 and 404 responses; see errors/university-of-minnesota-errors.yml.
- id: error-envelope-inconsistent
severity: warn
affects: GEMS Exchange gateway vs application
finding: >-
The gateway serialises errors as {"error_msg": "..."} while the application serialises them
as {"message": "..."} and FastAPI validation errors as {"detail": [...]}. Three envelopes on
one host, none of them RFC 9457 problem+json.
- id: servers-relative
severity: warn
affects: all nine GEMS Exchange contracts
finding: >-
servers[] carries a path-only url ("/soil/v2"). A document downloaded from the portal is
therefore not callable without knowing the host out of band — and it is precisely this
pattern that makes host-based ownership attribution blind, which is the failure mode this
pipeline exists to catch.
remedy: >-
Publish the absolute production URL. Our refined copies under openapi/ do this and record
the change in x-artifact.source.
- id: no-examples
severity: warn
affects: all ten contracts
finding: >-
Zero response examples across 181 operations. For a geospatial analysis API whose responses
are rasters, statistics and quantiles, this is the difference between a readable contract
and a guess.
- id: no-license-or-terms
severity: warn
affects: all nine GEMS Exchange contracts
finding: >-
No info.license and no info.termsOfService, although the GEMS site states that free-trial
usage is limited to personal research — a real term that the contract does not carry.
evidence:
- url: https://gems.umn.edu/gems-exchange-apis
status: 200
- id: pedtools-metadata-thin
severity: warn
affects: pedtools v1
finding: >-
Alone among the ten, pedtools declares no info.description and no info.contact, and both of
its operations are untagged. It also sits at v1 and version 0.1.0 while its nine siblings are
at v2 / 2.0.
- id: weather-openapi-gated
severity: info
affects: weather v2
finding: >-
https://exchange-1.gems.msi.umn.edu/weather/v2/openapi.json returns 401 while the other nine
openapi.json documents are public. The tenth Exchange API is real, and its contract is the
only one this repository could not save.
- id: umedia-contract-is-ours-not-theirs
severity: info
affects: openapi/university-of-minnesota-umedia-openapi.yml
finding: >-
UMN Libraries documents the UMedia API in prose and notebooks but publishes no
machine-readable contract. The OpenAPI in this repository is DERIVED by API Evangelist from
live responses and must not be read as a University publication. Its field list is whatever
the Solr index returned on 2026-09-01.
- id: common-good-swagger-not-retrievable
severity: info
affects: Common Good APIs
finding: >-
The University states that per-API Swagger documentation exists in the Boomi API Developer
Portal. The portal answers 200 and lists 24 APIs, but it is a GWT single-page application
and fourteen candidate anonymous REST/Swagger paths all returned 404. No Common Good contract
is held in this repository, and none should be invented.
evidence:
- url: https://umn-prod-apigw.boomi.cloud:18077/#catalog
status: 200
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.
Call it yourself
curl for this page
This ruleset
curl "https://apis.io/api/v1/rules/university-of-minnesota-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.