Overview

Bugnet exposes a full REST API that you can use to build custom integrations, automate workflows, and manage your projects programmatically. Every action available in the dashboard can also be performed via the API.

  • Base URL: https://api.bugnet.io/api/
  • Versioned URL: https://api.bugnet.io/api/v1/
  • All routes are available under both /api/ and /api/v1/
  • All request and response bodies use JSON format
  • All text is UTF-8 encoded
Bash
# Example: list your projects
curl -X GET https://api.bugnet.io/api/projects \
  -H "Authorization: Bearer YOUR_SESSION_TOKEN" \
  -H "Content-Type: application/json"

Authentication

The Bugnet API supports two authentication methods depending on your use case.

Bearer Token (Dashboard / User Auth)

Use bearer tokens for authenticated user actions such as managing bugs, team members, and project settings. Tokens are obtained by signing in via the login or signup endpoints.

HTTP
Authorization: Bearer YOUR_SESSION_TOKEN

Tokens are returned in the response body when you call POST /api/auth/login or POST /api/auth/signup.

API Key (SDK / Public Auth)

Use API keys for SDK integrations and public API access, such as submitting bug reports or starting game sessions from your game client.

HTTP
X-API-Key: YOUR_API_KEY

API keys are available on the Integrate tab of your project dashboard.

⚠️

Never expose your session token in client-side code. Use API keys for SDK integrations. Session tokens are intended for server-side or dashboard use only.

Rate Limits

Rate limits protect the API from abuse and ensure fair usage across all users. Limits are applied per IP address.

Endpoint TypeLimit
Public endpoints30 requests/minute per IP
Authenticated endpoints120 requests/minute per IP
Login endpoint10 attempts/minute per IP

Rate limit information is included in every response via the following headers:

  • X-RateLimit-Limit — Maximum requests allowed in the current window
  • X-RateLimit-Remaining — Requests remaining in the current window
  • X-RateLimit-Reset — Unix timestamp when the window resets

When you exceed the rate limit, the API returns a 429 Too Many Requests response. Back off and retry after the reset time indicated in the headers.

Response Format

All API responses use a standard JSON envelope with an ok boolean indicating success or failure.

Success Response

JSON
{
  "ok": true,
  "data": {
    "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "title": "Player fell through the floor",
    "status": "open"
  }
}

Error Response

JSON
{
  "ok": false,
  "error": "Description of the error"
}

Common HTTP Status Codes

CodeMeaning
200Success
201Created
400Bad request (validation error)
401Unauthorized
403Forbidden
404Not found
429Rate limited
500Server error

Auth Endpoints

Manage user accounts, sessions, and profile information.

POST /api/auth/signup

Create a new user account. Body: {email, password, display_name}

POST /api/auth/login

Sign in and receive a session token. Body: {email, password}

POST /api/auth/logout

Invalidate the current session.

GET /api/auth/me

Get the current authenticated user's profile.

PUT /api/auth/me

Update display name, email, or avatar. Body: {display_name, email, avatar}

PUT /api/auth/password

Change password. Body: {current_password, new_password}

DELETE /api/auth/me

Delete account and export data.

POST /api/auth/onboarding

Complete onboarding flow. Body: {role, team_size, platforms}

Example: Sign in

Bash
curl -X POST https://api.bugnet.io/api/auth/login \
  -H "Content-Type: application/json" \
  -d '{
    "email": "dev@example.com",
    "password": "your_password"
  }'
JSON
{
  "ok": true,
  "data": {
    "token": "eyJhbGciOi...",
    "user": {
      "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "email": "dev@example.com",
      "display_name": "Dev"
    }
  }
}

Project Endpoints

Create and manage your game projects. All project endpoints require bearer token authentication.

GET /api/projects

List all projects for the current user.

POST /api/projects

Create a new project. Body: {name, slug, description, website}

GET /api/projects/:slug

Get project details by slug.

PUT /api/projects/:slug

Update project settings (name, description, website, etc.).

Example: Create a project

Bash
curl -X POST https://api.bugnet.io/api/projects \
  -H "Authorization: Bearer YOUR_SESSION_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "My Cool Game",
    "slug": "my-cool-game",
    "description": "An awesome platformer",
    "website": "https://mycoolga.me"
  }'

Bug Endpoints

Submit, manage, and query bug reports within a project.

GET /api/projects/:slug/bugs

List bugs. Supports query params: status, priority, category, assignee, search, page, limit, sort.

POST /api/projects/:slug/bugs

Create a bug report. Body: {title, description, category, priority, steps, expected, actual, platform, game_version, player_email}

GET /api/projects/:slug/bugs/:id

Get full bug details including comments, labels, and activity.

PATCH /api/projects/:slug/bugs/:id

Update bug fields (status, priority, assignee, etc.).

POST /api/projects/:slug/bugs/bulk

Bulk update multiple bugs. Body: {bug_ids, status, priority, assignee}

POST /api/projects/:slug/bugs/:id/comments

Add a comment to a bug. Body: {body, internal}

POST /api/projects/:slug/bugs/similar

Find similar existing bugs. Body: {title, description}

POST /api/projects/:slug/bugs/public

Submit a bug via the public tracker (no auth required, uses API key).

GET /api/projects/:slug/bugs/:id/activity

Get the full activity log for a bug.

POST /api/projects/:slug/bugs/:id/vote

Upvote a bug (public, no auth required).

Example: Create a bug report

Bash
curl -X POST https://api.bugnet.io/api/projects/my-cool-game/bugs \
  -H "Authorization: Bearer YOUR_SESSION_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Player falls through floor on level 3",
    "description": "Near the bridge section, the collision mesh has a gap.",
    "category": "gameplay",
    "priority": "high",
    "steps": "1. Start level 3\n2. Walk to the bridge\n3. Jump near the left railing",
    "expected": "Player lands on the bridge",
    "actual": "Player falls through the floor and dies",
    "platform": "windows",
    "game_version": "1.2.0"
  }'

Example: List bugs with filters

Bash
curl -X GET "https://api.bugnet.io/api/projects/my-cool-game/bugs?status=open&priority=high&page=1&limit=20&sort=newest" \
  -H "Authorization: Bearer YOUR_SESSION_TOKEN"

Label Endpoints

Create and manage labels for organizing bug reports within a project.

GET /api/projects/:slug/labels

List all labels for a project.

POST /api/projects/:slug/labels

Create a new label. Body: {name, color}

PUT /api/projects/:slug/labels/:id

Update label name or color.

DELETE /api/projects/:slug/labels/:id

Delete a label. Removes it from all bugs.

POST /api/projects/:slug/bugs/:id/labels

Add a label to a bug. Body: {label_id}

DELETE /api/projects/:slug/bugs/:id/labels/:label_id

Remove a label from a bug.

Team Endpoints

Manage team members, invitations, and permission overrides for a project.

GET /api/projects/:slug/team

List all team members for a project.

PUT /api/projects/:slug/team/:id

Update a team member's role.

DELETE /api/projects/:slug/team/:id

Remove a team member from the project.

POST /api/projects/:slug/invitations

Create an invitation. Body: {email, role}

POST /api/projects/:slug/invitations/:id/accept

Accept a pending invitation.

DELETE /api/projects/:slug/invitations/:id

Revoke a pending invitation.

GET /api/projects/:slug/permissions

Get permission settings for the project.

GET /api/projects/:slug/permissions/:member_id

Get permissions for a specific team member.

PUT /api/projects/:slug/permissions/:member_id

Set permission overrides for a team member.

DELETE /api/projects/:slug/permissions/:member_id

Reset a member's permissions to role defaults.

Analytics Endpoints

Access dashboard analytics, crash data, release health, performance metrics, regressions, and usage statistics.

Dashboard Analytics

GET /api/projects/:slug/analytics

Dashboard analytics: bugs by status, priority, category, and trends over time.

Sessions

POST /api/sessions/start

Start a game session. Body: {api_key, session_token, platform, game_version, device_info}

POST /api/sessions/end

End a game session. Body: {api_key, session_token, crashed}

Crash Analytics

GET /api/projects/:slug/crash-analytics

Crash analytics dashboard: crash-free rate, top crash signatures, platform breakdown.

Release Health

GET /api/projects/:slug/releases

Release health overview across all versions.

GET /api/projects/:slug/releases/:version

Version-specific health data (crash rate, bug count, session count).

Performance

POST /api/projects/:slug/perf

Submit a performance snapshot from the game client.

GET /api/projects/:slug/perf/:bug_id

Get performance data associated with a specific bug.

GET /api/projects/:slug/perf

Project-wide performance summary.

Regressions

POST /api/projects/:slug/regressions/detect

Trigger regression detection for the project.

GET /api/projects/:slug/regressions

List all detected regressions.

PATCH /api/projects/:slug/regressions/:id

Confirm or dismiss a detected regression.

Satisfaction

POST /api/projects/:slug/bugs/:id/satisfaction

Submit a satisfaction rating for a resolved bug.

GET /api/projects/:slug/satisfaction

Project-wide satisfaction summary.

API Usage

GET /api/projects/:slug/api-usage

API usage dashboard: request counts, rate limit hits, and trends.

Integration Endpoints

Connect Bugnet with external services: webhooks, Discord, Git providers, Steam, and custom alert rules.

Webhooks

GET /api/projects/:slug/webhooks

List all configured webhooks.

POST /api/projects/:slug/webhooks

Create a new webhook.

DELETE /api/projects/:slug/webhooks

Delete a webhook.

POST /api/projects/:slug/webhooks/test

Send a test payload to a webhook URL.

GET /api/projects/:slug/webhooks/deliveries

View webhook delivery history and response statuses.

Discord

GET /api/projects/:slug/discord

Get Discord integration settings.

POST /api/projects/:slug/discord

Configure Discord integration.

PUT /api/projects/:slug/discord

Update Discord integration settings.

DELETE /api/projects/:slug/discord

Remove Discord integration.

POST /api/projects/:slug/discord/test

Send a test notification to the configured Discord channel.

Git (GitHub / GitLab)

GET /api/projects/:slug/git

Get Git integration settings.

POST /api/projects/:slug/git

Configure Git integration (GitHub or GitLab).

DELETE /api/projects/:slug/git

Remove Git integration.

POST /api/projects/:slug/bugs/:id/issue

Create a linked GitHub/GitLab issue from a bug report.

Steam

GET /api/projects/:slug/steam

Get Steam integration settings.

POST /api/projects/:slug/steam

Configure Steam integration.

PUT /api/projects/:slug/steam

Update Steam integration settings.

DELETE /api/projects/:slug/steam

Remove Steam integration.

POST /api/projects/:slug/steam/sync

Trigger a sync of Steam reviews and discussions.

GET /api/projects/:slug/steam/dashboard

Steam integration dashboard with review sentiment and discussion activity.

Alerts

GET /api/projects/:slug/alerts

List all alert rules for the project.

POST /api/projects/:slug/alerts

Create a new alert rule.

PATCH /api/projects/:slug/alerts

Update an alert rule.

DELETE /api/projects/:slug/alerts

Delete an alert rule.

Notifications

GET /api/notifications/preferences

Get your notification preferences.

PUT /api/notifications/preferences

Update notification preferences (email, in-app, Discord DM).

Public Endpoints

These endpoints do not require authentication. They are used by public-facing bug trackers, changelogs, and health checks.

GET /api/projects/:slug/public/bugs

Public bug list for the project's public tracker.

GET /api/projects/:slug/public/bugs/:id

Public bug detail view.

POST /api/projects/:slug/public/bugs/:id/vote

Vote on a public bug (no auth required).

GET /api/projects/:slug/changelog/public

Published changelogs for the project.

GET /api/projects/:slug/branding/public

Public branding settings (logo, colors, name).

GET /api/config

Public configuration (Firebase, Stripe public keys).

GET /api/health

Health check endpoint. Returns 200 if the API is operational.

Example: Health check

Bash
curl https://api.bugnet.io/api/health
JSON
{
  "ok": true,
  "data": {
    "status": "healthy"
  }
}