Self-hosted API Gateway + Webhook Testing Studio
Build, test, and mock APIs in one tool. No complexity, full control.
Before starting: read
Gateway.Api/PostgresSQLConfigGuide_LinuxBashfor PostgreSQL setup, development startup, and running the API in Docker.
proxyflow-flow.mp4
Existing tools are fragmented:
- Postman → no live proxy
- ngrok → no request transformation
- Kong/Ocelot → overkill for development
ProxyFlow fixes this.
| Feature | What You Get |
|---|---|
| Reverse proxy | Route traffic, modify requests/responses |
| Webhook catcher | Persistent storage, retries, payload inspection |
| Mock server | Static/dynamic responses, delay simulation |
| Scripting | JavaScript transformation on the fly |
| OpenAPI export | Generate spec from your routes |
| Live logs | Real-time filtering by path/method/status |
Backend: .NET 8 + YARP + EF Core + PostgreSQL + SignalR + Jint
Frontend: React 18 + Vite + Tailwind + Monaco Editor
DevOps: Docker Compose + GitHub Actions
Watch the ProxyFlow dashboard recording(NO VIDEO BUGS).
Gravacao.de.tela.de.2026-10-20.14-37-01.mp4
Start PostgreSQL in its database-only container and initialize its schema:
docker compose up -d postgres
docker compose exec -T postgres psql -U dbo -d proxyflow -v ON_ERROR_STOP=1 < Gateway.Api/Database/Models/Scripts/Script1.sql
docker compose exec -T postgres psql -U dbo -d proxyflow -v ON_ERROR_STOP=1 < Gateway.Api/Database/Models/Scripts/Script2.sqlFor local development with the API running in a container, start both services:
ASPNETCORE_ENVIRONMENT=Development API_HOST_PORT=5025 docker compose up -d --buildTo run the API directly on the host instead, use the connection string and command in the PostgreSQL guide (the Docker database is published on port 5433). Start the React frontend in a separate terminal:
cd gateway-ui && npm install && npm run devDevelopment browser URLs:
- Frontend: http://localhost:5173/
- Backend API documentation (Swagger): http://localhost:5025/swagger/index.html
Swagger and API documentation are available without a token. The log and methods APIs and SignalR logs hub remain protected by [Authorize]. Obtain a bearer token with POST http://localhost:5025/api/Auth/GetToken to call them. Sample product, order, employee, and post routes are also available on the backend.
For manual smoke tests, Python 3 was used to send sample API and webhook requests and check responses and saved logs. Python is not required to run the application.