API Documentation

Secure REST API for feedback management. All endpoints require authentication.

v1.0RESTJSONSecure
Quick Start
Get your API key and start building

Base URL

https://voice.sury.app/api/v1

Authentication (Required for ALL endpoints)

X-API-Key: sk_live_your_api_key_here

Get your API key from Settings → API & Developer

GET/feedbackAuth Required
List all feedback for your account

Query Parameters

status - Filter by status: new, planned, building, shipped, declined
limit - Results per page (default: 20, max: 100)
offset - Pagination offset (default: 0)

Example Request

curl -H "X-API-Key: sk_live_..." \
  https://voice.sury.app/api/v1/feedback?status=new&limit=10
POST/feedbackAuth Required
Create new feedback programmatically

Request Body

title - Feedback title (required, max 200 chars)
description - Detailed description (optional)
submitter_email - Email address (optional)
status - Initial status (optional, default: new)

Example Request

curl -X POST \
  -H "X-API-Key: sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Add dark mode support",
    "description": "Users want a dark theme",
    "submitter_email": "[email protected]"
  }' \
  https://voice.sury.app/api/v1/feedback
PATCH/feedback/:idAuth Required
Update existing feedback

Request Body

title - New title (optional)
description - New description (optional)
status - New status (optional)

Example Request

curl -X PATCH \
  -H "X-API-Key: sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{"status": "planned"}' \
  https://voice.sury.app/api/v1/feedback/uuid-here
DELETE/feedback/:idAuth Required
Delete a feedback item

Example Request

curl -X DELETE \
  -H "X-API-Key: sk_live_..." \
  https://voice.sury.app/api/v1/feedback/uuid-here
Important Notes

No Public Endpoints

All API endpoints require authentication. There are no public API endpoints. End users should submit feedback through your web interface at /f/your-slug.

Rate Limiting

API requests are limited to 100 requests per hour per API key. Rate limit information is included in response headers.

Error Handling

All errors follow a consistent JSON format:

{
  "error": {
    "type": "validation_error",
    "message": "Missing required field: title"
  }
}