Postman's published docs, SwaggerHub, a hosted docs portal, GitHub Pages, the raw OpenAPI file, or one rendered HTML page behind a private link: what each is built for, how to turn a spec into a single page with one command, and what to strip out before anyone outside sees it.
The spec is written. The integration partner starts building next week, and the API isn't public until launch. You'd like them reading real documentation, not a PDF export or a screenshot of Swagger UI. Then you open your docs platform and find that "publish" means "publish to everyone".
That's a sensible default on launch day. It's the wrong one the week before.
If the answer is yes, most of the tooling is already built for you. It just isn't built for the weeks before launch.
Postman is clear about what its publish button does: "Publishing your documentation makes it publicly available to anyone with the link to the documentation." That's the right behaviour for public API docs, which should be found, indexed and linked to. For a pre-launch spec going to one partner under an agreement, you want the opposite: a page that opens for the people you send it to and stays out of search.
So the choice isn't really between tools. It's between two jobs: publishing documentation, and delivering it.
Six routes come up, and each one is built for a different job:
| Way | What the partner gets | What it's built for | Where it gets awkward |
|---|---|---|---|
| Postman published docs | A docs page generated from your collection | Public docs for an API | Publishing makes it public to anyone with the link |
| SwaggerHub (now Swagger Studio) | Hosted, interactive docs from your OpenAPI definition | Designing and documenting APIs as a team | A private API opens only for people you add, and each needs a Swagger Studio account |
| A hosted docs portal (ReadMe and similar) | A docs site with guides and an interactive API reference | A company's long-term developer documentation | A whole portal for one partner and one pre-launch spec |
| GitHub Pages or Netlify | A static docs site | Docs that live in a repository and deploy with it | Public by default |
| Send the openapi.yaml | The file itself | Engineers who'll load it into their own tools or generate a client | Everyone else opens a wall of YAML |
| One rendered HTML page on a private link (miinideck) | A readable reference in their browser, at an unguessable address kept out of search | A spec going to specific people before launch | Static: nothing runs on a server, and a Try it console needs work on your side |
The details that change are in this table, dated and taken only from each vendor's own pages:
| Who can open it | Private option on the free plan | |
|---|---|---|
| Postman published docs | Anyone with the link, once published | Private docs are listed, but the Free plan is for one user and doesn't include collection viewers |
| ReadMe | Anyone, unless your plan includes private docs | No. Private docs start on the Pro plan ($250/month, billed annually) |
| GitHub Pages | Anyone. On GitHub Free the repository must be public; on paid plans the site is public even from a private one | No. Private visibility needs GitHub Enterprise Cloud |
| miinideck | People you send the link to; noindex by default | Yes: every link is unguessable and noindex, and a password is free on every tier, including a No-account upload |
Checked on each vendor's own documentation and pricing pages on 1 October 2026. Vendors change their plans without telling us, so check their site for what's current.
For how public hosting and private delivery split in general, private link vs public deploy walks the whole range, and GitHub Pages vs a private link covers the repository route in detail.
With one command. We ran this on 30 September 2026 against a small test spec:
npx @redocly/cli build-docs openapi.yaml -o api.html
It produced a single HTML file of about 30 KB. The file is small because it doesn't carry the renderer inside it: when the partner opens the page, their browser loads Redoc from Redocly's CDN. So the reader needs an internet connection, which they have if they're opening a link. Scalar is another renderer with a single-page setup, if you prefer its layout.
That one file is the whole deliverable. Upload it and you have a link.
Before you share it, clean the spec, not the page. A renderer shows everything in the file. Three things to check:
x-internal, a plain render may still show them. Redocly documents a remove-x-internal decorator that its bundle command applies, so bundle the spec with it first and build from the result.servers list tells the reader where the API lives. If it points at an internal hostname, that hostname is now in a partner's hands.The short version:
These aren't either-or. Plenty of teams send the rendered page and attach the YAML in the same message.
A Try it console needs your API's cooperation. If the rendered docs include a console that sends real requests, those requests go from the partner's browser to your staging API. That only works if staging allows requests from the page's address (CORS) and the partner has their own credentials. A static page can't safely hold a key, because anything in the page can be read by whoever opens it. Give the partner a sandbox key of their own instead.
A link can be forwarded. An unguessable address keeps the page out of search and away from strangers. It doesn't stop the person you sent it to from forwarding it. If the agreement is strict, put a password on it and send the password separately.
Docs aren't access control for the API. Hiding an endpoint from the documentation doesn't stop anyone calling it. What protects the API is authentication on the API.
That's the job miinideck is built around: a finished page going to specific people, where you keep hold of the link.
You upload api.html and get a link ending in 32 random characters, with a page that tells search engines not to index it. The partner opens it in any browser. They don't need an account, a Postman workspace or a download.
After you send it, the link is still yours:
The limits, stated plainly: a No-account upload runs for 7 days and can't be replaced, so for partner docs you'll want a free account. The Free tier takes files up to 10 MB, far more than a rendered spec needs. It's a static page: we host the file, and nothing on our side talks to your API.
If you have api.html already, drop it in and get a link. There's no account needed to try it. And if you're working out where a file should live more generally, where to put a file online maps every option by what you're holding.
A test send, your ESP's preview, a rendering-test service, a screenshot, the .html as an attachment, or a hosted page link: what each one shows the client, what a browser preview can and can't prove about an email, and the combination that gets sign-off without surprises.
Quarto Pub, RPubs, Posit Connect Cloud, GitHub Pages or Netlify, an HTML attachment, or a private link: what each one is built for, why a rendered report loses its styling when you send the HTML on its own, and which route fits a report meant for a client or an advisor.
A screenshot, an HTML attachment, Datawrapper, Flourish, Tableau Public, a public site, a drive, or a private link: what each one is built for, who ends up able to see the chart, and why the same Plotly chart can be 4.8 MB or 12 KB.
miinideck turns a single HTML file into an unguessable link with optional password and expiry. Default-private, never indexed.