Loading...
Everything you need to integrate, customize, and deploy the feedback tool. REST API reference, widget guides, and self-hosting instructions.
Embed the feedback widget on any website with a single script tag.
<script src="https://feedback.edesy.in/widget.js" data-project-id="YOUR_PROJECT_ID" ></script>
<script src="https://feedback.edesy.in/widget.js" data-project-id="YOUR_PROJECT_ID" data-primary-color="#000000" data-background-color="#ffffff" data-text-color="#000000" data-position="bottom-right" data-button-text="Feedback" data-show-screenshot="true" ></script>
| Attribute | Type | Default | Description |
|---|---|---|---|
| data-project-id | string | required | Your project ID from dashboard |
| data-primary-color | hex | #000000 | Primary button and accent color |
| data-background-color | hex | #ffffff | Widget background color |
| data-position | string | bottom-right | bottom-right, bottom-left, top-right, top-left |
| data-button-text | string | Feedback | Text on the trigger button |
| data-show-screenshot | boolean | true | Enable screenshot capture |
// Add to your index.html or use useEffect
import { useEffect } from 'react';
function App() {
useEffect(() => {
const script = document.createElement('script');
script.src = 'https://feedback.edesy.in/widget.js';
script.setAttribute('data-project-id', 'YOUR_PROJECT_ID');
document.body.appendChild(script);
return () => script.remove();
}, []);
return <div>Your App</div>;
}Full REST API for programmatic access to feedback data.
Authorization: Bearer YOUR_API_KEY
Get your API key from the project settings in your dashboard.
https://api.feedback.edesy.in/v1
/feedbackList all feedback for a project
curl -X GET "https://api.feedback.edesy.in/v1/feedback?project_id=xxx" \
-H "Authorization: Bearer YOUR_API_KEY"
# Response
{
"data": [
{
"id": "fb_123",
"type": "bug",
"message": "Button not working",
"email": "[email protected]",
"page_url": "https://example.com/page",
"screenshot_url": "https://...",
"priority": "high",
"status": "new",
"created_at": "2024-01-15T10:30:00Z"
}
],
"pagination": {
"page": 1,
"per_page": 20,
"total": 45
}
}/feedback/:idGet a single feedback item
curl -X GET "https://api.feedback.edesy.in/v1/feedback/fb_123" \ -H "Authorization: Bearer YOUR_API_KEY"
/feedbackSubmit feedback programmatically
curl -X POST "https://api.feedback.edesy.in/v1/feedback" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"project_id": "proj_xxx",
"type": "feature",
"message": "Add dark mode support",
"email": "[email protected]",
"priority": "medium",
"metadata": {
"user_id": "123",
"plan": "pro"
}
}'/feedback/:idUpdate feedback status
curl -X PATCH "https://api.feedback.edesy.in/v1/feedback/fb_123" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"status": "in_progress"
}'
# Status options: new, in_progress, resolved, closed/feedback/:idDelete a feedback item
curl -X DELETE "https://api.feedback.edesy.in/v1/feedback/fb_123" \ -H "Authorization: Bearer YOUR_API_KEY"
| Parameter | Type | Description |
|---|---|---|
| project_id | string | Filter by project (required) |
| type | string | bug, feature, general |
| status | string | new, in_progress, resolved, closed |
| priority | string | low, medium, high, critical |
| page | number | Page number (default: 1) |
| per_page | number | Items per page (default: 20, max: 100) |
Receive real-time notifications when feedback is submitted.
Go to Project Settings
Navigate to your project dashboard and click Settings
Add Webhook URL
Enter your endpoint URL (must be HTTPS)
Select Events
Choose which events trigger the webhook
{
"event": "feedback.created",
"timestamp": "2024-01-15T10:30:00Z",
"data": {
"id": "fb_123",
"project_id": "proj_xxx",
"type": "bug",
"message": "Login button not working on mobile",
"email": "[email protected]",
"page_url": "https://example.com/login",
"screenshot_url": "https://storage.edesy.in/screenshots/xxx.png",
"priority": "high",
"status": "new",
"metadata": {
"browser": "Chrome 120",
"os": "iOS 17"
},
"created_at": "2024-01-15T10:30:00Z"
}
}| Event | Description |
|---|---|
| feedback.created | New feedback submitted |
| feedback.updated | Feedback status or priority changed |
| feedback.deleted | Feedback item deleted |
Use Slack incoming webhooks to receive feedback notifications:
Create a Slack incoming webhook in your workspace settings
Add the Slack webhook URL to your project settings
We automatically format the payload for Slack
Deploy the feedback tool on your own infrastructure with Docker.
Docker & Docker Compose
Version 20.10 or higher
PostgreSQL
Version 14 or higher (included in compose)
2GB RAM minimum
4GB recommended for production
SSL Certificate
For HTTPS (Let's Encrypt works)
# Clone the repository git clone https://github.com/edesy/feedback-tool.git cd feedback-tool # Copy environment file cp .env.example .env # Edit .env with your settings nano .env # Start with Docker Compose docker-compose up -d
# Database DATABASE_URL=postgresql://user:pass@localhost:5432/feedback # App APP_URL=https://feedback.yourdomain.com APP_SECRET=your-secret-key-here # Storage (for screenshots) STORAGE_TYPE=local # or s3 S3_BUCKET=your-bucket S3_REGION=us-east-1 S3_ACCESS_KEY=xxx S3_SECRET_KEY=xxx # Email (optional) SMTP_HOST=smtp.example.com SMTP_PORT=587 SMTP_USER=user SMTP_PASS=pass
version: '3.8'
services:
app:
image: edesy/feedback-tool:latest
ports:
- "3000:3000"
environment:
- DATABASE_URL=postgresql://postgres:postgres@db:5432/feedback
- APP_URL=https://feedback.yourdomain.com
depends_on:
- db
restart: unless-stopped
db:
image: postgres:15-alpine
volumes:
- postgres_data:/var/lib/postgresql/data
environment:
- POSTGRES_DB=feedback
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
restart: unless-stopped
volumes:
postgres_data:server {
listen 443 ssl http2;
server_name feedback.yourdomain.com;
ssl_certificate /etc/letsencrypt/live/feedback.yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/feedback.yourdomain.com/privkey.pem;
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}Our team can help with custom integrations, self-hosting setup, and enterprise deployments.
Try the hosted version or deploy on your own infrastructure.