Feedback API
Collect and manage user feedback for your products with the Feedback API. Track bugs, feature requests, questions, and praise from various sources.
Server API keys and Feedback Keys
Endpoints
/v1/feedbackSubmit client feedback
Submits feedback from a public client app using a product Feedback Key.
/v1/products/:id_or_slug/feedbackList feedback
Returns a list of feedback for a product.
/v1/products/:id_or_slug/feedbackCreate feedback
Creates a new feedback entry.
/v1/products/:id_or_slug/feedback/:idRetrieve feedback
Retrieves the details of a feedback entry.
/v1/products/:id_or_slug/feedback/:idDelete feedback
Deletes a feedback entry.
Feedback Object
The feedback object represents user feedback collected from various sources.
| Attribute | Type | Description |
|---|---|---|
id | string | Unique identifier for the feedback (e.g., fb_abc123) |
productId | string | ID of the associated product |
content | string | The feedback content |
source | string | Source of the feedback: EMAIL, TWITTER, GITHUB, DISCORD, EMBEDDED, OTHER |
type | string | Type of feedback: BUG, FEATURE, QUESTION, PRAISE, OTHER |
author | string | null | Name of the feedback author |
authorEmail | string | null | Email of the feedback author |
metadata | string | null | Optional extra context. JSON strings are formatted in the dashboard. |
createdAt | string | ISO 8601 timestamp of creation |
Feedback Key
A Feedback Key is a product-level public key for collecting feedback from client apps. Create it from Product Settings -> Feedback Ingestion.
| Attribute | Type | Description |
|---|---|---|
prefix | string | All Feedback Keys start with myopcs_fb_ |
scope | string | Can only submit feedback to the product that owns the key |
readAccess | boolean | Feedback Keys cannot read, list, update, or delete data |
dailyLimit | number | Default daily submission limit for the product key |
rotation | string | Rotate the key from Product Settings when it is exposed or abused |
Feedback Sources
The source indicates where the feedback was received from.
| Attribute | Type | Description |
|---|---|---|
EMAIL | string | Feedback received via email |
TWITTER | string | Feedback from Twitter/X |
GITHUB | string | Feedback from GitHub issues or discussions |
DISCORD | string | Feedback from Discord community |
EMBEDDED | string | Feedback from embedded widget integrated into your product |
OTHER | string | Feedback from other sources |
Feedback Types
The type categorizes the nature of the feedback.
| Attribute | Type | Description |
|---|---|---|
BUG | string | Bug report or issue |
FEATURE | string | Feature request or suggestion |
QUESTION | string | Question or inquiry |
PRAISE | string | Positive feedback or testimonial |
OTHER | string | Other types of feedback |
Submit Client Feedback
Submits feedback from a public client app. Use a product Feedback Key from Product Settings. This key can only submit feedback and cannot read product data.
Request
curl -X POST https://api.myopcs.com/api/v1/feedback \
-H "Authorization: Bearer myopcs_fb_YOUR_FEEDBACK_KEY" \
-H "Content-Type: application/json" \
-d '{
"content": "Export crashes when choosing PDF.",
"type": "BUG",
"authorEmail": "user@example.com",
"metadata": "{\"appVersion\":\"1.4.2\",\"platform\":\"macos\"}"
}'Body Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
content | string | Yes | The feedback content. Maximum 5000 characters. |
type | string | No | Type of feedback: BUG, FEATURE, QUESTION, PRAISE, OTHER. Defaults to OTHER. |
author | string | No | Name of the feedback author |
authorEmail | string | No | Email of the feedback author |
metadata | string | No | Extra context as plain text or a JSON string. Maximum 8000 characters. |
Response
{
"data": {
"id": "fb_new123",
"productId": "prod_abc123",
"content": "Export crashes when choosing PDF.",
"source": "EMBEDDED",
"type": "BUG",
"author": null,
"authorEmail": "user@example.com",
"metadata": "{\"appVersion\":\"1.4.2\",\"platform\":\"macos\"}",
"createdAt": "2024-01-16T14:00:00Z"
}
}List Feedback
Returns a list of feedback for a specific product. Results are ordered by creation date (newest first).
Request
curl https://api.myopcs.com/api/v1/products/prod_abc123/feedback \
-H "Authorization: Bearer YOUR_API_KEY"Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
type | string | No | Filter by feedback type: BUG, FEATURE, QUESTION, PRAISE, OTHER |
source | string | No | Filter by feedback source: EMAIL, TWITTER, GITHUB, DISCORD, EMBEDDED, OTHER |
Response
{
"data": [
{
"id": "fb_abc123",
"productId": "prod_abc123",
"content": "The new dashboard feature is amazing! It saved me hours of work.",
"source": "TWITTER",
"type": "PRAISE",
"author": "John Doe",
"authorEmail": "john@example.com",
"metadata": null,
"createdAt": "2024-01-15T10:30:00Z"
},
{
"id": "fb_def456",
"productId": "prod_abc123",
"content": "I found a bug where the export button doesn't work on Safari.",
"source": "EMAIL",
"type": "BUG",
"author": "Jane Smith",
"authorEmail": "jane@example.com",
"metadata": "{\"browser\":\"Safari\"}",
"createdAt": "2024-01-14T09:00:00Z"
}
]
}Create Feedback
Creates a new feedback entry for a product. This is useful for importing feedback from external sources or creating entries programmatically.
Request
curl -X POST https://api.myopcs.com/api/v1/products/prod_abc123/feedback \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"content": "The API documentation is very clear and easy to follow.",
"source": "EMAIL",
"type": "PRAISE",
"author": "Alex Johnson",
"authorEmail": "alex@example.com"
}'Body Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
content | string | Yes | The feedback content |
source | string | Yes | Source of the feedback: EMAIL, TWITTER, GITHUB, DISCORD, EMBEDDED, OTHER |
type | string | Yes | Type of feedback: BUG, FEATURE, QUESTION, PRAISE, OTHER |
author | string | No | Name of the feedback author |
authorEmail | string | No | Email of the feedback author |
metadata | string | No | Extra context as plain text or a JSON string. Maximum 8000 characters. |
Response
{
"data": {
"id": "fb_new123",
"productId": "prod_abc123",
"content": "The API documentation is very clear and easy to follow.",
"source": "EMAIL",
"type": "PRAISE",
"author": "Alex Johnson",
"authorEmail": "alex@example.com",
"metadata": null,
"createdAt": "2024-01-16T14:00:00Z"
}
}Retrieve Feedback
Retrieves the details of an existing feedback entry by its ID.
Request
curl https://api.myopcs.com/api/v1/products/prod_abc123/feedback/fb_abc123 \
-H "Authorization: Bearer YOUR_API_KEY"Response
{
"data": {
"id": "fb_abc123",
"productId": "prod_abc123",
"content": "The new dashboard feature is amazing! It saved me hours of work.",
"source": "TWITTER",
"type": "PRAISE",
"author": "John Doe",
"authorEmail": "john@example.com",
"metadata": null,
"createdAt": "2024-01-15T10:30:00Z"
}
}Delete Feedback
Deletes a feedback entry permanently.
Request
curl -X DELETE https://api.myopcs.com/api/v1/products/prod_abc123/feedback/fb_abc123 \
-H "Authorization: Bearer YOUR_API_KEY"Response
{
"success": true
}