Documentation

Feedback Tool Documentation

Everything you need to integrate, customize, and deploy the feedback tool. REST API reference, widget guides, and self-hosting instructions.

Widget Integration

Embed the feedback widget on any website with a single script tag.

Basic Integration
Add this script before the closing body tag
<script
  src="https://feedback.edesy.in/widget.js"
  data-project-id="YOUR_PROJECT_ID"
></script>
Configuration Options
Customize the widget appearance and behavior
<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>
AttributeTypeDefaultDescription
data-project-idstringrequiredYour project ID from dashboard
data-primary-colorhex#000000Primary button and accent color
data-background-colorhex#ffffffWidget background color
data-positionstringbottom-rightbottom-right, bottom-left, top-right, top-left
data-button-textstringFeedbackText on the trigger button
data-show-screenshotbooleantrueEnable screenshot capture
Framework Integration
Examples for popular frameworks
// 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>;
}

REST API

Full REST API for programmatic access to feedback data.

Authentication
All API requests require an API key
Authorization: Bearer YOUR_API_KEY

Get your API key from the project settings in your dashboard.

Base URL
https://api.feedback.edesy.in/v1
Endpoints
Available API endpoints
GET
/feedback

List 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
  }
}
GET
/feedback/:id

Get a single feedback item

curl -X GET "https://api.feedback.edesy.in/v1/feedback/fb_123" \
  -H "Authorization: Bearer YOUR_API_KEY"
POST
/feedback

Submit 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"
    }
  }'
PATCH
/feedback/:id

Update 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
DELETE
/feedback/:id

Delete a feedback item

curl -X DELETE "https://api.feedback.edesy.in/v1/feedback/fb_123" \
  -H "Authorization: Bearer YOUR_API_KEY"
Query Parameters
Filter and paginate feedback
ParameterTypeDescription
project_idstringFilter by project (required)
typestringbug, feature, general
statusstringnew, in_progress, resolved, closed
prioritystringlow, medium, high, critical
pagenumberPage number (default: 1)
per_pagenumberItems per page (default: 20, max: 100)

Webhooks

Receive real-time notifications when feedback is submitted.

Setup
Configure webhooks in your project settings
1

Go to Project Settings

Navigate to your project dashboard and click Settings

2

Add Webhook URL

Enter your endpoint URL (must be HTTPS)

3

Select Events

Choose which events trigger the webhook

Payload Format
JSON payload sent to your webhook endpoint
{
  "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"
  }
}
Events
Available webhook events
EventDescription
feedback.createdNew feedback submitted
feedback.updatedFeedback status or priority changed
feedback.deletedFeedback item deleted
Slack Integration Example
Send feedback to a Slack channel

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

Self-Hosting

Deploy the feedback tool on your own infrastructure with Docker.

Requirements
What you need to self-host

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)

Quick Start
Get running in minutes with Docker Compose
# 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
Environment Variables
Required configuration
# 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
Docker Compose Configuration
Production-ready docker-compose.yml
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:
Nginx Reverse Proxy
Optional: Use Nginx as a reverse proxy
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;
    }
}

Need Help with Integration?

Our team can help with custom integrations, self-hosting setup, and enterprise deployments.

Custom integrations
Self-hosting support
Enterprise SLA

Ready to Start Collecting Feedback?

Try the hosted version or deploy on your own infrastructure.

View Pricing