Key featuresFeaturesPricingSecurityDocsChangelog
Log inStart for free

Getting Started

  • What is QA Note?
  • Quick Start Guide
  • Install Extension
  • Project Members

Feature Guide

  • Screenshot & Annotation
  • Session Recording
  • Maintenance Reports
  • Issue State Model
  • Multi-issue Windows
  • Storage · DOM Snapshot

Integrations

  • GitHub
  • Commit Keys
  • MCP Server
  • Slack
  • Webhook
  • Vercel
  • Existing Playwright

API Reference

  • Authentication
  • Endpoint Reference
  • Public API v1
  • Error Handling

The issue tracker you use with your AI agent. Your agent fixes; QA Note keeps the record.

Made in Seoul · © 2026 QA Note
ProductKey featuresFeaturesPricingSecurityChangelog
ResourcesDocsMCP guideChrome Extension
CompanyBrandTerms of ServicePrivacy Policy

ffgg|CEO: Songwook Han

Business Registration No.: 746-54-00870[Verify]|E-Commerce License No.: 2024-Seoul Mapo-2178

Address: 5F, 26 World Cup buk-ro 6-gil, Mapo-gu, Seoul, Republic of Korea

Email: support@qanote.app|Hosting Provider: Vercel Inc.

© 2026 QA Note. All rights reserved.

Terms of ServicePrivacy PolicyCookie Policy
  1. Home
  2. /
  3. Docs
  4. /
  5. API Reference

Endpoint Reference

Complete API endpoint list and usage

Table of Contents
  • Projects
  • GET/api/v1/projects
  • Issues
  • GET/api/v1/projects/:projectId/issues
  • GET/api/v1/projects/:projectId/issues/:issueNumber
  • PATCH/api/v1/projects/:projectId/issues/:issueNumber
  • Comments
  • GET/api/v1/projects/:projectId/issues/:issueNumber/comments
  • POST/api/v1/projects/:projectId/issues/:issueNumber/comments
  • Issue Metadata
  • GET/api/v1/projects/:projectId/issues/:issueNumber/console-logs
  • GET/api/v1/projects/:projectId/issues/:issueNumber/network-logs
  • GET/api/v1/projects/:projectId/issues/:issueNumber/screenshots
  • GET/api/v1/projects/:projectId/issues/:issueNumber/tech-context
  • GET/api/v1/projects/:projectId/issues/:issueNumber/user-actions

Endpoint Reference

The Base URL for all endpoints is https://qanote.app.

Projects

GET /api/v1/projects

Retrieve the list of accessible projects.

  • OAuth token: returns projects from every active organization the user belongs to.
  • API Key token: returns projects from the single organization the key was issued for.

Required Scope: projects:read

Query Parameters

NameTypeRequiredDescription
organizationSlugstringNoFilter by a specific organization slug — matches the slug in /dashboard/<slug>/... URLs
organizationIdstring (uuid)NoFilter by a specific organization ID (mutually exclusive with organizationSlug)

Response

json
{
  "data": [
    {
      "id": "project_abc123",
      "name": "Web Service",
      "slug": "web-service",
      "description": "Main web service project",
      "organizationId": "2a3f7b04-6e91-4c2d-9f77-3d6c9a1e4b58",
      "organizationSlug": "acme",
      "organizationName": "Acme Inc.",
      "createdAt": "2025-01-15T09:00:00.000Z"
    }
  ],
  "total": 1
}

Each project now includes three organization identifiers:

FieldTypeDescription
organizationIdstring (uuid)ID of the organization the project belongs to
organizationSlugstringOrganization slug — matches the URL path (/dashboard/<slug>/...)
organizationNamestringOrganization display name

curl Example

bash
# List projects across every accessible organization
curl https://qanote.app/api/v1/projects \
  -H "Authorization: Bearer qn_YOUR_API_KEY"

# Only projects from a specific organization (by slug)
curl "https://qanote.app/api/v1/projects?organizationSlug=acme" \
  -H "Authorization: Bearer qn_YOUR_API_KEY"

Issues

GET /api/v1/projects/:projectId/issues

Search issues in a project. Supports pagination and filtering.

Required Scope: issues:read

Path Parameters

NameTypeRequiredDescription
projectIdstringYesProject ID

Query Parameters

NameTypeRequiredDescription
statusstringNoStatus filter (open, in_progress, blocked, fix_submitted, verified, closed)
prioritystringNoPriority filter (low, medium, high, critical)
qstringNoTitle/description search query
labelstringNoLabel filter
pagenumberNoPage number (default: 1)
limitnumberNoItems per page (default: 20, max: 100)

Response

json
{
  "data": [
    {
      "issueNumber": 42,
      "title": "Error occurs when entering password on login page",
      "status": "open",
      "priority": "high",
      "reporterName": "John Dev",
      "createdAt": "2025-03-15T14:30:00.000Z",
      "updatedAt": "2025-03-15T14:30:00.000Z"
    }
  ],
  "total": 42,
  "page": 1,
  "totalPages": 3
}

curl Example

bash
curl "https://qanote.app/api/v1/projects/PROJECT_ID/issues?status=open&limit=10" \
  -H "Authorization: Bearer qn_YOUR_API_KEY"

GET /api/v1/projects/:projectId/issues/:issueNumber

Retrieve detailed information for an issue. Includes metadata summary (console error count, network error count, etc.).

Required Scope: issues:read

Path Parameters

NameTypeRequiredDescription
projectIdstringYesProject ID
issueNumbernumberYesIssue number

Response

json
{
  "data": {
    "issueNumber": 42,
    "title": "Error occurs when entering password on login page",
    "description": "TypeError appears in console after entering password and pressing Enter",
    "status": "open",
    "priority": "high",
    "labels": ["bug", "auth"],
    "reporterName": "John Dev",
    "assigneeName": "Jane QA",
    "pageUrl": "https://example.com/login",
    "browserInfo": "Chrome 120.0",
    "osInfo": "macOS 14.2",
    "viewportSize": "1920x1080",
    "metadataSummary": {
      "consoleErrorCount": 3,
      "networkErrorCount": 1,
      "jsErrorCount": 2,
      "userActionCount": 5,
      "screenshotCount": 1
    },
    "createdAt": "2025-03-15T14:30:00.000Z",
    "updatedAt": "2025-03-15T15:00:00.000Z"
  }
}

curl Example

bash
curl https://qanote.app/api/v1/projects/PROJECT_ID/issues/ISSUE_NUMBER \
  -H "Authorization: Bearer qn_YOUR_API_KEY"

PATCH /api/v1/projects/:projectId/issues/:issueNumber

Update the status or priority of an issue.

Required Scope: issues:write

Path Parameters

NameTypeRequiredDescription
projectIdstringYesProject ID
issueNumbernumberYesIssue number

Request Body

NameTypeRequiredDescription
statusstringNoStatus to change to (open, in_progress, blocked, fix_submitted, verified, closed). API keys and OAuth cannot set verified or closed.
prioritystringNoPriority to change to (low, medium, high, critical)

Response

json
{
  "data": {
    "issueNumber": 42,
    "status": "in_progress",
    "priority": "high",
    "updatedAt": "2025-03-15T15:30:00.000Z"
  }
}

curl Example

bash
curl -X PATCH https://qanote.app/api/v1/projects/PROJECT_ID/issues/ISSUE_NUMBER \
  -H "Authorization: Bearer qn_YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"status": "in_progress"}'

Comments

GET /api/v1/projects/:projectId/issues/:issueNumber/comments

Retrieve the comment list for an issue.

Required Scope: issues:read

Path Parameters

NameTypeRequiredDescription
projectIdstringYesProject ID
issueNumbernumberYesIssue number

Response

json
{
  "data": [
    {
      "id": "comment_abc123",
      "content": "Confirmed reproduction. Only occurs in Chrome.",
      "authorName": "Jane QA",
      "createdAt": "2025-03-15T15:00:00.000Z"
    }
  ],
  "total": 1
}

curl Example

bash
curl https://qanote.app/api/v1/projects/PROJECT_ID/issues/ISSUE_NUMBER/comments \
  -H "Authorization: Bearer qn_YOUR_API_KEY"

POST /api/v1/projects/:projectId/issues/:issueNumber/comments

Add a new comment to an issue.

Required Scope: issues:write

Path Parameters

NameTypeRequiredDescription
projectIdstringYesProject ID
issueNumbernumberYesIssue number

Request Body

NameTypeRequiredDescription
contentstringYesComment content

Response

json
{
  "data": {
    "id": "comment_def456",
    "content": "Fix completed. Please review.",
    "authorName": "John Dev",
    "createdAt": "2025-03-15T16:00:00.000Z"
  }
}

curl Example

bash
curl -X POST https://qanote.app/api/v1/projects/PROJECT_ID/issues/ISSUE_NUMBER/comments \
  -H "Authorization: Bearer qn_YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"content": "Fix completed. Please review."}'

Issue Metadata

Retrieve technical context attached to issues through individual endpoints. All metadata endpoints require the issues:read scope.

GET /api/v1/projects/:projectId/issues/:issueNumber/console-logs

Retrieve browser console logs captured at the time of issue reporting.

Query Parameters

NameTypeRequiredDescription
levelstringNoLog level filter (error, warn, info, log)

Response

json
{
  "data": [
    {
      "level": "error",
      "message": "TypeError: Cannot read properties of undefined (reading 'value')",
      "source": "https://example.com/assets/app.js:142:15",
      "timestamp": "2025-03-15T14:29:55.000Z"
    }
  ],
  "total": 3
}

curl Example

bash
curl "https://qanote.app/api/v1/projects/PROJECT_ID/issues/ISSUE_NUMBER/console-logs?level=error" \
  -H "Authorization: Bearer qn_YOUR_API_KEY"

GET /api/v1/projects/:projectId/issues/:issueNumber/network-logs

Retrieve network request logs captured at the time of issue reporting.

Response

json
{
  "data": [
    {
      "method": "POST",
      "url": "https://api.example.com/auth/login",
      "status": 500,
      "duration": 1250,
      "timestamp": "2025-03-15T14:29:58.000Z"
    }
  ],
  "total": 1
}

curl Example

bash
curl https://qanote.app/api/v1/projects/PROJECT_ID/issues/ISSUE_NUMBER/network-logs \
  -H "Authorization: Bearer qn_YOUR_API_KEY"

GET /api/v1/projects/:projectId/issues/:issueNumber/screenshots

Retrieve the list of screenshots attached to an issue.

Response

json
{
  "data": [
    {
      "id": "screenshot_abc123",
      "url": "https://cdn.qanote.app/screenshots/abc123.png",
      "width": 1920,
      "height": 1080,
      "createdAt": "2025-03-15T14:30:00.000Z"
    }
  ],
  "total": 1
}

curl Example

bash
curl https://qanote.app/api/v1/projects/PROJECT_ID/issues/ISSUE_NUMBER/screenshots \
  -H "Authorization: Bearer qn_YOUR_API_KEY"

GET /api/v1/projects/:projectId/issues/:issueNumber/tech-context

Retrieve technical context captured at the time of issue reporting (browser info, CSS selectors, React component tree, etc.).

Response

json
{
  "data": {
    "browserInfo": {
      "name": "Chrome",
      "version": "120.0.6099.109"
    },
    "osInfo": {
      "name": "macOS",
      "version": "14.2"
    },
    "viewportSize": {
      "width": 1920,
      "height": 1080
    },
    "cssSelector": "div.login-form > input[type='password']",
    "elementStyles": {
      "display": "block",
      "visibility": "visible"
    },
    "reactComponentTree": [
      "App > AuthLayout > LoginForm > PasswordInput"
    ]
  }
}

curl Example

bash
curl https://qanote.app/api/v1/projects/PROJECT_ID/issues/ISSUE_NUMBER/tech-context \
  -H "Authorization: Bearer qn_YOUR_API_KEY"

GET /api/v1/projects/:projectId/issues/:issueNumber/user-actions

Retrieve user actions (clicks, inputs, navigation, etc.) recorded before the issue was reported.

Response

json
{
  "data": [
    {
      "type": "click",
      "target": "button.submit-btn",
      "text": "Login",
      "timestamp": "2025-03-15T14:29:50.000Z"
    },
    {
      "type": "input",
      "target": "input[type='password']",
      "timestamp": "2025-03-15T14:29:48.000Z"
    }
  ],
  "total": 5
}

curl Example

bash
curl https://qanote.app/api/v1/projects/PROJECT_ID/issues/ISSUE_NUMBER/user-actions \
  -H "Authorization: Bearer qn_YOUR_API_KEY"
Previous
Authentication
Next
Public API v1

Table of Contents

  • Projects
  • GET/api/v1/projects
  • Issues
  • GET/api/v1/projects/:projectId/issues
  • GET/api/v1/projects/:projectId/issues/:issueNumber
  • PATCH/api/v1/projects/:projectId/issues/:issueNumber
  • Comments
  • GET/api/v1/projects/:projectId/issues/:issueNumber/comments
  • POST/api/v1/projects/:projectId/issues/:issueNumber/comments
  • Issue Metadata
  • GET/api/v1/projects/:projectId/issues/:issueNumber/console-logs
  • GET/api/v1/projects/:projectId/issues/:issueNumber/network-logs
  • GET/api/v1/projects/:projectId/issues/:issueNumber/screenshots
  • GET/api/v1/projects/:projectId/issues/:issueNumber/tech-context
  • GET/api/v1/projects/:projectId/issues/:issueNumber/user-actions