generated: '2026-09-01'
method: probed
source: >-
Live unauthenticated probes of api.exeter.ac.uk and ele.exeter.ac.uk on 2026-09-01.
Exeter publishes no OpenAPI and no error documentation; every shape below was read off a
real response.
note: >-
Three distinct error envelopes are in play across Exeter's surfaces, none of them
documented and none of them RFC 9457 problem+json. The AWS API Gateway envelope and the
MyExeter application envelope both appear on api.exeter.ac.uk, which means a client cannot
assume one shape from that host.
formats:
- name: AWS API Gateway default
media_type: application/json
shape: '{"message": string}'
applies_to: https://api.exeter.ac.uk
description: >-
Emitted by the gateway itself, before the application is reached. Distinguishes an
unrouted path from a gated one.
observed:
- status: 403
body: '{"message":"Missing Authentication Token"}'
example_url: https://api.exeter.ac.uk/openapi.json
meaning: no route matches this path
- status: 401
body: '{"message":"Unauthorized"}'
example_url: https://api.exeter.ac.uk/user/profile
meaning: route exists, no valid bearer token presented
- name: MyExeter application error
media_type: application/json
shape: '{"error": {"code": string, "message": string, "type": string, "details": string}}'
applies_to: https://api.exeter.ac.uk
description: >-
A structured application-level envelope with a machine-readable code, a human message, an
error class and a details string. Reached only on routes that pass the gateway without a
token requirement.
observed:
- status: 400
body: '{"error":{"code":"BAD_REQUEST","message":"tenant is required","type":"ClientError","details":"tenant missing from header..."}}'
example_url: https://api.exeter.ac.uk/application-settings
meaning: required `tenant` request header absent
- name: Moodle exception
media_type: application/xml
shape: ''
applies_to: https://ele.exeter.ac.uk/webservice/rest/server.php
description: Moodle's own upstream web-service exception format, returned with HTTP 200.
observed:
- status: 200
body: 'invalidtokenInvalid token - token not found'
example_url: https://ele.exeter.ac.uk/webservice/rest/server.php
meaning: >-
no or invalid wstoken. Note the HTTP status is 200 - status codes are not a reliable
success signal on this surface.
- name: Moodle AJAX error
media_type: application/json
shape: '{"error": string, "errorcode": string, "stacktrace": null, "debuginfo": null, "reproductionlink": null}'
applies_to: https://ele.exeter.ac.uk/lib/ajax/service.php
observed:
- status: 200
body: '{"error":"Coding error detected...Invalid json in request: Syntax error","errorcode":"codingerror",...}'
example_url: https://ele.exeter.ac.uk/lib/ajax/service.php
meaning: malformed request body, again returned with HTTP 200
not_observed:
- rfc9457-problem-details: >-
No application/problem+json response was returned by any Exeter host probed.
- retry-after: >-
No 429 was triggered and no Retry-After header was observed on any surface; Exeter
publishes no rate-limit policy.