An interactive tool for developers to capture, share, and collaborate on API responses. Share your API testing results with team members using unique project links - no login required for viewers.
Demo SVG: https://drive.google.com/uc?export=view&id=12eR09C2PcgCbvThRKtoSwpdEBfOa1eTb
- ๐ User Authentication: Secure JWT-based registration and login
- ๐ Project Management: Create and organize multiple projects
- ๐ฏ API Response Capturing: Automatic capture via proxy server
- ๐ Shareable Links: Generate unique, public links for each project
- ๐ฌ Collaboration: Add comments to API responses for team discussions
- โก Real-time Updates: Automatic polling for new responses (every 10 seconds)
- ๐จ Modern UI: Clean, responsive design with intuitive navigation
- ๐ Dark/Light Theme: Theme toggle with system auto-detect and persisted preference
- ๐ Auto-redirect: Automatic logout and redirect on session expiry
- ๐ Live Tunneling: Expose local APIs to the internet with secure public URLs (like ngrok/Tunnelmole)
- ๐ช Webhook Testing: Advanced webhook debugging with signature validation, conditional routing, payload transformation, and integrations (Slack, Discord, Email)
- Backend: Node.js, Express, MongoDB
- Frontend: React, Vite
- Proxy Server: Node.js, http-proxy-middleware
- Tunnel Server: Node.js, WebSocket (ws), Express
- Tunnel Client: Node.js, WebSocket, Axios
Install the ARM CLI globally:
npm install -g @arm/cliOr use from source:
cd cli
npm install
npm linkSee cli/README.md for complete CLI documentation.
- Node.js (v14 or later)
- npm
- MongoDB
-
Clone the repository:
git clone https://github.com/your-username/api-response-manager.git cd api-response-manager -
Install backend dependencies:
npm install --prefix backend
-
Install frontend dependencies:
npm install --prefix frontend
-
Install proxy server dependencies:
npm install --prefix proxy
-
Start MongoDB:
- Make sure your MongoDB server is running.
-
Start the backend server:
npm start --prefix backend
The backend will be available at
http://localhost:5000. -
Start the frontend server:
npm run dev --prefix frontend
The frontend will be available at
http://localhost:5173. -
Start the proxy server:
npm start --prefix proxy
The proxy will be available at
http://localhost:8080. -
Start the tunnel server (optional - for live tunneling):
npm install --prefix tunnel-server npm start --prefix tunnel-server
The tunnel server will be available at
http://localhost:9000.
-
Register and Log In:
- Open your browser and navigate to
http://localhost:5173 - Click "Sign up" to create a new account
- Login with your credentials
- Open your browser and navigate to
-
Create a Project:
- Click on "Projects" in the navigation
- Click "+ New Project" button
- Enter a project name (e.g., "My API Testing")
- Click "Create Project"
- Copy the Project ID from the project detail page (shown under the project name)
-
Configure the Proxy Server:
Open
proxy/server.jsand update these two values:const target = 'http://localhost:3000'; // Change to YOUR backend URL const PROJECT_ID = 'your-project-id-here'; // Paste the Project ID you copied
Example Configuration:
// If your backend runs on port 4000 const target = 'http://localhost:4000'; const PROJECT_ID = '674f8a2b1c9d4e0012345678';
-
Start the Proxy Server:
npm start --prefix proxy
The proxy will run on
http://localhost:8080
-
Point Your API Calls to the Proxy:
Instead of calling your backend directly, route your requests through the proxy:
Before (Direct to Backend):
curl http://localhost:3000/api/users
After (Through Proxy):
curl http://localhost:8080/api/users
In Your Application Code:
// JavaScript/React const API_BASE_URL = 'http://localhost:8080'; // Instead of your backend URL fetch(`${API_BASE_URL}/api/users`) .then(res => res.json()) .then(data => console.log(data));
# Python import requests API_BASE_URL = 'http://localhost:8080' # Instead of your backend URL response = requests.get(f'{API_BASE_URL}/api/users') print(response.json())
Using Postman:
- Change your request URL from
http://localhost:3000/api/userstohttp://localhost:8080/api/users - Send your requests as normal
- All responses will be automatically captured
- Change your request URL from
-
How It Works:
- The proxy forwards your request to your actual backend
- Your backend processes the request normally
- The proxy captures the response before sending it back to you
- The captured response is stored in the API Response Manager
- You get the response as if you called the backend directly
- Real-time Updates: The project page automatically checks for new responses every 5 seconds
- Instant Notifications: You'll see a notification when new responses are captured
-
View Captured Responses:
- Go to your project in the API Response Manager
- View all captured API responses with details (request/response body, headers, status)
-
Share with Your Team:
- Click "Copy Share Link" button in the project detail page
- Share the link with anyone (no login required for them)
- They can view all API responses and add comments
-
Collaborate:
- Click on any API response to view details
- Add comments to discuss specific responses
- Team members can view and comment on shared projects
# Test your API endpoints through the proxy
curl -X POST http://localhost:8080/api/login \
-H "Content-Type: application/json" \
-d '{"email":"[email protected]","password":"password123"}'
# All responses are automatically logged# Expose your local API to the internet
# 1. Create tunnel via UI at http://localhost:5173/tunnels
# 2. Connect tunnel client:
cd tunnel-client
node client.js <tunnelId> <subdomain> 3000 <authToken> <userId>
# 3. Your local API is now public:
curl https://myapi.tunnel.arm.dev/api/users- Capture the exact API response that caused a bug
- Share the link with your team
- Everyone can see the exact request/response that failed
- Capture real API responses as examples
- Share with frontend developers
- Show actual response structures
- Capture API responses during development
- Share with clients to show progress
- No need to give them access to your backend
- Generate instant webhook URLs for testing
- Capture and inspect all incoming webhook requests
- Forward webhooks to local development servers or multiple destinations
- Validate webhook signatures (HMAC SHA-1/256/512)
- Edit and resend webhooks with modifications
- Apply conditional routing rules based on payload content
- Transform webhook payloads before forwarding
- Replay captured webhooks for debugging
- Get notifications via Slack, Discord, or Email
- View complete request history with filtering
- Test webhooks from GitHub, Stripe, Twilio, etc.
Q: My responses aren't being captured
- Verify the proxy server is running on port 8080
- Check that PROJECT_ID in
proxy/server.jsmatches your project ID - Ensure you're sending requests to
http://localhost:8080not your backend directly
Q: Getting connection errors
- Verify your backend is running
- Check the
targetURL inproxy/server.jsmatches your backend URL - Make sure MongoDB is running for the API Response Manager backend
Q: Proxy returns 500 error
- Check the proxy server logs for errors
- Verify the API Response Manager backend is running on port 5000
- Ensure PROJECT_ID is a valid MongoDB ObjectId
Q: Tunnel not connecting
- Verify tunnel server is running on port 9000
- Check that local server is running on the specified port
- Ensure WebSocket connections are allowed through firewall
- Verify auth token and user ID are correct
Q: Tunnel requests failing
- Make sure test server/local API is running
- Check tunnel client shows "Tunnel Active!" message
- Verify subdomain matches in all commands
- Check tunnel server and backend logs for errors
Q: Webhook not forwarding
- Verify forwarding is enabled when creating webhook
- Check that tunnel is active if forwarding to tunnel
- Ensure local server is running on the specified port
- View webhook detail page to see forwarding errors
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- Contributed by Google Jules
For issues, questions, or contributions, please open an issue on the GitHub repository.
Version: 2.2.0
Last Updated: November 14, 2025
Author: Vijay Singh Purohit
Email: [email protected]
- ๐ HMAC Signature Validation - Verify webhook authenticity with SHA-1/256/512
- Configurable algorithm, secret key, and header name
- GitHub/Stripe webhook compatibility
- Timing-safe signature comparison
- โ๏ธ Request Modification & Resend - Edit and replay webhooks with changes
- Modify headers, body, and HTTP method
- Interactive modal editor with JSON validation
- Track modified requests separately
- ๐ฏ Multiple Destination Forwarding - Forward to unlimited destinations simultaneously
- Support for both tunnels and URLs
- Individual success/failure tracking per destination
- Enable/disable destinations independently
- ๐ Conditional Forwarding Rules - Route webhooks based on content
- Multiple operators: equals, contains, regex, startsWith, endsWith, exists, greaterThan, lessThan
- Nested field path support (body.event, headers.x-custom)
- Actions: forward, skip, or transform
- Route to specific destinations based on conditions
- ๐ Payload Transformation - Transform webhook data before forwarding
- Field-to-field mapping with transformations
- Built-in transforms: uppercase, lowercase, trim, json, base64
- JSON template support for complete restructuring
- Add/remove fields dynamically
- ๐ฌ Slack Integration - Real-time notifications to Slack channels
- Rich message formatting with attachments
- Configurable events (received, forwarded, failed)
- Color-coded status indicators
- ๐ฎ Discord Integration - Send notifications to Discord
- Embed messages with color coding
- Event filtering and timestamps
- ๐ง Email Alerts - Email notification support
- Multiple recipient configuration
- Event-based triggers
- Ready for email service integration
- Instant Webhook URLs - Generate unique webhook endpoints instantly
- Automatic Request Logging - Capture all incoming webhook requests with full details
- Webhook Forwarding - Forward webhooks to local servers via tunnels or direct URLs
- Request History - View all webhook requests with filtering by status
- Replay Functionality - Resend captured webhooks for testing
- Statistics Dashboard - Track total requests, forwarded, failed, and success rate
- Beautiful UI - Professional modal design with sectioned layout
- Flexible Configuration - Enable/disable forwarding, set expiration, choose targets
- Request Inspection - View headers, body, and forwarding results in detail
- Status Tracking - Monitor received, forwarded, failed, and replayed requests
- Expose Local APIs - Public URLs for local development servers
- Custom Subdomains - Choose your own or auto-generate
- WebSocket Tunneling - Real-time bidirectional communication with auto-reconnect
- Rate Limiting - Configurable per tunnel (default 60 req/min)
- Security Features - IP whitelisting, Basic auth, Token auth
- SSL/TLS Support - Let's Encrypt integration with ssl-proxy.js
- Statistics Tracking - Request count, bandwidth, uptime monitoring
- Complete UI - Create, manage, and monitor tunnels from web interface
- Tunnel Expiration - Auto-close tunnels after specified time
- Heartbeat Monitoring - Keep-alive mechanism with auto-cleanup
- Full theme support across the app
- Theme toggle with sun/moon icons
- Auto-detect system preference
- Persists user choice via localStorage
- Mobile sidebar improvements
- Better contrast and accessibility
- Complete setup guide (SETUP_GUIDE.md)
- Tunnel setup guide (TUNNEL_SETUP.md)
- API documentation
- Troubleshooting guide
- Product roadmap (ROADMAP.md)
- Release notes (RELEASE_NOTES.md)
- Phase 1 completion summary (PHASE1_COMPLETE.md)
- Updated README with tunnel features


