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.

REST APIJSONCORS enabledx-api-key auth

Base URL

https://bugreportmanager.vercel.app/api/v1

Authentication

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

POST/api/v1/report

Submit a bug report from your application.

Request body

titlerequired
string

Brief description of the bug (max 255 chars).

descriptionrequired
string

Detailed description of the bug (max 10,000 chars).

priority
enum

LOW | MEDIUM | HIGH | CRITICAL — defaults to MEDIUM.

appVersion
string

Your app version string, e.g. '1.2.3' (max 50 chars).

deviceInfo
string

Device / OS info, e.g. 'iPhone 15, iOS 17.4' (max 255 chars).

stackTrace
string

Full stack trace or error log (max 20,000 chars).

reporterEmail
email

Optional 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

GET/api/v1/bugs

Retrieve bug reports for your application with optional filtering and pagination.

Query parameters

status
enum

Filter by status: OPEN | IN_PROGRESS | RESOLVED | CLOSED

priority
enum

Filter by priority: LOW | MEDIUM | HIGH | CRITICAL

limit
number

Number of results to return (max 100, default 50).

offset
number

Number 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

POST/api/v1/feedback

Submit user feedback from your application.

Request body

titlerequired
string

Brief title for the feedback (max 255 chars).

messagerequired
string

Feedback content (max 10,000 chars).

type
enum

GENERAL | SUGGESTION | COMPLAINT | COMPLIMENT — defaults to GENERAL.

rating
number

Optional rating from 1 (worst) to 5 (best).

appVersion
string

Your app version string (max 50 chars).

reporterEmail
email

Optional email of the user giving feedback.

Response 201 Created

{
  "id": "clxyz456...",
  "type": "SUGGESTION",
  "status": "NEW",
  "createdAt": "2026-06-01T00:00:00.000Z"
}

Get Feedback

GET/api/v1/feedback

Retrieve feedback entries for your application with optional filtering and pagination.

Query parameters

type
enum

Filter by type: GENERAL | SUGGESTION | COMPLAINT | COMPLIMENT

status
enum

Filter by status: NEW | READ | ARCHIVED

limit
number

Number of results to return (max 100, default 50).

offset
number

Number 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.

EndpointLimitWindow
POST /api/v1/report30 requests1 minute
GET /api/v1/bugs60 requests1 minute
POST /api/v1/feedback30 requests1 minute
GET /api/v1/feedback60 requests1 minute

When rate limited, the API returns 429 Too Many Requests with a Retry-After header indicating seconds to wait.

Error Codes

StatusCodeDescription
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"
  }'