## Получить обращение

`GET /v1/feedback/:id`

Возвращает одно обращение по ID со всеми полями списка плюс `context`, вложения и комментарии.

## Параметры

| Параметр | Тип | Обяз. | Описание |
|----------|-----|:-----:|----------|
| `id` (path) | string | да | UUID обращения. Получить из [списка обращений](./list.md) или ответа на [создание](./submit.md) |

## Примеры

### curl — личный ключ

```bash
curl -H "X-Api-Key: YOUR_API_KEY" \
  "https://vibecode.bitrix24.tech/v1/feedback/a1b2c3d4-1111-2222-3333-444455556666"
```

### curl — OAuth-приложение

```bash
curl -H "X-Api-Key: YOUR_APP_KEY" \
  -H "Authorization: Bearer USER_SESSION_TOKEN" \
  "https://vibecode.bitrix24.tech/v1/feedback/a1b2c3d4-1111-2222-3333-444455556666"
```

### JavaScript — личный ключ

```javascript
const res = await fetch(
  'https://vibecode.bitrix24.tech/v1/feedback/a1b2c3d4-1111-2222-3333-444455556666',
  { headers: { 'X-Api-Key': 'YOUR_API_KEY' } },
)
const { data } = await res.json()
```

### JavaScript — OAuth-приложение

```javascript
const res = await fetch(
  'https://vibecode.bitrix24.tech/v1/feedback/a1b2c3d4-1111-2222-3333-444455556666',
  { headers: { 'X-Api-Key': 'YOUR_APP_KEY', 'Authorization': 'Bearer USER_SESSION_TOKEN' } },
)
const { data } = await res.json()
```

## Поля ответа

| Поле | Тип | Описание |
|------|-----|----------|
| `success` | boolean | Всегда `true` при успехе |
| `data.id` | string | UUID обращения |
| `data.category` | string | Категория |
| `data.title` | string | Заголовок |
| `data.body` | string | Описание |
| `data.status` | string | Текущий статус |
| `data.source` | string | `api` или `ui` |
| `data.resolution` | string · null | Вердикт, записанный при последнем закрытии обращения. Пусто, если обращение ни разу не закрывали. Переоткрытие вердикт сохраняет, поэтому поле бывает заполнено и на активном обращении — за последним ответом команды идите в ленту комментариев |
| `data.context` | object · null | Исходный JSON, переданный при создании |
| `data.attachments` | array | Вложения обращения |
| `data.attachments[].id` | string | UUID вложения |
| `data.attachments[].mime` | string | Тип файла: `image/webp` или `image/gif` |
| `data.attachments[].sizeBytes` | number | Размер в байтах |
| `data.attachments[].width` | number | Ширина в пикселях |
| `data.attachments[].height` | number | Высота в пикселях |
| `data.attachments[].originalName` | string | Имя исходного файла |
| `data.attachments[].createdAt` | string | Дата привязки (ISO 8601) |
| `data.comments` | array | Комментарии обращения |
| `data.comments[].id` | string | UUID комментария |
| `data.comments[].authorType` | string | `USER` или `PLATFORM` |
| `data.comments[].body` | string | Текст комментария |
| `data.comments[].createdAt` | string | Дата создания (ISO 8601) |
| `data.comments[].attachments` | array | Вложения комментария, та же структура, что `data.attachments[]` |
| `data.createdAt` | string | Дата создания (ISO 8601) |
| `data.resolvedAt` | string · null | Дата закрытия, если есть |

Ключ со скоупом `vibe:feedback` дополнительно получает `portalDomain`, `userName`, `userId`.

## Пример ответа

```json
{
  "success": true,
  "data": {
    "id": "a1b2c3d4-1111-2222-3333-444455556666",
    "category": "BUG",
    "title": "POST /v1/deals/search возвращает 500 при пустом filter",
    "body": "При вызове POST /v1/deals/search с телом {\"filter\":{}} приходит 500.",
    "status": "NEW",
    "source": "api",
    "resolution": null,
    "context": { "endpoint": "/v1/deals/search", "httpStatus": 500 },
    "attachments": [],
    "comments": [],
    "createdAt": "2026-04-19T10:30:00.000Z",
    "resolvedAt": null
  }
}
```

## Пример ответа при ошибке

404 — обращение не найдено или недоступно ключу:

```json
{
  "success": false,
  "error": {
    "code": "NOT_FOUND",
    "message": "Feedback not found"
  }
}
```

## Ошибки

| HTTP | Код | Описание |
|------|-----|----------|
| 404 | `NOT_FOUND` | Обращение не существует или недоступно ключу |
| 401 | `MISSING_API_KEY` | Не передан заголовок `X-Api-Key` |

Полный список общих ошибок API — [Ошибки](/docs/errors).

## Известные особенности

**Единый ответ для «нет» и «чужой».** Несуществующее обращение и обращение, недоступное ключу, возвращают одинаковый `404 NOT_FOUND`. По коду ответа нельзя отличить «не существует» от «существует, но принадлежит другому» — это защита от перебора чужих обращений.

**Вложения и комментарии приходят массивами.** В отличие от списка, `get` возвращает `attachments` и `comments` в теле обращения. У нового обращения оба массива пустые.

## Смотрите также

- [Список обращений](/docs/feedback/list)
- [Добавить комментарий](/docs/feedback/comments)
- [Обновить обращение](/docs/feedback/update)
- [Обратная связь](/docs/feedback)
