BugReport API
A simple REST API to submit bug reports and user feedback from any mobile, web, or desktop application. Authenticate with your application API key and start receiving reports in seconds.
Base URL
https://bugreportmanager.vercel.app/api/v1Authentication
All API requests must include your application API key in the x-api-key header. Each application has its own unique API key — find yours on the application detail page in the dashboard.
API Key format
brm_<48 hex characters>curl -X POST https://bugreportmanager.vercel.app/api/v1/report \
-H "Content-Type: application/json" \
-H "x-api-key: brm_your_api_key_here" \
-d '{"title": "App crashes on startup", "description": "..."}'To get your API key: Dashboard → Applications → select your app → API Key section.
Submit Bug Report
/api/v1/reportSubmit a bug report from your application.
Request body
titlerequiredstringBrief description of the bug (max 255 chars).
descriptionrequiredstringDetailed description of the bug (max 10,000 chars).
priorityenumLOW | MEDIUM | HIGH | CRITICAL — defaults to MEDIUM.
appVersionstringYour app version string, e.g. '1.2.3' (max 50 chars).
deviceInfostringDevice / OS info, e.g. 'iPhone 15, iOS 17.4' (max 255 chars).
stackTracestringFull stack trace or error log (max 20,000 chars).
reporterEmailemailOptional email of the user who reported the bug.
Response 201 Created
{
"id": "clxyz123...",
"status": "OPEN",
"priority": "MEDIUM",
"createdAt": "2026-06-01T00:00:00.000Z"
}Example
curl -X POST https://bugreportmanager.vercel.app/api/v1/report \
-H "Content-Type: application/json" \
-H "x-api-key: brm_your_key" \
-d '{
"title": "Crash on profile screen",
"description": "App crashes when navigating to the profile screen after login.",
"priority": "HIGH",
"appVersion": "2.4.1",
"deviceInfo": "Samsung Galaxy S24, Android 14",
"stackTrace": "java.lang.NullPointerException: ...",
"reporterEmail": "user@example.com"
}'Get Bug Reports
/api/v1/bugsRetrieve bug reports for your application with optional filtering and pagination.
Query parameters
statusenumFilter by status: OPEN | IN_PROGRESS | RESOLVED | CLOSED
priorityenumFilter by priority: LOW | MEDIUM | HIGH | CRITICAL
limitnumberNumber of results to return (max 100, default 50).
offsetnumberNumber of results to skip for pagination (default 0).
Response 200 OK
{
"bugs": [
{
"id": "clxyz123...",
"title": "Crash on profile screen",
"description": "App crashes when...",
"status": "OPEN",
"priority": "HIGH",
"appVersion": "2.4.1",
"deviceInfo": "Samsung Galaxy S24, Android 14",
"reporterEmail": "user@example.com",
"createdAt": "2026-06-01T00:00:00.000Z",
"updatedAt": "2026-06-01T00:00:00.000Z"
}
],
"total": 42,
"limit": 50,
"offset": 0
}Example
curl "https://bugreportmanager.vercel.app/api/v1/bugs?status=OPEN&priority=HIGH&limit=10" \
-H "x-api-key: brm_your_key"Submit Feedback
/api/v1/feedbackSubmit user feedback from your application.
Request body
titlerequiredstringBrief title for the feedback (max 255 chars).
messagerequiredstringFeedback content (max 10,000 chars).
typeenumGENERAL | SUGGESTION | COMPLAINT | COMPLIMENT — defaults to GENERAL.
ratingnumberOptional rating from 1 (worst) to 5 (best).
appVersionstringYour app version string (max 50 chars).
reporterEmailemailOptional email of the user giving feedback.
Response 201 Created
{
"id": "clxyz456...",
"type": "SUGGESTION",
"status": "NEW",
"createdAt": "2026-06-01T00:00:00.000Z"
}Get Feedback
/api/v1/feedbackRetrieve feedback entries for your application with optional filtering and pagination.
Query parameters
typeenumFilter by type: GENERAL | SUGGESTION | COMPLAINT | COMPLIMENT
statusenumFilter by status: NEW | READ | ARCHIVED
limitnumberNumber of results to return (max 100, default 50).
offsetnumberNumber of results to skip for pagination (default 0).
Response 200 OK
{
"feedback": [
{
"id": "clxyz456...",
"title": "Love the new UI!",
"message": "The redesign is much easier to use.",
"type": "COMPLIMENT",
"status": "NEW",
"rating": 5,
"appVersion": "2.4.1",
"reporterEmail": "user@example.com",
"createdAt": "2026-06-01T00:00:00.000Z",
"updatedAt": "2026-06-01T00:00:00.000Z"
}
],
"total": 15,
"limit": 50,
"offset": 0
}Rate Limits
Rate limits are applied per API key per minute to prevent abuse.
POST /api/v1/report30 requests1 minuteGET /api/v1/bugs60 requests1 minutePOST /api/v1/feedback30 requests1 minuteGET /api/v1/feedback60 requests1 minuteWhen rate limited, the API returns 429 Too Many Requests with a Retry-After header indicating seconds to wait.
Error Codes
400Bad RequestInvalid request body or missing required fields.401UnauthorizedMissing or invalid x-api-key header.429Too Many RequestsRate limit exceeded. See Retry-After header.500Internal Server ErrorServer error. Please try again.Error response format
{
"error": "Missing x-api-key header"
}Code Examples
JavaScript / TypeScript
const API_KEY = 'brm_your_api_key_here'
const BASE_URL = 'https://bugreportmanager.vercel.app/api/v1'
// Submit a bug report
async function reportBug(bug: {
title: string
description: string
priority?: 'LOW' | 'MEDIUM' | 'HIGH' | 'CRITICAL'
appVersion?: string
deviceInfo?: string
stackTrace?: string
reporterEmail?: string
}) {
const res = await fetch(`${BASE_URL}/report`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'x-api-key': API_KEY,
},
body: JSON.stringify(bug),
})
if (!res.ok) {
const err = await res.json()
throw new Error(err.error ?? 'Failed to submit bug report')
}
return res.json() // { id, status, priority, createdAt }
}
// Get bug reports with pagination
async function getBugs(options?: {
status?: 'OPEN' | 'IN_PROGRESS' | 'RESOLVED' | 'CLOSED'
priority?: 'LOW' | 'MEDIUM' | 'HIGH' | 'CRITICAL'
limit?: number
offset?: number
}) {
const params = new URLSearchParams()
if (options?.status) params.set('status', options.status)
if (options?.priority) params.set('priority', options.priority)
if (options?.limit) params.set('limit', String(options.limit))
if (options?.offset) params.set('offset', String(options.offset))
const res = await fetch(`${BASE_URL}/bugs?${params}`, {
headers: { 'x-api-key': API_KEY },
})
return res.json() // { bugs, total, limit, offset }
}
// Submit feedback
async function submitFeedback(feedback: {
title: string
message: string
type?: 'GENERAL' | 'SUGGESTION' | 'COMPLAINT' | 'COMPLIMENT'
rating?: number
appVersion?: string
reporterEmail?: string
}) {
const res = await fetch(`${BASE_URL}/feedback`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'x-api-key': API_KEY,
},
body: JSON.stringify(feedback),
})
return res.json()
}cURL — Submit bug report
curl -X POST https://bugreportmanager.vercel.app/api/v1/report \
-H "Content-Type: application/json" \
-H "x-api-key: brm_your_key" \
-d '{
"title": "App crashes on startup",
"description": "The app crashes immediately when launched on Android 14.",
"priority": "CRITICAL",
"appVersion": "3.0.0",
"deviceInfo": "Pixel 8, Android 14",
"reporterEmail": "user@example.com"
}'cURL — Get open bugs
curl "https://bugreportmanager.vercel.app/api/v1/bugs?status=OPEN&limit=20" \
-H "x-api-key: brm_your_key"cURL — Submit feedback
curl -X POST https://bugreportmanager.vercel.app/api/v1/feedback \
-H "Content-Type: application/json" \
-H "x-api-key: brm_your_key" \
-d '{
"title": "Dark mode request",
"message": "Please add a dark mode option to the settings screen.",
"type": "SUGGESTION",
"rating": 4,
"reporterEmail": "user@example.com"
}'