/v1/docs
Swagger UI over the same document — the interactive, one-operation-at-a-time view, with an Authorize dialog that attaches your key to Try it out calls.
GET https://data.vike.io/v1/docsSwagger UI over the same document: the interactive, one-operation-at-a-time view, with an
Authorize dialog that attaches your key to Try it out calls now that the spec declares
ApiKeyHeader.
No parameters. Serves text/html.
A live call and what it returned, captured 2026-09-03.
curl -H "X-API-KEY: $VIKE_API_KEY" https://data.vike.io/v1/docs200, 1,018 bytes — and text/html, not JSON, so it is shown as the HTML it is. This is the
complete body, verbatim; nothing is elided.
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link type="text/css" rel="stylesheet" href="https://cdn.jsdelivr.net/npm/swagger-ui-dist@5/swagger-ui.css">
<link rel="shortcut icon" href="https://fastapi.tiangolo.com/img/favicon.png">
<title>vike.io Data API - Swagger UI</title>
</head>
<body>
<div id="swagger-ui">
</div>
<script src="https://cdn.jsdelivr.net/npm/swagger-ui-dist@5/swagger-ui-bundle.js"></script>
<!-- `SwaggerUIBundle` is now available on the page -->
<script>
const ui = SwaggerUIBundle({
url: '/v1/openapi.json',
"dom_id": "#swagger-ui",
"layout": "BaseLayout",
"deepLinking": true,
"showExtensions": true,
"showCommonExtensions": true,
oauth2RedirectUrl: window.location.origin + '/docs/oauth2-redirect',
presets: [
SwaggerUIBundle.presets.apis,
SwaggerUIBundle.SwaggerUIStandalonePreset
],
})
</script>
</body>
</html>
That is the whole of it: a shell with no API data in it at all. Everything a reader recognises as
Swagger UI arrives afterwards, from two cdn.jsdelivr.net script and stylesheet fetches and one
fetch of the spec, all issued by the browser.
Two lines in those bytes are worth reading against the warnings above. url: '/v1/openapi.json'
is host-relative, so the browser fetches the spec from data.vike.io itself — a second request,
behind the same header-only gate, carrying no X-API-KEY of its own. Getting this HTML rendered is
therefore not sufficient: a header-injecting extension or proxy has to cover the spec fetch too, not
just the page load. And oauth2RedirectUrl: window.location.origin + '/docs/oauth2-redirect' is
the un-moved route described below, present in the served bytes — the shell asks the browser to build
a callback URL under the bare /docs/ prefix, which this host does not route anywhere.
⚠ The browser trap on Schema and spec bites here first — this is the page
people try to open by hand, and by hand it 401s. There is a second, harmless oddity behind it:
the framework also mounts /docs/oauth2-redirect, its default OAuth2 authorization-code callback, and
that route alone was never moved under /v1/. It is unreachable at the edge (measured 404 on
2026-09-03) and unused — the published OAuth2Bearer scheme is type: http, a token pasted into
the Authorize box, which needs no redirect.
What the document declares, what it leaves out, and the gate in front of it: Schema and spec.