generated: '2026-09-01'
method: probed
source: >-
Status codes and bodies observed directly against api.unil.ch, spica.unil.ch
and www.unil.ch on 2026-09-01. Written by API Evangelist; UNIL publishes no
error reference of its own.
note: >-
No UNIL surface implements RFC 9457 problem+json. Three different error
dialects are in play on the same registrable domain, because three different
layers answer: the Kong gateway, DSpace, and OAI-PMH.
dialects:
- layer: Kong API gateway (api.unil.ch)
media_type: application/json
shape: '{"message": "...", "request_id": "..."}'
observed:
- status: 404
body: '{"message":"no Route matched with those values","request_id":"..."}'
detail: >-
Returned for any path the gateway has no route for, including the bare
root https://api.unil.ch/ and https://api.unil.ch/iris (the only routed
prefix observed is /iris/server). This is a gateway 404, not a UNIL
application 404 — it proves a Kong deployment and proves nothing about
whether an application exists behind an unrouted path.
- layer: DSpace 7 REST (api.unil.ch/iris/server/api)
media_type: application/json
observed:
- status: 401
detail: /core/items and /core/bitstreams to an anonymous client.
- status: 405
detail: /config/properties (method not allowed on GET).
- status: 404
detail: Unknown UUID on /core/communities/{uuid}.
- layer: OAI-PMH (api.unil.ch/iris/server/oai)
media_type: text/xml
shape: 'message inside HTTP 200'
observed:
- status: 200
body: 'Illegal verb'
detail: >-
Protocol-correct: OAI-PMH signals request errors in the response body,
not in the HTTP status. A client that reads only status codes will treat
every malformed harvest as a success. Codes defined by the protocol and
applicable here are badVerb, badArgument, badResumptionToken,
cannotDisseminateFormat, idDoesNotExist, noRecordsMatch,
noMetadataFormats and noSetHierarchy.
- status: 400
detail: >-
Returned for a non-existent OAI context — /oai/openaire and /oai/driver
both 400 while /oai/request and /oai/openairecris both 200.
- layer: www.unil.ch (Jahia CMS)
media_type: text/html
observed:
- status: 404
detail: >-
A real HTML 404 page of ~2,985 or ~6,826 bytes depending on the section.
Confirmed a hard 404, not a soft-200 — every dead path probed returned an
actual 404 status.