One command. Your API documentation becomes a permanent authenticated URL accessible to any engineer with a company email.
dsp publish ./swagger-ui/ --name "api-docs"Any @yourco.com email authenticates with one click. No GitHub account. No Vercel project.
Swagger UI and Redoc generate beautiful, interactive API documentation. Your OpenAPI spec becomes a fully browsable API explorer — method by method, parameter by parameter, with live request testing.
That documentation is for internal engineers. It shouldn't be public. But every hosting option that adds auth requires significant overhead:
Display publishes the Swagger UI or Redoc build directory behind Google + Microsoft SSO in 15 seconds. $49/month for the whole company.
| Display | Vercel + SSO | Behind VPN | S3 + Cognito | |
|---|---|---|---|---|
| Interactive Swagger UI / Redoc | ✅ | ✅ | ✅ | ✅ |
| Google Workspace SSO | ✅ Included | $300/mo add-on | ❌ | Complex setup |
| Microsoft 365 SSO | ✅ Included | $300/mo add-on | ❌ | Complex setup |
| Setup time | 15 seconds | 20+ minutes | Hours | 1–2 days |
| Mobile access (no VPN) | ✅ | ✅ | ❌ | ✅ |
| Monthly price | $49 flat | $320+/mo | $0 (VPN cost) | $50+/mo + time |
| Non-engineer access | ✅ | ✅ | ❌ (VPN) | ✅ |
Step 1: Generate the Swagger UI build
For a self-hosted Swagger UI:
git clone https://github.com/swagger-api/swagger-ui.git
cd swagger-ui
Or use the CDN-based single-file approach:
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="https://unpkg.com/swagger-ui-dist/swagger-ui.css">
</head>
<body>
<div id="swagger-ui"></div>
<script src="https://unpkg.com/swagger-ui-dist/swagger-ui-bundle.js"></script>
<script>
SwaggerUIBundle({
url: "./openapi.json",
dom_id: '#swagger-ui',
})
</script>
</body>
</html>Step 2: Publish
dsp publish ./api-docs/ --name "api-docs"For Redoc:
npx @redocly/cli build-docs openapi.yaml --output ./redoc-build/index.html
dsp publish ./redoc-build/ --name "api-docs-redoc"name: Publish API Docs
on:
push:
paths:
- 'openapi.yaml'
- 'openapi.json'
jobs:
publish-docs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Build Redoc
run: |
npm install -g @redocly/cli
redocly build-docs openapi.yaml --output ./api-docs/index.html
- name: Install Display CLI
run: npm install -g @display-dev/cli
- name: Publish API docs
run: dsp publish ./api-docs/ --name "api-docs"
env:
DISPLAY_TOKEN: ${{ secrets.DISPLAY_TOKEN }}Every merge that touches the OpenAPI spec automatically updates the published docs.
Free — one-time password auth, 50MB, unlimited viewers
Teams ($49/month) — Google + Microsoft SSO, 25GB, custom domain, unlimited viewers
Yes, if your API is accessible from the viewer's browser. Display serves the Swagger UI as intended — including the live request functionality. CORS on your API must allow requests from yourco.display.dev.
Yes. dsp publish ./api-docs-v2/ --name "api-docs-v2". Each version gets its own URL. Link them from a changelog page or Notion.
Display gates the documentation page — only company emails can view the Swagger UI. The API itself remains on your internal network or behind its own auth. Display controls who can read the docs, not who can call the API.
Any static HTML documentation tool works. AsyncAPI Studio, GraphQL Playground (static export), Redoc, Stoplight Elements — if it builds to a dist/ directory of HTML, dsp publish serves it.
Yes. Link from your Confluence doc to yourco.display.dev/api-docs. Confluence gets the searchable, structured context; Display hosts the interactive explorer.
Free tier. No credit card. One-time password auth on free, Google + Microsoft SSO on Teams ($49/month flat).