핵심 기능기능프라이싱보안문서변경이력
로그인무료로 시작하기

시작하기

  • QA Note란?
  • 빠른 시작 가이드
  • Extension 설치
  • 프로젝트 멤버

기능 가이드

  • 스크린샷 & 어노테이션
  • 세션 레코딩
  • 유지보수 리포트
  • 이슈 상태 모델
  • 멀티 이슈 윈도우
  • Storage · DOM 스냅샷

연동

  • GitHub
  • 커밋 키
  • MCP 서버
  • Slack
  • Webhook
  • Vercel
  • 기존 Playwright

API 레퍼런스

  • 인증
  • 엔드포인트 레퍼런스
  • 공개 API v1
  • 에러 처리

AI 에이전트와 함께 쓰는 이슈 트래커. 수정은 당신의 에이전트가, 기록은 QA Note가.

Made in Seoul · © 2026 QA Note
제품핵심 기능기능프라이싱보안변경이력
리소스문서MCP 가이드Chrome 확장
회사브랜드이용약관개인정보처리방침

에프에프지지(ffgg)|대표: 한송욱

사업자등록번호: 746-54-00870[사업자정보확인]|통신판매업신고번호: 제 2024-서울마포-2178 호

주소: 서울특별시 마포구 월드컵북로6길 26, 5층(동교동, 삼기빌딩)

이메일: support@qanote.app|호스팅 제공자: Vercel Inc.

© 2026 QA Note. All rights reserved.

이용약관개인정보처리방침쿠키정책
  1. 홈
  2. /
  3. Docs
  4. /
  5. API 레퍼런스

엔드포인트 레퍼런스

전체 API 엔드포인트 목록 및 사용법

목차
  • 프로젝트
  • GET/api/v1/projects
  • 이슈
  • GET/api/v1/projects/:projectId/issues
  • GET/api/v1/projects/:projectId/issues/:issueNumber
  • PATCH/api/v1/projects/:projectId/issues/:issueNumber
  • 코멘트
  • GET/api/v1/projects/:projectId/issues/:issueNumber/comments
  • POST/api/v1/projects/:projectId/issues/:issueNumber/comments
  • 이슈 메타데이터
  • 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

엔드포인트 레퍼런스

모든 엔드포인트의 Base URL은 https://qanote.app 입니다.

프로젝트

GET /api/v1/projects

접근 가능한 프로젝트 목록을 조회합니다.

  • OAuth 토큰: 사용자가 속한 모든 active 조직의 프로젝트를 반환합니다.
  • API Key 토큰: 키가 발급된 단일 조직의 프로젝트만 반환합니다.

필요 Scope: projects:read

Query 파라미터

이름타입필수설명
organizationSlugstringNo특정 조직 slug 로 필터 — /dashboard/<slug>/... 경로의 slug 와 동일
organizationIdstring (uuid)No특정 조직 ID 로 필터 (organizationSlug 와 택일)

응답

json
{
  "data": [
    {
      "id": "project_abc123",
      "name": "웹 서비스",
      "slug": "web-service",
      "description": "메인 웹 서비스 프로젝트",
      "organizationId": "2a3f7b04-6e91-4c2d-9f77-3d6c9a1e4b58",
      "organizationSlug": "acme",
      "organizationName": "Acme Inc.",
      "createdAt": "2025-01-15T09:00:00.000Z"
    }
  ],
  "total": 1
}

각 프로젝트에는 소속 조직 식별자 3종이 포함됩니다.

필드타입설명
organizationIdstring (uuid)프로젝트가 속한 조직 ID
organizationSlugstring조직 slug — URL 경로(/dashboard/<slug>/...)와 일치
organizationNamestring조직 표시명

curl 예제

bash
# 전체 조직의 프로젝트 조회
curl https://qanote.app/api/v1/projects \
  -H "Authorization: Bearer qn_YOUR_API_KEY"

# 특정 조직(slug) 의 프로젝트만
curl "https://qanote.app/api/v1/projects?organizationSlug=acme" \
  -H "Authorization: Bearer qn_YOUR_API_KEY"

이슈

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

프로젝트의 이슈 목록을 검색합니다. 페이지네이션과 필터링을 지원합니다.

필요 Scope: issues:read

Path 파라미터

이름타입필수설명
projectIdstringYes프로젝트 ID

Query 파라미터

이름타입필수설명
statusstringNo상태 필터 (open, in_progress, blocked, fix_submitted, verified, closed)
prioritystringNo우선순위 필터 (low, medium, high, critical)
qstringNo제목/설명 검색어
labelstringNo라벨 필터
pagenumberNo페이지 번호 (기본: 1)
limitnumberNo페이지당 항목 수 (기본: 20, 최대: 100)

응답

json
{
  "data": [
    {
      "issueNumber": 42,
      "title": "로그인 페이지에서 비밀번호 입력 시 오류 발생",
      "status": "open",
      "priority": "high",
      "reporterName": "김개발",
      "createdAt": "2025-03-15T14:30:00.000Z",
      "updatedAt": "2025-03-15T14:30:00.000Z"
    }
  ],
  "total": 42,
  "page": 1,
  "totalPages": 3
}

curl 예제

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

이슈의 상세 정보를 조회합니다. 메타데이터 요약(콘솔 오류 수, 네트워크 오류 수 등)이 포함됩니다.

필요 Scope: issues:read

Path 파라미터

이름타입필수설명
projectIdstringYes프로젝트 ID
issueNumbernumberYes이슈 번호

응답

json
{
  "data": {
    "issueNumber": 42,
    "title": "로그인 페이지에서 비밀번호 입력 시 오류 발생",
    "description": "비밀번호 입력 후 엔터 키를 누르면 콘솔에 TypeError 발생",
    "status": "open",
    "priority": "high",
    "labels": ["bug", "auth"],
    "reporterName": "김개발",
    "assigneeName": "이검수",
    "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 예제

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

이슈의 상태 또는 우선순위를 업데이트합니다.

필요 Scope: issues:write

Path 파라미터

이름타입필수설명
projectIdstringYes프로젝트 ID
issueNumbernumberYes이슈 번호

Request Body

이름타입필수설명
statusstringNo변경할 상태 (open, in_progress, blocked, fix_submitted, verified, closed). API Key와 OAuth는 verified, closed를 설정할 수 없습니다.
prioritystringNo변경할 우선순위 (low, medium, high, critical)

응답

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

curl 예제

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

코멘트

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

이슈의 코멘트 목록을 조회합니다.

필요 Scope: issues:read

Path 파라미터

이름타입필수설명
projectIdstringYes프로젝트 ID
issueNumbernumberYes이슈 번호

응답

json
{
  "data": [
    {
      "id": "comment_abc123",
      "content": "재현 확인했습니다. Chrome에서만 발생합니다.",
      "authorName": "이검수",
      "createdAt": "2025-03-15T15:00:00.000Z"
    }
  ],
  "total": 1
}

curl 예제

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

이슈에 새 코멘트를 추가합니다.

필요 Scope: issues:write

Path 파라미터

이름타입필수설명
projectIdstringYes프로젝트 ID
issueNumbernumberYes이슈 번호

Request Body

이름타입필수설명
contentstringYes코멘트 내용

응답

json
{
  "data": {
    "id": "comment_def456",
    "content": "수정 완료했습니다. 확인 부탁드립니다.",
    "authorName": "김개발",
    "createdAt": "2025-03-15T16:00:00.000Z"
  }
}

curl 예제

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": "수정 완료했습니다. 확인 부탁드립니다."}'

이슈 메타데이터

이슈에 첨부된 기술적 컨텍스트를 개별 엔드포인트로 조회합니다. 모든 메타데이터 엔드포인트는 issues:read 스코프가 필요합니다.

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

이슈 보고 시 캡처된 브라우저 콘솔 로그를 조회합니다.

Query 파라미터

이름타입필수설명
levelstringNo로그 레벨 필터 (error, warn, info, log)

응답

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 예제

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

이슈 보고 시 캡처된 네트워크 요청 로그를 조회합니다.

응답

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 예제

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

이슈에 첨부된 스크린샷 목록을 조회합니다.

응답

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 예제

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

이슈 보고 시 캡처된 기술 컨텍스트(브라우저 정보, CSS 선택자, React 컴포넌트 트리 등)를 조회합니다.

응답

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 예제

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

이슈 보고 전 사용자의 행동(클릭, 입력, 네비게이션 등) 기록을 조회합니다.

응답

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

curl 예제

bash
curl https://qanote.app/api/v1/projects/PROJECT_ID/issues/ISSUE_NUMBER/user-actions \
  -H "Authorization: Bearer qn_YOUR_API_KEY"
이전
인증
다음
공개 API v1

목차

  • 프로젝트
  • GET/api/v1/projects
  • 이슈
  • GET/api/v1/projects/:projectId/issues
  • GET/api/v1/projects/:projectId/issues/:issueNumber
  • PATCH/api/v1/projects/:projectId/issues/:issueNumber
  • 코멘트
  • GET/api/v1/projects/:projectId/issues/:issueNumber/comments
  • POST/api/v1/projects/:projectId/issues/:issueNumber/comments
  • 이슈 메타데이터
  • 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