How it works
- Paste the route handler or controller for one to four endpoints, from any framework: Express, FastAPI, Flask, Django, Rails, Spring, Laravel and more.
- Pick Markdown reference docs, an OpenAPI 3.1 spec or a plain summary for your team, add the base URL and auth if you know them, and click Document my API.
- Review the docs against the code, fill in the To confirm items, and paste the result into your README, docs site or API gateway.
Examples
Sample results for the inputs shown, so you can see the format and quality before you try it.
Endpoint code or description: router.post('/api/invoices', requirePermission('billing:write'), async (req, res) => { const { customer_id, items, due_date } = req.body; if (!Array.isArray(items) || items.length === 0) return res.status(400).json({ error: 'items must not be empty' }); for (const it of items) { if (!it.description || !Number.isInteger(it.quantity) || it.quantity < 1 || …
Output format: Markdown reference docs
Endpoint code or description: @app.get("/users/<int:user_id>") def get_user(user_id): user = User.query.get(user_id) if user is None: return {"error": "not found"}, 404 data = {"id": user.id, "email": user.email, "name": user.name} if request.args.get("include") == "teams": data["teams"] = [t.name for t in user.teams] return data
Output format: OpenAPI 3.1 (YAML)
Endpoint code or description: @router.post('/internal/reindex') async def reindex(body: ReindexIn, x_internal_key: str = Header(None)): if x_internal_key != os.environ['INTERNAL_KEY']: raise HTTPException(401) if body.full: await search.drop_index(body.workspace_id) job = await queue.enqueue('reindex', workspace_id=body.workspace_id, since=None if body.full else await last_run(body.workspace_id)) …
Output format: Plain summary for teammates
Tips for better results
- Paste the validation code along with the handler. Required fields, limits and allowed values come from it, and the generator won't guess them.
- Add the base URL and auth scheme in the context box. They rarely appear in a handler, so without them the docs use placeholders.
- Use the plain summary for internal endpoints. Teammates need the gotchas (destructive actions, no idempotency) more than a full reference table.
- Treat the To confirm list as your review checklist. It names what the code doesn't show, such as rate limits enforced by a gateway.
FAQ
Is this API documentation generator free?
Yes. Enter your email once to use it (you'll also get Something Big, our free weekly AI newsletter, and you can unsubscribe anytime). There's no account and no credit card.
Which frameworks does it understand?
Any common web framework: Express, Fastify, NestJS, FastAPI, Flask, Django REST Framework, Rails, Laravel, Spring, ASP.NET, Go's net/http and more. You can also describe an endpoint in plain English.
Can it write an OpenAPI spec?
Yes. Choose OpenAPI 3.1 (YAML) and it writes paths, parameters, request bodies and response schemas you can load into Swagger UI, Redoc or Postman. Check it with a validator before publishing.
Will it invent error codes or rate limits?
No. It documents only what the code shows or what you tell it, and lists everything else under To confirm.
More free AI tools
Related prompts
Prefer to use ChatGPT or Claude directly? These free prompts do similar jobs.