We moved our entire Postman collection to Bruno over a weekend and let Claude Code chew on the new files by Monday morning. By lunchtime, API docs were writing themselves.
Table of Contents
- What you'll learn
- Why we relied on Postman for so long & where it falls short
- Migration basics
- Scripts that saved us hours
- Common Migration Patterns
- The AI Integration Revolution
- The Unexpected Benefits
- Getting Your Team Started
- What This Means for Engineering Teams
What you'll learn
- Migrate a Postman collection (requests and environments) to Bruno in a few hours.
- Keep docs in‑lockstep with your codebase; no more stale Postman descriptions.
- Let AI write the boring bits: type /bruno-api path/to/request.bru and get ready‑to‑ship docs, TypeScript types, and React Query hooks.
- Catch breaking changes at review time, not after deploy night.
If you're exploring AI‑first tooling and looking to streamline your API workflow, this guide walks you through our practical migration step‑by‑step. If you're already using Bruno, you'll learn how to help improve your existing workflow further using AI.
Why we relied on Postman for so long & where it falls short
At Diversio, Postman had been our all‑purpose API toolkit since the company's first endpoint shipped in 2018. Every engineer has owned a collection or three; shared environments lived in the cloud; QA and PMs could fire requests without touching the codebase.
Why Postman Works for Us (So Far)
-
Scriptable: Pre‑request scripts spun up test users, refreshed auth tokens, and handled auth with a single click.
-
Variable templating: {{base_url}}, {{auth_token}}, and other vars kept requests DRY across local and cloud setups.
-
Chained workflows: Scripts set environment variables that downstream requests consumed, so multi‑step API flows ran end‑to‑end without anyone hand‑editing the shared collection.
-
Performance‑testing ready: The same collections powered our performance tests, giving us baseline latency numbers without duplicating effort.
-
Full‑stack friendly: Frontend and backend engineers could debug and iterate on the same requests without context‑switching or extra tooling.
-
Collaborative: Share links meant non‑engineers could poke endpoints in seconds.
Why it started to hurt
As our API surface has increased and now we are working on more and more features at once(thanks to agentic coding), the workflow that once felt effortless began eating hours and hurting our productivity.
-
Manual sync tax – Every new endpoint meant combing through multiple collections to wire up scripts, tests, and examples by hand.
-
Docs drift – Descriptions hid in Postman's UI; unless someone remembered to update them, they slipped out of date.
-
Invisible breaking changes – Because collections lived in Postman's cloud, reviewers never saw contract updates during code review.
-
Meeting creep – We still ended up on calls to reconcile mismatched examples and edge‑case behaviours. A lot of time spent in huddles and stand-ups discussing APIs that we couldn't document well inside of Postman.
Postman still works but it has just slowed us down. Any change meant updating code and a JSON export no one liked opening. That lag became the bottleneck.
Bruno's Git‑friendly plain‑text format, and its ability to embed full Markdown docs, looked like a way out. The best part? AI agents can read .bru files like normal code, so automation suddenly became trivial and APIs are now part of our codebase and included in diffs during code reviews.
Migration basics
1. Script syntax
2. Base64 helpers
3. Environment files
4. In‑line Markdown docs
Bruno lets every request double as a mini README:
Rich tables, code fences, emojis etc can be included. Because it's Markdown, Claude Code and other AI tools parse it effortlessly.
5. Organizing your Bruno collections
After migration, we organized our Bruno files by feature rather than by API version. Here's our structure:
Security tip: Always add .env to your .gitignore. Create a .env.example with dummy values so team members know what environment variables to set:
Each .bru file can include documentation, pre/post scripts, and environment variable references. This structure makes it easy to:
- Find related endpoints quickly
- Review API changes in PRs
- Generate documentation by feature area
- Manage permissions at the folder level
- Keep sensitive data out of version control
Scripts that saved us hours
Environment converter (Python)
The script is available in this GitHub gist: migrate_postman_envs.py
Command
Output
Validator Command
The script can be found here: validate_bruno_files.py
Command
Output
Request Migration Script
For the actual requests, here's a simple bash script:
Pro tip: Run this on a copy first. Some replacements might need manual review, especially if you have complex string patterns.
Common Migration Patterns
Response Validation
Add defensive checks when migrating:
Test Migration
If you have Postman tests:
The AI Integration Revolution
Here's where things get exciting. I created a custom Claude slash command that analyzes our Bruno files and generates comprehensive documentation by inspecting our Django codebase.
The /bruno-api Command
Instead of maintaining documentation scripts, we taught Claude to understand our codebase. Here's how the actual command works:
Note: For brevity, we have excluded a lot of details like allowed-tools, Context etc from the command above. But these and other internal project specific details are present in our /bruno-api command.
How It Analyzes Your Code
The sophistication comes from how Claude connects all the pieces:
The magic: This is more than just brittle script parsing AST. Claude Code understands our code semantically, follows imports, and comprehends business logic and can inspect multiple aspects of an API.
Real Example Output
Input: Simple Bruno file from Postman migration - see this basic file (just endpoint + auth)
Command: /bruno-api bruno/analytics/user_metrics.bru
Output: Claude analyzes the Django codebase and generates comprehensive documentation. Here's a small sample:
This is just a fraction of the output. See the complete generated documentation which includes:
- Complete API documentation with request/response examples
- Comprehensive error handling for all status codes
- Authentication and permission requirements
- TypeScript interfaces for all data structures
- React Query hooks with infinite scrolling support
- Testing examples and integration patterns
- Business logic notes and performance considerations
- Implementation details and database optimization notes
The key insight: Claude reads the actual implementation, so the documentation is always accurate. It can still make mistakes, so it's always critical to review the files and nudge it in right direction.
Adapting for Your Framework
This approach works for any framework:
- Django: Find views, serializers, permissions
- Express: Parse routes, middleware, validators
- Rails: Analyze controllers, strong params
- FastAPI: Extract Pydantic models, dependencies
The Unexpected Benefits
1. Code Reviews for API Changes
When someone changes an API, reviewers can see it in the PR:
Breaking changes are caught before deployment, not after.
2. AI-Powered API Discovery
New and existing team members can ask: - "Show me all endpoints that return user data" - "How do I paginate through results?" - "Generate TypeScript types for the profile endpoint"
Claude reads your Bruno collections and provides accurate answers and vice-versa.
3. Documentation That Stays Fresh
Since docs live with code, they're more likely to stay updated. We are working on a pre-commit hook that is going to remind developers to update Bruno files when an API related change is made.
Getting Your Team Started
Start Small, Move Fast
We did our entire migration over a weekend, and you can too. Here's what worked for us:
- Pick your proof of concept - Choose one well-used Postman collection
- Run the migration scripts - Use the Python converters linked above
- Set up your first AI command - Start with our /bruno-api template
- Show, don't tell - Generate docs for one endpoint and share with the team
The Aha Moment
The real buy-in happens when developers see: - Their API changes appearing in PR diffs - Claude Code generating accurate TypeScript interfaces - Documentation that actually matches the code - No more "update Postman" tickets in the backlog
Practical Next Steps
- Today: Export one Postman collection, import to Bruno
- Tomorrow: Create your first custom Claude command
- This Week: Add .bru files to your repo and update PR templates
- Next Sprint: Deprecate Postman licenses and celebrate the cost savings
Common Questions We Heard
- "Can QA still use it?" → Yes, Bruno has a UI too (and it's free)
- "What if we need to go back?" → Keep Postman exports for 30 days, but we never looked back
Creating Your Own AI Commands
Here's a complete example you can adapt:
Implementation tip: Start with one endpoint type (e.g., CRUD operations) and expand from there.
What This Means for Engineering Teams
The shift from Postman to Bruno in 2025 is really a shift in how we think about API documentation. It's no longer a separate artifact that gets out of sync. It's part of your codebase, reviewed like code, and enhanced by AI.
Immediate Benefits We Measured
- API documentation time: Reduced from days to hours
- Documentation quality: Rich Markdown docs with examples, tables, and diagrams (vs. limited formatting options and inconsistent AI-generated docs in Postman)
- Breaking changes caught: Significant improvement during code review (from rarely caught to consistently visible in PRs)
- Team participation: Entire team can now contribute without needing a Postman seat
- Onboarding time: New engineers integrate APIs faster with self-documenting collections and AI-generated examples
.png)


