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/v1Authentication (Required for ALL endpoints)
X-API-Key: sk_live_your_api_key_hereGet your API key from Settings → API & Developer
GET
/feedbackAuth RequiredList all feedback for your account
Query Parameters
status - Filter by status: new, planned, building, shipped, declinedlimit - 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 RequiredCreate 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/feedbackPATCH
/feedback/:idAuth RequiredUpdate 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-hereDELETE
/feedback/:idAuth RequiredDelete 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"
}
}