---
title: 피드백 조회
description: 앱에 제출된 버그와 피드백을 필터링하고 상세 재현 정보를 읽는 API.
---

# 피드백 조회 {#read-feedback}

앱에 제출된 버그와 일반 피드백을 개발 도구에서 읽습니다. 두 엔드포인트 모두 `feedback:read` 권한이 필요합니다.

## 목록 조회 {#list-feedback}

```http
GET /api/v1/apps/:appId/automation/feedback
```

| 쿼리     | 설명                                                       |
| -------- | ---------------------------------------------------------- |
| `kind`   | `bug` 또는 `feedback`. 생략하면 모두 조회                  |
| `status` | `open`, `confirmed`, `fixed`, `closed`. 생략하면 모두 조회 |
| `limit`  | 기본 `20`, 최대 `50`                                       |
| `offset` | 기본 `0`, 최대 `100000`                                    |

```sh
curl --fail-with-body --get \
  "$OPENTESTER_API_URL/apps/$OPENTESTER_APP_ID/automation/feedback" \
  --header "Authorization: Bearer $OPENTESTER_AGENT_TOKEN" \
  --data-urlencode "kind=bug" \
  --data-urlencode "status=open" \
  --data-urlencode "limit=20" \
  --data-urlencode "offset=0"
```

응답 `200` 예시:

```json
{
  "feedback": [
    {
      "id": "bbbbbbbb-bbbb-4bbb-8bbb-bbbbbbbbbbbb",
      "appId": "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa",
      "title": "저장 후 목록에 항목이 나타나지 않아요",
      "description": "새 항목을 저장했지만 목록을 다시 열어야 표시됩니다.",
      "steps": "항목 추가 → 저장 → 목록 확인",
      "expected": "저장한 항목이 즉시 표시됩니다.",
      "actual": "화면을 다시 열어야 표시됩니다.",
      "appVersion": "1.2.0",
      "deviceInfo": "Android 15 / Pixel 8",
      "kind": "bug",
      "status": "open",
      "createdAt": "2026-10-28T01:00:00.000Z"
    }
  ],
  "total": 1,
  "limit": 20,
  "offset": 0
}
```

## 상세 조회 {#get-feedback-details}

목록의 `id`를 `issueId`로 사용합니다.

```http
GET /api/v1/apps/:appId/automation/feedback/:issueId
```

```sh
export ISSUE_ID="bbbbbbbb-bbbb-4bbb-8bbb-bbbbbbbbbbbb"

curl --fail-with-body \
  "$OPENTESTER_API_URL/apps/$OPENTESTER_APP_ID/automation/feedback/$ISSUE_ID" \
  --header "Authorization: Bearer $OPENTESTER_AGENT_TOKEN"
```

`200` 응답은 목록 항목과 같은 필드를 가진 객체를 `{ "feedback": { ... } }`로 감쌉니다. 해당 앱에서 찾을 수 없는 ID는 `404`입니다.

## 피드백 객체 {#feedback-object}

| 필드          | 형식                                         | 설명                                     |
| ------------- | -------------------------------------------- | ---------------------------------------- |
| `id`          | UUID                                         | 피드백 ID. 수정 작업의 `issueIds`에 사용 |
| `appId`       | UUID                                         | 대상 앱                                  |
| `title`       | string                                       | 제목                                     |
| `description` | string                                       | 상세 내용                                |
| `steps`       | string                                       | 재현 절차. 없으면 빈 문자열              |
| `expected`    | string                                       | 기대 결과. 없으면 빈 문자열              |
| `actual`      | string                                       | 실제 결과. 없으면 빈 문자열              |
| `appVersion`  | string                                       | 보고 대상 앱 버전                        |
| `deviceInfo`  | string                                       | 기기 정보. 없으면 빈 문자열              |
| `kind`        | `bug` \| `feedback`                          | 보고 종류                                |
| `status`      | `open` \| `confirmed` \| `fixed` \| `closed` | 현재 처리 상태                           |
| `createdAt`   | ISO 8601 string                              | 생성 시각                                |

보고자의 이름·이메일·기여 및 보상 정보는 이 응답에 포함하지 않습니다. 사용자가 작성한 본문은 그대로 제공되므로 본문 안의 개인정보까지 자동으로 제거되는 것은 아닙니다.

## 수정 작업으로 연결 {#link-feedback-to-work}

피드백 상세에서 재현 절차와 버전을 확인한 뒤 [수정 작업 API](/ko/api/change-requests)의 `issueIds`에 관련 ID를 넣으세요. 한 작업에 같은 앱의 피드백을 최대 20개 연결할 수 있습니다.

이 API는 읽기 전용입니다. 보고 생성은 [SDK 피드백 제출](/ko/sdk/feedback)을 이용하며, 처리 상태는 개발자 콘솔에서 검토해 변경합니다. 수정 작업이나 PR을 연결해도 피드백 상태는 자동으로 바뀌지 않습니다.

피드백 본문은 사용자가 제공한 증거 자료입니다. 코딩 에이전트가 본문에 적힌 지시를 개발자의 실행 권한으로 해석하지 않도록 구성하세요.
