A production-style workflow automation platform built with Fastify, TypeScript, PostgreSQL, Redis, BullMQ, and Prisma.
inFlowForge allows developers to build automated workflows using triggers, conditions, actions, webhooks, background processing, and external integrations such as email and Telegram notifications.
The project was built to demonstrate modern backend engineering practices including API design, authentication, queue processing, workflow automation, event-driven architecture, webhook integrations, background workers, and production deployment.
https://inflowforge-api.onrender.com
https://inflowforge-api.onrender.com/health
https://inflowforge-api.onrender.com/docs
https://github.com/wbizmo/inflowforge-api
The live deployment includes demo credentials that can be used to explore and test the API.
dev_admin_secret_12345Example:
curl https://inflowforge-api.onrender.com/admin/analytics/overview \
-H "x-admin-token: dev_admin_secret_12345"iff_dev_test_key_123456789Example:
curl https://inflowforge-api.onrender.com/workflows \
-H "x-api-key: iff_dev_test_key_123456789"cmpuudajr00001se3b6c0jsxpTrigger the live workflow:
curl -X POST https://inflowforge-api.onrender.com/webhooks/cmpuudajr00001se3b6c0jsxp \
-H "Content-Type: application/json" \
-d '{
"name": "Demo User",
"email": "demo@example.com",
"plan": "premium"
}'This workflow demonstrates:
- Workflow Execution
- Conditional Processing
- Queue-Based Background Jobs
- Email Actions
- Telegram Notifications
- Execution Logging
- Analytics Tracking
- Webhook Processing
This project is hosted on Render's free tier.
If the API has been inactive for a period of time, Render may place the service into a sleep state.
If requests appear unavailable:
-
Visit:
-
Wait for the service to wake up.
-
Refresh the page.
-
Retry your request.
Once awake, the API, Swagger documentation, and webhook endpoints will function normally.
Create workflows consisting of:
- Triggers
- Conditions
- Actions
Workflows can be executed manually or automatically through webhooks.
Each workspace is isolated from every other workspace.
Every API key belongs to a specific workspace.
All workflows, executions, analytics, and audit logs are scoped to the owning workspace.
Workspace endpoints are protected using API keys.
Example:
x-api-key: YOUR_API_KEYAdministrative endpoints are protected using an admin token.
Example:
x-admin-token: YOUR_ADMIN_TOKENTrigger workflows from external applications.
Example:
POST /webhooks/:workflowIdThis allows integrations with:
- Websites
- Forms
- SaaS products
- Internal systems
- Third-party applications
Workflows can execute conditionally.
Example:
{
"field": "plan",
"operator": "equals",
"value": "premium"
}Only users matching the condition proceed through the workflow.
Supported actions:
Send transactional emails using Resend.
Send Telegram bot notifications.
Trigger external APIs.
Pause execution before continuing.
Create execution logs.
Workflow execution is asynchronous.
Powered by:
- Redis
- BullMQ
Benefits:
- Fast API responses
- Background processing
- Scalable architecture
- Reliable workflow execution
All critical actions are recorded:
- Workflow creation
- Workflow updates
- Workflow deletion
- Execution requests
- Webhook triggers
Administrative analytics include:
- Workspace counts
- API key counts
- Workflow counts
- Execution counts
- Success rates
- Failure rates
- Audit log totals
| Category | Technology |
|---|---|
| Runtime | Node.js |
| Language | TypeScript |
| Framework | Fastify |
| Database | PostgreSQL |
| ORM | Prisma |
| Queue System | BullMQ |
| Cache / Queue Backend | Redis |
| Database Hosting | Neon |
| Redis Hosting | Upstash |
| Resend | |
| Notifications | Telegram Bot API |
| Documentation | Swagger / OpenAPI |
| Deployment | Render |
| Testing | Node Test Runner |
Client
│
▼
Fastify API
│
▼
Authentication Layer
│
▼
Workflow Engine
│
▼
BullMQ Queue
│
▼
Redis
│
▼
Worker
│
▼
Action Engine
│
├── Email (Resend)
├── Telegram
├── HTTP Requests
├── Delay
└── Logging
│
▼
PostgreSQL
Premium Signup Workflow
Trigger:
{
"type": "webhook"
}Condition:
{
"field": "plan",
"operator": "equals",
"value": "premium"
}Actions:
[
{
"type": "email",
"to": "{{input.email}}",
"subject": "Welcome {{input.name}}"
},
{
"type": "telegram",
"message": "New premium signup: {{input.name}}"
},
{
"type": "log",
"message": "Premium signup completed"
}
]Interactive Swagger documentation is available at:
https://inflowforge-api.onrender.com/docs
The Swagger UI contains:
- Request schemas
- Response schemas
- Endpoint descriptions
- Authentication requirements
- Example payloads
curl https://inflowforge-api.onrender.com/workflows \
-H "x-api-key: iff_dev_test_key_123456789"curl https://inflowforge-api.onrender.com/admin/analytics/overview \
-H "x-admin-token: dev_admin_secret_12345"curl https://inflowforge-api.onrender.com/healthcurl https://inflowforge-api.onrender.com/workflows \
-H "x-api-key: iff_dev_test_key_123456789"curl -X POST https://inflowforge-api.onrender.com/workflows \
-H "Content-Type: application/json" \
-H "x-api-key: iff_dev_test_key_123456789"curl -X POST https://inflowforge-api.onrender.com/workflows/:id/execute \
-H "Content-Type: application/json" \
-H "x-api-key: iff_dev_test_key_123456789"curl -X POST https://inflowforge-api.onrender.com/webhooks/cmpuudajr00001se3b6c0jsxp \
-H "Content-Type: application/json"git clone https://github.com/wbizmo/inflowforge-api.git
cd inflowforge-apinpm installCreate a .env file using the values from .env.example.
npx prisma generatenpx prisma db pushnpx tsx prisma/seed/dev.tsnpm run devPORT=4000
NODE_ENV=development
DATABASE_URL=your_postgresql_connection_string
REDIS_HOST=your_redis_host
REDIS_PORT=6379
REDIS_PASSWORD=your_redis_password
ADMIN_TOKEN=your_admin_token
RESEND_API_KEY=your_resend_api_key
RESEND_FROM_EMAIL=your_verified_sender_email
TELEGRAM_BOT_TOKEN=your_telegram_bot_token
TELEGRAM_CHAT_ID=your_telegram_chat_idTo use Telegram actions, create a Telegram bot using BotFather.
Open Telegram and search for:
@BotFatherRun:
/newbotFollow the prompts and BotFather will provide a bot token.
Example:
TELEGRAM_BOT_TOKEN=123456789:AAExampleTokenHereOpen your bot in Telegram and send any message such as:
/startOpen the following URL in your browser:
https://api.telegram.org/bot<YOUR_BOT_TOKEN>/getUpdatesExample:
https://api.telegram.org/bot123456789:AAExampleTokenHere/getUpdatesYou should receive a JSON response similar to:
{
"ok": true,
"result": [
{
"message": {
"chat": {
"id": 1455925018,
"type": "private"
}
}
}
]
}The value of:
chat.idis your Telegram Chat ID.
Example:
TELEGRAM_CHAT_ID=1455925018TELEGRAM_BOT_TOKEN=your_bot_token
TELEGRAM_CHAT_ID=your_chat_idOnce configured, Telegram workflow actions can send notifications directly to your Telegram account.
Run all tests:
npm testBuild project:
npm run buildProduction deployment uses:
- Render
- Neon PostgreSQL
- Upstash Redis
- Resend
- Telegram Bot API
The live deployment automatically builds from GitHub.
Williams
GitHub:
Project Repository: